gntp
Version:
Full, native, Growl Notification Transport Protocol (GNTP)implementation.
96 lines (85 loc) • 3.38 kB
JavaScript
var net = require('net');
var fs = require('fs');
var gntp = require('../lib/index.js');
var respond = function (request,sock){
var response = new gntp.Message();
//for(var m=0; m<request.headers.pointerHeaders.length; m++){
// console.log(
// 'PH=>'
// + request.headers.pointerHeaders[m].name
// + ':'
// + request.headers.pointerHeaders[m].value
// + ' ['
// + request.headers.pointerHeaders[m].resourceData.length
// + ']');
//}
if( request.parseInfo.error ){
response.type = gntp.Constants.MessageTypeEnum.ERROR
//response.headers.addHeader(new gntp.Header(gntp.Constants.HeaderEnum.responseAction,request.type))
response.headers.addHeader(new gntp.Header(gntp.Constants.HeaderEnum.errorCode,request.parseInfo.error.code))
response.headers.addHeader(new gntp.Header(gntp.Constants.HeaderEnum.errorDescription,request.parseInfo.error.description))
}else{
response.type = gntp.Constants.MessageTypeEnum.OK;
response.headers.addHeader(new gntp.Header(gntp.Constants.HeaderEnum.responseAction,request.type));
// return any Data headers.
for(var n=0; n<request.headers.dataHeaders.length; n++){
response.headers.addHeader(request.headers.dataHeaders[n]);
}
}
var protocol = response.protocolString();
var mime = response.mime();
//console.log('response:'+protocol+mime.toString('utf8'));
//fs.writeFileSync('encrypt.log',mime);
var mBuff = new Buffer(protocol.length+mime.length+(gntp.Constants.EndLine.length));
mBuff.write(protocol,0,'utf8');
mime.copy(mBuff,protocol.length,0);
mBuff.write(gntp.Constants.EndLine,protocol.length+mime.length,'utf8');
sock.write(mBuff);
};
var connections = 0;
var server = net.createServer();
server.on('connection',function (sock){
var msg = new gntp.Message();
var recvd = 0,
parsed = false;
var id = connections++;
sock.on('data',function (data){
if( parsed === true) {
recvd = 0;
msg = new gntp.Message();
}
//console.log('SERVER RECV:'+data.length+' on '+id);
msg.parse_stream(data);
recvd+= data.length;
/*
var logFileU = fs.open('recv.log','a',null, function (err,fd){
fs.writeSync(fd,data,0,data.length,recvd);
});
*/
if( msg.parseInfo.error ){
parsed = true;
//console.log('Error: [' + msg.parseInfo.error.code + '] ' + msg.parseInfo.error.text)
respond(msg,sock)
}else if(msg.parseInfo.complete){
parsed = true;
respond(msg,sock);
sock.end();
}
});
sock.on('close',function (){
//console.log('socket closed '+id);
//console.log('RCVD:'+recvd+' on '+id);
//console.log('good:'+(parsed?'yes':'no'));
//console.log('===');
});
setTimeout( function (){
sock.end();
},3000);
});
server.listen(23053);
console.log('Listening on GNTP service port (23053)');
setInterval(function () {
//setTimeout(function () {
console.log("Conn/Sec: "+ connections)
connections = 0
},1000);