зеркало из https://github.com/mozilla/pjs.git
116 строки
3.6 KiB
JavaScript
116 строки
3.6 KiB
JavaScript
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
importScripts("libhardware_legacy.js", "systemlibs.js");
|
|
|
|
var cbuf = ctypes.char.array(4096)();
|
|
var hwaddr = ctypes.uint8_t.array(6)();
|
|
var len = ctypes.size_t();
|
|
var ints = ctypes.int.array(8)();
|
|
|
|
let DEBUG = false;
|
|
|
|
let debug;
|
|
if (DEBUG) {
|
|
debug = function (s) {
|
|
dump("-*- WifiWorker component: " + s + "\n");
|
|
};
|
|
} else {
|
|
debug = function (s) {};
|
|
}
|
|
|
|
// TODO: consolidate with implementation in systemlibs.js
|
|
let libcutils = (function () {
|
|
let library = ctypes.open("libcutils.so");
|
|
|
|
return {
|
|
property_get: library.declare("property_get", ctypes.default_abi, ctypes.int, ctypes.char.ptr, ctypes.char.ptr, ctypes.char.ptr),
|
|
property_set: library.declare("property_set", ctypes.default_abi, ctypes.int, ctypes.char.ptr, ctypes.char.ptr)
|
|
};
|
|
})();
|
|
|
|
self.onmessage = function(e) {
|
|
var data = e.data;
|
|
var id = data.id;
|
|
var cmd = data.cmd;
|
|
|
|
switch (cmd) {
|
|
case "command":
|
|
len.value = 4096;
|
|
var ret = libhardware_legacy.command(data.request, cbuf, len.address());
|
|
var reply = "";
|
|
if (!ret) {
|
|
var reply_len = len.value;
|
|
var str = cbuf.readString();
|
|
if (str[reply_len-1] == "\n")
|
|
--reply_len;
|
|
reply = str.substr(0, reply_len);
|
|
}
|
|
postMessage({ id: id, status: ret, reply: reply });
|
|
break;
|
|
case "wait_for_event":
|
|
var ret = libhardware_legacy.wait_for_event(cbuf, 4096);
|
|
var event = cbuf.readString().substr(0, ret.value);
|
|
postMessage({ id: id, event: event });
|
|
break;
|
|
case "ifc_enable":
|
|
case "ifc_disable":
|
|
case "ifc_remove_host_routes":
|
|
case "ifc_remove_default_route":
|
|
case "ifc_reset_connections":
|
|
case "dhcp_stop":
|
|
case "dhcp_release_lease":
|
|
var ret = libnetutils[cmd](data.ifname);
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
case "ifc_get_default_route":
|
|
var route = libnetutils.ifc_get_default_route(data.ifname);
|
|
postMessage({ id: id, route: route });
|
|
break;
|
|
case "ifc_add_host_route":
|
|
case "ifc_set_default_route":
|
|
var ret = libnetutils[cmd](data.ifname, data.route);
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
case "ifc_configure":
|
|
debug("WIFI: data: " + uneval(data) + "\n");
|
|
var ret = libnetutils.ifc_configure(data.ifname, data.ipaddr, data.mask, data.gateway, data.dns1, data.dns2);
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
case "dhcp_get_errmsg":
|
|
var error = libnetutils.get_dhcp_get_errmsg();
|
|
postMessage({ id: id, error: error.readString() });
|
|
break;
|
|
case "dhcp_do_request":
|
|
case "dhcp_do_request_renew":
|
|
var out = libnetutils[cmd](data.ifname);
|
|
out.id = id;
|
|
out.status = out.ret;
|
|
postMessage(out);
|
|
break;
|
|
case "property_get":
|
|
var ret = libcutils.property_get(data.key, cbuf, data.defaultValue);
|
|
postMessage({ id: id, status: ret, value: cbuf.readString() });
|
|
break;
|
|
case "property_set":
|
|
var ret = libcutils.property_set(data.key, data.value);
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
case "close_supplicant_connection":
|
|
libhardware_legacy.close_supplicant_connection();
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
default:
|
|
var f = libhardware_legacy[cmd] || libnetutils[cmd];
|
|
var ret = f();
|
|
debug("WIFI: " + cmd + " returned: " + ret);
|
|
postMessage({ id: id, status: ret });
|
|
break;
|
|
}
|
|
}
|