private void WriteLocalHail(NetOutgoingMessage om) { if (m_localHailMessage != null) { byte[] hi = m_localHailMessage.PeekDataBuffer(); if (hi != null && hi.Length >= m_localHailMessage.LengthBytes) { if (om.LengthBytes + m_localHailMessage.LengthBytes > m_peerConfiguration.m_maximumTransmissionUnit - 10) { throw new NetException("Hail message too large; can maximally be " + (m_peerConfiguration.m_maximumTransmissionUnit - 10 - om.LengthBytes)); } om.WriteRaw(m_localHailMessage.PeekDataBuffer(), 0, m_localHailMessage.LengthBytes); } } }
private void WriteLocalHail(NetOutgoingMessage om) { if (m_localHailMessage != null) { byte[] hi = m_localHailMessage.Data; if (hi != null && hi.Length >= m_localHailMessage.LengthBytes) { if (om.LengthBytes + m_localHailMessage.LengthBytes > m_peerConfiguration.m_maximumTransmissionUnit - 10) { m_peer.ThrowOrLog("Hail message too large; can maximally be " + (m_peerConfiguration.m_maximumTransmissionUnit - 10 - om.LengthBytes)); } om.WriteRaw(m_localHailMessage.Data, 0, m_localHailMessage.LengthBytes); } } }
public override bool Encrypt(NetOutgoingMessage msg) { int unEncLenBits = msg.LengthBits; var ms = new MemoryStream(); var cs = new CryptoStream(ms, m_algorithm.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(msg.m_data, 0, msg.LengthBytes); cs.Close(); // get results var arr = ms.ToArray(); ms.Close(); msg.EnsureBufferSize((arr.Length + 4) * 8); msg.LengthBits = 0; // reset write pointer msg.Write((uint)unEncLenBits); msg.WriteRaw(arr); msg.LengthBits = (arr.Length + 4) * 8; return(true); }
private void SendExpandMTU(double now, int size) { NetOutgoingMessage om = m_peer.CreateMessage(size); byte[] tmp = new byte[size]; om.WriteRaw(tmp); om.m_messageType = NetMessageType.ExpandMTURequest; int len = om.Encode(m_peer.m_sendBuffer, 0, 0); bool ok = m_peer.SendMTUPacket(len, m_remoteEndPoint); if (ok == false) { //m_peer.LogDebug("Send MTU failed for size " + size); // failure if (m_smallestFailedMTU == -1 || size < m_smallestFailedMTU) { m_smallestFailedMTU = size; m_mtuAttemptFails++; if (m_mtuAttemptFails >= m_peerConfiguration.ExpandMTUFailAttempts) { FinalizeMTU(m_largestSuccessfulMTU); return; } } ExpandMTU(now); return; } m_lastSentMTUAttemptSize = size; m_lastSentMTUAttemptTime = now; m_statistics.PacketSent(len, 1); m_peer.Recycle(om); }
private void WriteLocalHail(NetOutgoingMessage om) { if (m_localHailMessage != null) { byte[] hi = m_localHailMessage.PeekDataBuffer(); if (hi != null && hi.Length >= m_localHailMessage.LengthBytes) { if (om.LengthBytes + m_localHailMessage.LengthBytes > m_peerConfiguration.m_maximumTransmissionUnit - 10) throw new NetException("Hail message too large; can maximally be " + (m_peerConfiguration.m_maximumTransmissionUnit - 10 - om.LengthBytes)); om.WriteRaw(m_localHailMessage.PeekDataBuffer(), 0, m_localHailMessage.LengthBytes); } } }