[C#] Proxy Client Crash

07/11/2013 16:00 tarekwiz#1
hello , my name is Tarek and im new to Silkroad Programming
I made a simple proxy (Silkroad Security API with some of my code and some of SRProxy API)
what i basically did is I Made a proxy between me and sever and then i passed Packets
What i need help with is whenever i login and choose char i get crash
i have tried many things but never worked here is my code , Hope anybody could tell my why i get this random crash
Oh and i found out that the last packet OPCode was 0x2114
PHP Code:
        const byte SRLocal 18//18=iSRO,40=rSRO
        
const int SRVersion 416;         

        private static 
bool mClientConnected;
        public static 
bool ClientConnected
        
{
            
get { return mClientConnected; }
        }

        private static 
ushort mLocalPort;
        private static 
string mGatewayIP;

        private static 
Client mClientSocket;
        private static 
Server mGatewaySocket;
        private static 
Server mAgentSocket;
        private static 
string agentServerIP;
        private static 
ushort agentServerPort;
        private static 
bool doAgentServerConnect;
        private static 
bool isConnectedToAgentServer;

        public static 
void Start(ushort localPortstring gatewayIP)
        {
            
//Store parameters
            
mLocalPort localPort;
            
mGatewayIP gatewayIP;

            
//Create ClientSocket instance and link the Events
            
mClientSocket = new Client();
            
mClientSocket.Connected += new Client.ConnectedEventHandler(ClientSocket_Connected);
            
mClientSocket.Disconnected += new Client.DisconnectedEventHandler(ClientSocket_Disconnected);
            
mClientSocket.PacketReceived += new Client.PacketReceivedEventHandler(ClientSocket_PacketReceived);

            
//Listen for Client        
            
mClientSocket.Listen(localPort);

            
//Create GatewayServer instance and link the Events
            
mGatewaySocket = new Server();
            
mGatewaySocket.Connected += new Server.ConnectedEventHandler(GatewaySocket_Connected);
            
mGatewaySocket.Disconnected += new Server.DisconnectedEventHandler(GatewaySocket_Disconnected);
            
mGatewaySocket.Kicked += new Server.KickedEventHandler(GatewaySocket_Kicked);
            
mGatewaySocket.PacketReceived += new Server.PacketReceivedEventHandler(GatewaySocket_PacketReceived);

            
//Create AgentSocket instance and link the Events
            
mAgentSocket = new Server();
            
mAgentSocket.Connected += new Server.ConnectedEventHandler(AgentSocket_Connected);
            
mAgentSocket.Disconnected += new Server.DisconnectedEventHandler(AgentSocket_Disconnected);
            
mAgentSocket.Kicked += new Server.KickedEventHandler(AgentSocket_Kicked);
            
mAgentSocket.PacketReceived += new Server.PacketReceivedEventHandler(AgentSocket_PacketReceived);
        }

        
#region ClientSocket EventHandlers

        
private static void ClientSocket_PacketReceived(Packet packet)
        {
            
Console.WriteLine("C->P:" packet.Opcode.ToString("X4"/*+ " Data:" + packet.ToString()*/);

            
//------>>> SEND TO LOGICAL PACKET HANDLER for ClientPackets
            //Bot.PacketHandler.HandleClientPacket(packet);

            
if (isConnectedToAgentServer)
            {
                if (
packet.Opcode == 0x6100)
                {
                    return;
                }
                else if (
packet.Opcode == 0xB007)
                {
                    
Login.HandleCharList(packet);
                }
                
mAgentSocket.Send(packet);
            }
            else
            {
                
mGatewaySocket.Send(packet);
            }
        }

        private static 
void ClientSocket_Disconnected()
        {
            
//Secures reconnect for Client
            
mClientConnected false;
            if (
isConnectedToAgentServer)
            {
                
isConnectedToAgentServer false;
                
doAgentServerConnect false;
                
mAgentSocket.Disconnect();
            }
            else
            {
                
mGatewaySocket.Disconnect();
            }
        }

        private static 
void ClientSocket_Connected()
        {
            
//Connects the Proxy to the right Server.
            
mClientConnected true;
            if (
doAgentServerConnect)
            {
                
mAgentSocket.Connect(agentServerIPagentServerPort);
                
mGatewaySocket.Disconnect();
            }
            else
            {
                
mGatewaySocket.Connect(mGatewayIP15779);
            }

        }

        
#endregion

        #region GatewaySocket EventHandlers

        /// <summary>
        /// Switches the Gatewayserver packets to the Client
        /// </summary>
        /// <param name="packet"></param>
        
private static void GatewaySocket_PacketReceived(Packet packet)
        {
            
Console.WriteLine("S->P:" packet.Opcode.ToString("X4") + " Data:" packet.ToString());

            
#region Client/Clientless Support

            //Clientless
            
if (!mClientConnected)
            {
                
//Request Patches
                
if (packet.Opcode == 0x2001)
                {
                    
//Generate the Patchverification
                    
Packet response = new Packet(0x6100true);
                    
response.WriteByte(SRLocal);
                    
response.WriteAscii("SR_Client"); //ServiceName
                    
response.WriteUInt(SRVersion);                  

                    
mGatewaySocket.Send(response);
                }

                
//Request the Serverlist.
                
if (packet.Opcode == 0xA100)
                {
                    
byte errorCode packet.ReadByte();
                    if (
errorCode == 1//Success
                    
{
                        
Packet response = new Packet(0x6101true);
                        
mGatewaySocket.Send(response);
                    }
                    else
                    {
                        
Console.WriteLine("There is an update or you are using an invalid silkroad version.");
                    }
                }
                
//Reconnect to AgentServer on successfull login.
                
if (packet.Opcode == 0xA102)
                {
                    
byte result packet.ReadByte();
                    if (
result == 1)
                    {
                        
uint sessionID packet.ReadUInt();
                        
agentServerIP packet.ReadAscii();
                        
agentServerPort packet.ReadUShort();
                        
//doAgentServerConnect = true;                        

                        
mGatewaySocket.Disconnect();
                        
mAgentSocket.Connect(agentServerIPagentServerPort);
                    }
                }
            }
            else 
//Client
            
{
                
//Redirect the Client
                
if (packet.Opcode == 0xA102)
                {
                    
byte result packet.ReadByte();
                    if (
result == 1)
                    {
                        
uint sessionID packet.ReadUInt();
                        
agentServerIP packet.ReadAscii();
                        
agentServerPort packet.ReadUShort();
                        
doAgentServerConnect true;

                        
//Create fake response for Client to redirect to localIP/localPort
                        
Packet response = new Packet(0xA102true);
                        
response.WriteByte(result);
                        
response.WriteUInt(sessionID);
                        
response.WriteAscii("127.0.0.1");
                        
response.WriteUShort(mLocalPort);
                        
                        
//Override the orginal packet with the fake.
                        
packet response;
                    }
                }
            }

            
#endregion

            //------>>> SEND TO LOGICAL PACKET HANDLER FOR GatewayPackets
            //Bot.PacketHandler.HandleGatewayPacket(packet);

            
mClientSocket.Send(packet);
        }

        private static 
void GatewaySocket_Kicked()
        {
            
Console.WriteLine("GatewaySocket_Kicked");
            
mGatewaySocket.Disconnect();
        }

        private static 
void GatewaySocket_Disconnected()
        {
            
Console.WriteLine("GatewaySocket_Disconnected");
        }

        private static 
void GatewaySocket_Connected(string ipushort port)
        {
            
Console.WriteLine("GatewaySocket connected to " ip ":" port);
        }

        
#endregion

        #region AgentSocket EventHandlers

        /// <summary>
        /// Switches the Agentserver packets to the Client
        /// </summary>
        /// <param name="packet"></param>
        
private static void AgentSocket_PacketReceived(Packet packet)
        {
            
Console.WriteLine("S->P:" packet.Opcode.ToString("X4"/*+ " Data:" + packet.ToString()*/);

            
mClientSocket.Send(packet);
        }

        private static 
void AgentSocket_Kicked()
        {
            
//When logging out.
            
isConnectedToAgentServer false;
            
doAgentServerConnect false;
            
mAgentSocket.Disconnect();
        }

        private static 
void AgentSocket_Disconnected()
        {
            
Console.WriteLine("AgentSocket_Disconnected");
        }

        private static 
void AgentSocket_Connected(string ipushort port)
        {
            
isConnectedToAgentServer true;
            
Console.WriteLine("AgentSocket connected to " ip ":" port);
        }

        
#endregion

        
public static void PerformClientless()
        {
            
mClientConnected false;
            
mGatewaySocket.Connect("212.24.57.34"15779);
        }
        public static 
void SendToServer(Packet packet)
        {
            
mGatewaySocket.Send(packet);
        } 
Thanks Indeed
07/19/2013 14:55 tarekwiz#2
Fixed
08/26/2013 13:48 egyviper#3
say how you did then
08/26/2013 19:17 tarekwiz#4
ill make a tutorial soon
11/12/2013 18:42 Skullsoil#5
good luck