Commit 51b3edb1 authored by Lam Pham-Sy's avatar Lam Pham-Sy
Browse files

Read and decode pdu message from incoming socket

parent 589951dc
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -1615,6 +1615,35 @@ class EndBatchResponsePDU extends PDU {
    }
}

/**
 * Read and decode pdu message from incoming socket
 * @param {Stream} socket - incoming socket
 * @param {callback} callback - callback(error, pdu)
 * @returns {callback} callback(error, pdu)
 */
function parsePDU(socket, callback) {
    socket.pause();
    socket.once('readable', () => {
        const header = socket.read(HEADER_SZ);
        if (header !== null) {
            const protobufSize = header.readInt32BE(1);
            const rawData = socket.read(protobufSize);
            if (rawData !== null) {
                const pdu = new PDU(
                    Buffer.concat([header, rawData], HEADER_SZ + protobufSize));
                let error;
                if (pdu.getMessageType() !== ops.NOOP) {
                    error = (pdu.getStatusCode() === errors.SUCCESS) ? null :
                        pdu.getErrorMessage();
                }
                return callback(error, pdu);
            }
        } else {
            return callback({ noHeader: true });
        }
    });
}

module.exports = {
    getVersion,
    logs,
@@ -1624,6 +1653,7 @@ module.exports = {
    getErrorName,
    protoBuild,
    getLogType,
    parsePDU,
    PDU,
    InitPDU,
    GetLogPDU,