1 19 20 package org.lucane.proxy; 21 22 import org.lucane.common.*; 23 import org.lucane.common.net.ObjectConnection; 24 25 import java.net.Socket ; 26 import java.util.StringTokenizer ; 27 28 29 class ProxySlave 30 extends Thread 31 { 32 33 private ObjectConnection oc; 34 private Proxy parent; 35 private ProxySlave friend; 36 private Message init; 37 private ConnectInfo user; 38 39 45 public ProxySlave(Proxy parent, Socket s) 46 { 47 super(); 48 this.parent = parent; 49 this.oc = new ObjectConnection(s); 50 this.friend = null; 51 } 52 53 56 public void run() 57 { 58 this.readMessage(); 59 60 if(this.friend != null) 61 this.forward(); 62 } 63 64 67 private void readMessage() 68 { 69 try 70 { 71 init = (Message)this.oc.read(); 72 String data = (String )init.getData(); 73 if(data.startsWith("CONNECT_SET")) 74 { 75 StringTokenizer stk = new StringTokenizer (data); 76 String command = stk.nextToken(); 77 String username = stk.nextToken(); 78 String hostname = stk.nextToken(); 79 int port = Integer.parseInt(stk.nextToken()); 80 String type = stk.nextToken(); 81 user = new ConnectInfo(username, hostname, port, "nokey", type); 82 83 oc.write("OK"); 84 Logging.getLogger().fine("user : " + user); 85 parent.register(this, user.getName()); 86 } 87 else 88 { 89 ConnectInfo userdest = init.getReceiver(); 90 this.friend = parent.whois(userdest.getName()); 91 } 92 } 93 catch(Exception e) 94 { 95 Logging.getLogger().warning("Exception : " + e); 96 } 97 } 98 99 102 private void forward() 103 { 104 Logging.getLogger().info("BEGIN FORWARD : " + friend.user); 105 106 try 107 { 108 Socket sock = new Socket (friend.user.getHostName(), friend.user.getPort()); 109 110 ObjectConnection myoc = new ObjectConnection(sock); 112 myoc.write(init); 113 114 Thread t1 = new Forwarder(myoc, oc); 116 Thread t2 = new Forwarder(oc, myoc); 117 t1.start(); 118 t2.start(); 119 120 t1.join(); 122 t2.join(); 123 } 124 catch(Exception e) 125 { 126 Logging.getLogger().warning("Exception : " + e); 127 } 128 129 Logging.getLogger().fine("END FORWARD : " + friend.user); 130 } 131 } 132 | Popular Tags |