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"); } }
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); }
/// <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); } } }
public string GetASCII() { try { return(WebSocketConvert.BytesToString(mByteArray, WebSocketTypeEncoding.ASCII)); } catch (Exception) { return(null); } }
/// <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++; } }
public string GetString(WebSocketTypeEncoding aEncoding) { return(WebSocketConvert.BytesToString(mByteArray, aEncoding)); }
public string GetString() { return(WebSocketConvert.BytesToString(mByteArray, WebSocketTypeEncoding.Default)); }