Esempio n. 1
0
        public bool Parse(string header)
        {
            Regex regex = new Regex("\r\n");

            string[] headers = regex.Split(header);
            if (headers == null || headers.Length == 0)
            {
                return(false);
            }

            string curHead = "";

            for (int i = 0; i < headers.Length; i++)
            {
                curHead = headers[i];
                if (i == 0)
                {
                    string[] rs = curHead.Split(' ');
                    if (rs == null || rs.Length == 0)
                    {
                        return(false);
                    }
                    SetHeader(WebSocketHeader.Method, rs[0]);
                    if (rs.Length > 1)
                    {
                        SetHeader(WebSocketHeader.Url, rs[1]);
                    }
                    if (rs.Length > 2)
                    {
                        SetHeader(WebSocketHeader.HttpVersion, rs[2]);
                    }
                    continue;
                }

                string[] hf = curHead.Split(':');
                if (hf.Length == 2)
                {
                    WebSocketHeader h = WebSocketHeaderConverter.ConverterToHeader(hf[0]);
                    if (h != WebSocketHeader.Unknown)
                    {
                        SetHeader(h, hf[1].TrimStart(' '));
                    }
                }
            }
            logger.Info("接收到的WebSocket请求:\r\n{0}", header);
            return(true);
        }
Esempio n. 2
0
        public Byte[] GetResponseData(INetSession session)
        {
            StringBuilder sbCommand = new StringBuilder();

            sbCommand.Append(GetHeader(WebSocketHeader.HttpVersion)).Append(" ");
            sbCommand.Append(GetHeader(WebSocketHeader.HttpCode)).Append(" ");
            sbCommand.Append(GetHeader(WebSocketHeader.SwitchingProtocols));
            sbCommand.Append(headerWrap);

            sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.Upgrade));
            sbCommand.Append(": ");
            sbCommand.Append(GetHeader(WebSocketHeader.Upgrade));
            sbCommand.Append(headerWrap);

            sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.Connection));
            sbCommand.Append(": ");
            sbCommand.Append(GetHeader(WebSocketHeader.Connection));
            sbCommand.Append(headerWrap);

            sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.SecWebSocketAccept));
            sbCommand.Append(": ");
            sbCommand.Append(GetHeader(WebSocketHeader.SecWebSocketAccept));
            sbCommand.Append(headerWrap);
            WebSocketSessionBase s = session as WebSocketSessionBase;

            if (s != null && !String.IsNullOrEmpty(s.SubProtocol))
            {
                sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.SecWebSocketProtocol));
                sbCommand.Append(": ");
                sbCommand.Append(s.SubProtocol);
                sbCommand.Append(headerWrap);
            }
            sbCommand.Append(headerWrap);

            string response = sbCommand.ToString();

            Debug.WriteLine(response);
            logger.Info("CommandName:{0}\r\nResponseContent:{1}", Name, response);

            return(Encoding.GetBytes(response));
        }