示例#1
0
        private void VerifyS2CResponse(byte[] handshakeResponse)
        {
            var handshakeResponseString = WebSocketConvert.BytesToString(handshakeResponse, WebSocketTypeEncoding.UTF8);
            var responseFields          = new Dictionary <string, string>();
            var headers           = handshakeResponseString.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            var firstlineResponse = headers[0];

            foreach (var headerLine in headers.Skip(1))
            {
                var headerKeyValue = headerLine.Split(new[] { ":" }, StringSplitOptions.None);
                responseFields.Add(headerKeyValue[0].Trim(), headerKeyValue[1].Trim());
            }
            if (!firstlineResponse.Equals("HTTP/1.1 101 Switching Protocols"))
            {
                throw new WebSocketException("connection failed: missing header field in server handshake: HTTP/1.1");
            }
            if (!responseFields[WebSocketConstants.UPGRADE].Equals("websocket"))
            {
                throw new WebSocketException("connection failed: missing header field in server handshake: Upgrade");
            }
            if (!responseFields[WebSocketConstants.CONNECTION].Equals("Upgrade"))
            {
                throw new WebSocketException("connection failed: missing header field in server handshake: Connection");
            }
            if (!responseFields[WebSocketConstants.SEC_WEBSOCKET_ACCEPT].Equals(_expectedHybiResponseKey))
            {
                throw new WebSocketException("connection failed: missing header field in server handshake: Sec-WebSocket-Key");
            }
            if (!responseFields[WebSocketConstants.SEC_WEBSOCKET_PROTOCOL].Equals(_protocol))
            {
                throw new WebSocketException("connection failed: missing header field in server handshake: Sec-WebSocket-Protocol");
            }
        }
示例#2
0
        public Token PacketToToken(WebSocketPacket aPacket)
        {
            var byteArray       = aPacket.GetByteArray();
            var packetString    = WebSocketConvert.BytesToString(byteArray, WebSocketTypeEncoding.UTF8);
            var dictionary      = JsonConvert.DeserializeObject <Dictionary <string, object> >(packetString);
            var dictionaryToken = new DictionaryToken();

            dictionaryToken.SetDictionary(dictionary);
            return(dictionaryToken);
        }
示例#3
0
        /// <summary>
        /// Reads the response from stream.
        /// </summary>
        /// <param name="aSR">Data stream from server.</param>
        public void ReadResponseFromStream(NetworkStream aSR)
        {
            if (mLog.IsDebugEnabled)
            {
                mLog.Debug(WebSocketMessage.READING_RESPONSE_FROM_STREAM);
            }

            bool lHeaderComplete = false;
            int  lRT             = -1;
            int  lNL             = -1;
            int  lLines          = 0;

            byte[] lBuff = new byte[0];

            while (!lHeaderComplete)
            {
                lRT = lNL;
                lNL = Read(aSR);

                if (lRT.Equals(0x0D) && lNL.Equals(0x0A))
                {
                    string lLine = WebSocketConvert.BytesToString(lBuff, WebSocketTypeEncoding.UTF8);
                    if (lLines > 0)
                    {
                        if (!string.Empty.Equals(lLine))
                        {
                            char[]   c       = { WebSocketMessage.TWO_POINT2 };
                            string[] lKeyVal = lLine.Split(c, 2);
                            if (lKeyVal[0].Equals(WebSocketMessage.SET_COOKIE))
                            {
                                mCookies.Add(lLine);
                            }
                            else
                            {
                                mResponseFields.Add(lKeyVal[0].Trim(), lKeyVal[1].Trim());
                            }
                        }
                        else
                        {
                            lHeaderComplete = true;
                        }
                    }
                    else
                    {
                        mFirstLineResponse = lLine;
                    }
                    lLines++;
                    lBuff = new byte[0];
                }
                else if (!lNL.Equals(0x0A) && !lNL.Equals(0x0D))
                {
                    Write(ref lBuff, lNL);
                }
            }
        }
示例#4
0
 public string GetASCII()
 {
     try
     {
         return(WebSocketConvert.BytesToString(mByteArray, WebSocketTypeEncoding.ASCII));
     }
     catch (Exception)
     {
         return(null);
     }
 }
示例#5
0
        /// <summary>
        /// Reads the request from buffer.
        /// </summary>
        /// <param name="aBuff">Data buffer from client.</param>
        public void ReadRequestFromBuffer(byte[] aBuff)
        {
            if (mLog.IsDebugEnabled)
            {
                mLog.Debug(WebSocketMessage.READING_REQUEST_FROM_BUFFER);
            }

            int lHeaderComplete = 0;
            int lLines          = 0;
            int lSizeBuff       = aBuff.Length - 2;

            byte lRT = 0;
            byte lNL = 0;

            byte[] lBuff = new byte[0];

            while (lHeaderComplete < lSizeBuff)
            {
                lRT = lNL;
                lNL = aBuff[lHeaderComplete];
                if (lRT.Equals(0x0D) && lNL.Equals(0x0A))
                {
                    string lLine = WebSocketConvert.BytesToString(lBuff, WebSocketTypeEncoding.UTF8);
                    if (lLines > 0)
                    {
                        char[]   c       = { WebSocketMessage.TWO_POINT2 };
                        string[] lKeyVal = lLine.Split(c, 2);
                        if (lKeyVal.Length == 2)
                        {
                            mRequestFields.Add(lKeyVal[0].Trim(), lKeyVal[1].Trim());
                        }
                    }
                    else
                    {
                        mFirstLineRequest = lLine;
                    }
                    lBuff = new byte[0];
                    lLines++;
                }
                else if (!lNL.Equals(0x0A) && !lNL.Equals(0x0D))
                {
                    Write(ref lBuff, lNL);
                }
                lHeaderComplete++;
            }
        }
示例#6
0
 public string GetString(WebSocketTypeEncoding aEncoding)
 {
     return(WebSocketConvert.BytesToString(mByteArray, aEncoding));
 }
示例#7
0
 public string GetString()
 {
     return(WebSocketConvert.BytesToString(mByteArray, WebSocketTypeEncoding.Default));
 }