UNPKG

dbus-native

Version:

D-bus protocol implementation in native javascript

79 lines (66 loc) 2.01 kB
// simple script to monitor incoming/outcoming dbus messages // needs a lot of cleanup but does the job const net = require('net'); const abs = require('abstract-socket'); const through2 = require('through2'); const optimist = require('optimist'); const message = require('../lib/message'); const readLine = require('../lib/readline'); var sessionBusAddress = process.env.DBUS_SESSION_BUS_ADDRESS; var m = sessionBusAddress.match(/abstract=([^,]+)/); var isSystemBus = optimist.boolean(['system']).argv.system; var address = isSystemBus ? '/var/run/dbus/system_bus_socket' : `\0${m[1]}`; function waitHandshake(stream, prefix, cb) { readLine(stream, function(line) { console.log(prefix, line.toString()); if ( line.toString().slice(0, 5) === 'BEGIN' || line.toString().slice(0, 2) === 'OK' ) { cb(); } else { waitHandshake(stream, prefix, cb); } }); } net .createServer(function(s) { var buff = ''; var connected = false; var socket = isSystemBus ? net : abs; var cli = socket.connect(address); s.on('data', function(d) { if (connected) { cli.write(d); } else { buff += d.toString(); } }); connected = true; cli.write(buff); cli.pipe(s); var cc = through2(); var ss = through2(); // TODO: pipe? streams1 and streams2 here cli.on('data', function(b) { cc.write(b); }); s.on('data', function(b) { ss.write(b); }); waitHandshake(cc, 'dbus>', function() { message.unmarshalMessages(cc, function(message) { console.log('dbus>\n', JSON.stringify(message, null, 2)); }); }); waitHandshake(ss, ' cli>', function() { message.unmarshalMessages(ss, function(message) { console.log(' cli>\n', JSON.stringify(message, null, 2)); }); }); }) .listen(3334, function() { console.log( 'Server started. connect with DBUS_SESSION_BUS_ADDRESS=tcp:host=127.0.0.1,port=3334' ); });