1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using SuperSocket.SocketBase.Protocol;
- namespace SuperWebSocket.Protocol
- {
- /// <summary>
- /// http://tools.ietf.org/html/rfc6455#section-4.4
- /// </summary>
- class MultipleProtocolSwitchProcessor : IProtocolProcessor
- {
- private byte[] m_SwitchResponse;
- public MultipleProtocolSwitchProcessor(int[] availableVersions)
- {
- var responseBuilder = new StringBuilder();
- responseBuilder.AppendWithCrCf("HTTP/1.1 400 Bad Request");
- responseBuilder.AppendWithCrCf("Upgrade: WebSocket");
- responseBuilder.AppendWithCrCf("Connection: Upgrade");
- responseBuilder.AppendWithCrCf("Sec-WebSocket-Version: " + string.Join(", ", availableVersions.Select(i => i.ToString()).ToArray()));
- responseBuilder.AppendWithCrCf();
- m_SwitchResponse = Encoding.UTF8.GetBytes(responseBuilder.ToString());
- }
- public bool CanSendBinaryData { get { return false; } }
- public ICloseStatusCode CloseStatusClode { get; set; }
- public IProtocolProcessor NextProcessor { get; set; }
- public bool Handshake(IWebSocketSession session, WebSocketReceiveFilterBase previousReader, out IReceiveFilter<IWebSocketFragment> dataFrameReader)
- {
- dataFrameReader = null;
- session.SendRawData(m_SwitchResponse, 0, m_SwitchResponse.Length);
- return true;
- }
- public void SendMessage(IWebSocketSession session, string message)
- {
- throw new NotImplementedException();
- }
- public void SendData(IWebSocketSession session, byte[] data, int offset, int length)
- {
- throw new NotImplementedException();
- }
- public void SendCloseHandshake(IWebSocketSession session, int statusCode, string closeReason)
- {
- throw new NotImplementedException();
- }
- public void SendPong(IWebSocketSession session, byte[] pong)
- {
- throw new NotImplementedException();
- }
- public void SendPing(IWebSocketSession session, byte[] ping)
- {
- throw new NotImplementedException();
- }
- public int Version
- {
- get { return 0; }
- }
- public bool IsValidCloseCode(int code)
- {
- throw new NotImplementedException();
- }
- public bool TrySendMessage(IWebSocketSession session, string message)
- {
- throw new NotImplementedException();
- }
- public bool TrySendData(IWebSocketSession session, byte[] data, int offset, int length)
- {
- throw new NotImplementedException();
- }
- public IList<ArraySegment<byte>> GetEncodedPackage(int opCode, byte[] data, int offset, int length)
- {
- throw new NotImplementedException();
- }
- public IList<ArraySegment<byte>> GetEncodedPackage(int opCode, string message)
- {
- throw new NotImplementedException();
- }
- }
- }
|