Example #1
0
File: Http.cs Project: Skye347/KLib
        override public object Received(byte[] data, UniNetObject connection, out NetCore.Error.NetCoreException err, object Addition)
        {
            err = null;
            //log("id:" + (connection.stateObject as HTTPStateObject)?.request.id, INFO, "HTTP.Received");
            if (connection.CompleteTime != 0)
            {
                //log("time:" + connection.CompleteTime, INFO, "HTTP.Received");
            }
            var state = ProcessHTTPResponse(data, Addition as HTTPStateObject, out var nextRequest);

            if (nextRequest != null)
            {
                (state as HTTPStateObject).request = nextRequest;
                //log("send:" + nextRequest.Host, INFO, "HTTP.Received");
                connection.Write(nextRequest.ToByte(), out err);
            }
            else
            {
                if ((state as HTTPStateObject).complete == HTTPStateComplete.Closing)
                {
                    connection.Close();
                    err = new NetCore.Error.NetCoreException();
                }
            }
            return(state);
        }
Example #2
0
        public void CleanAsyncObject(UniNetObject uniObject)
        {
            var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;

            connectionArgs.RemoteEndPoint = null;
            connectionArgs.AcceptSocket   = null;
        }
Example #3
0
        public void DisposeAsyncObject(UniNetObject uniObject)
        {
            var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;

            uniObject.innerObject = null;
            connectionArgs.Dispose();
        }
Example #4
0
        public void DisposeAsyncObject(UniNetObject uniObject)
        {
            var connectionArgs = uniObject.innerObject as SslStream;

            uniObject.innerObject = null;
            connectionArgs.Dispose();
        }
Example #5
0
        public bool ReceiveAsync(UniNetObject uniObject)
        {
            var       connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;
            SslStream sslstrem       = GetRawStream(uniObject);
            var       task           = sslstrem.ReadAsync(uniObject.Buffer, 0, uniObject.Buffer.Length);

            if (task.IsCompleted)
            {
                return(false);
            }
            else
            {
                task.ContinueWith(t =>
                {
                    uniObject.BufferLength = task.Result;
                    if (uniObject.BufferLength == 0)
                    {
                        uniObject.ObjectError = NetCoreError.Disconnecting;
                    }
                    if (uniObject.ObjectError == NetCoreError.TimedOut)
                    {
                        return;
                    }
                    uniObject.FreeTimeout();
                    uniObject.IOCompletedMethod(uniObject);
                });
                return(true);
            }
        }
Example #6
0
        public bool ReceiveAsync(UniNetObject uniObject)
        {
            var    connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;
            Socket socket         = GetRawSocket(uniObject);

            return(socket.ReceiveFromAsync(connectionArgs));
        }
Example #7
0
File: Http.cs Project: Skye347/KLib
        public override void Timeout(UniNetObject connection, object Addition)
        {
            HTTPStateObject state = Addition as HTTPStateObject;

            log("id:" + state?.request.id, ERROR, "HTTP.Received");
            log("timeout:" + connection.CompleteTime, ERROR, "HTTP.Received");
            log("connection info:" + state?.Length, ERROR, "HTTP.Received");
        }
Example #8
0
        public UniNetObject StartListen(IPAddress ipAddress, int Port, UniNetObject uniObject)
        {
            Socket _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            _Socket.Bind(new IPEndPoint(ipAddress, Port));
            //_Socket.Listen(20);
            uniObject.stateObject = _Socket;
            return(uniObject);
        }
Example #9
0
        public UniNetObject GetAcceptedUniObject(UniNetObject AcceptObject, ref UniNetObject ClientObject)
        {
            var Args = AcceptObject.innerObject as SocketAsyncEventArgs;

            ClientObject.ConnectionType = 0x20;//async accept
            (ClientObject.innerObject as SocketAsyncEventArgs).AcceptSocket = Args.AcceptSocket;
            Args.AcceptSocket = null;
            return(ClientObject);
        }
Example #10
0
 override public object Received(byte[] data, UniNetObject connection, out KLib.NetCore.Error.NetCoreException err, object Addition = null)
 {
     if (displayReceive)
     {
         Log.log(Count.ToString() + ":" + Encoding.ASCII.GetString(data), Log.INFO, "EchoReceived");
     }
     Count++;
     connection.Write(data, out err);
     return(null);
 }
Example #11
0
        public bool AcceptAsync(UniNetObject ServerObject, UniNetObject uniObject)
        {
            uniObject.ConnectionType = 0x20;//async accept
            var socket = ServerObject.stateObject as Socket;
            var Args   = uniObject.innerObject as SocketAsyncEventArgs;

            Args.Completed += new EventHandler <SocketAsyncEventArgs>((object sender, SocketAsyncEventArgs args) =>
            {
                uniObject.ObjectError = (NetCoreError)(int)args.SocketError;
            });
            return(socket.AcceptAsync(Args));
        }
Example #12
0
File: Http.cs Project: Skye347/KLib
        public override void Aborted(UniNetObject connection, object Addition)
        {
            HTTPStateObject state = Addition as HTTPStateObject;

            if (state == null)
            {
                return;
            }
            if (state.request.Done == false)
            {
                HTTPOp.Request(state.request);
            }
        }
Example #13
0
        public bool ReceiveAsync(UniNetObject uniObject)
        {
            var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;

            if (connectionArgs == null)
            {
                uniObject.ObjectError = NetCoreError.Fault;
                return(false);
            }
            Socket socket = GetRawSocket(uniObject);

            return(socket.ReceiveAsync(connectionArgs));
        }
Example #14
0
        public UniNetObject GetAcceptedUniObject(UniNetObject AcceptObject, ref UniNetObject ClientObject)
        {
            var Args = AcceptObject.innerObject as SocketAsyncEventArgs;

            ClientObject.ConnectionType = 0x20;//async accept
            var AcceptSocket = Args.AcceptSocket;
            var SocketStream = new NetworkStream(AcceptSocket);
            var SslStream    = new SslStream(SocketStream);
            var AuthTask     = SslStream.AuthenticateAsServerAsync(ServerCert, false, SslProtocol, true);

            AuthTask.Wait();
            ClientObject.innerObject = SslStream;
            //(ClientObject.innerObject as SocketAsyncEventArgs).AcceptSocket = Args.AcceptSocket;
            Args.AcceptSocket = null;
            return(ClientObject);
        }
Example #15
0
        public void ConnectAsync(UniNetObject uniObject, IPAddress ipAddress, int Port)
        {
            Socket _Socket     = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var    connectArgs = uniObject.innerObject as SocketAsyncEventArgs;

            if (connectArgs == null)
            {
                return;
            }
            uniObject.ConnectionType   = 0x21;
            connectArgs.RemoteEndPoint = new IPEndPoint(ipAddress, Port);
            if (!_Socket.ConnectAsync(connectArgs))
            {
                uniObject.IOCompletedMethod(uniObject);
            }
            return;
        }
Example #16
0
        public UniNetObject GetAcceptedUniObject(UniNetObject AcceptObject, ref UniNetObject ClientObject)
        {
            var Args = AcceptObject.innerObject as SocketAsyncEventArgs;

            ClientObject.ConnectionType = 0x20;//async accept
            ClientObject.LastOperation  = UniNetOperation.Receive;
            var clientArgs = (ClientObject.innerObject as SocketAsyncEventArgs);

            ClientObject.SetRemoteEndPoint((IPEndPoint)Args.RemoteEndPoint);
            clientArgs.AcceptSocket   = Args.AcceptSocket;
            clientArgs.RemoteEndPoint = Args.RemoteEndPoint;
            if (Args.BytesTransferred != 0)
            {
                Array.Copy(Args.Buffer, ClientObject.Buffer, Args.BytesTransferred);
                ClientObject.BufferLength = Args.BytesTransferred;
            }
            return(ClientObject);
        }
Example #17
0
        public void ConnectAsync(UniNetObject uniObject, IPAddress ipAddress, int Port)
        {
            Socket _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            _Socket.Connect(new IPEndPoint(ipAddress, Port));
            var stream    = new NetworkStream(_Socket);
            var SslStream = new SslStream(stream, false,
                                          (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) =>
            {
                if (sslPolicyErrors == SslPolicyErrors.None)    //验证服务端证书验证是否有错误
                {
                    return(true);
                }
                return(false);
                //return true;
            },
                                          null
                                          );

            if (ClientCert == null)
            {
                var task = SslStream.AuthenticateAsClientAsync(GetTargetHost(ipAddress));
                task.Wait();
            }
            else
            {
                var task = SslStream.AuthenticateAsClientAsync(GetTargetHost(ipAddress), new X509Certificate2Collection(ClientCert), SslProtocol, false);
                task.Wait();
            }
            uniObject.innerObject = SslStream;
            //var connectArgs = uniObject.innerObject as SocketAsyncEventArgs;
            //if (connectArgs == null)
            //{
            //    return;
            //}
            uniObject.ConnectionType = 0x20;
            //connectArgs.RemoteEndPoint = new IPEndPoint(ipAddress, Port);
            //if (!_Socket.ConnectAsync(connectArgs))
            //{
            //    uniObject.IOCompletedMethod(uniObject);
            //}
            uniObject.IOCompletedMethod(uniObject);
            return;
        }
Example #18
0
 private Socket GetRawSocket(UniNetObject connection)
 {
     if (connection.ConnectionType == 0x20)
     {
         return((connection.innerObject as SocketAsyncEventArgs).AcceptSocket);
     }
     else if (connection.ConnectionType == 0x21)
     {
         return((connection.innerObject as SocketAsyncEventArgs).ConnectSocket);
     }
     else if (connection.ConnectionType == 0x10)
     {
         return(connection.innerObject as Socket);
     }
     else
     {
         return(null);
     }
 }
Example #19
0
        public byte[] Receive(UniNetObject uniObject, out NetCoreError err)
        {
            var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs;

            if (connectionArgs.SocketError != SocketError.Success)
            {
                err = NetCoreError.SocketError;
                return(null);
            }
            //if (connectionArgs.BytesTransferred == 0)
            //{
            //    err = NetCoreError.SocketError;
            //    return null;
            //}
            byte[] buffer = new byte[connectionArgs.BytesTransferred];
            Array.Copy(connectionArgs.Buffer, buffer, connectionArgs.BytesTransferred);
            err = NetCoreError.Success;
            return(buffer);
        }
Example #20
0
        public byte[] Receive(UniNetObject uniObject, out NetCoreError err)
        {
            var connectionArgs = uniObject.innerObject as SslStream;

            //if (connectionArgs.SocketError != SocketError.Success)
            //{
            //    err = NetCoreError.SocketError;
            //    return null;
            //}
            //if (connectionArgs.BytesTransferred == 0)
            //{
            //    err = NetCoreError.SocketError;
            //    return null;
            //}
            byte[] buffer = new byte[uniObject.BufferLength];
            Array.Copy(uniObject.Buffer, buffer, uniObject.BufferLength);
            err = NetCoreError.Success;
            return(buffer);
        }
Example #21
0
 //private Socket GetRawSocket(UniNetObject connection)
 //{
 //    if (connection.ConnectionType == 0x20)
 //    {
 //        return (connection.innerObject as SslStream).;
 //    }
 //    else if (connection.ConnectionType == 0x21)
 //    {
 //        return (connection.innerObject as SocketAsyncEventArgs).ConnectSocket;
 //    }
 //    else if (connection.ConnectionType == 0x10)
 //    {
 //        return (connection.innerObject as Socket);
 //    }
 //    else
 //    {
 //        return null;
 //    }
 //}
 private SslStream GetRawStream(UniNetObject connection)
 {
     if (connection.ConnectionType == 0x20)
     {
         return(connection.innerObject as SslStream);
     }
     //else if (connection.ConnectionType == 0x21)
     //{
     //    return (connection.innerObject as SocketAsyncEventArgs).ConnectSocket;
     //}
     //else if (connection.ConnectionType == 0x10)
     //{
     //    return (connection.innerObject as Socket);
     //}
     else
     {
         return(null);
     }
 }
Example #22
0
        public void Write(byte[] data, UniNetObject connection, out NetCoreException err)
        {
            Socket socket = GetRawSocket(connection);

            try
            {
                err = null;
                socket.SendTo(data, connection.ipEndPoint);
            }
            catch (SocketException e)
            {
                err = new NetCoreException();
                err.innerException = e;
            }
            catch (NullReferenceException nulle)
            {
                err = new NetCoreException();
                err.innerException = nulle;
            }
        }
Example #23
0
        public bool AcceptAsync(UniNetObject ServerObject, UniNetObject uniObject)
        {
            uniObject.ConnectionType = 0x20;//async accept
            uniObject.LastOperation  = UniNetOperation.Receive;
            IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);

            uniObject.SetRemoteEndPoint(remote);
            var socket = ServerObject.stateObject as Socket;
            var Args   = uniObject.innerObject as SocketAsyncEventArgs;

            Args.SetBuffer(new byte[2048], 0, 2048);
            Args.RemoteEndPoint = remote;
            Args.AcceptSocket   = socket;
            Args.Completed     += new EventHandler <SocketAsyncEventArgs>((object sender, SocketAsyncEventArgs args) =>
            {
                uniObject.ObjectError = (NetCoreError)(int)args.SocketError;
            });
            return(socket.ReceiveFromAsync(Args));
            //return false;
        }
Example #24
0
        public void Write(Byte[] data, UniNetObject connection, out NetCoreException err)
        {
            SslStream sslStream = GetRawStream(connection);

            try
            {
                err = null;
                sslStream.Write(data);
            }
            catch (SocketException e)
            {
                err = new NetCoreException();
                err.innerException = e;
            }
            catch (NullReferenceException nulle)
            {
                err = new NetCoreException();
                err.innerException = nulle;
            }
        }
Example #25
0
File: Http.cs Project: Skye347/KLib
        override public object Connected(UniNetObject connection, out NetCore.Error.NetCoreException err)
        {
            err = null;
            HTTPRequest request = null;

            if (ConnectedRequest != null)
            {
                request = ConnectedRequest;
                connection.Write(ConnectedRequest.ToByte(), out err);
                ConnectedRequest = null;
            }
            lock (newConnectLock)
            {
                Monitor.Pulse(newConnectLock);
            }
            var state = new HTTPStateObject()
            {
                request = request
            };

            return(state);
        }
Example #26
0
        public void SetBuffer(UniNetObject uniObject, byte[] buf, int a, int b)
        {
            var Args = uniObject.innerObject as SocketAsyncEventArgs;

            Args.SetBuffer(buf, a, b);
        }
Example #27
0
 public void CleanAsyncObject(UniNetObject uniObject)
 {
     DisposeAsyncObject(uniObject);
 }
Example #28
0
        public void AttachUniAsyncObject(object connectObject, UniNetObject uniObject)
        {
            var args = connectObject as SocketAsyncEventArgs;

            args.UserToken = uniObject;
        }
Example #29
0
 virtual public void Accepted(UniNetObject connection, out NetCore.Error.NetCoreException err)
 {
     err = null;
 }
Example #30
0
 override public object Connected(UniNetObject connection, out KLib.NetCore.Error.NetCoreException err)
 {
     connection.Write(Encoding.ASCII.GetBytes(data), out err);
     return(null);
 }