private void OnDataChannelMessage(RTCDataChannel dc, DataChannelPayloadProtocols protocol, byte[] data) { if (protocol == DataChannelPayloadProtocols.WebRTC_Binary) { if (data != null) { _incomingQueue.BlockEnqueue(data); } } else { Logger.LogWarning("None binary message received on the data channel."); } }
/// <summary> /// Event handler for an SCTP data chunk being received for this data channel. /// </summary> internal void GotData(ushort streamID, ushort streamSeqNum, uint ppID, byte[] data) { //logger.LogTrace($"WebRTC data channel GotData stream ID {streamID}, stream seqnum {streamSeqNum}, ppid {ppID}, label {label}."); // If the ppID is not recognised default to binary. DataChannelPayloadProtocols payloadType = DataChannelPayloadProtocols.WebRTC_Binary; if (Enum.IsDefined(typeof(DataChannelPayloadProtocols), ppID)) { payloadType = (DataChannelPayloadProtocols)ppID; } onmessage?.Invoke(this, (DataChannelPayloadProtocols)ppID, data); }
private static void OnData(RTCDataChannel dc, DataChannelPayloadProtocols proto, byte[] data) { if (proto == DataChannelPayloadProtocols.WebRTC_String) { Console.WriteLine($"{dc.label}: return recv stream id {dc.id}, send# {Encoding.UTF8.GetString(data)}"); int pairID = int.Parse(Regex.Match(dc.label, @".*-(?<id>\d+)-.*").Result("${id}")); connectionPairs.Single(x => x.ID == pairID).StreamSendConfirmed[dc.id.Value].Set(); } else if (proto == DataChannelPayloadProtocols.WebRTC_Binary) { var packet = BytesToStructure <Message>(data); var sha256 = Crypto.GetSHA256Hash(packet.Data); Console.WriteLine($"{dc.label}: recv stream id {dc.id}, send# {packet.Num}."); //Console.WriteLine($"{dc.label}: recv {packet.Num}, sha256 {sha256}."); if (sha256 != packet.SHA256) { throw new ApplicationException($"Data channel message sha256 hash {sha256} did not match expected hash {packet.SHA256}."); } dc.send(packet.Num.ToString()); } }