Esempio n. 1
0
void start(void *data, const char *el, const XML_Char **attr) {
    p *ptr = (p *)data;
    JSOBJ o = Object::New();
    for (const XML_Char **a = attr; *a; a += 2) {
        // printf("%s = %s\n", a[0], a[1]);
        o->Set(String::New(a[0]), String::New(a[1]));
    }
    Handle<Value>argv[2] = { String::New(el), o };
    ptr->start->Call(ptr->thisObj, 2, argv);
}
Esempio n. 2
0
File: fs.cpp Progetto: kyusof/SilkJS
static JSOBJ format_stat(struct stat &buf) {
    HandleScope scope;
    JSOBJ o = Object::New();
    o->Set(String::New("dev"), Integer::New(buf.st_dev));
    o->Set(String::New("ino"), Integer::New(buf.st_ino));
    o->Set(String::New("mode"), Integer::New(buf.st_mode));
    o->Set(String::New("nlink"), Integer::New(buf.st_nlink));
    o->Set(String::New("uid"), Integer::New(buf.st_uid));
    o->Set(String::New("gid"), Integer::New(buf.st_gid));
    o->Set(String::New("rdev"), Integer::New(buf.st_rdev));
    o->Set(String::New("size"), Integer::New(buf.st_size));
    o->Set(String::New("blksize"), Integer::New(buf.st_blksize));
    o->Set(String::New("blocks"), Integer::New(buf.st_blocks));
    o->Set(String::New("atime"), Integer::New(buf.st_atime));
    o->Set(String::New("mtime"), Integer::New(buf.st_mtime));
    o->Set(String::New("ctime"), Integer::New(buf.st_ctime));
    return scope.Close(o);
}
Esempio n. 3
0
/**
 * @function memcached.get
 * 
 * ### Synopsis
 * 
 * var o = memcached.get(handle, key);
 * 
 * Get a value from memcached by key.
 * 
 * @param {object} handle - handle to memcached connection.
 * @param {string} key - key of data to get from memcached
 * @return {object} o - see description at top of the page, or false if an error occurred.
 */
JSVAL _memcached_get (JSARGS args) {
    HandleScope scope;
    M* handle = HANDLE(args[0]);
    String::Utf8Value key(args[1]);
    size_t value_length;
    uint32_t flags;
    R rc;
    char *res = memcached_get(handle, *key, strlen(*key), &value_length, &flags, &rc);
    if (!res) {
        return scope.Close(False());
    }
    JSOBJ o = Object::New();
    o->Set(String::New("value"), String::New(res));
    o->Set(String::New("flags"), Integer::New(flags));
    o->Set(String::New("rc"), Integer::New(rc));
    free(res);
    return scope.Close(o);
}
Esempio n. 4
0
/**
 * @function SFTP.stat
 * 
 * ### Synopsis
 * 
 * var stat = SFTP.stat(handle, path);
 * 
 * Get attributes of a remote file.
 * 
 * The returned object will be of the form:
 * 
 * + size: size of file in bytes.
 * + permissions: file permissions.
 * + uid: uid of owner of file.
 * + gid: gid of owner of file.
 * + mtime: modification time (timestamp) of file.
 * + atime: access time (timestamp) of file
 * 
 * @param {object} handle - opaque handle to existing SFTP connection (already connected).
 * @param {string} path - path on remote server to directory to get status of.
 * @returns {object} stat - object of the form described above.
 */
JSVAL sftp_stat (JSARGS args) {
    HandleScope scope;
    SFTP *handle = HANDLE(args[0]);
    String::Utf8Value path(args[1]);
    LIBSSH2_SFTP_HANDLE *sftp_handle = libssh2_sftp_open(handle->sftp_session, *path, LIBSSH2_FXF_READ, 0);
    if (!sftp_handle) {
        return scope.Close(String::New("Could not get status for remote file"));
    }
    LIBSSH2_SFTP_ATTRIBUTES attrs;
    if (libssh2_sftp_fstat_ex(sftp_handle, &attrs, 0) < 0) {
        libssh2_sftp_close(sftp_handle);
        return scope.Close(String::New("Could not get status for remote file"));
    }

    Handle<String> _permissions = String::New("permissions");
    Handle<String> _uid = String::New("uid");
    Handle<String> _gid = String::New("gid");
    Handle<String> _size = String::New("size");
    Handle<String> _mtime = String::New("mtime");
    Handle<String> _atime = String::New("atime");

    JSOBJ o = Object::New();
    if (attrs.flags & LIBSSH2_SFTP_ATTR_SIZE) {
        o->Set(_size, Integer::New(attrs.filesize));
    }
    if (attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) {
        o->Set(_permissions, Integer::New(attrs.permissions));
    }
    if (attrs.flags & LIBSSH2_SFTP_ATTR_UIDGID) {
        o->Set(_uid, Integer::New(attrs.uid));
        o->Set(_gid, Integer::New(attrs.gid));
    }
    if (attrs.flags & LIBSSH2_SFTP_ATTR_ACMODTIME) {
        o->Set(_mtime, Integer::New(attrs.mtime));
        o->Set(_atime, Integer::New(attrs.atime));
    }

    libssh2_sftp_close(sftp_handle);
    return scope.Close(o);
}
Esempio n. 5
0
JSVAL getDataRows(JSARGS args) {
	HandleScope scope;
	String::Utf8Value sql(args[0]->ToString());
	mysql_ping(handle);
	int failure = mysql_query(handle, *sql);
	if (failure) {
		return ThrowException(String::New(mysql_error(handle)));
	}
	MYSQL_RES *result = mysql_use_result(handle);
	if (!result) {
		return scope.Close(False());
	}
	unsigned int num_fields = mysql_num_fields(result);
	MYSQL_FIELD *fields = mysql_fetch_fields(result);

	Handle<Array>a = Array::New(mysql_num_rows(result));
	Local<String> names[num_fields];
	int types[num_fields];
	for (unsigned int n=0; n<num_fields; n++) {
		names[n] = String::New(fields[n].name);
		types[n] = fields[n].type;
	}
	unsigned long rowNdx = 0;
	unsigned int i;
	MYSQL_ROW row;
	while ((row = mysql_fetch_row(result))) {
		unsigned long *lengths = mysql_fetch_lengths(result);
		JSOBJ o = Object::New();
		for (i=0; i<num_fields; i++) {
			if (row[i] == NULL) {
				o->Set(names[i], Null());
			}
			else {
				switch (types[i]) {
				case MYSQL_TYPE_NULL:
					o->Set(names[i], Null());
					break;
				case MYSQL_TYPE_TINY:
				case MYSQL_TYPE_SHORT:
				case MYSQL_TYPE_LONG:
				case MYSQL_TYPE_TIMESTAMP:
				case MYSQL_TYPE_LONGLONG:
				case MYSQL_TYPE_INT24:
					o->Set(names[i], Integer::New(atoi(row[i])));
					break;
				case MYSQL_TYPE_FLOAT:
				case MYSQL_TYPE_DOUBLE:
					o->Set(names[i], Number::New(atof(row[i])));
					break;
				default:
					o->Set(names[i], String::New(row[i], lengths[i]));
					break;
				}
			}
		}
		a->Set(rowNdx++, o);
	}
	mysql_free_result(result);
	return scope.Close(a);
}
Esempio n. 6
0
/**
 * @function memcached.mget
 * 
 * ### Synopsis:
 * 
 * var o = memcache.get(handle, array_of_keys);
 * 
 * Get multiple values, identified by an array of keys, from memcached.
 * 
 * The returned object is a hash of returned values, indexed by the key.  
 * 
 * For each of these keys, the value is an object in the form described at the top of this page.
 * 
 * @param {object} handle - handle to memcached connection.
 * @param {array} keys - array of keys of data to get from memcached
 * @return {object} o - has of objects of the form described at top of the page, or false if an error occurred.
 */
JSVAL _memcached_mget (JSARGS args) {
    HandleScope scope;
    M* handle = HANDLE(args[0]);
    Handle<Array> aKeys = Handle<Array>::Cast(args[1]);
    int numKeys = aKeys->Length();
    char *keys[numKeys];
    size_t key_lengths[numKeys];
    for (int i = 0; i < numKeys; i++) {
        String::Utf8Value k(aKeys->Get(i));
        keys[i] = *k;
        key_lengths[i] = strlen(keys[i]);
    }
    R rc = memcached_mget(handle, keys, key_lengths, numKeys);
    if (rc != MEMCACHED_SUCCESS) {
        return String::New(memcached_strerror(handle, rc));
    }
    char return_key[MEMCACHED_MAX_KEY];
    size_t return_key_length;
    char *return_value;
    size_t return_value_length;
    uint32_t flags;
    JSOBJ result = Object::New();
    while ((return_value = memcached_fetch(handle, return_key, &return_key_length, &return_value_length, &flags, &rc))) {
        JSOBJ o = Object::New();
        o->Set(String::New("value"), String::New(return_value));
        o->Set(String::New("flags"), Integer::New(flags));
        o->Set(String::New("rc"), Integer::New(rc));
        free(return_value);
        result->Set(String::New(return_key), o);
    }
    return scope.Close(result);
}
Esempio n. 7
0
/**
 * @function SFTP.readDir
 * 
 * ### Synopsis
 * 
 * var files = SFTP.readDir(handle, path);
 * 
 * Read a directory from remote server, return an array of objects of the form:
 * 
 * + name: name of file.
 * + longentry: a string?
 * + size: size of file in bytes.
 * + permissions: file permissions.
 * + uid: uid of owner of file.
 * + gid: gid of owner of file.
 * + mtime: modification time (timestamp) of file.
 * + atime: access time (timestamp) of file
 * 
 * The above values may be undefined (except for name), if the SSH2 library and remote server don't allow extended information.
 * 
 * @param {object} handle - opaque handle to existing SFTP connection (already connected).
 * @param {string} path - path on remote server to directory to get listing of.
 * @return {array} files - array of objects as specifed above, or string containing error message.
 */
JSVAL sftp_readdir (JSARGS args) {
    HandleScope scope;
    SFTP *handle = HANDLE(args[0]);
    String::Utf8Value path(args[1]);

    LIBSSH2_SFTP_HANDLE *sftp_handle = libssh2_sftp_opendir(handle->sftp_session, *path);
    if (!sftp_handle) {
        return scope.Close(String::New("Could not open remote directory"));
    }

    char mem[512],
        longentry[512];
    LIBSSH2_SFTP_ATTRIBUTES attrs;

    Handle<String> _name = String::New("name");
    Handle<String> _longentry = String::New("longentry");
    Handle<String> _permissions = String::New("permissions");
    Handle<String> _uid = String::New("uid");
    Handle<String> _gid = String::New("gid");
    Handle<String> _size = String::New("size");
    Handle<String> _mtime = String::New("mtime");
    Handle<String> _atime = String::New("atime");

    Handle<Array>a = Array::New();
    int aIndex = 0;
    while (1) {
        if (libssh2_sftp_readdir_ex(sftp_handle, mem, sizeof (mem), longentry, sizeof (longentry), &attrs) <= 0) {
            break;
        }
        JSOBJ o = Object::New();
        o->Set(_name, String::New(mem));
        o->Set(_longentry, String::New(longentry));
        if (attrs.flags & LIBSSH2_SFTP_ATTR_SIZE) {
            o->Set(_size, Integer::New(attrs.filesize));
        }
        if (attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) {
            o->Set(_permissions, Integer::New(attrs.permissions));
        }
        if (attrs.flags & LIBSSH2_SFTP_ATTR_UIDGID) {
            o->Set(_uid, Integer::New(attrs.uid));
            o->Set(_gid, Integer::New(attrs.gid));
        }
        if (attrs.flags & LIBSSH2_SFTP_ATTR_ACMODTIME) {
            o->Set(_mtime, Integer::New(attrs.mtime));
            o->Set(_atime, Integer::New(attrs.atime));
        }
        a->Set(aIndex++, o);
    }
    libssh2_sftp_closedir(sftp_handle);
    return scope.Close(a);
}
Esempio n. 8
0
static JSVAL get_character_set_info(JSARGS args) {
	HandleScope scope;
	MYSQL *handle = (MYSQL *) args[0]->IntegerValue();
	MY_CHARSET_INFO cs;
	mysql_get_character_set_info(handle, &cs);
	JSOBJ o = Object::New();
    o->Set(String::New("number"), Integer::New(cs.number));
    o->Set(String::New("name"), String::New(cs.name));
    o->Set(String::New("csname"), String::New(cs.csname));
    o->Set(String::New("comment"), String::New(cs.comment));
    o->Set(String::New("dir"), String::New(cs.dir));
    o->Set(String::New("mbminlen"), Integer::New(cs.mbminlen));
    o->Set(String::New("mbmaxlen"), Integer::New(cs.mbmaxlen));
	return scope.Close(o);
}
Esempio n. 9
0
static void MakeField(MYSQL_FIELD *f, JSOBJ o) {
    o->Set(String::New("name"), String::New(f->name));
    o->Set(String::New("org_name"), String::New(f->org_name));
    o->Set(String::New("table"), String::New(f->table));
    o->Set(String::New("org_table"), String::New(f->org_table));
    o->Set(String::New("db"), String::New(f->db));
    o->Set(String::New("catalog"), String::New(f->catalog));
    o->Set(String::New("def"), String::New(f->def));
    o->Set(String::New("length"), Integer::New(f->length));
    o->Set(String::New("max_length"), Integer::New(f->max_length));
    o->Set(String::New("name_length"), Integer::New(f->name_length));
    o->Set(String::New("org_name_length"), Integer::New(f->org_name_length));
    o->Set(String::New("table_length"), Integer::New(f->table_length));
    o->Set(String::New("db_length"), Integer::New(f->db_length));
    o->Set(String::New("catalog_length"), Integer::New(f->catalog_length));
    o->Set(String::New("def_length"), Integer::New(f->def_length));
    o->Set(String::New("flags"), Integer::New(f->flags));
    o->Set(String::New("decimals"), Integer::New(f->decimals));
    o->Set(String::New("charsetnr"), Integer::New(f->charsetnr));
	switch (f->type) {
		case MYSQL_TYPE_DECIMAL:
			o->Set(String::New("type"), String::New("DECIMAL"));
			break;
		case MYSQL_TYPE_TINY:
			o->Set(String::New("type"), String::New("TINY"));
			break;
		case MYSQL_TYPE_SHORT:
			o->Set(String::New("type"), String::New("SHORT"));
			break;
		case MYSQL_TYPE_LONG:
			o->Set(String::New("type"), String::New("LONG"));
			break;
		case MYSQL_TYPE_FLOAT:
			o->Set(String::New("type"), String::New("FLOAT"));
			break;
		case MYSQL_TYPE_DOUBLE:
			o->Set(String::New("type"), String::New("DOUBLE"));
			break;
		case MYSQL_TYPE_NULL:
			o->Set(String::New("type"), String::New("NULL"));
			break;
		case MYSQL_TYPE_TIMESTAMP:
			o->Set(String::New("type"), String::New("TIMESTAMP"));
			break;
		case MYSQL_TYPE_LONGLONG:
			o->Set(String::New("type"), String::New("LONGLONG"));
			break;
		case MYSQL_TYPE_INT24:
			o->Set(String::New("type"), String::New("INT24"));
			break;
		case MYSQL_TYPE_DATE:
			o->Set(String::New("type"), String::New("DATE"));
			break;
		case MYSQL_TYPE_TIME:
			o->Set(String::New("type"), String::New("TIME"));
			break;
		case MYSQL_TYPE_DATETIME:
			o->Set(String::New("type"), String::New("DATETIME"));
			break;
		case MYSQL_TYPE_YEAR:
			o->Set(String::New("type"), String::New("YEAR"));
			break;
		case MYSQL_TYPE_NEWDATE:
			o->Set(String::New("type"), String::New("NEWDATE"));
			break;
		case MYSQL_TYPE_VARCHAR:
			o->Set(String::New("type"), String::New("VARCHAR"));
			break;
		case MYSQL_TYPE_BIT:
			o->Set(String::New("type"), String::New("BIT"));
			break;
		case MYSQL_TYPE_NEWDECIMAL:
			o->Set(String::New("type"), String::New("NEWDECIMAL"));
			break;
		case MYSQL_TYPE_ENUM:
			o->Set(String::New("type"), String::New("ENUM"));
			break;
		case MYSQL_TYPE_SET:
			o->Set(String::New("type"), String::New("SET"));
			break;
		case MYSQL_TYPE_TINY_BLOB:
			o->Set(String::New("type"), String::New("TINY_BLOB"));
			break;
		case MYSQL_TYPE_MEDIUM_BLOB:
			o->Set(String::New("type"), String::New("MEDIUM_BLOB"));
			break;
		case MYSQL_TYPE_LONG_BLOB:
			o->Set(String::New("type"), String::New("LONG_BLOB"));
			break;
		case MYSQL_TYPE_BLOB:
			o->Set(String::New("type"), String::New("BLOB"));
			break;
		case MYSQL_TYPE_VAR_STRING:
			o->Set(String::New("type"), String::New("VAR_STRING"));
			break;
		case MYSQL_TYPE_STRING:
			o->Set(String::New("type"), String::New("STRING"));
			break;
		case MYSQL_TYPE_GEOMETRY:
			o->Set(String::New("type"), String::New("GEOMETRY"));
			break;
		default:
			o->Set(String::New("type"), String::New("UNKNOWN"));
			break;
	}
}
Esempio n. 10
0
JSVAL getDataRow(JSARGS args) {
	HandleScope scope;
	String::Utf8Value sql(args[0]->ToString());
	mysql_ping(handle);
	int failure = mysql_query(handle, *sql);
	if (failure) {
		return ThrowException(String::New(mysql_error(handle)));
	}
	MYSQL_RES *result = mysql_store_result(handle);
	if (!result) {
		return scope.Close(False());
	}
	unsigned int num_fields = mysql_num_fields(result);
	MYSQL_FIELD *fields = mysql_fetch_fields(result);
	MYSQL_ROW row = mysql_fetch_row(result);
	unsigned long *lengths = mysql_fetch_lengths(result);
	JSOBJ o = Object::New();
	for (unsigned int i=0; i<num_fields; i++) {
		if (row[i] == NULL) {
			o->Set(String::New(fields[i].name), Null());
		}
		else {
			switch (fields[i].type) {
			case MYSQL_TYPE_TINY:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_SHORT:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_LONG:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_FLOAT:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_DOUBLE:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_NULL:
				o->Set(String::New(fields[i].name), Null());
				break;
			case MYSQL_TYPE_TIMESTAMP:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_LONGLONG:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_INT24:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			default:
				o->Set(String::New(fields[i].name), String::New(row[i], lengths[i]));
				break;
			}
		}
	}
	mysql_free_result(result);
	return scope.Close(o);
}
Esempio n. 11
0
static JSVAL fetch_row(JSARGS args) {
	HandleScope scope;
	MYSQL_RES *result = (MYSQL_RES *) args[0]->IntegerValue();
	MYSQL_ROW row = mysql_fetch_row(result);
	if (!row) {
		return scope.Close(Null());
	}
	unsigned int num_fields = mysql_num_fields(result);
	unsigned long *lengths = mysql_fetch_lengths(result);
	MYSQL_FIELD *fields = mysql_fetch_fields(result);
	JSOBJ o = Object::New();
	for (unsigned int i=0; i<num_fields; i++) {
		if (row[i] == NULL) {
			o->Set(String::New(fields[i].name), Null());
		}
		else {
			switch (fields[i].type) {
			case MYSQL_TYPE_TINY:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_SHORT:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_LONG:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_FLOAT:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_DOUBLE:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_NULL:
				o->Set(String::New(fields[i].name), Null());
				break;
			case MYSQL_TYPE_TIMESTAMP:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_LONGLONG:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			case MYSQL_TYPE_INT24:
				o->Set(String::New(fields[i].name), Integer::New(atoi(row[i])));
				break;
			default:
				o->Set(String::New(fields[i].name), String::New(row[i], lengths[i]));
				break;
			}
		}
	}
	return scope.Close(o);
}