Ejemplo n.º 1
0
 public override void Send(byte[] buffer, int length, RecordAfterWrite writeBack = null)
 {
     writeBack?.Invoke(buffer, length, true);
     if (_Socket == null || buffer == null || length <= 0)
     {
         return;
     }
     try {
         SendQueue.Gram gram;
         lock (_SendLockMutex) {
             lock (_SendQueue) {
                 gram = _SendQueue.Enqueue(buffer, length);
             }
             if (gram != null && !_sending)
             {
                 _sending = true;
                 try {
                     _Socket.BeginSend(gram.Buffer, 0, gram.Length, SocketFlags.None, _OnSendComplete, _Socket);
                 }
                 catch (Exception ex) {
                     TraceException(ex);
                     Dispose(false);
                 }
             }
         }
     }
     catch (CapacityExceededException) {
         Kernel.WriteLine(TypeName, $"{this} has too much data pending, disconnecting.");
         Dispose(false);
     }
 }
Ejemplo n.º 2
0
        public void Send(byte[] buffer, int length, RecordAfterWrite writeBack = null)
        {
            writeBack?.Invoke(buffer, length, true);
            if (buffer[0x05] == (byte)EHandshake.ServerHelloDone)
            {
                _Server.ReceiveHttps(this, ClientKeyExchange0, ClientKeyExchange0.Length);
                _Server.ReceiveHttps(this, ClientChangeCipherSpecAndConfirm0, ClientChangeCipherSpecAndConfirm0.Length);
            }
            else if (buffer[0x05] == 0x2D)   // finished
            {
                _Server.ReceiveHttps(this, ClientFirstDataPacket0, ClientFirstDataPacket0.Length);
            }
            else if (buffer[0x00] == 23)   // application data

            {
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Sends the buffer of a packet object.
 /// </summary>
 public void Send(PacketWriter p, RecordAfterWrite writeBack = null)
 {
     if (!IsConnected)
     {
         p.OnSend();
         return;
     }
     byte[] buffer = p.Compile(this);
     if (buffer != null)
     {
         if (buffer.Length <= 0)
         {
             p.OnSend();
             return;
         }
         Send(buffer, buffer.Length, writeBack);
         p.OnSend();
     }
     else
     {
         Kernel.WriteLine(TypeName, $"{this} sent null packet, disconnecting.");
         Dispose();
     }
 }
Ejemplo n.º 4
0
 public void Send(PacketWriter p, RecordAfterWrite writeBack = null)
 {
     byte[] buffer = p.Compile(this);
     Send(buffer, buffer.Length, writeBack);
 }
Ejemplo n.º 5
0
 public abstract void Send(byte[] buffer, int length, RecordAfterWrite writeBack = null);