1 46 package org.mr.core.net; 47 48 import java.io.IOException ; 49 import java.net.*; 50 51 import javax.net.ssl.SSLServerSocket; 52 import javax.net.ssl.SSLSocket; 53 54 import org.apache.commons.logging.Log; 55 import org.apache.commons.logging.LogFactory; 56 import org.mr.core.log.StartupLogger; 57 58 67 public class LocalSSLTransport implements Runnable , LocalTransport { 68 private SocketAddress local; 69 private TransportInfo info; 70 private NetworkListener listener; 71 private SSLServerSocket server; 72 private Log log; 73 74 public LocalSSLTransport(InetAddress addr, int portMin, int portMax, 75 NetworkListener listener) 76 throws IOException 77 { 78 this.listener = listener; 79 this.log = LogFactory.getLog("LocalSSLTransport"); 80 this.server = (SSLServerSocket) 81 MantaSSLFactory.getInstance().createServerSocket(); 82 if (server == null) { 83 StartupLogger.log.error("Factory did not return a server socket." + 84 " No SSL Connections will be accepted.", 85 "LocalSSLTransport"); 86 throw new IOException ("LocalSSLTransport: factory did not " + 87 "return a server socket"); 88 } 89 90 boolean success = false; 91 InetSocketAddress bindAddr = null; 92 int port = portMin; 93 BindException savedException = null; 94 95 while (port <= portMax && !success) { 96 bindAddr = new InetSocketAddress(addr, port++); 97 try { 98 this.server.bind(bindAddr); 99 success = true; 100 } catch (BindException e) { 101 savedException = e; 102 } 103 } 104 if (success) { 105 this.info = new TransportInfo(bindAddr, TransportType.SSL); 106 } else { 107 throw savedException; 108 } 109 } 110 111 public void run() { 112 Thread.currentThread(). 113 setName("LocalSSLTransport " + 114 ((InetSocketAddress) getSocketAddress()).getPort()); 115 116 118 try { 119 while (true) { 120 SSLSocket socket = (SSLSocket) this.server.accept(); 121 TransportImpl impl = 125 TransportProvider.createImpl(TransportType.SSL, socket); 126 if (!impl.isDown()) { 127 this.listener.acceptedImpl(impl); 128 } 129 } 130 } catch (IOException e) { 131 if(log.isErrorEnabled()){ 132 log.error("LocalSSLTransport: error accepting: " + e.toString() + 133 " Exiting."); 134 } 135 } 136 } 137 138 public void shutdown() { 139 try { 140 if(log.isInfoEnabled()){ 141 log.info("LocalSSLTransport: shutting down."); 142 } 143 this.server.close(); 144 } catch (Throwable t) { 145 } 147 } 148 149 public SocketAddress getSocketAddress() { 150 if (this.server != null) { 151 return this.server.getLocalSocketAddress(); 152 } else { 153 return this.info.getSocketAddress(); 154 } 155 } 156 157 public TransportType getTransportType() { 158 return TransportType.SSL; 159 } 160 161 public TransportInfo getInfo() { 162 return this.info; 163 } 164 165 public void open() { 166 new Thread (this).start(); 167 } 168 169 public void close() { 170 shutdown(); 171 } 172 } | Popular Tags |