diff --git a/lib/connection.js b/lib/connection.js index bdf89356..f03c62b5 100644 --- a/lib/connection.js +++ b/lib/connection.js @@ -189,23 +189,6 @@ p.setBuffer = function(buffer) { this.offset = 0; }; -var messageNames = { - R: 'authenticationOk', - S: 'parameterStatus', - K: 'backendKeyData', - C: 'commandComplete', - Z: 'readyForQuery', - T: 'rowDescription', - D: 'dataRow', - E: 'error', - N: 'notice', - 1: 'parseComplete', - 2: 'bindComplete', - A: 'notification', - n: 'noData', - I: 'emptyQuery' -}; - p.parseMessage = function() { var remaining = this.buffer.length - (this.offset); if(remaining < 5) { @@ -213,13 +196,12 @@ p.parseMessage = function() { //just abort the read now this.lastBuffer = this.buffer; this.lastOffset = this.offset; - return; + return false; } - var id = this.readChar(); + var messageType = this.buffer[this.offset++]; var message = { - name: messageNames[id], length: this.parseInt32() }; @@ -229,8 +211,72 @@ p.parseMessage = function() { this.lastOffset = this.offset-5; return false; } - - return this["parse"+id](message); + + switch(messageType) + { + + case 0x52: //R + message.name = 'authenticationOk'; + return this.parseR(message); + + case 0x53: //S + message.name = 'parameterStatus'; + return this.parseS(message); + + case 0x4b: //K + message.name = 'backendKeyData'; + return this.parseK(message); + + case 0x43: //C + message.name = 'commandComplete'; + return this.parseC(message); + + case 0x5a: //Z + message.name = 'readyForQuery'; + return this.parseZ(message); + + case 0x54: //T + message.name = 'rowDescription'; + return this.parseT(message); + + case 0x44: //D + message.name = 'dataRow'; + return this.parseD(message); + + case 0x45: //E + message.name = 'error'; + return this.parseE(message); + + case 0x4e: //N + message.name = 'notice'; + return this.parseN(message); + + case 0x31: //1 + message.name = 'parseComplete'; + return this.parse1(message); + + case 0x32: //2 + message.name = 'bindComplete'; + return this.parse2(message); + + case 0x41: //A + message.name = 'notification'; + return this.parseA(message); + + case 0x6e: //n + message.name = 'noData'; + return this.parsen(message); + + case 0x49: //I + message.name = 'emptyQuery'; + return this.parseI(message); + + default: + throw new Error("Unrecognized message code " + messageType); + } + + + }; p.parseR = function(msg) {