Author: erodriguez
Date: Fri Oct 22 05:02:49 2004
New Revision: 55316

Added:
   
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/
   
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/
   
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Connection.java
   
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Handler.java
   
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Main.java
Log:
Multi-threaded UDP frontend.

Added: 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Connection.java
==============================================================================
--- (empty file)
+++ 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Connection.java
   Fri Oct 22 05:02:49 2004
@@ -0,0 +1,47 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   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 org.apache.kerberos.kdc.server.udp;
+
+import org.apache.kerberos.kdc.*;
+
+import java.io.*;
+import java.net.*;
+
+public class Connection implements Runnable {
+       
+       private DatagramSocket _socket;
+       private DatagramPacket _packet;
+       private KdcDispatcher  _kdc;
+       
+       private static Handler handler = new Handler();
+       
+       public Connection(DatagramSocket socket, DatagramPacket packet, 
KdcDispatcher kdc) {
+               _socket = socket;
+               _packet = packet;
+               _kdc    = kdc;
+       }
+
+       public void run() { 
+               try {
+                       handler.process(_socket, _packet, _kdc);
+               }
+               catch (IOException ioe) {
+                       System.err.println(ioe);
+               }
+       }
+}
+

Added: 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Handler.java
==============================================================================
--- (empty file)
+++ 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Handler.java
      Fri Oct 22 05:02:49 2004
@@ -0,0 +1,46 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   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 org.apache.kerberos.kdc.server.udp;
+ 
+import org.apache.kerberos.kdc.*;
+
+import java.io.*;
+import java.net.*;
+
+public class Handler {
+       
+       public void process(DatagramSocket socket, DatagramPacket packet, 
KdcDispatcher kdc)
+                       throws IOException {
+               
+               try {
+               System.out.println("Received request with " + 
packet.getLength() + " bytes.");
+                       
+                       byte[] replyBytes = kdc.dispatch(packet.getData());
+       
+               InetAddress address = packet.getAddress();
+               int port = packet.getPort();
+               packet = new DatagramPacket(replyBytes, replyBytes.length, 
address, port);
+               socket.send(packet);
+               
+               System.out.println("Sent reply with " + packet.getLength() + " 
bytes.");
+
+               } catch (KerberosException ke) {
+                       ke.printStackTrace();
+               }
+       }
+}
+

Added: 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Main.java
==============================================================================
--- (empty file)
+++ 
incubator/directory/kerberos/trunk/source/main/org/apache/kerberos/kdc/server/udp/Main.java
 Fri Oct 22 05:02:49 2004
@@ -0,0 +1,70 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   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 org.apache.kerberos.kdc.server.udp;
+
+import org.apache.kerberos.kdc.*;
+import org.apache.kerberos.kdc.store.*;
+
+import java.io.*;
+import java.net.*;
+
+public class Main {
+
+       public static final int DEFAULT_PORT = 88;
+       public static final int BUFFER_SIZE  = 1024;
+
+       private static final PrincipalStore ldap = new LdapStore();
+       private static final KdcDispatcher kdc   = new KdcDispatcher(ldap);
+       
+       public static void main(String[] args) {
+               System.setProperty("sun.security.krb5.debug", "true");
+               Main m = new Main();
+               m.go();
+       }
+
+       private void go() {
+               DatagramSocket socket = null;
+               try {
+                       socket = new DatagramSocket(DEFAULT_PORT);
+                       initStore();
+
+                       while (true) {
+                               byte[] requestBytes = new byte[BUFFER_SIZE];
+
+                               DatagramPacket packet = new 
DatagramPacket(requestBytes, requestBytes.length);
+                               socket.receive(packet);
+                               
+                               Thread worker = new Thread(new 
Connection(socket, packet, kdc));
+                               worker.start();
+                       }
+               } catch (IOException ioe) {
+               } finally {
+                       if (socket != null)
+                               socket.close();
+               }
+       }
+
+       private void initStore() {
+               Thread storeInit = new Thread() {
+                       public void run() {
+                               ldap.init();
+                       }
+               };
+               storeInit.start();
+       }
+}
+

Reply via email to