0
|
1 package net.sourceforge.jsocks.server;
|
|
2
|
|
3 import java.io.IOException;
|
|
4 import java.io.InputStream;
|
|
5 import java.io.OutputStream;
|
|
6 import java.net.DatagramPacket;
|
|
7 import java.net.Socket;
|
|
8
|
|
9 import net.sourceforge.jsocks.ProxyMessage;
|
|
10 import net.sourceforge.jsocks.UDPEncapsulation;
|
|
11
|
|
12 /**
|
|
13 Classes implementing this interface should provide socks server with
|
|
14 authentication and authorization of users.
|
|
15 **/
|
|
16 public interface ServerAuthenticator {
|
|
17
|
|
18 /**
|
|
19 This method is called when a new connection accepted by the server.
|
|
20 <p>
|
|
21 At this point no data have been extracted from the connection. It is
|
|
22 responsibility of this method to ensure that the next byte in the
|
|
23 stream after this method have been called is the first byte of the
|
|
24 socks request message. For SOCKSv4 there is no authentication data and
|
|
25 the first byte in the stream is part of the request. With SOCKSv5 however
|
|
26 there is an authentication data first. It is expected that implementaions
|
|
27 will process this authentication data.
|
|
28 <p>
|
|
29 If authentication was successful an instance of ServerAuthentication
|
|
30 should be returned, it later will be used by the server to perform
|
|
31 authorization and some other things. If authentication fails null should
|
|
32 be returned, or an exception may be thrown.
|
|
33
|
|
34 @param s Accepted Socket.
|
|
35 @return An instance of ServerAuthenticator to be used for this connection
|
|
36 or null
|
|
37 */
|
|
38 ServerAuthenticator startSession(Socket s) throws IOException;
|
|
39
|
|
40 /**
|
|
41 This method should return input stream which should be used on the
|
|
42 accepted socket.
|
|
43 <p>
|
|
44 SOCKSv5 allows to have multiple authentication methods, and these methods
|
|
45 might require some kind of transformations being made on the data.
|
|
46 <p>
|
|
47 This method is called on the object returned from the startSession
|
|
48 function.
|
|
49 */
|
|
50 InputStream getInputStream();
|
|
51 /**
|
|
52 This method should return output stream to use to write to the accepted
|
|
53 socket.
|
|
54 <p>
|
|
55 SOCKSv5 allows to have multiple authentication methods, and these methods
|
|
56 might require some kind of transformations being made on the data.
|
|
57 <p>
|
|
58 This method is called on the object returned from the startSession
|
|
59 function.
|
|
60 */
|
|
61 OutputStream getOutputStream();
|
|
62
|
|
63 /**
|
|
64 This method should return UDPEncapsulation, which should be used
|
|
65 on the datagrams being send in/out.
|
|
66 <p>
|
|
67 If no transformation should be done on the datagrams, this method
|
|
68 should return null.
|
|
69 <p>
|
|
70 This method is called on the object returned from the startSession
|
|
71 function.
|
|
72 */
|
|
73
|
|
74 UDPEncapsulation getUdpEncapsulation();
|
|
75
|
|
76 /**
|
|
77 This method is called when a request have been read.
|
|
78 <p>
|
|
79 Implementation should decide wether to grant request or not. Returning
|
|
80 true implies granting the request, false means request should be rejected.
|
|
81 <p>
|
|
82 This method is called on the object returned from the startSession
|
|
83 function.
|
|
84 @param msg Request message.
|
|
85 @return true to grant request, false to reject it.
|
|
86 */
|
|
87 boolean checkRequest(ProxyMessage msg);
|
|
88
|
|
89 /**
|
|
90 This method is called when datagram is received by the server.
|
|
91 <p>
|
|
92 Implementaions should decide wether it should be forwarded or dropped.
|
|
93 It is expecteed that implementation will use datagram address and port
|
|
94 information to make a decision, as well as anything else. Address and
|
|
95 port of the datagram are always correspond to remote machine. It is
|
|
96 either destination or source address. If out is true address is destination
|
|
97 address, else it is a source address, address of the machine from which
|
|
98 datagram have been received for the client.
|
|
99 <p>
|
|
100 Implementaions should return true if the datagram is to be forwarded, and
|
|
101 false if the datagram should be dropped.
|
|
102 <p>
|
|
103 This method is called on the object returned from the startSession
|
|
104 function.
|
|
105
|
|
106 @param out If true the datagram is being send out(from the client),
|
|
107 otherwise it is an incoming datagram.
|
|
108 @return True to forward datagram false drop it silently.
|
|
109 */
|
|
110 boolean checkRequest(DatagramPacket dp, boolean out);
|
|
111
|
|
112 /**
|
|
113 This method is called when session is completed. Either due to normal
|
|
114 termination or due to any error condition.
|
|
115 <p>
|
|
116 This method is called on the object returned from the startSession
|
|
117 function.
|
|
118 */
|
|
119 void endSession();
|
|
120 }
|