/* * Copyright 2015-2025 the original author or authors. * * Licensed 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 sockslib.common.methods; import sockslib.client.SocksProxy; import sockslib.common.SocksException; import sockslib.server.Session; import java.io.IOException; /** * The interface <code>SocksMethod</code> define a socks method in SOCKS4 or SOCKS5 protocol.<br> * <br> * SOCKS5 protocol in RFC 1928:<br> * The values currently defined for METHOD are: * <ul> * <li>X’00’ NO AUTHENTICATION REQUIRED</li> * <li>X’01’ GSSAPI</li> * <li>X’02’ USERNAME/PASSWORD</li> * <li>X’03’ to X’7F’ IANA ASSIGNED</li> * <li>X’80’ to X’FE’ RESERVED FOR PRIVATE METHODS</li> * <li>X’FF’ NO ACCEPTABLE METHODS</li> * </ul> * * @author Youchao Feng * @version 1.0 * @date Mar 17, 2015 11:12:16 AM * @see AbstractSocksMethod * @see GssApiMethod * @see NoAcceptableMethod * @see NoAuthenticationRequiredMethod * @see UsernamePasswordMethod * @see <a href="http://www.ietf.org/rfc/rfc1928.txt">SOCKS Protocol Version 5</a> */ public interface SocksMethod { /** * method byte. * * @return byte. */ int getByte(); /** * Gets method's name. * * @return Name of the method. */ String getMethodName(); /** * Do method job. This method will be called by SOCKS client. * * @param socksProxy SocksProxy instance. * @throws SocksException If there are any errors about SOCKS protocol. * @throws IOException if there are any IO errors. */ void doMethod(SocksProxy socksProxy) throws SocksException, IOException; /** * Do method job. This method will be called by SOCKS server. * * @param session Session. * @throws SocksException TODO * @throws IOException TODO */ void doMethod(Session session) throws SocksException, IOException; }