Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

org.jgroups.util
Class Proxy  view Proxy download Proxy.java

java.lang.Object
  extended byorg.jgroups.util.Proxy

public class Proxy
extends java.lang.Object

Redirects incoming TCP connections to other hosts/ports. All redirections are defined in a file as for example

 127.0.0.1:8888=www.ibm.com:80
 localhost:80=pop.mail.yahoo.com:110
 
The first line forwards all requests to port 8888 on to www.ibm.com at port 80 (it also forwards the HTTP response back to the sender. The second line essentially provides a POP-3 service on port 8110, using Yahoo's POP service. This is neat when you're behind a firewall and one of the few services in the outside world that are not blocked is port 80 (HHTP).
Note that JDK 1.4 is required for this class. Also, concurrent.jar has to be on the classpath. Note that you also need to include jsse.jar/jce.jar (same location as rt.jar) if you want SSL sockets.
To create SSLServerSockets you'll need to do the following: Generate a certificate as follows:
 keytool -genkey -keystore /home/bela/.keystore -keyalg rsa -alias bela -storepass  -keypass 
 
Start the Proxy as follows:
 java -Djavax.net.ssl.keyStore=/home/bela/.keystore -Djavax.net.ssl.keyStorePassword=
      -Djavax.net.ssl.trustStore=/home/bela/.keystore -Djavax.net.ssl.trustStorePassword=
      org.jgroups.util.Proxy -file /home/bela/map.properties
 
Start client as follows:
 java -Djavax.net.ssl.trustStore=/home/bela/.keystore -Djavax.net.ssl.trustStorePassword= sslclient
 

To import a certificate into the keystore, use the following steps:
 openssl x509 -in server.crt -out server.crt.der -outform DER
 keytool -import -trustcacerts -alias  -file server.crt.der
 
This will store the server's certificate in the ${user.home}/.keystore key store.
Note that an SSL client or server can be debugged by starting it as follows:
-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl

If you run a web browser, simply enter https://: as URL to connect to an SSLServerSocket
Note that we cannot use JDK 1.4's selectors for SSL sockets, as getChannel() on an SSL socket doesn't seem to work.


Nested Class Summary
(package private) static class Proxy.Connection
          Handles an incoming SSLSocket or Socket.
(package private) static class Proxy.MyInetSocketAddress
           
(package private) static class Proxy.Relayer
           
(package private)  class Proxy.SocketAcceptor
          Handles accepts on an SSLServerSocket or ServerSocket.
 
Field Summary
(package private) static int BUFSIZE
           
(package private) static boolean debug
           
(package private)  EDU.oswego.cs.dl.util.concurrent.Executor executor
           
(package private)  java.net.InetAddress local
           
(package private)  int local_port
           
(package private)  java.lang.String mapping_file
           
(package private)  java.util.HashMap mappings
           
(package private) static int MAX_THREAD_POOL_SIZE
           
(package private)  java.net.InetAddress remote
           
(package private)  int remote_port
           
(package private) static boolean verbose
           
 
Constructor Summary
Proxy(java.net.InetAddress local, int local_port, java.net.InetAddress remote, int remote_port, boolean verbose, boolean debug)
           
Proxy(java.net.InetAddress local, int local_port, java.net.InetAddress remote, int remote_port, boolean verbose, boolean debug, java.lang.String mapping_file)
           
 
Method Summary
(package private)  void _handleConnection(java.nio.channels.SocketChannel in_channel, java.nio.channels.SocketChannel out_channel)
           
(package private)  void check(java.net.URI u)
          Checks whether a URI is http(s)://:
(package private)  void close(java.nio.channels.Selector sel, java.nio.channels.SocketChannel in_channel, java.nio.channels.SocketChannel out_channel)
           
(package private) static void close(java.net.Socket sock)
           
(package private) static void close(java.net.Socket in, java.net.Socket out)
           
(package private)  void handleConnection(java.nio.channels.SocketChannel in, java.nio.channels.SocketChannel out)
           
(package private) static void help()
           
(package private) static void log(java.lang.String msg)
           
(package private) static void log(java.lang.String method_name, java.lang.String msg)
           
(package private)  void loop(java.nio.channels.Selector selector)
          We handle only non-SSL connections
static void main(java.lang.String[] args)
           
(package private)  void populateMappings(java.lang.String filename)
          Populates mappings hashmap.
(package private) static java.lang.String printRelayedData(java.lang.String from, java.lang.String to, int num_bytes)
           
(package private)  java.lang.String printSelectionOps(java.nio.channels.SelectionKey key)
           
(package private)  boolean relay(java.nio.channels.SocketChannel from, java.nio.channels.SocketChannel to, java.nio.ByteBuffer buf)
          Read all data from from and write it to to.
 void start()
           
(package private)  java.net.SocketAddress strToAddr(java.lang.String input)
          Input is "host:port"
(package private)  java.lang.String toString(java.net.InetSocketAddress addr)
           
(package private)  java.lang.String toString(java.nio.channels.SocketChannel ch)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

local

java.net.InetAddress local

remote

java.net.InetAddress remote

local_port

int local_port

remote_port

int remote_port

verbose

static boolean verbose

debug

static boolean debug

mapping_file

java.lang.String mapping_file

mappings

final java.util.HashMap mappings

executor

EDU.oswego.cs.dl.util.concurrent.Executor executor

MAX_THREAD_POOL_SIZE

static final int MAX_THREAD_POOL_SIZE
See Also:
Constant Field Values

BUFSIZE

static final int BUFSIZE
See Also:
Constant Field Values
Constructor Detail

Proxy

public Proxy(java.net.InetAddress local,
             int local_port,
             java.net.InetAddress remote,
             int remote_port,
             boolean verbose,
             boolean debug)

Proxy

public Proxy(java.net.InetAddress local,
             int local_port,
             java.net.InetAddress remote,
             int remote_port,
             boolean verbose,
             boolean debug,
             java.lang.String mapping_file)
Method Detail

start

public void start()
           throws java.lang.Exception

loop

void loop(java.nio.channels.Selector selector)
We handle only non-SSL connections


handleConnection

void handleConnection(java.nio.channels.SocketChannel in,
                      java.nio.channels.SocketChannel out)

_handleConnection

void _handleConnection(java.nio.channels.SocketChannel in_channel,
                       java.nio.channels.SocketChannel out_channel)
                 throws java.lang.Exception

close

void close(java.nio.channels.Selector sel,
           java.nio.channels.SocketChannel in_channel,
           java.nio.channels.SocketChannel out_channel)

relay

boolean relay(java.nio.channels.SocketChannel from,
              java.nio.channels.SocketChannel to,
              java.nio.ByteBuffer buf)
        throws java.lang.Exception
Read all data from from and write it to to. Returns false if channel was closed


toString

java.lang.String toString(java.nio.channels.SocketChannel ch)

toString

java.lang.String toString(java.net.InetSocketAddress addr)

printRelayedData

static java.lang.String printRelayedData(java.lang.String from,
                                         java.lang.String to,
                                         int num_bytes)

populateMappings

void populateMappings(java.lang.String filename)
                throws java.lang.Exception
Populates mappings hashmap. An example of a definition file is:
 http://localhost:8888=http://www.yahoo.com:80
 https://localhost:2200=https://cvs.sourceforge.net:22
 http://localhost:8000=https://www.ibm.com:443
 
Mappings can be http-https, https-http, http-http or https-https


check

void check(java.net.URI u)
     throws java.lang.Exception
Checks whether a URI is http(s)://:


strToAddr

java.net.SocketAddress strToAddr(java.lang.String input)
                           throws java.lang.Exception
Input is "host:port"


printSelectionOps

java.lang.String printSelectionOps(java.nio.channels.SelectionKey key)

main

public static void main(java.lang.String[] args)

help

static void help()

log

static void log(java.lang.String method_name,
                java.lang.String msg)

log

static void log(java.lang.String msg)

close

static void close(java.net.Socket in,
                  java.net.Socket out)

close

static void close(java.net.Socket sock)