public virtual async Task SendMessage(Message m, CancellationToken cancel) { if (m.header == null) { m.header = new MessageHeader(); } if (m.entries.Count == 1 && (int)m.entries[0].EntryType <= 500) { m.header.ReceiverNodeName = RemoteNodeName; m.header.SenderNodeName = node.NodeName; } m.header.SenderEndpoint = LocalEndpoint; m.header.ReceiverEndpoint = RemoteEndpoint; m.header.SenderNodeID = node.NodeID; m.header.ReceiverNodeID = RemoteNodeID; lock (MessageNumberLock) { m.header.MessageID = MessageNumber; MessageNumber = (ushort)((MessageNumber == ((ushort)UInt16.MaxValue)) ? 0 : MessageNumber + 1); } await node.SendMessage(m, cancel); }