Ejemplo n.º 1
0
 public Token PacketToToken(WebSocketRawPacket packet)
 {
     return _tokenProcessor.PacketToToken(packet);
 }
        public static WebSocketPacket protocolToRawPacket(Stream aIS)
        {
            int lFlags = aIS.ReadByte();

            if (lFlags == -1)
            {
                return(null);
            }

            byte[] lBuff = new byte[0];

            bool lFragmented = false;

            if ((lFlags & 0x80) == 0x00)
            {
                lFragmented = true;
            }

            bool lMasked = true;

            int[] lMask = new int[4];

            int lOpcode = lFlags & 0x0F;

            WebSocketFrameType lFrameType = (WebSocketFrameType)lOpcode;

            if (lFrameType.Equals(WebSocketFrameType.INVALID))
            {
                throw new WebSocketException("Invalid frame type");
            }
            else
            {
                long lPayloadLen = Read(aIS);

                lMasked      = (lPayloadLen & 0x80) == 0x80;
                lPayloadLen &= 0x7F;

                if (lPayloadLen == 126)
                {
                    lPayloadLen = Read(aIS) & 0xFF;
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                }
                else if (lPayloadLen == 127)
                {
                    lPayloadLen = Read(aIS) & 0xFF;
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                }

                if (lMasked)
                {
                    lMask[0] = Read(aIS) & 0xFF;
                    lMask[1] = Read(aIS) & 0xFF;
                    lMask[2] = Read(aIS) & 0xFF;
                    lMask[3] = Read(aIS) & 0xFF;
                }

                if (lPayloadLen > 0)
                {
                    if (lMasked)
                    {
                        int j = 0;
                        while (lPayloadLen-- > 0)
                        {
                            WriteByte(ref lBuff, Convert.ToByte(Read(aIS) ^ lMask[j]));
                            j++;
                            j &= 3;
                        }
                    }
                    else
                    {
                        while (lPayloadLen-- > 0)
                        {
                            WriteByte(ref lBuff, (byte)Read(aIS));
                        }
                    }
                }
            }
            WebSocketPacket lRes = new WebSocketRawPacket(lFrameType, lBuff);

            return(lRes);
        }
        public static WebSocketPacket protocolToRawPacket(Stream aIS)
        {
            int lFlags = aIS.ReadByte();
            if (lFlags == -1)
                return null;

            byte[] lBuff = new byte[0];

            bool lFragmented = false;

            if ((lFlags & 0x80) == 0x00)
                lFragmented = true;

            bool lMasked = true;
            int[] lMask = new int[4];

            int lOpcode = lFlags & 0x0F;

            WebSocketFrameType lFrameType = (WebSocketFrameType)lOpcode;

            if (lFrameType.Equals(WebSocketFrameType.INVALID))
            {
                throw new WebSocketException("Invalid frame type");
            }
            else
            {
                long lPayloadLen = Read(aIS);

                lMasked = (lPayloadLen & 0x80) == 0x80;
                lPayloadLen &= 0x7F;

                if (lPayloadLen == 126)
                {
                    lPayloadLen = Read(aIS) & 0xFF;
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                }
                else if (lPayloadLen == 127)
                {

                    lPayloadLen = Read(aIS) & 0xFF;
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                    lPayloadLen = (lPayloadLen << 8) ^ (Read(aIS) & 0xFF);
                }

                if (lMasked)
                {
                    lMask[0] = Read(aIS) & 0xFF;
                    lMask[1] = Read(aIS) & 0xFF;
                    lMask[2] = Read(aIS) & 0xFF;
                    lMask[3] = Read(aIS) & 0xFF;
                }

                if (lPayloadLen > 0)
                {
                    if (lMasked)
                    {
                        int j = 0;
                        while (lPayloadLen-- > 0)
                        {
                            WriteByte(ref lBuff, Convert.ToByte(Read(aIS) ^ lMask[j]));
                            j++;
                            j &= 3;
                        }
                    }
                    else
                    {
                        while (lPayloadLen-- > 0)
                        {
                            WriteByte(ref lBuff, (byte)Read(aIS));
                        }
                    }
                }
            }
            WebSocketPacket lRes = new WebSocketRawPacket(lFrameType, lBuff);
            return lRes;
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Disconnects the client from server.
 /// </summary>
 public void Close()
 {
     WebSocketPacket pingPacket = new WebSocketRawPacket(WebSocketFrameType.CLOSE, "Bye");
     pingPacket.SetEndFrame(true);
     SendInternal(WebSocketProtocolAbstraction.RawToProtocolPacket(pingPacket));
 }
Ejemplo n.º 5
0
 private void SendPacketText(string aUTF8String, int aFragmentSize)
 {
     WebSocketPacket lPacket = new WebSocketRawPacket(WebSocketFrameType.TEXT, aUTF8String);
     lPacket.SetEndFrame(true);
     SendInternal(WebSocketProtocolAbstraction.RawToProtocolPacket(lPacket));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Pings the server.
 /// </summary>
 public void Ping()
 {
     WebSocketPacket pingPacket = new WebSocketRawPacket(WebSocketFrameType.PING, "Hello");
     pingPacket.SetEndFrame(true);
     SendInternal(WebSocketProtocolAbstraction.RawToProtocolPacket(pingPacket));
 }