package org.jacorb.test.bugs.bugjac166;
import java.net.Socket;
import org.jacorb.orb.giop.GIOPConnection;
import org.jacorb.orb.iiop.ServerIIOPConnection;
import org.jacorb.orb.portableInterceptor.ServerRequestInfoImpl;
import org.omg.CORBA.Any;
import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.ORB;
import org.omg.PortableInterceptor.ForwardRequest;
import org.omg.PortableInterceptor.ServerRequestInfo;
import org.omg.PortableInterceptor.ServerRequestInterceptor;
/**
* <code>IPInterceptor</code> illustrates and tests extracting information from
* a ServerRequestInterceptor and storing it in PICurrent for the Servant to use.
*
* @author Nick Cross
*/
public class IPInterceptor
extends org.omg.CORBA.LocalObject
implements ServerRequestInterceptor
{
private final ORB orb;
public IPInterceptor(ORB orb)
{
this.orb = orb;
}
/**
* <code>receive_request</code> uses proprietary non-public API to extract an
* IP address.
*
* @param ri a <code>ServerRequestInfo</code> value
* @exception ForwardRequest if an error occurs
*/
public void receive_request( ServerRequestInfo ri )
throws ForwardRequest
{
String ipAddr = null;
// This is proprietary non-public API and specific to JacORB only.
if (ri instanceof ServerRequestInfoImpl)
{
GIOPConnection connection = ((ServerRequestInfoImpl)ri).getConnection();
// Retrieve the transport from the ServerRequest/GIOPConnection
ServerIIOPConnection transport = (ServerIIOPConnection)connection.getTransport();
// Get the socket from the IIOP layer
Socket socket = transport.getSocket();
ipAddr = socket.getInetAddress().getHostAddress();
}
// End
try
{
Any nameAny = orb.create_any();
nameAny.insert_string(ipAddr);
ri.set_slot(IPInitializer.slotID, nameAny);
}
catch (Exception e)
{
throw new INTERNAL (e.toString());
}
}
/**
* <code>name</code> (default impl).
*
* @return a <code>String</code> value
*/
public String name()
{
return "IPInterceptor";
}
/**
* <code>destroy</code> (default impl).
*/
public void destroy()
{
}
/**
* <code>receive_request_service_contexts</code> (default impl).
*
* @param ri a <code>ServerRequestInfo</code> value
* @exception ForwardRequest if an error occurs
*/
public void receive_request_service_contexts( ServerRequestInfo ri )
throws ForwardRequest
{
}
/**
* <code>send_reply</code> (default impl).
*
* @param ri a <code>ServerRequestInfo</code> value
*/
public void send_reply( ServerRequestInfo ri )
{
}
/**
* <code>send_exception</code> (default impl).
*
* @param ri a <code>ServerRequestInfo</code> value
* @exception ForwardRequest if an error occurs
*/
public void send_exception( ServerRequestInfo ri )
throws ForwardRequest
{
}
/**
* <code>send_other</code> (default impl).
*
* @param ri a <code>ServerRequestInfo</code> value
* @exception ForwardRequest if an error occurs
*/
public void send_other( ServerRequestInfo ri )
throws ForwardRequest
{
}
}