public async Task <XDocument> Transmit(XDataMessageRequest x) { try { Status = CommStatus.CONNECTED; if (_session == null) { await getSocksConnection(); } var msgOut = new Message(); var encryptedCompressedMsgOut = new EncryptMessageOutput(new CompressMessageOutput(msgOut)) { MsgIn = x.ToString() }; await encryptedCompressedMsgOut.process(); var Socket = new AsynchronousSocketClient() { ServerIP = IP, ServerPort = Port }; var _result = await Socket.AsyncConversation(encryptedCompressedMsgOut.MsgOut); if (_result == "" || _result.Substring(0, 5) == "ERROR") { throw new Exception(_result); } var msgIn = new Message(); var decryptedUncompressedMsgIn = new DecryptMessageInput(new DecompressMessageInput(msgIn)) { MsgIn = _result }; await decryptedUncompressedMsgIn.process(); //Thread.Sleep(2000); //var m = new TransmitEntcryptedCompressedMessage() { ServerIP = IP, Port = Port }; //m.MsgIn = x.ToString(); //await m.process(); //var _res= XDocument.Parse(m.MsgOut); var _res = XDocument.Parse(decryptedUncompressedMsgIn.MsgOut); Status = CommStatus.OFFLINE; return(_res); } catch (Exception e) { Console.WriteLine(e.Message); Status = CommStatus.ERROR; throw e; } }
public async Task getSocksConnection() { IPServerList.Clear(); Status = CommStatus.TRYCONNECT; List <string> serverList = new List <string>() { "val-tel1.espackeuro.com", "val-nwckkdjtjv.dynamic-m.com", "liv-bkrgrgvmjv.dynamic-m.com", "gra-bghgwkwqjv-1.dynamic-m.com", "nit-cwcgtdrrjv-1.dynamic-m.com" }; foreach (var server in serverList) { try { IPServerList.Add((await Dns.GetHostAddressesAsync(server))[0]); } catch { } } ; if (IPServerList.Count == 0) { #if DEBUG IPServerList.Add(IPAddress.Parse("10.200.90.19")); #else IPServerList.Add(IPAddress.Parse("213.0.111.218")); IPServerList.Add(IPAddress.Parse("46.24.173.2")); IPServerList.Add(IPAddress.Parse("81.150.8.34")); IPServerList.Add(IPAddress.Parse("81.12.170.94")); #endif } _session = ""; var _message = new XDataMessageRequest(); _message.SetActionDefinition("Start Session"); _message.SetActionData(new XElement("data", Serial)); _message.SetSession(""); XDocument _msgOut = new XDocument(); Port = 17011; string _ip = ""; string _messages = ""; foreach (var _IP in IPServerList) { _ip = $"{_ip}-{_IP.ToString()}"; IP = _IP; try { _msgOut = await Transmit(_message); break; } catch (Exception ex) { _messages = $"{_messages}-{ex.Message}"; } } //first phase, get the destination external IP to connect //create the xml message with the session information var _result = _msgOut.Root; if (_result == null || _result.Value.Substring(0, 5) == "ERROR") { _session = null; throw new Exception(_result?.Value ?? $"Cannot connect to any server. Last IP {_ip}, messages received: {_messages}"); } else { var _parameters = _result.Element("parameters").Elements("parameter"); string _sIP = (from _par in _parameters where _par.Element("Name").Value.ToString() == "@ExternalIP" select _par.Element("Value").Value).First(); #if DEBUG //_sIP = "10.200.90.19";//"46.24.173.2"; #endif var _COD3 = (from _par in _parameters where _par.Element("Name").Value.ToString() == "@COD3" select _par.Element("Value").Value).First(); _session = (from _par in _parameters where _par.Element("Name").Value.ToString() == "@SessionNumber" select _par.Element("Value").Value).First(); IP = IPAddress.Parse(_sIP); } }