in src/datachannel/streaming.go [272:329]
func (dataChannel *DataChannel) SendInputDataMessage(
log log.T,
payloadType message.PayloadType,
inputData []byte) (err error) {
var (
flag uint64 = 0
msg []byte
)
messageId := uuid.NewV4()
// today 'enter' is taken as 'next line' in winpty shell. so hardcoding 'next line' byte to actual 'enter' byte
if bytes.Equal(inputData, []byte{10}) {
inputData = []byte{13}
}
// Encrypt if encryption is enabled and payload type is Output
if dataChannel.encryptionEnabled && payloadType == message.Output {
inputData, err = dataChannel.encryption.Encrypt(log, inputData)
if err != nil {
return err
}
}
clientMessage := message.ClientMessage{
MessageType: message.InputStreamMessage,
SchemaVersion: 1,
CreatedDate: uint64(time.Now().UnixNano() / 1000000),
Flags: flag,
MessageId: messageId,
PayloadType: uint32(payloadType),
Payload: inputData,
SequenceNumber: dataChannel.StreamDataSequenceNumber,
}
if msg, err = clientMessage.SerializeClientMessage(log); err != nil {
log.Errorf("Cannot serialize StreamData message with error: %v", err)
return
}
log.Tracef("Sending message with seq number: %d", dataChannel.StreamDataSequenceNumber)
if err = SendMessageCall(log, dataChannel, msg, websocket.BinaryMessage); err != nil {
log.Errorf("Error sending stream data message %v", err)
return
}
streamingMessage := StreamingMessage{
msg,
dataChannel.StreamDataSequenceNumber,
time.Now(),
new(int),
}
dataChannel.AddDataToOutgoingMessageBuffer(streamingMessage)
dataChannel.StreamDataSequenceNumber = dataChannel.StreamDataSequenceNumber + 1
return
}