import cyrus-sasl-2.1.23
[cyrus-sasl.git] / java / CyrusSasl / GenericServer.java
1 package CyrusSasl;
2
3 import javax.security.auth.callback.*;
4 import java.io.*;
5
6 public class GenericServer extends GenericCommon implements SaslServer 
7 {
8
9     private byte[]initial_response;
10     private String mechanism;
11     private javax.security.auth.callback.CallbackHandler cbh;
12     private boolean started = false;
13
14     /* JNI functions */
15     private native byte[] jni_sasl_server_start(int ptr,
16                                                 String mech, byte[]in, int inlen);
17
18     private native byte[] jni_sasl_server_step(int ptr,
19                                                byte[] in,
20                                                int inlen);
21
22     GenericServer(int cptr, String mechanism,
23                   java.util.Hashtable props,
24                   javax.security.auth.callback.CallbackHandler cbh)
25     {
26         ptr=cptr;
27         this.cbh = cbh;
28         this.mechanism = mechanism;
29         started = false;
30
31
32         /* set properties */
33         super.setcommonproperties(props);       
34     }
35
36
37     public byte[] evaluateResponse(byte[] response) throws SaslException
38     {
39         byte[] out;
40         byte[] in;
41         int inlen;
42
43         if (response == null)
44         {
45             in=null;
46             inlen = 0;
47         } else {
48             in = response;
49             inlen = response.length;
50         }
51
52         if (started == false) {
53             out=jni_sasl_server_start(ptr, mechanism,in,inlen);
54             started = true;
55         } else {
56             out=jni_sasl_server_step(ptr,in,inlen);
57         }
58
59         return out;
60     }
61     
62     public String getMechanismName()
63     {
64         return mechanism;
65     }
66
67     public InputStream getInputStream(InputStream source) throws IOException
68     {
69         if (getSecurity() > 0) {
70             return new SaslInputStream(source,this);
71         } else {
72             // no security layer, no indirection needed
73             return source;
74         }
75     }
76
77     public OutputStream getOutputStream(OutputStream dest) throws IOException
78     {
79         if (getSecurity() > 0) {
80             return new SaslOutputStream(dest,this);
81         } else {
82             // no security layer, no indirection needed
83             return dest;
84         }
85     }
86 }