{"id":19099509,"url":"https://github.com/dentrax/easyssa","last_synced_at":"2025-04-30T16:21:26.520Z","repository":{"id":103621191,"uuid":"89638604","full_name":"Dentrax/EasySSA","owner":"Dentrax","description":"An EASY and ADVANCED extention to handle TCP/IP Packets [SecurityApi]","archived":false,"fork":false,"pushed_at":"2018-12-31T12:46:01.000Z","size":873,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-19T05:15:44.966Z","etag":null,"topics":["emulator","packet-analyser","packet-capture","packet-parsing","packet-processing","packet-sniffer","packets","proxy-server","security-api","server-proxy","tcp-server"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dentrax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-27T20:41:01.000Z","updated_at":"2025-04-12T12:35:43.000Z","dependencies_parsed_at":"2023-05-24T00:16:00.740Z","dependency_job_id":null,"html_url":"https://github.com/Dentrax/EasySSA","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dentrax%2FEasySSA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dentrax%2FEasySSA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dentrax%2FEasySSA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dentrax%2FEasySSA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dentrax","download_url":"https://codeload.github.com/Dentrax/EasySSA/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251739935,"owners_count":21635949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emulator","packet-analyser","packet-capture","packet-parsing","packet-processing","packet-sniffer","packets","proxy-server","security-api","server-proxy","tcp-server"],"created_at":"2024-11-09T03:51:03.026Z","updated_at":"2025-04-30T16:21:26.513Z","avatar_url":"https://github.com/Dentrax.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eEasySSA Public Source Repository\u003c/h1\u003e\n\n**SilkroadSecurityApi improvement and more features by 'Dentrax'**\n\n**Ultra simple Silkroad \u003csup\u003eProxy\u003c/sup\u003e Library Ever!**\n\nDon't repeat yourself every time!\n\nClick here for **[Guide \u0026 Theory](https://goo.gl/w9uJjw)**\n\n[What It Is](#what-it-is)\n\n[How To Use](#how-to-use)\n\n[About](#about)  \n\n[Collaborators](#collaborators)  \n\n[Branches](#branches) \n\n[Copyright \u0026 Licensing](#copyright--licensing)  \n\n[Contributing](#contributing)  \n\n[Contact](#contact)\n\n\n## What It Is\n\n**EasySSA**\n\nEasySSA library for VSRO files is an easy and advanced way to create proxy programs.\n\n**Uses : `.NET Framework v4.6.1 Library`**\n\nControls and wizards are available for users to:\n\n\u003e * Detect, block, replace, ignore features to incoming-outgoing packets\n\u003e * Analyze server-side or client-side packets with details more details\n\u003e * Replace, Inject, Response and Ingore incoming-outgoing packets and accept/deny or disconnect client with one line code only. **[See here](https://github.com/Dentrax/EasySSA#example-sroservicecomponent-usage)** for example.\n\u003e * Advanced packet database library. **[Click here to see PacketDatabase.cs](https://github.com/Dentrax/EasySSA/blob/master/EasySSA/Packets/PacketDatabase.cs)**\n\u003e * **[Packet.cs](https://github.com/Dentrax/EasySSA/blob/master/EasySSA/SSA/Packet.cs)** is obsolete! The new **[SROPacket.cs](https://github.com/Dentrax/EasySSA/blob/master/EasySSA/Packets/SROPacket.cs)** is overriding now.\n\u003e * Not complex, not hard, dont repeat yourself.\n\nEasySSA vs Security API\n--------------------------\n\n![Preview Thumbnail](https://raw.githubusercontent.com/Dentrax/EasySSA/master/easyssa-pattern.png)\n\n\n## How To Use\n\nExample Usage\n--------------------------\n\n![Preview Thumbnail](https://raw.githubusercontent.com/Dentrax/EasySSA/master/Example1/Thumbnail.png)\n\n![Preview Thumbnail](https://raw.githubusercontent.com/Dentrax/EasySSA/master/Example2/Thumbnail.png)\n\nCreate Server-Side Proxy\n=============\n```csharp\n\tSROServiceComponent gateway = new SROServiceComponent(ServerServiceType, Index);\n```\n\nServiceComponent Functions\n--------------------------\n\n| Function                | Parameter                   | Explanation\t\t\t\t                                                    |\n| ----------------------- |:---------------------------:|:-----------------------------------------------------------------------------:|\n| `SetFingerprint`        | Fingerprint\t\t\t\t\t| Sets a fingerprint for Security. Uses IdentityID, IdentityFlag, SecurityFlag. |\n| `SetLocalEndPoint`      | IPEndPoint\t\t\t\t\t| Associates a Socket with local endpoint.\t\t\t\t\t\t\t\t\t\t|\n| `SetServiceEndPoint`    | IPEndPoint\t\t\t\t\t| Associates a Socket with service/module endpoint.\t\t\t\t\t\t\t\t|\n| `SetMaxClientCount`     | int\t\t\t\t\t\t\t| How many clients can connect the prxoy ?\t\t\t\t\t\t\t\t\t\t|\n| `SetLocalBindTimeout`   | int\t\t\t\t\t\t\t| Sets local bind timeout.\t\t\t\t\t\t\t\t\t\t\t\t\t\t|\n| `SetServiceBindTimeout` | int\t\t\t\t\t\t\t| Sets service bind timeout.\t\t\t\t\t\t\t\t\t\t\t\t\t|\n| `SetDebugMode`          | bool                        | Sets debug mode.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|\n| `DOBind`                | Action\u003cbool, BindErrorType\u003e | Initialize component and start listening the server.\t\t\t\t\t\t\t|\n\n\nServiceComponent Listeners\n--------------------------\n\n| Listener                       | Type                                                     | Explanation\t\t\t\t                                                                                    |\n| ------------------------------ |:--------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------:|\n| `OnLocalSocketStatusChanged`   | Action\u003cSocketError\u003e\t\t\t\t\t\t\t\t\t\t| Trigger if local socket status changed some reason. **(readonly)**\t\t\t\t\t\t\t\t\t\t    |\n| `OnServiceSocketStatusChanged` | Action\u003cClient, SocketError\u003e\t\t\t\t\t\t\t\t| Trigger if service socket status changed some reason.\t**(readonly)**\t\t\t\t\t\t\t\t\t\t\t|\n| `OnClientConnected`\t\t\t | Func\u003cClient, bool\u003e\t\t\t\t\t\t\t\t\t\t| Trigger if a client socket established. To accept or decline a client use **return true** or **return false**\t|\n| `OnClientDisconnected`\t\t | Action\u003cClient, ClientDisconnectType\u003e\t\t\t\t\t\t| Trigger if a client socket disconnected due to a error or problem. **(readonly)**\t\t\t             \t\t|\n| `OnPacketReceived`\t\t\t | Func\u003cClient, SROPacket, PacketSocketType, PacketResult\u003e  | Trigger if a packet received from a client.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    |\n\n\nOnPacketReceived Operations\n--------------------------\n\n| PacketOperationType  | PacketResult Type                         | PacketResult Parameter\t\t\t\t                        | Explanation\t\t\t\t\t\t\t\t\t\t                                               |\n| -------------------- |:-----------------------------------------:|:----------------------------------------------------------:|:------------------------------------------------------------------------------------------------:|\n| `RESPONSE`\t\t   | PacketResult.PacketResponseResultInfo\t   | List\u003cPacket\u003e packet or Packet packet\t\t\t\t\t\t| Send packet response list to ServiceContext where the packet comes from.\t\t\t\t\t\t   |\n| `DISCONNECT`\t\t   | PacketResult.PacketDisconnectResultInfo   | string notice, Enum disconnectReason\t\t\t\t\t\t| Send **notice** to client before disconnect if possible.                                         |\n| `REPLACE`\t\t\t   | PacketResult.PacketReplaceResultInfo\t   | Packet packet, List\u003cPacket\u003e replaceWith\t\t\t\t\t| Replace current packet with **replaceWith** array if current packet == packet.\t\t\t\t   |\n| `INJECT`\t\t\t   | PacketResult.PacketInjectResultInfo\t   | Packet packet, List\u003cPacket\u003e injectWith, bool afterPacket \t| Inject **injectWith** packets if current packet == packet. Inject after if **afterPacket** true. |\n| `IGNORE`\t\t\t   | Independent\t\t\t\t\t\t\t   | Parameterless\t\t\t             \t\t\t\t\t\t| Ignore current packet. Dont send.\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   |\n| `NOTHING`\t\t\t   | Independent\t\t\t\t\t\t\t   | Parameterless\t\t\t\t\t\t\t\t\t\t\t\t| Nothing\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   |\n\n\nDOBind Error Types\n--------------------------\n\n| BindErrorType\t\t\t\t\t\t\t\t    | Explanation\t\t\t\t                                                |\n| --------------------------------------------- |:-------------------------------------------------------------------------:|\n| `SUCCESS`\t\t\t\t\t\t\t\t\t\t| Trigger if everything is great and TCP listener socket bind successfull. \t|\n| `COMPONENT_DISPOSED`\t\t\t\t\t\t\t| Trigger if SROServiceComponent object disposed.\t\t\t\t\t\t\t|\n| `COMPONENT_FINGERPRINT_NULL`\t\t\t\t\t| Trigger if Fingerprint object is null.\t\t\t\t\t\t\t\t\t|\n| `COMPONENT_LOCAL_ENDPOINT_NULL`\t\t\t\t| Trigger if local socket's endpoint is null.\t\t\t             \t\t|\n| `COMPONENT_SERVICE_ENDPOINT_NULL`\t\t\t\t| Trigger if service socket's endpoint is null.\t\t\t\t\t\t\t    |\n| `COMPONENT_LOCAL_BIND_TIMEOUT_NULL_OR_ZERO`\t| Trigger if local socket's timeout null or under 1.\t\t\t\t\t\t|\n| `COMPONENT_SERVICE_BIND_TIMEOUT_NULL_OR_ZERO`\t| Trigger if service socket's timeout null or under 1.\t\t\t\t\t\t|\n| `COMPONENT_SERVICE_INDEX_NULL_OR_ZERO`\t\t| Trigger if service index null or under 1.\t\t\t\t\t\t\t\t\t|\n| `COMPONENT_SERVICE_CLIENT_COUNT_NULL_OR_ZERO`\t| Trigger if max client count null or under 1.\t\t\t\t\t\t\t    |\n| `SERVER_BIND_SOCKET_NOT_NULL`\t\t\t\t\t| Trigger if TCP listener socket is not null. \t\t\t\t\t\t\t    |\n| `SERVER_BIND_SOCKET_ALREADY_ACTIVE`\t\t\t| Trigger if TCP listener socket is already listening and not null.\t\t    |\n| `SERVER_BIND_SOCKET_NON_AVAILABLE`\t\t\t| Trigger if TCP listener socket bind failed or available == 0.\t\t\t\t|\n| `SERVER_BIND_ARGUMENT_NULL_EXCEPTION`\t\t\t| Trigger if TCP listener catch **ArgumentNullException**\t\t\t\t\t|\n| `SERVER_BIND_SOCKET_EXCEPTION`\t\t\t\t| Trigger if TCP listener catch **SocketException**\t\t\t\t\t\t\t|\n| `SERVER_BIND_SECURITY_EXCEPTION`\t\t\t\t| Trigger if TCP listener catch **SecurityException**\t\t\t\t\t    |\n| `SERVER_BIND_OBJECT_DISPOSED_EXCEPTION`\t\t| Trigger if TCP listener catch **ObjectDisposedException**\t\t\t\t\t|\n| `UNKNOWN`\t\t\t\t\t\t\t\t\t\t| Trigger if a unexcepted error handled.\t\t\t\t\t\t\t\t\t|\n\n\nAccountStatusType Types\n--------------------------\n\n| AccountStatusType   | Explanation\t\t\t\t                                            |\n| ------------------- |:-------------------------------------------------------------------:|\n| `ALREADY_LOGGED_ON` | Trigger if account already logged on status. \t\t\t\t\t    |\n| `LOGIN_SUCCESS`\t  | Trigger if account login success. \t\t\t\t\t\t\t\t    |\n| `LOGIN_FAILED`\t  | Trigger if account login failed. Wrong (ID, PW).\t\t\t\t\t|\n| `BLOCKED`\t\t\t  | Trigger if account login blocked when over captcha or login try.\t|\n| `BANNED`\t\t\t  | Trigger if account login banned from GM.\t\t\t             \t|\n\n\nClientStatusType Types\n--------------------------\n\n| ClientStatusType\t\t\t\t | Explanation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|\n| ------------------------------ |:------------------------------------------------------------------------:|\n| `STARTED`\t\t\t\t\t\t | Trigger if sro_client started successfully. \t\t\t\t\t\t\t\t|\n| `SHUTDOWN`\t\t\t\t\t | Trigger if sro_client closed or crashed some reason.\t\t\t\t\t\t|\n| `SWITCH_TO_CLIENT_SUCCESS`\t | Trigger if clientless to client switch successfully.\t\t\t\t\t\t|\n| `SWITCH_TO_CLIENT_FAILED`\t\t | Trigger if clientless to client switch failed.\t\t\t             \t|\n| `SWITCH_TO_CLIENTLESS_SUCCESS` | Trigger if client to clientless switch successfully.\t\t\t\t\t\t|\n| `SWITCH_TO_CLIENTLESS_FAILED`  | Trigger if client to clientless switch failed.\t\t\t\t\t        |\n| `READY`\t\t\t\t\t\t | Trigger if sro_client fully ready up when the character enters the game. |\n\n\nCaptchaStatusType Types\n--------------------------\n\n| ClientStatusType\t\t | Explanation\t\t\t\t\t\t\t\t      |\n| ---------------------- |:----------------------------------------------:|\n| `FETCH`\t\t\t\t | Trigger if captcha code fetched successfully.  |\n| `CORRECT`\t\t\t\t | Trigger if captcha code entered correct.       |\n| `WRONG`\t             | Trigger if captcha code entered wrong.\t\t  |\n\n\nCharacterStatusType Types\n--------------------------\n\n| CharacterStatusType\t| Explanation\t\t\t\t\t\t\t\t\t\t\t\t|\n| --------------------- |:---------------------------------------------------------:|\n| `NAME_NOT_FOUND`\t\t| Trigger if no character found with name. \t\t\t\t\t|\n| `SELECT_SUCCESS`\t\t| Trigger if character selected successfully.\t\t\t\t|\n| `SELECT_FAILED`\t\t| Trigger if character select failed.\t\t\t\t\t\t|\n| `LOGIN_SUCCESS`\t\t| Trigger if character login success to GameWorld.\t\t\t|\n| `LOGIN_FAILED`\t\t| Trigger if character login failed to GameWorld.\t\t\t|\n| `SPAWN_SUCCESS`\t\t| Trigger if character spawned and ready up to GameWorld.   |\n| `SPAWN_FAILED`        | Trigger if character spawn failed.\t\t\t\t\t    |\n| `NO_CHARACTERS_FOUND`\t| Trigger if there is no character available. (Count == 0)\t|\n\n\n\nExample SROServiceComponent Usage\n--------------------------\n```csharp\n   SROServiceComponent gateway = new SROServiceComponent(ServerServiceType.GATEWAY, 1)\n\t\t\t.SetFingerprint(new Fingerprint(\"SR_Client\", 0, SecurityFlags.Handshake \u0026 SecurityFlags.Blowfish \u0026 SecurityFlags.SecurityBytes, \"\"))\n\t\t\t.SetLocalEndPoint(new IPEndPoint(IPAddress.Parse(\"127.0.0.1\"), 15779))\n\t\t\t.SetLocalBindTimeout(10)\n\t\t\t.SetServiceEndPoint(new IPEndPoint(IPAddress.Parse(\"111.111.111.111\"), 15779))\n\t\t\t.SetServiceBindTimeout(100)\n\t\t\t.SetMaxClientCount(500)\n\t\t\t.SetDebugMode(false);\n\n    gateway.OnLocalSocketStatusChanged += new Action\u003cSocketError\u003e(delegate (SocketError error) {\n\n        if (error == SocketError.Success) {\n            Console.WriteLine(\"LOCAL socket bind SUCCESS! : \" + gateway.LocalEndPoint.ToString());\n        } else {\n            Console.WriteLine(\"LOCAL socket bind FAILED!  : \" + error);\n        }\n\n    });\n\n    gateway.OnServiceSocketStatusChanged += new Action\u003cClient, SocketError\u003e(delegate (Client client, SocketError error) {\n\n        if (error == SocketError.Success) {\n            Console.WriteLine(\"SERVICE socket connect SUCCESS! : \" + gateway.ServiceEndPoint.ToString());\n        } else {\n            Console.WriteLine(\"SERVICE socket connect FAILED!  : \" + error);\n        }\n\n    });\n\n    gateway.OnClientConnected += new Func\u003cClient, bool\u003e(delegate (Client client) {\n\n        Console.WriteLine(\"New client connected : \" + client.Socket.RemoteEndPoint);\n\n        if (string.IsNullOrEmpty(client.IPAddress)) { //Example\n            return false; //Decline client\n        } else {\n            return true; //Accept client\n        }\n\n    });\n\n    gateway.OnClientDisconnected += new Action\u003cClient, ClientDisconnectType\u003e(delegate (Client client, ClientDisconnectType disconnectType) {\n\n        Console.WriteLine(\"Client disconnected : \" + client.IPAddress + \" -- Reason : \" + disconnectType);\n\n    });\n\n    gateway.OnPacketReceived += new Func\u003cClient, SROPacket, PacketSocketType, PacketResult\u003e(delegate (Client client, SROPacket packet, PacketSocketType socketType) {\n\n        switch (packet.Opcode) {\n            case 0x1111:\n                return new PacketResult(PacketOperationType.DISCONNECT, new PacketResult.PacketDisconnectResultInfo(\"DC Reason : 0x5555 received\"));\n\n            case 0x2222:\n                return new PacketResult(PacketOperationType.IGNORE);\n\n            case 0x3333:\n                return new PacketResult(PacketOperationType.INJECT, new PacketResult.PacketInjectResultInfo(packet, new List\u003cPacket\u003e { new Packet(0x3334), new Packet(0x3335) }, true));\n\n            case 0x4444:\n                return new PacketResult(PacketOperationType.REPLACE, new PacketResult.PacketReplaceResultInfo(packet, new List\u003cPacket\u003e { new Packet(0x4445) }));\n\n            case 0x5555:\n                return new PacketResult(PacketOperationType.RESPONSE, new PacketResult.PacketResponseResultInfo(new Packet(0x5556)));\n\n            default:\n                return new PacketResult(PacketOperationType.NOTHING);\n        }\n\n    });\n\n    gateway.DOBind(delegate (bool success, BindErrorType error) {\n\n        if (success) {\n            Console.WriteLine(\"EasySSA bind SUCCESS\");\n        } else {\n            Console.WriteLine(\"EasySSA bind FAILED -- Reason : \" + error);\n        }\n\n    });\n```\n\n\nExample SROClientComponent Usage\n--------------------------\n```csharp\n   SROClientComponent clientComponent = new SROClientComponent(1)\n\t\t\t.SetFingerprint(new Fingerprint(\"SR_Client\", 0, SecurityFlags.Handshake \u0026 SecurityFlags.Blowfish \u0026 SecurityFlags.SecurityBytes, string.Empty))\n            .SetAccount(new Account(\"furkan\", \"1\"), \"Dentrax\")\n            .SetCaptcha(string.Empty)\n            .SetVersionID(191)\n            .SetLocaleID(22)\n            .SetClientless(false)\n            .SetClientPath(\"D:\\\\vSRO\\\\vSRO Client\")\n            .SetLocalAgentEndPoint(new IPEndPoint(IPAddress.Parse(\"127.0.0.1\"), 25880))\n            .SetLocalGatewayEndPoint(new IPEndPoint(IPAddress.Parse(\"127.0.0.1\"), 25779))\n            .SetServiceEndPoint(new IPEndPoint(IPAddress.Parse(\"111.111.111.111\"), 15779))\n            .SetBindTimeout(100)\n            .SetDebugMode(false);\n\n\tclientComponent.OnClientStatusChanged += new Action\u003cSROClient, ClientStatusType\u003e(delegate (SROClient client, ClientStatusType status) {\n\n\t});\n\n\tclientComponent.OnAccountStatusChanged += new Action\u003cSROClient, AccountStatusType\u003e(delegate (SROClient client, AccountStatusType status) {\n\n\t});\n\n\tclientComponent.OnCaptchaStatusChanged += new Action\u003cSROClient, CaptchaStatusType\u003e(delegate (SROClient client, CaptchaStatusType status) {\n\n\t});\n\n\tclientComponent.OnCharacterStatusChanged += new Action\u003cSROClient, CharacterStatusType\u003e(delegate (SROClient client, CharacterStatusType status) {\n\n\t});\n\n\tclientComponent.OnLocalSocketStatusChanged += new Action\u003cSocketError\u003e(delegate (SocketError error) {\n\t\tif (error == SocketError.Success) {\n\t\t\tConsole.WriteLine(\"LOCAL socket bind SUCCESS! : \" + clientComponent.LocalGatewayEndPoint.ToString());\n\t\t} else {\n\t\t\tConsole.WriteLine(\"LOCAL socket bind FAILED!  : \" + error);\n\t\t}\n\t});\n\n\tclientComponent.OnServiceSocketStatusChanged += new Action\u003cSROClient, SocketError\u003e(delegate (SROClient client, SocketError error) {\n\t\tif (error == SocketError.Success) {\n\t\t\tConsole.WriteLine(\"SERVICE socket connect SUCCESS! : \" + clientComponent.ServiceEndPoint.ToString());\n\t\t} else {\n\t\t\tConsole.WriteLine(\"SERVICE socket connect FAILED!  : \" + error);\n\t\t}\n\t});\n\n\tclientComponent.OnSocketConnected += new Action\u003cSROClient, bool\u003e(delegate (SROClient client, bool connected) {\n\t\tConsole.WriteLine(\"New client connected : \" + client.Socket.RemoteEndPoint);\n\t});\n\n\tclientComponent.OnSocketDisconnected += new Action\u003cSROClient, ClientDisconnectType\u003e(delegate (SROClient client, ClientDisconnectType disconnectType) {\n\t\tConsole.WriteLine(\"Client disconnected : \" + client.IPAddress + \" -- Reason : \" + disconnectType);\n\t});\n\n\tclientComponent.OnPacketReceived += new Func\u003cSROClient, SROPacket, PacketSocketType, PacketResult\u003e(delegate (SROClient client, SROPacket packet, PacketSocketType socketType) {\n\t\treturn new PacketResult(PacketOperationType.NOTHING);\n\t});\n\n\tclientComponent.DOBind(delegate (bool success, BindErrorType error) {\n\t\tif (success) {\n\t\t\tConsole.WriteLine(\"EasySSA bind SUCCESS\");\n\t\t} else {\n\t\t\tConsole.WriteLine(\"EasySSA bind FAILED -- Reason : \" + error);\n\t\t}\n\t});\n```\n\n## About\n\nEasySSA was created to serve three purposes:\n\n**EasySSA is a server-client proxy tool which logs all SilkroadOnline packet traffic between your server and the client with SilkroadSecurityApi**\n\n1. To act as a library to create simplest security for VSRO server files.\n\n2. To provide a simplest way to create any feature, what you think. \n\n3. Instead of writing long and complex code every time, it provides the easiest and strongest way.\n\n\n## Collaborators\n\n**Project Manager** - Furkan Türkal (GitHub: **[dentrax](https://github.com/dentrax)**)\n\n## Branches\n\nWe publish source for the **[EasySSA]** in three rolling branches:\n\nWe publish source for the engine in three rolling branches:\n\nThe **[release branch](https://github.com/dentrax/EasySSA/tree/release)** is extensively tested by our QA team and makes a great starting point for learning the EasySSA.\n\nThe **[promoted branch](https://github.com/dentrax/EasySSA/tree/promoted)** is updated with builds for our team members to use. It's a good balance between getting the latest cool stuff and knowing most things work.\n\nThe **[master branch](https://github.com/dentrax/EasySSA/tree/master)** tracks [live changes](https://github.com/dentrax/EasySSA/commits/master) by our EasySSA team. \nThis is the cutting edge and may be buggy - it may not even compile.\n\nOther short-lived branches may pop-up from time to time as we stabilize new releases or hotfixes.\n\n ## Copyright \u0026 Licensing\n \nThe base project code is copyrighted by Furkan 'Dentrax' Türkal and is covered by single licence.\n\nAll program code (i.e. C#, Java) is licensed under MIT unless otherwise specified. Please see the **[LICENSE.md](https://github.com/Dentrax/EasySSA/blob/master/LICENSE)** file for more information.\n\n**SilkroadSecurityApi**\n\nIt was developed and made by Drew 'pushedx' Benton. For more information, please **[click here](https://goo.gl/w9uJjw)**\n\n## Contributing\n\nPlease check the [CONTRIBUTING.md](CONTRIBUTING.md) file for contribution instructions and naming guidelines.\n\n## Contact\n\nEasySSA was created by Furkan 'Dentrax' Türkal\n\n * \u003chttps://www.furkanturkal.com\u003e\n \nYou can contact EasySSA by URL:\n    **[CONTACT](https://github.com/dentrax)**\n\n\u003ckbd\u003eBest Regards\u003c/kbd\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdentrax%2Feasyssa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdentrax%2Feasyssa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdentrax%2Feasyssa/lists"}