Skip to content

Commit 56b7c41

Browse files
committed
Create message in each parsing function
1 parent 31318c0 commit 56b7c41

File tree

1 file changed

+63
-63
lines changed

1 file changed

+63
-63
lines changed

lib/connection.js

+63-63
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,11 @@ Connection.prototype.readSslResponse = function() {
312312
};
313313
};
314314

315+
var Message = function(name, length) {
316+
this.name = name;
317+
this.length = length;
318+
};
319+
315320
Connection.prototype.parseMessage = function() {
316321
var remaining = this.buffer.length - (this.offset);
317322
if(remaining < 5) {
@@ -335,105 +340,91 @@ Connection.prototype.parseMessage = function() {
335340
return false;
336341
}
337342

338-
var msg = {
339-
length: length
340-
};
343+
var buffer = this.buffer;
341344
switch(id)
342345
{
343346

344347
case 0x52: //R
345-
msg.name = 'authenticationOk';
346-
msg = this.parseR(msg);
348+
msg = this.parseR(buffer, length);
347349
break;
348350

349351
case 0x53: //S
350-
msg.name = 'parameterStatus';
351-
msg = this.parseS(msg);
352+
msg = this.parseS(buffer, length);
352353
break;
353354

354355
case 0x4b: //K
355-
msg.name = 'backendKeyData';
356-
msg = this.parseK(msg);
356+
msg = this.parseK(buffer, length);
357357
break;
358358

359359
case 0x43: //C
360-
msg.name = 'commandComplete';
361-
msg = this.parseC(msg);
360+
msg = this.parseC(buffer, length);
362361
break;
363362

364363
case 0x5a: //Z
365-
msg.name = 'readyForQuery';
366-
msg = this.parseZ(msg);
364+
msg = this.parseZ(buffer, length);
367365
break;
368366

369367
case 0x54: //T
370-
msg.name = 'rowDescription';
371-
msg = this.parseT(msg);
368+
msg = this.parseT(buffer, msg);
372369
break;
373370

374371
case 0x44: //D
375372
msg = this.parseD(buffer, length);
376373
break;
377374

378375
case 0x45: //E
379-
msg.name = 'error';
380-
msg = this.parseE(msg);
376+
msg = this.parseE(buffer, length);
381377
break;
382378

383379
case 0x4e: //N
384-
msg.name = 'notice';
385-
msg = this.parseN(msg);
380+
msg = this.parseN(buffer, length);
386381
break;
387382

388383
case 0x31: //1
389-
msg.name = 'parseComplete';
384+
msg = new Message('parseComplete', length);
390385
break;
391386

392387
case 0x32: //2
393-
msg.name = 'bindComplete';
388+
msg = new Message('bindComplete', length);
394389
break;
395390

396391
case 0x41: //A
397-
msg.name = 'notification';
398-
msg = this.parseA(msg);
392+
msg = this.parseA(buffer, length);
399393
break;
400394

401395
case 0x6e: //n
402-
msg.name = 'noData';
396+
msg = new Message('noData', length);
403397
break;
404398

405399
case 0x49: //I
406-
msg.name = 'emptyQuery';
400+
msg = new Message('emptyQuery', length);
407401
break;
408402

409403
case 0x73: //s
410-
msg.name = 'portalSuspended';
404+
msg = new Message('portalSuspended', length);
411405
break;
412406

413407
case 0x47: //G
414-
msg.name = 'copyInResponse';
415-
msg = this.parseGH(msg);
408+
msg = this.parseG(buffer, length);
416409
break;
417410

418411
case 0x48: //H
419-
msg.name = 'copyOutResponse';
420-
msg = this.parseGH(msg);
412+
msg = this.parseH(buffer, length);
421413
break;
422414
case 0x63: //c
423-
msg.name = 'copyDone';
415+
msg = new Message('copyDone', length);
424416
break;
425417

426418
case 0x64: //d
427-
msg.name = 'copyData';
428-
msg = this.parsed(msg);
419+
msg = this.parsed(buffer, length);
429420
break;
430421
}
431422
return msg;
432423
};
433424

434-
Connection.prototype.parseR = function(msg) {
425+
Connection.prototype.parseR = function(buffer, length) {
435426
var code = 0;
436-
var buffer = this.buffer;
427+
var msg = new Message('authenticationOk', length);
437428
if(msg.length === 8) {
438429
code = this.parseInt32(buffer);
439430
if(code === 3) {
@@ -454,34 +445,35 @@ Connection.prototype.parseR = function(msg) {
454445
throw new Error("Unknown authenticatinOk message type" + util.inspect(msg));
455446
};
456447

457-
Connection.prototype.parseS = function(msg) {
458-
var buffer = this.buffer;
448+
Connection.prototype.parseS = function(buffer, length) {
449+
var msg = new Message('parameterStatus', length);
459450
msg.parameterName = this.parseCString(buffer);
460451
msg.parameterValue = this.parseCString(buffer);
461452
return msg;
462453
};
463454

464-
Connection.prototype.parseK = function(msg) {
465-
var buffer = this.buffer;
455+
Connection.prototype.parseK = function(buffer, length) {
456+
var msg = new Message('backendKeyData', length);
466457
msg.processID = this.parseInt32(buffer);
467458
msg.secretKey = this.parseInt32(buffer);
468459
return msg;
469460
};
470461

471-
Connection.prototype.parseC = function(msg) {
472-
var buffer = this.buffer;
462+
Connection.prototype.parseC = function(buffer, length) {
463+
var msg = new Message('commandComplete', length);
473464
msg.text = this.parseCString(buffer);
474465
return msg;
475466
};
476467

477-
Connection.prototype.parseZ = function(msg) {
478-
var buffer = this.buffer;
468+
Connection.prototype.parseZ = function(buffer, length) {
469+
var msg = new Message('readyForQuery', length);
470+
msg.name = 'readyForQuery';
479471
msg.status = this.readString(buffer, 1);
480472
return msg;
481473
};
482474

483-
Connection.prototype.parseT = function(msg) {
484-
var buffer = this.buffer;
475+
Connection.prototype.parseT = function(buffer, length) {
476+
var msg = new Message('rowDescription', length);
485477
msg.fieldCount = this.parseInt16(buffer);
486478
var fields = [];
487479
for(var i = 0; i < msg.fieldCount; i++){
@@ -512,11 +504,6 @@ Connection.prototype.parseField = function(buffer) {
512504
return field;
513505
};
514506

515-
var Message = function(name, length) {
516-
this.name = name;
517-
this.length = length;
518-
};
519-
520507
var DataRowMessage = function(name, length, fieldCount) {
521508
this.name = name;
522509
this.length = length;
@@ -544,10 +531,11 @@ Connection.prototype._readValue = function(buffer) {
544531
};
545532

546533
//parses error
547-
Connection.prototype.parseE = function(input) {
534+
Connection.prototype.parseE = function(buffer, length) {
548535
var buffer = this.buffer;
549536
var fields = {};
550537
var msg, item;
538+
var input = new Message('error', length);
551539
var fieldType = this.readString(buffer, 1);
552540
while(fieldType != '\0') {
553541
fields[fieldType] = this.parseCString(buffer);
@@ -582,18 +570,31 @@ Connection.prototype.parseE = function(input) {
582570
};
583571

584572
//same thing, different name
585-
Connection.prototype.parseN = Connection.prototype.parseE;
573+
Connection.prototype.parseN = function(buffer, length) {
574+
var msg = this.parseE(msg);
575+
msg.name = 'notice';
576+
return msg;
577+
}
586578

587-
Connection.prototype.parseA = function(msg) {
588-
var buffer = this.buffer;
579+
Connection.prototype.parseA = function(buffer, length) {
580+
var msg = new Message('notification', length);
589581
msg.processId = this.parseInt32(buffer);
590582
msg.channel = this.parseCString(buffer);
591583
msg.payload = this.parseCString(buffer);
592584
return msg;
593585
};
594586

595-
Connection.prototype.parseGH = function (msg) {
596-
var buffer = this.buffer;
587+
Connection.prototype.parseG = function (buffer, length) {
588+
var msg = new Message('copyInResponse', length);
589+
return this.parseGH(buffer, msg);;
590+
};
591+
592+
Connection.prototype.parseH = function(buffer, length) {
593+
var msg = new Message('copyOutResponse', length);
594+
return this.parseGH(buffer, msg);;
595+
};
596+
597+
Connection.prototype.parseGH = function (buffer, msg) {
597598
var isBinary = this.buffer[this.offset] !== 0;
598599
this.offset++;
599600
msg.binary = isBinary;
@@ -605,6 +606,12 @@ Connection.prototype.parseGH = function (msg) {
605606
return msg;
606607
};
607608

609+
Connection.prototype.parsed = function (buffer, length) {
610+
var msg = new Message('copyData', length);
611+
msg.chunk = this.readBytes(buffer, msg.length - 4);
612+
return msg;
613+
};
614+
608615
Connection.prototype.parseInt32 = function(buffer) {
609616
var value = buffer.readInt32BE(this.offset, true);
610617
this.offset += 4;
@@ -630,12 +637,5 @@ Connection.prototype.parseCString = function(buffer) {
630637
while(buffer[this.offset++] !== 0) { }
631638
return buffer.toString(this.encoding, start, this.offset - 1);
632639
};
633-
634-
Connection.prototype.parsed = function (msg) {
635-
this.buffer = buffer;
636-
//exclude length field
637-
msg.chunk = this.readBytes(buffer, msg.length - 4);
638-
return msg;
639-
};
640640
//end parsing methods
641641
module.exports = Connection;

0 commit comments

Comments
 (0)