#region Dead Code /* We are inspecting the first few Client and Server Messages so that we can extract the username and determine if the users authentication with the microproxy was good or failed the inspection of messages is turned off afterwards */ //_clientDecompressor.inflateInit(); //_serverDecompressor.inflateInit(); //private bool _authorized; //private ZStream _clientDecompressor = new ZStream(); //private ZStream _serverDecompressor = new ZStream(); //private int _messageCounter = 0; //private Semaphore _resourceManager = new Semaphore(1, 1); //private StringBuilder _clientMessage = new StringBuilder(); //private bool _inspectClientMessages = true; //private bool _inspectServerMessages = true; //private bool _binaryMode = false; //private void InflateClientMessage(byte[] read, int count) //{ // try // { // _clientDecompressor.next_in = read; // _clientDecompressor.next_in_index = 0; // _clientDecompressor.avail_in = count; // if (_clientDecompressor.next_out == null) // { // _clientDecompressor.next_out = new byte[1024]; // _clientDecompressor.avail_out = _clientDecompressor.next_out.Length; // } // bool outputBufferFull = false; // bool error = false; // int step = 0; // while (((_clientDecompressor.avail_in > 0) || outputBufferFull) && !error) // { // if (_clientDecompressor.avail_out < 100) // { // _clientDecompressor.avail_out += _clientDecompressor.next_out.Length; // Array.Resize(ref _clientDecompressor.next_out, _clientDecompressor.next_out.Length * 2); // } // int result = _clientDecompressor.inflate(zlibConst.Z_SYNC_FLUSH); // if (!((result == zlibConst.Z_OK) || (outputBufferFull && (result == zlibConst.Z_BUF_ERROR)))) // error = true; // else // { // int consumed = 0; // while (true) // { // if (_clientDecompressor.next_out_index - consumed < 4) break; // int size = UnmarshalInt(_clientDecompressor.next_out, consumed); // int totalSize = size + 4; // if (size == 0) // { // //Debug.WriteLine(_clientMessage.ToString()); // step = 0; // HandleClientMessage(_clientMessage.ToString()); // _clientMessage.Clear(); // } // else // { // if (_clientDecompressor.next_out_index - consumed < totalSize) break; // byte[] body = new byte[size]; // Array.Copy(_clientDecompressor.next_out, consumed + 4, body, 0, size); // _clientMessage.Append(Encoding.UTF8.GetString(body)); // if (step % 2 == 0) // _clientMessage.Append("="); // else // _clientMessage.Append("&"); // step++; // } // consumed += totalSize; // } // if (consumed > 0) // { // Array.Copy(_clientDecompressor.next_out, consumed, _clientDecompressor.next_out, 0, _clientDecompressor.next_out_index - consumed); // _clientDecompressor.next_out_index -= consumed; // _clientDecompressor.avail_out += consumed; // } // } // } // if (error) // { // _inspectClientMessages = false; // _logger.LogError($"{_userName}: ClientInflate Error {Environment.NewLine}Client Message:{_clientMessage.ToString()}{Environment.NewLine}Raw Message:{Encoding.UTF8.GetString(read, 0, count)}"); // } // } // catch (Exception ex) // { // _logger.LogError(ex, $"{_userName}: {ex.Message}"); // } //} //private void InflateServerMessage(byte[] read, int count) //{ // try // { // _serverDecompressor.next_in = read; // _serverDecompressor.next_in_index = 0; // _serverDecompressor.avail_in = count; // if (_serverDecompressor.next_out == null) // { // _serverDecompressor.next_out = new byte[1024]; // _serverDecompressor.avail_out = _serverDecompressor.next_out.Length; // } // bool outputBufferFull = false; // bool error = false; // while (((_serverDecompressor.avail_in > 0) || outputBufferFull) && !error) // { // if (_serverDecompressor.avail_out < 100) // { // _serverDecompressor.avail_out += _serverDecompressor.next_out.Length; // Array.Resize(ref _serverDecompressor.next_out, _serverDecompressor.next_out.Length * 2); // } // int result = _serverDecompressor.inflate(zlibConst.Z_SYNC_FLUSH); // if (!((result == zlibConst.Z_OK) || (outputBufferFull && (result == zlibConst.Z_BUF_ERROR)))) // error = true; // else // { // int consumed = 0; // while (true) // { // if (_serverDecompressor.next_out_index - consumed < 12) break; // Int64 id = UnmarshalInt64(_serverDecompressor.next_out, consumed); // int size = UnmarshalInt(_serverDecompressor.next_out, consumed + 8); // int totalSize = size + 12; // if (_serverDecompressor.next_out_index - consumed < totalSize) break; // byte[] body = new byte[size]; // Array.Copy(_serverDecompressor.next_out, consumed + 12, body, 0, size); // HandleServerMessage(Encoding.UTF8.GetString(body)); // consumed += totalSize; // } // if (consumed > 0) // { // Array.Copy(_serverDecompressor.next_out, consumed, _serverDecompressor.next_out, 0, _serverDecompressor.next_out_index - consumed); // _serverDecompressor.next_out_index -= consumed; // _serverDecompressor.avail_out += consumed; // } // } // } // if (error) // { // _inspectServerMessages = false; // _logger.LogError($"{_userName}: ServerInflate Error"); // } // } // catch (Exception ex) // { // _logger.LogError(ex, $"{_userName}: {ex.Message}"); // } //} //private static int UnmarshalInt(byte[] data, int start) //{ // int result = data[start]; // result += (data[start + 1]) << 8; // result += (data[start + 2]) << 16; // result += (data[start + 3]) << 24; // return result; //} //private static long UnmarshalInt64(byte[] data, int start) //{ // Int64 result = 0; // start += 7; // for (int i = 0; i < 8; i++) // { // result <<= 8; // result += data[start]; // start--; // } // return result; //} //private void HandleClientMessage(string clientMessage) //{ // try // { // _logger.LogWarning($"{_userName}: HandleClientMessage() - {clientMessage}"); // if (clientMessage.Contains("username")) // { // var parsedQuery = QueryHelpers.ParseQuery(clientMessage); // _userName = parsedQuery["username"]; // _inspectClientMessages = false; // } // } // catch (Exception ex) // { // _logger.LogError(ex, $"{_userName}: {ex.Message}"); // } //} //private void HandleServerMessage(string serverMessage) //{ // try // { // if (serverMessage.Contains("ACCOUNT_STATUS")) // { // //< API >< ACCOUNT_STATUS NEXT_PAYMENT = "1667199600" ODDSMAKER = "2147483647" STATE = "good" USER_ID = "15645842" />< MESSAGES_TO_USER read_count = "" requires_acknowledgement_count = "" unread_count = "" />< RESTART SEQUENCE = "6601" /> // if (_binaryMode) // { // var api = XmlDeserialize(serverMessage); // if (!_authorized && api.ACCOUNT_STATUS.STATE == "good") // { // _authorized = true; // _metricsMonitor.AddUser(_applicationId, _userName); // } // } // else //Text Mode // { // if (!_authorized && serverMessage.Contains("STATE=\"good\"")) // { // _authorized = true; // _metricsMonitor.AddUser(_applicationId, _userName); // } // } // _inspectServerMessages = false; // } // } // catch (Exception ex) // { // _logger.LogError(ex, $"{_userName}: {ex.Message}"); // } //} //private static T XmlDeserialize(string xml) //{ // XmlSerializer s1 = new XmlSerializer(typeof(T)); // using (TextReader sr = new StringReader(xml)) // { // return (T)s1.Deserialize(sr); // } //} //if (_inspectClientMessages) //{ //HandleClientMessage(message); //} //if (_messageCounter >= 2 && _inspectClientMessages) //{ ////OnBinaryMessage() is reentrant so we need to synchronize acccess //_resourceManager.WaitOne(-1); //InflateClientMessage(messageBytes, messageBytes.Length); //_resourceManager.Release(); //} //if (_binaryMode) //{ // if (_inspectServerMessages) // InflateServerMessage(read, count); // SendBytes(new ReadOnlySpan(read, 0, count).ToArray()); //} //else //{ // if (_inspectServerMessages) // { // HandleServerMessage(Encoding.UTF8.GetString(read, 0, count)); // } // SendText(Encoding.UTF8.GetString(read, 0, count)); //} #endregion