Ejemplo n.º 1
0
 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);
         }
     }
 }
Ejemplo n.º 2
0
 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);
        }
Ejemplo n.º 5
0
 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);
         }
     }
 }