summaryrefslogtreecommitdiff
path: root/TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java')
-rw-r--r--TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java156
1 files changed, 156 insertions, 0 deletions
diff --git a/TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java b/TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java
new file mode 100644
index 00000000000..7ef862e3aea
--- /dev/null
+++ b/TAO/examples/Simulator/DOVEBrowser/NS_Resolve.java
@@ -0,0 +1,156 @@
+// $Id$
+
+// ============================================================================
+//
+//
+// = FILENAME
+// NS_Resolve.java
+//
+// = AUTHOR
+// Michael Kircher (mk1@cs.wustl.edu)
+// Modified for new protocol by Hans Ridder <ridder@veritas.com>
+// Further improved by Kevin Regan <kregan@infoglide.com>
+//
+// = DESCRIPTION
+// Resolves the initial reference to the Naming service,
+// the orb has to be given as a parameter to the
+// resolve_name_service call.
+//
+// ============================================================================
+
+import org.omg.CORBA.*;
+import java.net.*;
+import java.io.*;
+
+public class NS_Resolve
+{
+ private static final String ACE_DEFAULT_MULTICAST_ADDR = "224.9.9.2";
+ private static final int TAO_DEFAULT_NAME_SERVER_REQUEST_PORT = 10013;
+ private static final String TAO_SERVICEID_NAMESERVICE = "NameService";
+
+ int nameServicePort_;
+
+ public NS_Resolve (String nameServicePort)
+ {
+ if (nameServicePort != null)
+ {
+ // If a name service port string was given, parse it
+ nameServicePort_ = Integer.parseInt (nameServicePort);
+ }
+ else
+ {
+ // Otherwise, just use the default TAO name service port
+ nameServicePort_ = TAO_DEFAULT_NAME_SERVER_REQUEST_PORT;
+ }
+ }
+
+ public org.omg.CORBA.Object resolve_name_service (org.omg.CORBA.ORB orb)
+ {
+ MulticastSocket sendSocket = null;
+ ServerSocket listenSocket = null;
+ Socket replySocket = null;
+
+ try
+ {
+ // Create the multicast socket at any port
+ sendSocket = new MulticastSocket(0);
+
+ // Create a socket at any port for the Naming Service answer
+ listenSocket = new ServerSocket(0);
+
+ // Create a message with the port and service name in it,
+ // length and port number are in network byte order
+ ByteArrayOutputStream msg = new ByteArrayOutputStream();
+ int dataLength = TAO_SERVICEID_NAMESERVICE.length() + 3;
+ msg.write((dataLength >> 8) & 0xff);
+ msg.write(dataLength & 0xff);
+ msg.write((listenSocket.getLocalPort() >> 8) & 0xff);
+ msg.write(listenSocket.getLocalPort() & 0xff);
+ msg.write(TAO_SERVICEID_NAMESERVICE.getBytes());
+ msg.write(0);
+
+ // Define the group for the multicast
+ InetAddress group = InetAddress.getByName(ACE_DEFAULT_MULTICAST_ADDR);
+ // Create a datagram with the message and send it
+ sendSocket.send(new DatagramPacket(msg.toByteArray(),
+ msg.size(),
+ group, nameServicePort_));
+
+ // Wait 3 seconds for the Naming Service to connect
+ listenSocket.setSoTimeout(3000);
+ replySocket = listenSocket.accept();
+
+ // @@ The restriction right now is that the length of the IOR cannot be longer than 4096
+ char[] reply = new char[4096];
+
+ // Receive the reply (0 terminated string) or time out
+ replySocket.setSoTimeout(3000);
+ InputStream in = replySocket.getInputStream();
+ int length;
+ for (length = 0; length < reply.length; length++)
+ {
+ int c = in.read();
+
+ if (c == -1)
+ {
+ throw new IOException("Unexpected EOF.");
+ }
+
+ reply[ length ] = (char) c;
+
+ if (c == 0)
+ {
+ break;
+ }
+ }
+
+ // Convert the String into ??
+ return orb.string_to_object(new String(reply, 2, length-2));
+ }
+ catch (SocketException e)
+ {
+ System.err.println (e);
+ }
+ catch (java.io.InterruptedIOException e)
+ {
+ System.err.println ("NS_Resolve: The receive lasted too long");
+ }
+ catch(org.omg.CORBA.SystemException e)
+ {
+ System.err.println(e);
+ }
+ catch (java.io.IOException e)
+ {
+ System.err.println (e);
+ }
+ finally
+ {
+ // Close the sockets.
+
+ if (sendSocket != null)
+ {
+ sendSocket.close();
+ }
+
+ if (listenSocket != null)
+ {
+ try
+ {
+ listenSocket.close();
+ }
+ catch (IOException e) {}
+ }
+
+ if (replySocket != null)
+ {
+ try
+ {
+ replySocket.close();
+ }
+ catch (IOException e) {}
+ }
+ }
+
+ return null;
+ }
+}