I am sorry to just drop this to the mailing list but here goes...  Hopefully
what I have done is useful for someone else too...

I have added (trivial) support for specifying the 'local' host to bind the
socket to.  This is useful (for example) when debugging traffic to an
'active' server which happens to use a fully wildcard listen.  In this case
if the tunnel listens on the active host-ip or localhost then all requests
will go through the tunnel which can then forward them to the 'real' server
(listen on host-ip:80 forward to localhost:80 is what I commonly do).  If
you needed to forward both localhost and host-ip at the same time you would
need a 'back-door' or an alias-ip address to pass requests to the real
server.

Anyhow, here are the code changes as a context diff and the new source file.
I did not put any entries in the properties file for the new strings (not
really knowing what I should do there - I am sure someone else will).  The
diffs are against the version dated mid september from the axis 1.0 release,
let me know if they do not take and I can send the original.

David Cooper
Wmode Inc.
email: [EMAIL PROTECTED]
*** tcpmon.java Thu Oct 17 01:02:24 2002
--- tcpmon-src.java     Thu Oct 17 09:05:56 2002
***************
*** 99,105 ****
  import java.io.OutputStream;
  import java.io.PrintWriter;
  import java.io.StringWriter;
- import java.net.InetAddress;
  import java.net.ServerSocket;
  import java.net.Socket;
  import java.net.URL;
--- 99,104 ----
***************
*** 122,134 ****
      private static int INHOST_COLUMN   = 2 ;
      private static int OUTHOST_COLUMN  = 3 ;
      private static int REQ_COLUMN      = 4 ;
-     
-     static int backlog=50;
  
      class AdminPage extends JPanel {
          public JRadioButton  listenerButton, proxyButton ;
          public JLabel        hostLabel, tportLabel;
!         public JTextField    port, lHost, host, tport ;
          public JTabbedPane   noteb ;
          public JCheckBox     HTTPProxyBox ;
          public JTextField    HTTPProxyHost, HTTPProxyPort ;
--- 121,131 ----
      private static int INHOST_COLUMN   = 2 ;
      private static int OUTHOST_COLUMN  = 3 ;
      private static int REQ_COLUMN      = 4 ;
  
      class AdminPage extends JPanel {
          public JRadioButton  listenerButton, proxyButton ;
          public JLabel        hostLabel, tportLabel;
!         public JTextField    port, host, tport ;
          public JTabbedPane   noteb ;
          public JCheckBox     HTTPProxyBox ;
          public JTextField    HTTPProxyHost, HTTPProxyPort ;
***************
*** 165,178 ****
              c.gridwidth = GridBagConstraints.REMAINDER ;
              tmpPanel.add( port = new JTextField(4), c );
  
-             c.anchor    = GridBagConstraints.WEST ;
-             c.gridwidth = 1 ;
-             tmpPanel.add( new JLabel(getMessage("listenHost00", "Listen Host ") + " 
"), c );
-             
-             c.anchor    = GridBagConstraints.WEST ;
-             c.gridwidth = GridBagConstraints.REMAINDER ;
-             tmpPanel.add( lHost = new JTextField(30), c );
-             
              mainPane.add( tmpPanel, c );
  
              mainPane.add( Box.createRigidArea(new Dimension(1, 5)), c );
--- 162,167 ----
***************
*** 352,358 ****
                              String   text ;
                              Listener l = null ;
                              int      lPort = Integer.parseInt(port.getText());
-                             String   lhost = lHost.getText();
                              String   tHost = host.getText();
                              int      tPort = 0 ;
  
--- 341,346 ----
***************
*** 359,365 ****
                              text = tport.getText();
                              if ( text != null && !text.equals("") )
                                  tPort = Integer.parseInt(text);
!                             l = new Listener( noteb, null, lPort, lhost, tHost, 
tPort,
                                  proxyButton.isSelected() );
  
                              // Pick-up the HTTP Proxy settings
--- 347,353 ----
                              text = tport.getText();
                              if ( text != null && !text.equals("") )
                                  tPort = Integer.parseInt(text);
!                             l = new Listener( noteb, null, lPort, tHost, tPort,
                                  proxyButton.isSelected() );
  
                              // Pick-up the HTTP Proxy settings
***************
*** 373,379 ****
                                  l.HTTPProxyPort = Integer.parseInt(text);
  
                              port.setText(null);
-                             lHost.setText(null);
                              host.setText(null);
                              tport.setText(null);
                          }
--- 361,366 ----
***************
*** 392,426 ****
          ServerSocket  sSocket = null ;
          Listener      listener ;
          int           port ;
-         String        host ;
          boolean       pleaseStop = false ;
  
!         public SocketWaiter(Listener l, int p, String h) {
              listener = l ;
              port = p ;
-             if ( h.indexOf('*') >= 0 || h.length() <= 0 )
-             { host = null; }
-             else
-             { host = h ; }
              start();
          }
  
          public void run() {
-             InetAddress bindAddr;
              try {
                  listener.setLeft( new JLabel(getMessage("wait00", " Waiting for 
Connection...") ) );
                  listener.repaint();
!                 if ( host == null )
!                 {
!                     // allow any host address
!                     sSocket = new ServerSocket( port, backlog );
!                 }
!                 else
!                 {
!                     // allow specific address
!                     bindAddr = InetAddress.getByName( host );
!                     sSocket = new ServerSocket( port, backlog, bindAddr );
!                 }
                  for (; ; ) {
                      Socket inSocket = sSocket.accept();
  
--- 379,397 ----
          ServerSocket  sSocket = null ;
          Listener      listener ;
          int           port ;
          boolean       pleaseStop = false ;
  
!         public SocketWaiter(Listener l, int p) {
              listener = l ;
              port = p ;
              start();
          }
  
          public void run() {
              try {
                  listener.setLeft( new JLabel(getMessage("wait00", " Waiting for 
Connection...") ) );
                  listener.repaint();
!                 sSocket = new ServerSocket( port );
                  for (; ; ) {
                      Socket inSocket = sSocket.accept();
  
***************
*** 444,466 ****
          public void halt() {
              try {
                  pleaseStop = true ;
!                 if (host != null)
!                 {
!                     try
!                     {
!                         InetAddress hostaddr;
!                         hostaddr = InetAddress.getByName( host );
!                         new Socket( hostaddr, port );
!                     }
!                     catch ( Exception c )
!                     {
!                         new Socket( InetAddress.getLocalHost(), port );
!                     }
!                 }
!                 else
!                 {
!                     new Socket( "127.0.0.1", port );
!                 }
                  if ( sSocket != null ) sSocket.close();
              }
              catch ( Exception e ) {
--- 415,421 ----
          public void halt() {
              try {
                  pleaseStop = true ;
!                 new Socket( "127.0.0.1", port );
                  if ( sSocket != null ) sSocket.close();
              }
              catch ( Exception e ) {
***************
*** 788,794 ****
                      listener.outPane.setVisible( true );
                  }
  
-                 String localHost  = listener.LhostField.getText();
                  String targetHost = listener.hostField.getText();
                  int    targetPort = Integer.parseInt(listener.tPortField.getText());
  
--- 743,748 ----
***************
*** 896,906 ****
                          // check to see if we have found Host: header
                          if (line.startsWith("Host: ")) {
                              // we need to update the hostname to target host
!                           String newHost = null;
!                             if (localHost.indexOf('*') >= 0)
!                             { newHost = "Host: " + targetHost + "\r\n"; }
!                             else
!                             { newHost = "Host: " + localHost + "\r\n"; }
  
                              bufferedData = bufferedData.concat(newHost);
                              break ;
--- 850,856 ----
                          // check to see if we have found Host: header
                          if (line.startsWith("Host: ")) {
                              // we need to update the hostname to target host
!                             String newHost = "Host: " + targetHost + "\r\n";
  
                              bufferedData = bufferedData.concat(newHost);
                              break ;
***************
*** 1054,1060 ****
          public  Socket      inputSocket     = null ;
          public  Socket      outputSocket    = null ;
          public  JTextField  portField       = null ;
-         public  JTextField  LhostField      = null ;
          public  JTextField  hostField       = null ;
          public  JTextField  tPortField      = null ;
          public  JCheckBox   isProxyBox      = null ;
--- 1004,1009 ----
***************
*** 1080,1086 ****
          final public Vector connections = new Vector();
  
          public Listener(JTabbedPane _notebook, String name,
!             int listenPort, String lHost, String host, int targetPort,
              boolean isProxy) {
              notebook = _notebook ;
              if ( name == null ) name = getMessage("port01", "Port") + " " + 
listenPort ;
--- 1029,1035 ----
          final public Vector connections = new Vector();
  
          public Listener(JTabbedPane _notebook, String name,
!             int listenPort, String host, int targetPort,
              boolean isProxy) {
              notebook = _notebook ;
              if ( name == null ) name = getMessage("port01", "Port") + " " + 
listenPort ;
***************
*** 1094,1107 ****
              top.setLayout( new BoxLayout(top, BoxLayout.X_AXIS) );
              top.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
              final String start = getMessage("start00", "Start");
              top.add( stopButton = new JButton( start ) );
              top.add( Box.createRigidArea(new Dimension(5, 0)) );
              top.add( new JLabel( "  " + getMessage("listenPort01", "Listen Port:") + 
" ", SwingConstants.RIGHT ) );
              top.add( portField = new JTextField( "" + listenPort, 4 ) );
-             top.add( new JLabel( "  " + getMessage("listenHost01", "Listen Host:") + 
" ", SwingConstants.RIGHT ) );
-             top.add( LhostField = new JTextField( "" + lHost, 20 ) );
              top.add( new JLabel( "  " + getMessage("host00", "Host:"), 
SwingConstants.RIGHT ) );
!             top.add( hostField = new JTextField( host, 20 ) );
              top.add( new JLabel( "  " + getMessage("port02", "Port:") + " ", 
SwingConstants.RIGHT ) );
              top.add( tPortField = new JTextField( "" + targetPort, 4 ) );
              top.add( Box.createRigidArea(new Dimension(5, 0)) );
--- 1043,1055 ----
              top.setLayout( new BoxLayout(top, BoxLayout.X_AXIS) );
              top.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
              final String start = getMessage("start00", "Start");
+ 
              top.add( stopButton = new JButton( start ) );
              top.add( Box.createRigidArea(new Dimension(5, 0)) );
              top.add( new JLabel( "  " + getMessage("listenPort01", "Listen Port:") + 
" ", SwingConstants.RIGHT ) );
              top.add( portField = new JTextField( "" + listenPort, 4 ) );
              top.add( new JLabel( "  " + getMessage("host00", "Host:"), 
SwingConstants.RIGHT ) );
!             top.add( hostField = new JTextField( host, 30 ) );
              top.add( new JLabel( "  " + getMessage("port02", "Port:") + " ", 
SwingConstants.RIGHT ) );
              top.add( tPortField = new JTextField( "" + targetPort, 4 ) );
              top.add( Box.createRigidArea(new Dimension(5, 0)) );
***************
*** 1112,1118 ****
                          JCheckBox box = (JCheckBox) event.getSource();
                          boolean state = box.isSelected();
  
-                         LhostField.setEnabled( !state );
                          tPortField.setEnabled( !state );
                          hostField.setEnabled( !state );
                      }
--- 1060,1065 ----
***************
*** 1123,1130 ****
  
              portField.setEditable(false);
              portField.setMaximumSize(new Dimension(50, Short.MAX_VALUE) );
-             LhostField.setEditable(false);
-             LhostField.setMaximumSize(new Dimension(85,Short.MAX_VALUE) );
              hostField.setEditable(false);
              hostField.setMaximumSize(new Dimension(85, Short.MAX_VALUE) );
              tPortField.setEditable(false);
--- 1070,1075 ----
***************
*** 1377,1394 ****
              notebook.setTitleAt( i, getMessage("port01", "Port") + " " + port );
  
              int  tmp = Integer.parseInt( tPortField.getText() );
              tPortField.setText( "" + tmp );
  
!             String host = LhostField.getText().trim();
!             if ( host.indexOf('*') >= 0 || host.length() <= 0 )
!             { host = "*"; }
!             LhostField.setText(host);
!             
!             sw = new SocketWaiter( this, port, host );
              stopButton.setText( getMessage("stop00", "Stop") );
  
              portField.setEditable(false);
-             LhostField.setEditable(false);
              hostField.setEditable(false);
              tPortField.setEditable(false);
              isProxyBox.setEnabled(false);
--- 1322,1334 ----
              notebook.setTitleAt( i, getMessage("port01", "Port") + " " + port );
  
              int  tmp = Integer.parseInt( tPortField.getText() );
+ 
              tPortField.setText( "" + tmp );
  
!             sw = new SocketWaiter( this, port );
              stopButton.setText( getMessage("stop00", "Stop") );
  
              portField.setEditable(false);
              hostField.setEditable(false);
              tPortField.setEditable(false);
              isProxyBox.setEnabled(false);
***************
*** 1409,1415 ****
                  sw.halt();
                  stopButton.setText( getMessage("start00", "Start") );
                  portField.setEditable(true);
-                 LhostField.setEditable(true);
                  hostField.setEditable(true);
                  tPortField.setEditable(true);
                  isProxyBox.setEnabled(true);
--- 1349,1354 ----
***************
*** 1457,1463 ****
  
                      rc = Integer.parseInt( portField.getText() );
                      out.write( (new String(getMessage("listenPort01", "Listen 
Port:") + " " + rc + "\n" )).getBytes() );
-                     out.write( (new String(getMessage("listenHost01", "Listen 
Host:") + " " + LhostField.getText() + "\n" )).getBytes() );
                      out.write( (new String(getMessage("targetHost01", "Target 
Host:") + " " + hostField.getText() +
                                  "\n" )).getBytes() );
                      rc = Integer.parseInt( tPortField.getText() );
--- 1396,1401 ----
***************
*** 1553,1562 ****
              Listener l = null ;
  
              if ( targetHost == null )
!                 l = new Listener( notebook, null, listenPort, null,
                      targetHost, targetPort, true );
              else
!                 l = new Listener( notebook, null, listenPort, null,
                      targetHost, targetPort, false );
              notebook.setSelectedIndex( 1 );
  
--- 1491,1500 ----
              Listener l = null ;
  
              if ( targetHost == null )
!                 l = new Listener( notebook, null, listenPort,
                      targetHost, targetPort, true );
              else
!                 l = new Listener( notebook, null, listenPort,
                      targetHost, targetPort, false );
              notebook.setSelectedIndex( 1 );
  

Attachment: tcpmon.java
Description: Binary data

Reply via email to