public GetData ( bool NetworkToHostOrder ) : byte[] | ||
NetworkToHostOrder | bool | |
return | byte[] |
public byte[] GetData(bool NetworkToHostOrder)
{
byte[] data;
var port = 0;
if(NetworkToHostOrder)
port = IPAddress.NetworkToHostOrder(Port);
else
port = IPAddress.HostToNetworkOrder((short)Port);
if (Type == AddressType.IP)
{
data = new byte[10];
string[] content = IP.ToString().Split('.');
for (int i = 4; i < content.Length + 4; i++)
data[i] = Convert.ToByte(Convert.ToInt32(content[i - 4]));
Buffer.BlockCopy(BitConverter.GetBytes(port), 0, data, 8, 2);
}
else if (Type == AddressType.Domain)
{
data = new byte[Address.Length + 7];
data[4] = Convert.ToByte(Address.Length);
Buffer.BlockCopy(Encoding.ASCII.GetBytes(Address), 0, data, 5, Address.Length);
Buffer.BlockCopy(BitConverter.GetBytes(port), 0, data, data.Length - 2, 2);
}
else return null;
data[0] = 0x05;
data[1] = (byte)Error;
data[2] = 0x00;
data[3] = (byte)Type;
return data;
}
public void Open() { if (ModifiedReq.Address == null || ModifiedReq.Port <= -1) { Client.Client.Disconnect(); return; } #if DEBUG Console.WriteLine("{0}:{1}", ModifiedReq.Address, ModifiedReq.Port); #endif foreach (ConnectSocketOverrideHandler conn in PluginLoader.LoadPlugin(typeof(ConnectSocketOverrideHandler))) { if (conn.Enabled) { Client pm = conn.OnConnectOverride(ModifiedReq); if (pm != null) { //check if it's connected. if (pm.Sock.Connected) { RemoteClient = pm; //send request right here. byte[] shit = Req.GetData(true); shit[1] = 0x00; //process packet. byte[] output = se.ProcessOutputData(shit, 0, shit.Length); //gucci let's go. Client.Client.Send(output); ConnectHandler(null); return; } } } } var socketArgs = new SocketAsyncEventArgs { RemoteEndPoint = new IPEndPoint(ModifiedReq.IP, ModifiedReq.Port) }; socketArgs.Completed += socketArgs_Completed; RemoteClient.Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); if (!RemoteClient.Sock.ConnectAsync(socketArgs)) { ConnectHandler(socketArgs); } }