Example #1
0
 internal static void LoadWebSocketMessagesFromStream(Session oS, Stream strmWSMessages)
 {
     try
     {
         WebSocket socket = new WebSocket(oS, null, null) {
             sName = string.Format("SAZ-Session#{0}", oS.id)
         };
         oS.__oTunnel = socket;
         socket.ReadWebSocketMessageListFromStream(strmWSMessages);
     }
     finally
     {
         strmWSMessages.Dispose();
     }
 }
Example #2
0
 private static WebSocketMessage[] _ParseMessagesFromStream(WebSocket wsOwner, ref MemoryStream strmData, bool bIsOutbound, bool bTrimAfterParsing)
 {
     List<WebSocketMessage> list = new List<WebSocketMessage>();
     strmData.Position = 0L;
     long position = 0L;
     while ((strmData.Length - strmData.Position) > 2L)
     {
         byte[] buffer = new byte[2];
         strmData.Read(buffer, 0, buffer.Length);
         ulong num2 = (ulong) (buffer[1] & 0x7f);
         if (num2 == 0x7eL)
         {
             if (strmData.Length < (strmData.Position + 2L))
             {
                 break;
             }
             byte[] buffer2 = new byte[2];
             strmData.Read(buffer2, 0, buffer2.Length);
             num2 = (ulong) ((buffer2[0] << 8) + buffer2[1]);
         }
         else if (num2 == 0x7fL)
         {
             if (strmData.Length < (strmData.Position + 8L))
             {
                 break;
             }
             byte[] buffer3 = new byte[8];
             strmData.Read(buffer3, 0, buffer3.Length);
             num2 = (ulong) ((((((((buffer3[0] << 0x18) + (buffer3[1] << 0x10)) + (buffer3[2] << 8)) + buffer3[3]) + (buffer3[4] << 0x18)) + (buffer3[5] << 0x10)) + (buffer3[6] << 8)) + buffer3[7]);
         }
         bool flag = 0x80 == (buffer[1] & 0x80);
         if (strmData.Length < (( strmData.Position + (long)num2) + (flag ?  4L : 0L))
     )                {
             break;
         }
         WebSocketMessage item = new WebSocketMessage(wsOwner, Interlocked.Increment(ref wsOwner._iMsgCount), bIsOutbound);
         item.AssignHeader(buffer[0]);
         if (flag)
         {
             byte[] buffer4 = new byte[4];
             strmData.Read(buffer4, 0, buffer4.Length);
             item.MaskingKey = buffer4;
         }
         byte[] buffer5 = new byte[num2];
         strmData.Read(buffer5, 0, buffer5.Length);
         item.PayloadData = buffer5;
         list.Add(item);
         position = strmData.Position;
     }
     strmData.Position = position;
     if (bTrimAfterParsing)
     {
         byte[] buffer6 = new byte[strmData.Length - position];
         strmData.Read(buffer6, 0, buffer6.Length);
         strmData.Dispose();
         strmData = new MemoryStream();
         strmData.Write(buffer6, 0, buffer6.Length);
     }
     return list.ToArray();
 }
Example #3
0
 internal static void CreateTunnel(Session oSession)
 {
     if ((((oSession != null) && (oSession.oRequest != null)) && ((oSession.oRequest.headers != null) && (oSession.oRequest.pipeClient != null))) && ((oSession.oResponse != null) && (oSession.oResponse.pipeServer != null)))
     {
         ClientPipe pipeClient = oSession.oRequest.pipeClient;
         oSession.oRequest.pipeClient = null;
         ServerPipe pipeServer = oSession.oResponse.pipeServer;
         oSession.oResponse.pipeServer = null;
         WebSocket socket = new WebSocket(oSession, pipeClient, pipeServer);
         oSession.__oTunnel = socket;
         new Thread(new ThreadStart(socket.RunTunnel)) { IsBackground = true }.Start();
     }
 }