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); }
public void CleanAsyncObject(UniNetObject uniObject) { var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs; connectionArgs.RemoteEndPoint = null; connectionArgs.AcceptSocket = null; }
public void DisposeAsyncObject(UniNetObject uniObject) { var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs; uniObject.innerObject = null; connectionArgs.Dispose(); }
public void DisposeAsyncObject(UniNetObject uniObject) { var connectionArgs = uniObject.innerObject as SslStream; uniObject.innerObject = null; connectionArgs.Dispose(); }
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); } }
public bool ReceiveAsync(UniNetObject uniObject) { var connectionArgs = uniObject.innerObject as SocketAsyncEventArgs; Socket socket = GetRawSocket(uniObject); return(socket.ReceiveFromAsync(connectionArgs)); }
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"); }
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); }
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); }
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); }
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)); }
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); } }
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)); }
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); }
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; }
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); }
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; }
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); } }
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); }
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); }
//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); } }
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; } }
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; }
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; } }
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); }
public void SetBuffer(UniNetObject uniObject, byte[] buf, int a, int b) { var Args = uniObject.innerObject as SocketAsyncEventArgs; Args.SetBuffer(buf, a, b); }
public void CleanAsyncObject(UniNetObject uniObject) { DisposeAsyncObject(uniObject); }
public void AttachUniAsyncObject(object connectObject, UniNetObject uniObject) { var args = connectObject as SocketAsyncEventArgs; args.UserToken = uniObject; }
virtual public void Accepted(UniNetObject connection, out NetCore.Error.NetCoreException err) { err = null; }
override public object Connected(UniNetObject connection, out KLib.NetCore.Error.NetCoreException err) { connection.Write(Encoding.ASCII.GetBytes(data), out err); return(null); }