Skip to content

Instantly share code, notes, and snippets.

@3demax
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 3demax/9658227 to your computer and use it in GitHub Desktop.
Save 3demax/9658227 to your computer and use it in GitHub Desktop.
fail
/* DO NOT EDIT. Automatically generated by valabind from toxcore */
var ffi = require('ffi'), ref = require('ref'), Struct = require('ref-struct');
var lib = new ffi.DynamicLibrary('libtoxcore'+ffi.LIB_EXT);
function Tname(T) {
return T.hasOwnProperty('$name') ? T.$name : T.name;
}
var types = exports.type = {};
for(var i in ref.types)
if(i != 'Utf8String') // Try not to trip the deprecated warning.
types[i] = ref.types[i];
types.staticCString = function staticCString(N) {
var r = Object.create(types.char);
r.name = 'char['+N+']';
r.size *= N;
r.get = function get(buf, offset) {
if(buf.isNull())
return null;
// TODO enforce maxLength of N
return buf.readCString(offset);
};
r.set = function set(buf, offset, val) {
// TODO enforce maxLength of N
return buf.writeCString(val, offset);
};
return r;
};
var ptrCache = [], ptrCacheTo = [];
types.ptr = function PointerType(T) {
T = ref.coerceType(T);
if(T == types.char)
return types.CString;
var i = ptrCache.indexOf(T);
return i === -1 ? ptrCacheTo[ptrCache.push(T)-1] = ref.refType(T) : ptrCacheTo[i];
};
var refCache = [], refCacheTo = [];
types.ref = function ReferenceType(T) {
T = ref.coerceType(T);
var i = refCache.indexOf(T);
if(i !== -1)
return refCacheTo[i];
var p = types.ptr(T), r = refCacheTo[refCache.push(T)-1] = Object.create(p);
r.indirection = 1;
r.size = ref.sizeof.pointer;
r.alignment = ref.alignof.pointer;
r.name = Tname(T)+'&';
r.ffi_type = ffi.FFI_TYPES.pointer;
r.get = function get(buf, offset) {
buf = ref.get(buf, offset, p);
if(buf.isNull())
return null;
return buf.deref();
};
r.set = function set(buf, offset, val) {
if(!val)
return ref.set(buf, offset, null, p);
if(!val.buffer)
throw new TypeError('valabind ['+r.name+']#set got a bad value');
return ref.set(buf, offset, val.buffer, p);
};
return r;
};
types.array = function ArrayType(T, N) {
T = ref.coerceType(T);
if(T == types.char)
return types.staticCString(N);
var r = Object.create(T);
r.size *= N;
r.name = Tname(T)+'['+N+']';
function ArrayType(buffer, base) {
this.buffer = buffer;
this._base = base;
}
ArrayType.prototype = [];
ArrayType.prototype.constructor = ArrayType;
for(var i = 0; i < N; i++)
Object.defineProperty(ArrayType.prototype, i, {
get: function get() {
return ref.get(this.buffer, this._base+T.size*i, T);
},
set: function set(val) {
return ref.set(this.buffer, this._base+T.size*i, val, T);
},
enumerable: true
});
r.get = function get(buf, offset) {
return new ArrayType(buf, offset);
};
r.set = function set(buf, offset, val) {
for(var i in val) {
if(isNaN(i = +i) || i >= N)
continue;
ref.set(buf, offset+T.size*i, val[i], T);
}
};
return r;
};
types.delegate = function DelegateType(ret, args) {
var p = types.ptr(types.void), r = Object.create(p);
r.indirection = 1;
r.name = Tname(ret)+'('+args.map(function(T) {return Tname(T);}).join(', ')+')';
r.get = function get(buf, offset) {
buf = ref.get(buf, offset, p);
if(buf.isNull())
return null;
return ffi.ForeignFunction(buf, ret, args);
};
r.set = function set(buf, offset, val) {
return ref.set(buf, offset, ffi.Callback(ret, args, void(0), val));
};
return r;
};
var defaults = {
forEach: function forEach(callback, thisArg) {
if({}.toString.call(callback) != '[object Function]')
throw new TypeError(callback + ' is not a function');
for(var T = thisArg || T, iter = this.iterator(); iter; iter = iter.get_next())
callback.call(T, iter.get_data(), iter, this);
}
};
function bindings(s) {
function method(name, ret, args, static, more) {
var f = (more == 'variadic' ? ffi.VariadicForeignFunction :
ffi.ForeignFunction)(lib.get(name), ret, args);
if(static)
return f;
return function() {
[].unshift.call(arguments, this);
return f.apply(null, arguments);
};
}
function define(base, n, m) {
var static = n[0] == '$' && ((n = n.slice(1)), true);
static = static || base[0] == '$' && ((base = base.slice(1)), true);
if(Array.isArray(m))
m = method(m[0], m[1], m[2], static, m[3]);
static ? exports[base][n] = m : types[base].prototype[n] = m;
}
function makeGeneric(G, n) {
var cache = [], cacheTo = [];
types[n] = function() {
var l = arguments.length, args = [], c;
// Coerce all type arguments.
for(var i = 0; i < l; i++)
args[i] = ref.coerceType(arguments[i].$type || arguments[i]);
// Look in the cache, if the generic was already built.
for(var i = 0; i < cache.length; i++) {
if((c = cache[i]).length !== l)
continue;
for(var j = 0; j < l && c[j] === args[j]; j++);
if(j === l)
return cacheTo[i];
}
// Create the new generic.
var generic = cacheTo[cache.push(args)-1] = Struct(), g = G.apply(null, args);
generic.$name = n+'<'+args.map(function(T) {return Tname(T);}).join(', ')+'>';
// Define all the generic's propoerties.
for(var i in g[0])
generic.defineProperty(i, g[0][i]);
// Insert all the generic's methods.
if(g[1])
for(var i in g[1]) {
var m = g[1][i];
if(Array.isArray(m))
m = method(m[0], m[1], m[2], false, m[3]);
generic.prototype[i] = m;
}
return generic;
};
}
for(var i in s) {
if(s[i].length)
makeGeneric(s[i], i);
else if(i[0] == '$')
exports[i.slice(1)] = {};
else
exports[i] = types[i] = Struct(), types[i].$name = i;
}
for(var i in s) {
if(s[i].length) {
// TODO insert constructor
delete s[i];
continue;
}
s[i] = s[i]();
if(Array.isArray(s[i])) {
for(var j in s[i][0])
types[i].defineProperty(j, s[i][0][j]);
s[i] = s[i][1];
}
}
for(var i in s) {
if('$constructor' in s[i]) {
var ctor = s[i].$constructor;
exports[i] = method(ctor[0], ctor[1], ctor[2], true, ctor[3]), exports[i].$type = types[i];
delete s[i].$constructor;
}
for(var j in s[i])
define(i, j, s[i][j]);
}
}
var _ = types;
bindings({
/* SignalSource: function() {return [{}, {
delete: ['g_source_unref', _.void, [_.ref(_.SignalSource)]],
$constructor: ['g_unix_signal_source_new', _.ref(_.SignalSource), [_.int]]
}];},*/
Tox: function() {return [{}, {
delete: ['tox_kill', _.void, [_.ref(_.Tox)]],
$constructor: ['tox_new', _.ref(_.Tox), [_.uint8]],
get_address: ['tox_get_address', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]],
add_friend: ['tox_add_friend', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.ptr(_.uint8)]],
add_friend_norequest: ['tox_add_friend_norequest', _.int32, [_.ref(_.Tox), _.ptr(_.uint8)]],
tox_get_friend_number: ['tox_get_friend_number', _.int32, [_.ref(_.Tox), _.ptr(_.uint8)]],
get_client_id: ['tox_get_client_id', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
del_friend: ['tox_del_friend', _.int, [_.ref(_.Tox), _.int32]],
get_friend_connection_status: ['tox_get_friend_connection_status', _.int, [_.ref(_.Tox), _.int32]],
friend_exists: ['tox_friend_exists', _.int, [_.ref(_.Tox), _.int32]],
send_message: ['tox_send_message', _.uint32, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
send_message_withid: ['tox_send_message_withid', _.uint32, [_.ref(_.Tox), _.int32, _.uint32, _.ptr(_.uint8)]],
send_action: ['tox_send_action', _.uint32, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
send_action_withid: ['tox_send_action_withid', _.uint32, [_.ref(_.Tox), _.int32, _.uint32, _.ptr(_.uint8)]],
set_name: ['tox_set_name', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]],
get_self_name: ['tox_get_self_name', _.uint16, [_.ref(_.Tox), _.ptr(_.uint8)]],
get_name: ['tox_get_name', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
get_name_size: ['tox_get_name_size', _.int, [_.ref(_.Tox), _.int32]],
get_self_name_size: ['tox_get_self_name_size', _.int, [_.ref(_.Tox)]],
set_status_message: ['tox_set_status_message', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]],
set_user_status: ['tox_set_user_status', _.int, [_.ref(_.Tox), _.int]],
get_status_message_size: ['tox_get_status_message_size', _.int, [_.ref(_.Tox), _.int32]],
get_self_status_message_size: ['tox_get_self_status_message_size', _.int, [_.ref(_.Tox)]],
get_status_message: ['tox_get_status_message', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
get_self_status_message: ['tox_get_self_status_message', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]],
get_user_status: ['tox_get_user_status', _.int, [_.ref(_.Tox), _.int32]],
get_self_user_status: ['tox_get_self_user_status', _.int, [_.ref(_.Tox)]],
get_last_online: ['tox_get_last_online', _.uint64, [_.ref(_.Tox), _.int32]],
set_user_is_typing: ['tox_set_user_is_typing', _.int, [_.ref(_.Tox), _.int32, _.uint8]],
get_is_typing: ['tox_get_is_typing', _.int, [_.ref(_.Tox), _.int32]],
set_send_receipts: ['tox_set_sends_receipts', _.void, [_.ref(_.Tox), _.int32, _.int]],
count_friendlist: ['tox_count_friendlist', _.uint32, [_.ref(_.Tox)]],
get_num_online_friends: ['tox_get_num_online_friends', _.uint32, [_.ref(_.Tox)]],
get_friendlist: ['tox_get_friendlist', _.uint32, [_.ref(_.Tox), _.ptr(_.int)]],
callback_friend_request: ['tox_callback_friend_request', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.ptr(_.uint8), _.ptr(_.uint8)])]],
callback_friend_message: ['tox_callback_friend_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.ptr(_.uint8)])]],
callback_friend_action: ['tox_callback_friend_action', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]],
callback_name_change: ['tox_callback_name_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]],
callback_status_message: ['tox_callback_status_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]],
callback_user_status: ['tox_callback_user_status', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8])]],
callback_typing_change: ['tox_callback_typing_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.int])]],
callback_read_receipt: ['tox_callback_read_receipt', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint32])]],
callback_connection_status: ['tox_callback_connection_status', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8])]],
callback_group_invite: ['tox_callback_group_invite', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)])]],
callback_group_message: ['tox_callback_group_message', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)])]],
callback_group_action: ['tox_callback_group_action', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)])]],
callback_group_namelist_change: ['tox_callback_group_namelist_change', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int, _.int, _.int])]],
add_groupchat: ['tox_add_groupchat', _.int, [_.ref(_.Tox)]],
del_groupchat: ['tox_del_groupchat', _.int, [_.ref(_.Tox), _.int]],
group_peername: ['tox_group_peername', _.int, [_.ref(_.Tox), _.int, _.int, _.ptr(_.uint8)]],
invite_friend: ['tox_invite_friend', _.int, [_.ref(_.Tox), _.int32, _.int]],
join_groupchat: ['tox_join_groupchat', _.int, [_.ref(_.Tox), _.int32, _.ptr(_.uint8)]],
group_message_send: ['tox_group_message_send', _.int, [_.ref(_.Tox), _.int, _.ptr(_.uint8)]],
group_action_send: ['tox_group_action_send', _.int, [_.ref(_.Tox), _.int, _.ptr(_.uint8)]],
group_number_peers: ['tox_group_number_peers', _.int, [_.ref(_.Tox), _.int]],
count_chatlist: ['tox_count_chatlist', _.uint32, [_.ref(_.Tox)]],
get_chatlist: ['tox_get_chatlist', _.uint32, [_.ref(_.Tox), _.ptr(_.int)]],
callback_file_send_request: ['tox_callback_file_send_request', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.uint64, _.ptr(_.uint8)])]],
callback_file_control: ['tox_callback_file_control', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.uint8, _.uint8, _.ptr(_.uint8)])]],
callback_file_data: ['tox_callback_file_data', _.void, [_.ref(_.Tox), _.delegate(_.void, [_.ref(_.Tox), _.int32, _.uint8, _.ptr(_.uint8)])]],
new_file_sender: ['tox_new_file_sender', _.int, [_.ref(_.Tox), _.int32, _.uint64, _.ptr(_.uint8)]],
file_send_control: ['tox_file_send_control', _.int, [_.ref(_.Tox), _.int32, _.uint8, _.uint8, _.uint8, _.ptr(_.uint8)]],
file_send_data: ['tox_file_send_data', _.int, [_.ref(_.Tox), _.int32, _.uint8, _.ptr(_.uint8)]],
file_data_size: ['tox_file_data_size', _.int, [_.ref(_.Tox), _.int32]],
file_data_remaining: ['tox_file_data_remaining', _.uint64, [_.ref(_.Tox), _.int32, _.uint8, _.uint8]],
bootstrap_from_address: ['tox_bootstrap_from_address', _.int, [_.ref(_.Tox), _.CString, _.uint8, _.uint16, _.ptr(_.uint8)]],
isconnected: ['tox_isconnected', _.int, [_.ref(_.Tox)]],
do: ['tox_do', _.void, [_.ref(_.Tox)]],
wait_prepare: ['tox_wait_prepare', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.uint16]],
wait_execute: ['tox_wait_execute', _.int, [_.ref(_.Tox), _.ptr(_.uint8), _.uint16]],
wait_cleanup: ['tox_wait_cleanup', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]],
size: ['tox_size', _.uint32, [_.ref(_.Tox)]],
save: ['tox_save', _.void, [_.ref(_.Tox), _.ptr(_.uint8)]],
load: ['tox_load', _.int, [_.ref(_.Tox), _.ptr(_.uint8)]]
}];}
});
exports.CollectType = {}/*types.Enum*/;
exports.CollectType.INVALID = 0;
exports.CollectType.STRING = 1;
exports.CollectType.STRDUP = 2;
exports.CollectType.BOOLEAN = 3;
exports.CollectType.TRISTATE = 4;
exports.CollectType.OPTIONAL = 65536;
exports.FriendAddError = {}/*types.Enum*/;
exports.FriendAddError.TOOLONG = -1;
exports.FriendAddError.NOMESSAGE = -2;
exports.FriendAddError.OWNKEY = -3;
exports.FriendAddError.ALREADYSENT = -4;
exports.FriendAddError.UNKNOWN = -5;
exports.FriendAddError.BADCHECKSUM = -6;
exports.FriendAddError.SETNEWNOSPAM = -7;
exports.FriendAddError.NOMEM = -8;
exports.UserStatus = {}/*types.Enum*/;
exports.UserStatus.NONE = 0;
exports.UserStatus.AWAY = 1;
exports.UserStatus.BUSY = 2;
exports.UserStatus.INVALID = 3;
exports.FileControlStatus = {}/*types.Enum*/;
exports.FileControlStatus.ACCEPT = 0;
exports.FileControlStatus.PAUSE = 1;
exports.FileControlStatus.KILL = 2;
exports.FileControlStatus.FINISHED = 3;
exports.FileControlStatus.RESUME_BROKEN = 4;
exports.ChatChange = {}/*types.Enum*/;
exports.ChatChange.PEER_ADD = 0;
exports.ChatChange.PEER_DEL = 1;
exports.ChatChange.PEER_NAME = 2;
var Tox = exports.Tox
var tox = new Tox(0)
console.log(tox, tox.size()) // <- point of failure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment