public static void Enqueue(LowLevelNetworkStream stream, int approxByteCount) { lock (_notiQueues) { _notiQueues.Enqueue(new RaiseRecvQueueItem(stream, approxByteCount)); RunClearingThread(); Monitor.Pulse(_notiQueues); } }
public SecureSockNetworkStream(LowLevelNetworkStream socketNetworkStream, System.Security.Cryptography.X509Certificates.X509Certificate2 cert, System.Net.Security.RemoteCertificateValidationCallback remoteCertValidationCb = null) { _sslStream = new SslStream(socketNetworkStream, true, remoteCertValidationCb, null); _cert = cert; _lowLevelStreamForSSL = socketNetworkStream; _lowLevelStreamForSSL.SetRecvCompleteEventHandler(LowLevelForSSL_RecvCompleted); _lowLevelStreamForSSL.SetSendCompleteEventHandler(LowLevelForSSL_SendCompleted); _readableRecvBuffer = new ReadableRecvBuffer(); }
public void Connect(string url, System.Security.Cryptography.X509Certificates.X509Certificate2 cert) { var secureWsConn = new SecureWebSocketConn(true); secureWsConn.Compression = this.Compression; secureWsConn.SetMessageHandler(_websocketHandler); _wbsocketConn = secureWsConn; //TODO: review buffer management here*** byte[] buffer1 = new byte[2048]; byte[] buffer2 = new byte[2048]; IOBuffer recvBuffer = new IOBuffer(buffer1, 0, buffer1.Length); IOBuffer sendBuffer = new IOBuffer(buffer2, 0, buffer2.Length); var sockNetworkStream = new LowLevelNetworkStream(recvBuffer, sendBuffer); var secureStream = new SecureSockNetworkStream(sockNetworkStream, cert, delegate { return(true); }); //*** Uri uri = new Uri(url); InitClientSocket(uri); sockNetworkStream.Bind(_clientSocket); _clientSocket.Connect(_hostIP, uri.Port); bool _passConn = false; secureStream.AuthenAsClient(uri.Host, () => { //-------------- StringBuilder stbuilder = CreateWebSocketUpgradeReq(uri.AbsolutePath, uri.AbsolutePath + ":" + uri.Port, secureWsConn.Compression); byte[] dataToSend = Encoding.ASCII.GetBytes(stbuilder.ToString()); //int totalCount = dataToSend.Length; //int sendByteCount = _clientSocket.Send(dataToSend); secureWsConn.Bind(secureStream, dataToSend); _passConn = true; }); //------------ //wait System.Threading.Thread.SpinWait(10); while (!_passConn) { System.Threading.Thread.Sleep(2); } }
public RaiseRecvQueueItem(LowLevelNetworkStream s, int approxByteCount) { _s = s; _approxByteCount = approxByteCount; s.IsInRecvNotiQueue = true; }