001: /*
002: * This file is part of the QuickServer library
003: * Copyright (C) 2003-2005 QuickServer.org
004: *
005: * Use, modification, copying and distribution of this software is subject to
006: * the terms and conditions of the GNU Lesser General Public License.
007: * You should have received a copy of the GNU LGP License along with this
008: * library; if not, you can download a copy from <http://www.quickserver.org/>.
009: *
010: * For questions, suggestions, bug-reports, enhancement-requests etc.
011: * visit http://www.quickserver.org
012: *
013: */
014:
015: package org.quickserver.net.server;
016:
017: import java.io.*;
018: import org.quickserver.net.AppException;
019:
020: /**
021: * This interface defines a class that can be used by
022: * QuickServer to authenticate a client when new connection is
023: * made to QuickServer.
024: *
025: * <p>
026: * Recommendations to be followed when implementing ClientAuthenticationHandler
027: * <ul>
028: * <li>Should have a default constructor.
029: * <li>Should be thread safe.
030: * <li>It should not store any data that may is associated with a particular client.
031: * <li>If any client data is need to be saved from the client session,
032: * it should be saved to a {@link ClientData} class, which can be retrieved
033: * using handler.getClientData() method.
034: * </ul>
035: * </p>
036: * <p>
037: * Ex:
038: * <code><BLOCKQUOTE><pre>
039: package echoserver;
040:
041: import java.net.*;
042: import java.io.*;
043: import org.quickserver.net.server.ClientAuthenticationHandler;
044: import org.quickserver.net.server.ClientHandler;
045:
046: public class EchoAuthenticationHandler
047: implements ClientAuthenticationHandler {
048:
049: public AuthStatus askAuthentication(ClientHandler handler)
050: throws IOException, AppException {
051: handler.sendClientMsg("Password :");
052: return null;
053: }
054:
055: public AuthStatus handleAuthentication(ClientHandler handler, String data)
056: throws IOException, AppException {
057: if(data.equals("password"))
058: return AuthStatus.SUCCESS;
059: else
060: return AuthStatus.FAILURE;
061: }
062:
063: public AuthStatus handleAuthentication(ClientHandler handler, Object data)
064: throws IOException, AppException {
065: if(true) throw new IOException("Object mode not implemented!");
066: }
067:
068: public AuthStatus handleAuthentication(ClientHandler handler, byte data[])
069: throws IOException {
070: if(true) throw new IOException("Byte mode not implemented!");
071: }
072: }
073: </pre></BLOCKQUOTE></code></p>
074: * @author Akshathkumar Shetty
075: * @since 1.4.6
076: */
077: public interface ClientAuthenticationHandler {
078: /**
079: * Method called first time after gotConnected() method is caled on
080: * ClientEventHandler, if Authenticator is set.
081: * Should be used to initate a authorisation process, like asking for username.
082: * @exception java.io.IOException if io error in socket
083: * @exception AppException if client socket needs to be closed.
084: * @return AuthStatus that indicates if authorisation states, if null it
085: * is treated as authentication not yet finished.
086: */
087: public AuthStatus askAuthentication(ClientHandler handler)
088: throws IOException, AppException;
089:
090: /**
091: * Method called when ever a client sends character/string data
092: * before authentication.
093: * @exception java.io.IOException if io error in socket
094: * @exception AppException if client socket needs to be closed.
095: * @return AuthStatus that indicates if authorisation states, if null it
096: * is treated as authentication not yet finished.
097: */
098: public AuthStatus handleAuthentication(ClientHandler handler,
099: String data) throws IOException, AppException;
100:
101: /**
102: * Method called when ever a client sends Object data
103: * before authentication.
104: * @exception java.io.IOException if io error in socket
105: * @exception AppException if client socket needs to be closed.
106: * @return AuthStatus that indicates if authorisation states, if null it
107: * is treated as authentication not yet finished.
108: */
109: public AuthStatus handleAuthentication(ClientHandler handler,
110: Object data) throws IOException, AppException;
111:
112: /**
113: * Method called when ever a client sends binary data
114: * before authentication.
115: * @exception java.io.IOException if io error in socket
116: * @exception AppException if client socket needs to be closed.
117: * @return AuthStatus that indicates if authorisation states, if null it
118: * is treated as authentication not yet finished.
119: */
120: public AuthStatus handleAuthentication(ClientHandler handler,
121: byte data[]) throws IOException, AppException;
122: }
|