xserver accepts requests now (handshake data still from pre-saved file)

This commit is contained in:
Andrey Sidorov 2012-11-27 11:28:28 +11:00
parent 10dab3c2bf
commit f1eacd8864
2 changed files with 122 additions and 18 deletions

View file

@ -1,8 +1,10 @@
var core = require('./xcore'); var core = require('./xcore');
var em = require('./eventmask').eventMask; var em = require('./eventmask').eventMask;
var keysyms = require('./keysyms'); var keysyms = require('./keysyms');
var server = require('./xserver');
module.exports.createClient = core.createClient; module.exports.createClient = core.createClient;
module.exports.createServer = server.createServer;
module.exports.eventMask = em; module.exports.eventMask = em;
module.exports.keySyms = keysyms; module.exports.keySyms = keysyms;

View file

@ -28,7 +28,7 @@ function XServerClientConnection(stream, params)
stream.on('data', function( data ) { stream.on('data', function( data ) {
serv.pack_stream.write(data); serv.pack_stream.write(data);
}); });
serv.sequence = 0;
serv.readClientHandshake(); serv.readClientHandshake();
} }
util.inherits(XServerClientConnection, EventEmitter); util.inherits(XServerClientConnection, EventEmitter);
@ -45,6 +45,8 @@ XServerClientConnection.prototype.readClientHandshake = function()
'S protocolMinor', 'S protocolMinor',
'S authTypeLength', 'S authTypeLength',
'S authDataLength', 'S authDataLength',
'x',
'x'
], ],
function() { function() {
console.log(hello); console.log(hello);
@ -65,32 +67,132 @@ XServerClientConnection.prototype.checkAuth = function(authType, authData)
var serv = this; var serv = this;
// ignore check for now; // ignore check for now;
// protocol page 140: add code for reject & ask additional info // protocol page 140: add code for reject & ask additional info
console.log([authType, authData]); console.log('check auth');
console.log([authType, authData.toString()]);
// auth ok: reply with list of screens, visuals, root window info etc // auth ok: reply with list of screens, visuals, root window info etc
var stream = serv.pack_stream; var stream = serv.pack_stream;
stream.write('Cxxxxxp /*
[2, reason, xquartz exemple reply
{ major: 11,
minor: 0,
xlen: 537, (bytes in whole header)
release: 11300000,
resource_base: 6291456,
resource_mask: 2097151,
motion_buffer_size: 256,
vlen: 20,
max_request_length: 65535,
screen_num: 1,
format_num: 7,
image_byte_order: 0,
bitmap_bit_order: 0,
bitmap_scanline_unit: 32,
bitmap_scanline_pad: 32,
min_keycode: 8,
max_keycode: 255 }
per screen:
screen: { root: 226,
default_colormap: 33,
white_pixel: 16777215,
black_pixel: 0,
input_masks: 1703936,
pixel_width: 3286,
pixel_height: 1058,
mm_width: 866,
mm_height: 277,
min_installed_maps: 1,
max_installed_maps: 1,
root_visual: 34,
root_depth: 24,
backing_stores: 0,
num_depths: 7 }
17 'L root',¬
18 'L default_colormap',¬
19 'L white_pixel',¬
20 'L black_pixel',¬
21 'L input_masks',¬
22 'S pixel_width',¬
23 'S pixel_height',¬
24 'S mm_width',¬
25 'S mm_height',¬
26 'S min_installed_maps',¬
27 'S max_installed_maps',¬
28 'L root_visual',¬
29 'C root_depth',¬
30 'C backing_stores',¬
31 'C root_depth',¬
32 'C num_depths'¬
per depth:
depth: [ 24, 80 ] (depth, num visuals)
per visual:
visual { vid: 146,
class: 4,
bits_per_rgb: 8,
map_ent: 256,
red_mask: 16711680,
green_mask: 65280,
blue_mask: 255 }
*/
//stream.pack('')
// [2, reason,
//serv.pack_stream.unpack('C', function(isShared) { //serv.pack_stream.unpack('C', function(isShared) {
// console.log([isShared]); // console.log([isShared]);
// serv.writeServerInit(); // serv.writeServerInit();
//}); //});
//
var hello = require('fs').readFileSync('hello1.bin');
stream.pack('CxSSSa', [1, 11, 0, hello.length/4, hello]);
stream.flush();
serv.expectMessage();
} }
XServerClientConnection.prototype.expectMessage = function() XServerClientConnection.prototype.expectMessage = function()
{ {
var serv = this; var serv = this;
//serv.pack_stream.get(1, function(msgType) { console.log('expecting messages');
//}); serv.pack_stream.unpack('CCS', function(header) {
serv.sequence++;
console.log('Request:', header[0]);
console.log('Extra:', header[1]);
console.log('length:', header[2]);
serv.pack_stream.get((header[2]-1)*4, function(reqBody) {
console.log('BODY:', reqBody, reqBody.toString());
if (header[0] == 98) {
serv.pack_stream.pack('CCSLCCCCLLLLL', [1, 0, serv.sequence, 0, 1, 134, 0, 0, 0, 0, 0, 0, 0, 0]);
serv.pack_stream.flush();
} else if (header[0] == 134) {
console.log('ENABLE BIG REQ');
serv.pack_stream.pack('CCSLLLLLLLL', [1, 0, serv.sequence, 0, 10000000, 0, 0, 0, 0, 0, 0 ]);
serv.pack_stream.flush();
}
serv.expectMessage();
});
});
} }
module.exports.createServer = function(listenport, params) { module.exports.createServer = function(options, onconnect) {
if (typeof(options) === 'function') {
onconnect = options;
options = {};
}
var s = net.createServer(); var s = net.createServer();
s.listen(listenport); var serv = new XServer(s, options);
return new XServer(s, params); serv.on('connect', onconnect);
return s;
} }
module.exports.createServer(6002) ; //module.exports.createServer(6002) ;
//function(client) { //function(client) {
//}); //});