1 21 22 package org.apache.derby.client.net; 23 24 28 public class NetLogWriter extends org.apache.derby.client.am.LogWriter { 29 30 public static final int TYPE_TRACE_RECEIVE = 2; 33 34 public static final int TYPE_TRACE_SEND = 1; 37 38 40 45 private static final char asciiChar__ [] = { 48 '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' }; 66 67 private static final String colPosHeader__ = 69 " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF"; 70 71 private static final char ebcdicChar__[] = { 75 '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ' ', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '<', '(', '+', '|', '&', '.', '.', '.', '.', '.', '.', '.', '.', '.', '!', '$', '*', ')', ';', '.', '-', '/', '.', '.', '.', '.', '.', '.', '.', '.', '|', ',', '%', '_', '>', '?', '.', '.', '.', '.', '.', '.', '.', '.', '.', '`', ':', '#', '@', '\'', '=', '"', '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', '.', '.', '.', '.', '.', '.', '.', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', '.', '.', '.', '.', '.', '.', '.', '~', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '{', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', '.', '.', '.', '.', '.', '.', '}', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', '.', '.', '.', '.', '.', '.', '\\', '.', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.', '.', '.', '.', '.', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '.', '.', '.', '.', '.' }; 93 94 private static final char hexDigit__ [] = { 96 '0', '1', '2', '3', '4', '5', '6', '7', 97 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 98 }; 99 100 private static final String receiveHeader__ = 102 " RECEIVE BUFFER: (ASCII) (EBCDIC)"; 103 104 private static final String sendHeader__ = 106 " SEND BUFFER: (ASCII) (EBCDIC)"; 107 108 private static final char spaceChar__ = ' '; 109 110 private static final char zeroChar__ = '0'; 111 112 private static CodePointNameTable codePointNameTable__ = null; 117 118 120 122 public NetLogWriter(java.io.PrintWriter printWriter, int traceLevel) { 124 super(printWriter, traceLevel); 125 126 if (codePointNameTable__ == null) { 129 codePointNameTable__ = new CodePointNameTable(); 130 } 131 } 132 133 135 public void traceConnectsExit(org.apache.derby.client.am.Connection connection) { 137 if (traceSuspended()) { 138 return; 139 } 140 NetConnection c = (NetConnection) connection; 141 synchronized (printWriter_) { 142 super.traceConnectsExit(c); 143 dncnetprint(" PROTOCOL manager levels: { "); 144 printWriter_.print("SQLAM=" + c.getSQLAM() + ", "); 145 printWriter_.print("AGENT=" + c.getAGENT() + ", "); 146 printWriter_.print("CMNTCPIP=" + c.getCMNTCPIP() + ", "); 147 printWriter_.print("RDB=" + c.getRDB() + ", "); 148 printWriter_.print("SECMGR=" + c.getSECMGR() + ", "); 149 printWriter_.print("XAMGR=" + c.getXAMGR() + ", "); 150 printWriter_.print("SYNCPTMGR=" + c.getSYNCPTMGR() + ", "); 151 printWriter_.print("RSYNCMGR=" + c.getRSYNCMGR()); 152 printWriter_.println(" }"); 153 printWriter_.flush(); 154 } 155 } 156 157 public void traceConnectsResetExit(org.apache.derby.client.am.Connection connection) { 158 if (traceSuspended()) { 159 return; 160 } 161 NetConnection c = (NetConnection) connection; 162 synchronized (printWriter_) { 163 super.traceConnectsResetExit(c); 164 dncnetprint(" PROTOCOL manager levels: { "); 165 printWriter_.print("SQLAM=" + c.getSQLAM() + ", "); 166 printWriter_.print("AGENT=" + c.getAGENT() + ", "); 167 printWriter_.print("CMNTCPIP=" + c.getCMNTCPIP() + ", "); 168 printWriter_.print("RDB=" + c.getRDB() + ", "); 169 printWriter_.print("SECMGR=" + c.getSECMGR() + ", "); 170 printWriter_.print("XAMGR=" + c.getXAMGR() + ", "); 171 printWriter_.print("SYNCPTMGR=" + c.getSYNCPTMGR() + ", "); 172 printWriter_.print("RSYNCMGR=" + c.getRSYNCMGR()); 173 printWriter_.println(" }"); 174 printWriter_.flush(); 175 } 176 } 177 178 synchronized public void traceProtocolFlow(byte[] buff, 186 int offset, 187 int len, 188 int type, 189 String className, 190 String methodName, 191 int tracepoint) { 192 if (traceSuspended()) { 193 return; 194 } 195 if (!loggingEnabled(org.apache.derby.jdbc.ClientDataSource.TRACE_PROTOCOL_FLOWS)) { 196 return; 197 } 198 synchronized (printWriter_) { 199 super.tracepoint("[net]", tracepoint, className, methodName); 200 201 int fullLen = len; 202 boolean printColPos = true; 203 while (fullLen >= 2) { len = ((buff[offset] & 0xff) << 8) + ((buff[offset + 1] & 0xff) << 0); 206 207 if ((len < 10) || (len > fullLen)) { 209 len = fullLen; 210 } 211 212 fullLen -= len; 214 if (len != 0) { 216 String codePointName = null; 217 if (len >= 10) { 219 int codePoint = getCodePoint(buff, offset + 8); 221 codePointName = codePointNameTable__.lookup(codePoint); 222 223 if (codePointName == null) { 226 len += fullLen; 227 fullLen = 0; 228 } 229 } 230 231 if (!printColPos) { dncnetprintln(""); 233 } 234 235 if (codePointName == null) { 236 dncnetprintln(getHeader(type)); 239 } else { 240 printHeaderWithCodePointName(codePointName, type); 242 } 243 244 if (printColPos) { dncnetprintln(colPosHeader__); 247 printColPos = false; 248 } 249 250 char trcDump[] = new char[77]; 253 254 short bCounter = 7; 256 short aCounter = 43; 257 short eCounter = 61; 258 259 trcDump[0] = zeroChar__; 262 trcDump[1] = zeroChar__; 263 trcDump[2] = zeroChar__; 264 trcDump[3] = zeroChar__; 265 266 int lineCounter = 0x10; 268 269 for (int j = 4; j < 77; j++) { 273 trcDump[j] = spaceChar__; 274 } 275 276 int i = 0; 278 279 do { 280 int num = (buff[offset] < 0) ? buff[offset] + 256 : buff[offset]; 283 offset++; 284 i++; 285 trcDump[bCounter++] = hexDigit__[((num >>> 4) & 0xf)]; 287 trcDump[bCounter++] = hexDigit__[(num & 0xf)]; 288 289 trcDump[aCounter++] = asciiChar__[num]; 291 trcDump[eCounter++] = ebcdicChar__[num]; 292 293 if (((i % 8) == 0)) { 294 if (((i % 16) == 0)) { 295 dncnetprintln(trcDump); 297 if (i != len) { 298 if ((len - i) < 16) { 300 for (int j = 0; j < trcDump.length; j++) { 304 trcDump[j] = spaceChar__; 305 } 306 } 307 bCounter = 0; 309 aCounter = 43; 310 eCounter = 61; 311 if (lineCounter == 0x100000) { 313 lineCounter = 0; 314 } 315 trcDump[bCounter++] = hexDigit__[((lineCounter >>> 12) & 0xf)]; 317 trcDump[bCounter++] = hexDigit__[((lineCounter >>> 8) & 0xf)]; 318 trcDump[bCounter++] = hexDigit__[((lineCounter >>> 4) & 0xf)]; 319 trcDump[bCounter++] = hexDigit__[(lineCounter & 0xf)]; 320 bCounter += 3; 321 lineCounter += 0x10; 323 } 324 } else { 325 bCounter += 2; 328 } 329 } 330 } while (i < len); 332 333 if (len % 16 != 0) { 335 dncnetprintln(trcDump); 336 } 337 } 338 } 339 dncnetprintln(""); 340 } 341 } 342 343 private static int getCodePoint(byte[] buff, int offset) { 345 return ((buff[offset++] & 0xff) << 8) + 346 ((buff[offset] & 0xff) << 0); 347 } 348 349 private static String getHeader(int type) { 350 switch (type) { 351 case TYPE_TRACE_SEND: 352 return sendHeader__; 353 case TYPE_TRACE_RECEIVE: 354 return receiveHeader__; 355 default: 356 return null; 357 } 358 } 359 360 private static int getStartPosition(int type) { 361 switch (type) { 362 case TYPE_TRACE_SEND: 363 return 20; case TYPE_TRACE_RECEIVE: 365 return 23; default: 367 return 0; 368 } 369 } 370 371 private void printHeaderWithCodePointName(String codePointName, int type) { 372 char headerArray[] = getHeader(type).toCharArray(); 375 376 int replaceLen = (codePointName.length() < 17) ? codePointName.length() : 16; 379 380 int offset = getStartPosition(type); 381 for (int i = 0; i < replaceLen; i++) { 382 headerArray[offset++] = codePointName.charAt(i); 383 } 384 dncnetprintln(headerArray); 385 } 386 387 private void dncnetprint(String s) { 388 synchronized (printWriter_) { 389 printWriter_.print("[derby] " + s); 390 printWriter_.flush(); 391 } 392 } 393 394 private void dncnetprintln(String s) { 395 synchronized (printWriter_) { 396 printWriter_.println("[derby] " + s); 397 printWriter_.flush(); 398 } 399 } 400 401 private void dncnetprintln(char[] s) { 402 synchronized (printWriter_) { 403 printWriter_.print("[derby] "); 404 printWriter_.println(s); 405 printWriter_.flush(); 406 } 407 } 408 } 409 | Popular Tags |