While implementing netty-handler-proxy, I realized various issues in our current socksx package. Here's the list of the modifications and their background: - Split message types into interfaces and default implementations - so that a user can implement an alternative message implementations - Use classes instead of enums when a user might want to define a new constant - so that a user can extend SOCKS5 protocol, such as: - defining a new error code - defining a new address type - Rename the message classes - to avoid abbreviated class names. e.g: - Cmd -> Command - Init -> Initial - so that the class names align better with the protocol specifications. e.g: - AuthRequest -> PasswordAuthRequest - AuthScheme -> AuthMethod - Rename the property names of the messages - so that the property names align better when the field names in the protocol specifications - Improve the decoder implementations - Give a user more control over when a decoder has to be removed - Use DecoderResult and DecoderResultProvider to handle decode failure gracefully. i.e. no more Unknown* message classes - Add SocksPortUnifinicationServerHandler since it's useful to the users who write a SOCKS server - Cleaned up and moved from the socksproxy example
Netty Project
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
Links
How to build
For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.
You require the following to build Netty:
- Latest stable Oracle JDK 7
- Latest stable Apache Maven
- If you are on Linux, you need additional development packages installed on your system, because you'll build the native transport.
Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.
Branches to look
The 'master' branch is where the development of the latest major version lives on. The development of all other versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>
. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.