Skip to content

botframework-streaming library does not send streams greater than 999999 bytes #1886

Closed

Description

BotFramework-Streaming library does not chunk the packets into PayloadConstants.MaxPayloadLength bytes anymore. As a result streams that are larger than the PayloadConstants.MaxLength (999999) don't get sent correctly.

The writePacket function in libraries\botframework-streaming\src\payloadTransport\payloadSender.ts must look like this -

private writePacket(packet: ISendPacket): void {
    try {
        if (packet.header.payloadLength > 0 && packet.payload) {

            let leftOver = packet.header.payloadLength;

            while (leftOver > 0) {                   
                let count = leftOver <= PayloadConstants.MaxPayloadLength ? leftOver : PayloadConstants.MaxPayloadLength;
                let chunk = packet.payload.read(count);

                var header = packet.header;
                header.payloadLength = count;
                header.end = leftOver <= PayloadConstants.MaxPayloadLength;

                let sendHeaderBuffer: Buffer = Buffer.alloc(PayloadConstants.MaxHeaderLength);
            
                HeaderSerializer.serialize(header, sendHeaderBuffer);
                
                this.sender.send(sendHeaderBuffer);

                this.sender.send(chunk);
                leftOver-= chunk.length;
            }

            if (packet.sentCallback) {
                packet.sentCallback();
            }
        }
    } catch (e) {
        this.disconnect(new TransportDisconnectedEvent(e.message));
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Labels

R8Release 8 - March 16th, 2020

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions