netty5/codec-socks/src/main/java/io/netty/handler/codec/socksx/SocksVersion.java
Trustin Lee 976db9269d Revamp io.netty.handler.codec.socksx
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
2015-02-10 09:14:13 +09:00

65 lines
1.7 KiB
Java
Executable File

/*
* Copyright 2013 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package io.netty.handler.codec.socksx;
/**
* The version of SOCKS protocol.
*/
public enum SocksVersion {
/**
* SOCKS protocol version 4a (or 4)
*/
SOCKS4a((byte) 0x04),
/**
* SOCKS protocol version 5
*/
SOCKS5((byte) 0x05),
/**
* Unknown protocol version
*/
UNKNOWN((byte) 0xff);
/**
* Returns the {@link SocksVersion} that corresponds to the specified version field value,
* as defined in the protocol specification.
*
* @return {@link #UNKNOWN} if the specified value does not represent a known SOCKS protocol version
*/
public static SocksVersion valueOf(byte b) {
if (b == SOCKS4a.byteValue()) {
return SOCKS4a;
}
if (b == SOCKS5.byteValue()) {
return SOCKS5;
}
return UNKNOWN;
}
private final byte b;
SocksVersion(byte b) {
this.b = b;
}
/**
* Returns the value of the version field, as defined in the protocol specification.
*/
public byte byteValue() {
return b;
}
}