Home Reference Source Test

src/main/generic/network/message/GetAddrMessage.js

class GetAddrMessage extends Message {
    /**
     * @param {number} protocolMask
     * @param {number} serviceMask
     * @param {number} maxResults
     */
    constructor(protocolMask, serviceMask, maxResults) {
        super(Message.Type.GET_ADDR);
        if (!NumberUtils.isUint8(protocolMask)) throw new Error('Malformed protocolMask');
        if (!NumberUtils.isUint32(serviceMask)) throw new Error('Malformed serviceMask');
        if (!NumberUtils.isUint16(maxResults)) throw new Error('Malformed maxResults');
        this._protocolMask = protocolMask;
        this._serviceMask = serviceMask;
        this._maxResults = maxResults;
    }

    /**
     * @param {SerialBuffer} buf
     * @return {GetAddrMessage}
     */
    static unserialize(buf) {
        Message.unserialize(buf);
        const protocolMask = buf.readUint8();
        const serviceMask = buf.readUint32();

        // XXX optional maxResults argument.
        let maxResults = NetworkAgent.NUM_ADDR_PER_REQUEST;
        if (buf.readPos !== buf.byteLength) {
            maxResults = buf.readUint16();
        }

        return new GetAddrMessage(protocolMask, serviceMask, maxResults);
    }

    /**
     * @param {SerialBuffer} [buf]
     * @return {SerialBuffer}
     */
    serialize(buf) {
        buf = buf || new SerialBuffer(this.serializedSize);
        super.serialize(buf);
        buf.writeUint8(this._protocolMask);
        buf.writeUint32(this._serviceMask);
        buf.writeUint16(this._maxResults);
        super._setChecksum(buf);
        return buf;
    }

    /** @type {number} */
    get serializedSize() {
        return super.serializedSize
            + /*protocolMask*/ 1
            + /*serviceMask*/ 4
            + /*maxResults*/ 2;
    }

    /** @type {number} */
    get protocolMask() {
        return this._protocolMask;
    }

    /** @type {number} */
    get serviceMask() {
        return this._serviceMask;
    }

    /** @type {number} */
    get maxResults() {
        return this._maxResults;
    }

    toString() {
        return `GetAddrMessage{protocol=${this._protocolMask}, services=${this._serviceMask}, maxResults=${this._maxResults}}`;
    }
}
Class.register(GetAddrMessage);