1 package com.ubermq.jms.common.ssl; 2 3 import java.net.*; 4 import java.nio.channels.*; 5 import java.nio.*; 6 import java.io.*; 7 8 19 public class IONormalizer 20 { 21 private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(IONormalizer.class); 22 23 private static final int BUFFER_SIZE = 4096; 24 25 42 public static void normalize(final Pipe fromsocket, 43 final Pipe tosocket, 44 final Socket s) 45 throws IOException 46 { 47 final InputStream in = s.getInputStream(); 49 final OutputStream out = s.getOutputStream(); 50 51 final Thread writer = new Thread (new Runnable () 55 { 56 public void run() 57 { 58 try 59 { 60 ByteBuffer buf = ByteBuffer.allocate(BUFFER_SIZE); 61 62 while(!Thread.interrupted()) 63 { 64 int n = tosocket.source().read(buf); 65 if (n == -1) 66 break; 67 else 68 { 69 out.write(buf.array(), 0, n); 70 buf.clear(); 71 } 72 } 73 } 74 catch (IOException e) 75 { 76 ; } 78 } 79 }, "IONormalizer to-socket"); 80 81 Thread reader = new Thread (new Runnable () 84 { 85 public void run() 86 { 87 try 88 { 89 byte[] buf = new byte[BUFFER_SIZE]; 90 91 while(!Thread.interrupted()) 92 { 93 int n = in.read(buf); 94 if (n == -1) 95 { 96 break; 97 } 98 else 99 { 100 int len = 0; 101 while(len < n) 102 { 103 len += fromsocket.sink().write(ByteBuffer.wrap(buf, len, n-len)); 104 } 105 } 106 } 107 } 108 catch (SocketException e) 109 { 110 } 113 catch (IOException e) 114 { 115 log.error("", e); 116 } 117 finally 118 { 119 try 120 { 121 writer.interrupt(); 122 tosocket.sink().close(); 123 writer.join(); 124 } 125 catch (Exception e) 126 { 127 log.error("", e); 128 } 129 130 try 132 { 133 fromsocket.sink().close(); 134 } 135 catch (IOException e) 136 { 137 log.error("", e); 138 } 139 140 try 141 { 142 s.close(); 143 } 144 catch (IOException e) 145 { 146 log.error("", e); 147 } 148 } 149 } 150 }, "IONormalizer from-socket"); 151 152 153 reader.setDaemon(true); 155 writer.setDaemon(true); 156 reader.start(); 157 writer.start(); 158 } 159 } 160 | Popular Tags |