Ejemplo n.º 1
0
result_t os_base::networkInfo(v8::Local<v8::Object> &retVal)
{
    struct ::ifaddrs *addrs, *ent;
    struct ::sockaddr_in *in4;
    struct ::sockaddr_in6 *in6;
    char ip[INET6_ADDRSTRLEN];

    if (getifaddrs(&addrs) != 0)
        return LastError();

    retVal = v8::Object::New(isolate);

    for (ent = addrs; ent != NULL; ent = ent->ifa_next)
    {
        v8::Local<v8::Array> ret;
        v8::Local<v8::Object> o;
        v8::Local<v8::String> name, ipaddr, family;

        bzero(&ip, sizeof(ip));
        if (!(ent->ifa_flags & IFF_UP && ent->ifa_flags & IFF_RUNNING))
            continue;

        if (ent->ifa_addr == NULL)
            continue;

        if (ent->ifa_addr->sa_family != AF_INET6
                && ent->ifa_addr->sa_family != AF_INET)
            continue;

        name = v8::String::NewFromUtf8(isolate, ent->ifa_name);
        if (retVal->Has(name))
        {
            ret = v8::Local<v8::Array>::Cast(retVal->Get(name));
        }
        else
        {
            ret = v8::Array::New(isolate);
            retVal->Set(name, ret);
        }

        if (ent->ifa_addr->sa_family == AF_INET6)
        {
            in6 = (struct sockaddr_in6 *) ent->ifa_addr;
            inet_ntop(AF_INET6, &(in6->sin6_addr), ip, INET6_ADDRSTRLEN);
            family = v8::String::NewFromUtf8(isolate, "IPv6");
        }
        else if (ent->ifa_addr->sa_family == AF_INET)
        {
            in4 = (struct sockaddr_in *) ent->ifa_addr;
            inet_ntop(AF_INET, &(in4->sin_addr), ip, INET6_ADDRSTRLEN);
            family = v8::String::NewFromUtf8(isolate, "IPv4");
        }

        o = v8::Object::New(isolate);
        o->Set(v8::String::NewFromUtf8(isolate, "address"), v8::String::NewFromUtf8(isolate, ip));
        o->Set(v8::String::NewFromUtf8(isolate, "family"), family);
        o->Set(v8::String::NewFromUtf8(isolate, "internal"),
               ent->ifa_flags & IFF_LOOPBACK ? v8::True(isolate) : v8::False(isolate));

        ret->Set(ret->Length(), o);
    }

    freeifaddrs(addrs);

    return 0;
}
Ejemplo n.º 2
0
bool TNodeJsUtil::IsObjFld(v8::Local<v8::Object> Obj, const TStr& FldNm) {
	v8::Isolate* Isolate = v8::Isolate::GetCurrent();
	v8::HandleScope HandleScope(Isolate);

	return Obj->Has(v8::String::NewFromUtf8(Isolate, FldNm.CStr()));
}
Ejemplo n.º 3
0
/// Extracts texture compiler arguments from an object passed from JavaScript.
/// @param obj An object specifying the texture compiler arguments.
/// @param obj.sourcePath A string specifying the path of the source file.
/// @param obj.targetPath A string specifying the path of the target file.
/// @param args Pointer to the texture_compiler_args_t structure to populate.
/// @return undefined if the operation is successful; otherwise a V8 exception.
static v8::Handle<v8::Value> v8_object_to_compiler_args(
    v8::Local<v8::Object>    obj,
    texture_compiler_args_t *args)
{
    v8::HandleScope          scope;
    v8::Handle<v8::String>   type          = v8::String::New("type");
    v8::Handle<v8::String>   flipY         = v8::String::New("flipY");
    v8::Handle<v8::String>   format        = v8::String::New("format");
    v8::Handle<v8::String>   target        = v8::String::New("target");
    v8::Handle<v8::String>   wrapModeS     = v8::String::New("wrapModeS");
    v8::Handle<v8::String>   wrapModeT     = v8::String::New("wrapModeT");
    v8::Handle<v8::String>   borderMode    = v8::String::New("borderMode");
    v8::Handle<v8::String>   sourcePath    = v8::String::New("sourcePath");
    v8::Handle<v8::String>   targetPath    = v8::String::New("targetPath");
    v8::Handle<v8::String>   targetWidth   = v8::String::New("targetWidth");
    v8::Handle<v8::String>   targetHeight  = v8::String::New("targetHeight");
    v8::Handle<v8::String>   minifyFilter  = v8::String::New("minifyFilter");
    v8::Handle<v8::String>   magnifyFilter = v8::String::New("magnifyFilter");
    v8::Handle<v8::String>   premultiplied = v8::String::New("premultipliedAlpha");
    v8::Handle<v8::String>   forcePowerOf2 = v8::String::New("forcePowerOf2");
    v8::Handle<v8::String>   buildMipmaps  = v8::String::New("buildMipmaps");
    v8::Handle<v8::String>   levelCount    = v8::String::New("levelCount");

    // source file path. this field is required.
    init_compiler_args(args);
    if (obj->Has(sourcePath))
        args->source_path = v8_string_to_utf8(obj->Get(sourcePath));
    else
        return scope.Close(ex("Missing required field sourcePath."));

    // target file path. this field is required.
    if (obj->Has(targetPath))
        args->target_path = v8_string_to_utf8(obj->Get(targetPath));
    else
        return scope.Close(ex("Missing required field targetPath."));

    // texture type. this field must be validated later.
    if (obj->Has(type))
        args->texture_type = v8_string_to_utf8(obj->Get(type));

    // texture format. this field must be validated later.
    if (obj->Has(format))
        args->target_format = v8_string_to_utf8(obj->Get(format));

    // texture target. this field must be validated later.
    if (obj->Has(target))
        args->texture_target = v8_string_to_utf8(obj->Get(target));

    // border mode. this field is optional.
    if (obj->Has(borderMode))
        args->border_mode =v8_string_to_utf8(obj->Get(borderMode));

    // flip Y. this field is optional.
    if (obj->Has(flipY))
        args->flip_y = obj->Get(flipY)->IsTrue() ? true : false;
    else
        args->flip_y = true;

    // force power of two? this field is optional.
    if (obj->Has(forcePowerOf2))
        args->force_pow2 = obj->Get(forcePowerOf2)->IsTrue() ? true : false;
    else
        args->force_pow2 = false;

    // build mipmaps? this field is optional.
    if (obj->Has(buildMipmaps))
        args->build_mipmaps = obj->Get(buildMipmaps)->IsTrue() ? true : false;
    else
        args->build_mipmaps = false;

    // premultiply alpha? this field is optional.
    if (obj->Has(premultiplied))
        args->premultiplied = obj->Get(premultiplied)->IsTrue() ? true : false;
    else
        args->premultiplied = false;

    // maximum number of mip-levels? this field is optional.
    if (obj->Has(levelCount))
        args->level_count = obj->Get(levelCount)->Uint32Value();
    else
        args->level_count = args->build_mipmaps ? 0 : 1;

    // specific output width? this field is optional.
    if (obj->Has(targetWidth))
        args->target_width = obj->Get(targetWidth)->Uint32Value();
    else
        args->target_width = 0;

    // specific otput height? this field is optional.
    if (obj->Has(targetHeight))
        args->target_height = obj->Get(targetHeight)->Uint32Value();
    else
        args->target_height = 0;

    // wrap mode S? this field is optional.
    if (obj->Has(wrapModeS))
        args->wrap_mode_s = v8_string_to_utf8(obj->Get(wrapModeS));
    else
        args->wrap_mode_s = strdup("CLAMP_TO_EDGE");

    // wrap mode T? this field is optional.
    if (obj->Has(wrapModeT))
        args->wrap_mode_t = v8_string_to_utf8(obj->Get(wrapModeT));
    else
        args->wrap_mode_t = strdup("CLAMP_TO_EDGE");

    // minify filter? this field is optional.
    if (obj->Has(minifyFilter))
    {
        args->minify_filter = v8_string_to_utf8(obj->Get(minifyFilter));
    }
    else
    {
        if (args->build_mipmaps)
            args->minify_filter = strdup("LINEAR_MIPMAP_LINEAR");
        else
            args->minify_filter = strdup("LINEAR");
    }

    // magnify filter? this field is optional.
    if (obj->Has(magnifyFilter))
        args->magnify_filter = v8_string_to_utf8(obj->Get(magnifyFilter));
    else
        args->magnify_filter = strdup("LINEAR");
    return scope.Close(v8::Undefined());
}