List of usage examples for java.net UnknownHostException toString
public String toString()
From source file:com.dragonflow.StandardMonitor.URLOriginalMonitor.java
/** * // w ww. j a v a 2 s .c o m */ private static long[] checkInternalURL(SocketSession socketsession, String s, String s1, String s2, String s3, String s4, String s5, String s6, String s7, Array array, String s8, String s9, String s10, StringBuffer stringbuffer, long l, String s11, int i, long l1, StringBuffer stringbuffer1, StringBuffer stringbuffer2) { String s12 = ""; if (s.lastIndexOf('#') != -1) { s = s.substring(0, s.lastIndexOf('#')); } if ((debugURL & kDebugRequest) != 0) { LogManager.log("RunMonitor", "checking URL... " + s); } int j = 0; if (socketsession.context.getSetting("_keepTryingForGoodStatus").length() > 0) { j = TextUtils.toInt(socketsession.context.getSetting("_keepTryingForGoodStatus")); } long l2 = kURLNoStatusError; long l3 = 0L; long l4 = System.currentTimeMillis(); long l6 = 0L; long l7 = 0L; long l8 = 0L; long l9 = 0L; long l10 = 0L; long l11 = 0L; long l12 = 0L; boolean flag = false; URLInfo urlinfo = new URLInfo(s); String s16 = urlinfo.getProtocol(); String s17 = urlinfo.getHost(); int k = urlinfo.getConnectPort(); boolean flag1 = false; boolean flag2 = false; if (SocketStream.getSSLFactory() != null) { flag1 = true; if (socketsession.context.getSetting("_sslJavaEnabled").length() > 0) { flag1 = true; } else if (socketsession.context.getSetting("_sslJavaDisabled").length() > 0) { flag1 = false; } } boolean flag3 = false; if (s8.startsWith(NT_CHALLENGE_RESPONSE_TAG)) { s8 = s8.substring(NT_CHALLENGE_RESPONSE_TAG.length()); flag3 = true; } boolean flag4 = false; if (socketsession.context.getSetting("_urlMonitorUseApacheHttpClient").length() > 0) { flag4 = true; } SocketStream socketstream = null; String s18 = getUserAgent(array); if (s18.length() == 0) { s18 = socketsession.context.getSetting("_URLUserAgent"); } String s19 = getSslgetOptions(array); if (s19.length() == 0) { s19 = socketsession.context.getSetting("_sslgetOptions"); } String s20 = socketsession.context.getSetting("_URLMonitorProxyExceptions"); String s21 = null; String s22 = ""; String s23 = ""; String s25 = ""; String s26 = getContentType(array); String s27 = encodeParameters(array, s26); socketsession.addCookieParameters(array, s); if (stringbuffer == null) { stringbuffer = new StringBuffer(kURLBufferSize); } boolean flag5 = socketsession.context.getSetting("_concatURLRedirects").length() != 0; if (flag5 && concatBuffer == null) { concatBuffer = new StringBuffer(kURLBufferSize); } if (s8.length() > 0) { Base64Encoder base64encoder = new Base64Encoder(s8 + ":" + s9); s22 = "Authorization: Basic " + base64encoder.processString() + CRLF; } if (s6.length() > 0) { Base64Encoder base64encoder1 = new Base64Encoder(s6 + ":" + s7); String s24 = base64encoder1.processString(); s25 = "Proxy-Authorization: Basic " + s24 + CRLF; } long l13 = l1 - System.currentTimeMillis(); long l14 = l13 / 1000L; long l15 = -1L; CounterLock counterlock; // 617 try { if (s10.length() != 0) { String s28 = ""; if (s27.length() > 0) { s28 = HTTPRequest.encodeString(s27); } String s32; if (s10.indexOf("get.exe") != -1) { String s36 = socketsession.context.getSetting("_URLRemoteOptions"); if (s36.length() == 0) { s36 = "-ignoreErrors+-ignoreUnknownCA+-x"; } if (flag3 && !s8.startsWith(NT_CHALLENGE_RESPONSE_TAG)) { s8 = NT_CHALLENGE_RESPONSE_TAG + s8; } if (s18.length() > 0) { if (s28.length() > 0) { s28 = s28 + URLEncoder.encode("&"); } s28 = s28 + URLEncoder.encode("User-Agent: " + s18); } if (s19.length() > 0) { if (s28.length() > 0) { s28 = s28 + URLEncoder.encode("&"); } s28 = s28 + URLEncoder.encode("sslgetOptions: " + s19); } if (s11.length() > 0) { String as[] = TextUtils.split(s11, CRLF); for (int k1 = 0; k1 < as.length; k1++) { if (s28.length() > 0) { s28 = s28 + URLEncoder.encode("&"); } if (getHeaderType(as[k1]) < 0) { s28 = s28 + URLEncoder.encode("Custom-Header: "); } String s46 = as[k1]; int i3 = s46.indexOf("&"); if (i3 >= 0 && !s46.startsWith(URLSequenceMonitor.refererStartToken)) { s46 = s46.substring(0, i3); } s28 = s28 + URLEncoder.encode(s46); } } String s13 = socketsession.getCookieHeader(s, true); if (s13.length() > 0) { String s40 = ""; if (s36.endsWith("-x")) { s40 = "-x"; s36 = s36.substring(0, s36.length() - 2); } String as2[] = TextUtils.split(s13, CRLF); for (int j2 = 0; j2 < as2.length; j2++) { s36 = s36 + "-c+%22" + URLEncoder.encode(as2[j2]) + "%22+"; } s36 = s36 + s40; } s32 = s10 + "?" + s36 + "+%22" + URLEncoder.encode(s) + "%22" + "+%22" + l14 + "%22" + "+%22" + URLEncoder.encode(s8) + "%22" + "+%22" + URLEncoder.encode(s9) + "%22" + "+%22" + s28 + "%22" + "+%22" + URLEncoder.encode(s5) + "%22" + "+%22" + URLEncoder.encode(s6) + "%22" + "+%22" + URLEncoder.encode(s7) + "%22"; } else if (s10.indexOf("port.exe") != -1) { s32 = s10 + "&host=" + s; } else { s32 = s10 + "?host=" + s; } Array array2 = null; String s41 = ""; String s43 = ""; String s47 = ""; String s49 = ""; String s51 = ""; String s54 = ""; String s56 = ""; if (Platform.isPortal()) { String s59 = HTTPUtils.getLocationIDByURL(s10); if (Portal.isPortalID(s59)) { PortalSiteView portalsiteview = (PortalSiteView) Portal.getSiteViewForID(s59); if (portalsiteview != null) { s41 = portalsiteview.getProperty(PortalSiteView.pUserName); s43 = portalsiteview.getProperty(PortalSiteView.pPassword); s49 = portalsiteview.getProperty(PortalSiteView.pProxy); s51 = portalsiteview.getProperty(PortalSiteView.pProxyUserName); s54 = portalsiteview.getProperty(PortalSiteView.pProxyPassword); } } } int k3 = i; if (socketsession.context == null) ; CounterLock counterlock1 = null; if (!socketsession.inRemoteRequest) { counterlock1 = getLocationLock(socketsession.context, s10, s); } try { long l18 = System.currentTimeMillis() + (l14 + 30L) * 1000L; socketsession.inRemoteRequest = true; long al2[] = check1URL(socketsession, s32, s1, s2, s3, s4, s49, s51, s54, array2, s41, s43, s47, stringbuffer, l, s56, k3, l18, stringbuffer1, stringbuffer2); l2 = al2[0]; if (j > 0) { l2 = getURLStatus_ForBackupToRegularMeansOnly(socketsession, l2, s32, 0, j); } if (debugURL != 0) { System.out.println("Status1: " + l2); } l3 = al2[1]; } finally { socketsession.inRemoteRequest = false; if (counterlock1 != null) { releaseLocationLock(counterlock1); } } String s65 = stringbuffer.toString(); int i4 = s65.length(); stringbuffer.setLength(0); int j4 = 0; while (j4 < i4) { int k4 = s65.indexOf("\r\r\n", j4); if (k4 < 0) { stringbuffer.append(s65.substring(j4)); break; } stringbuffer.append(s65.substring(j4, k4) + "\r\n"); j4 = k4 + 3; } String s68 = stringbuffer.toString(); if (s10.indexOf("get.exe") != -1) { String s70 = "URLMonitorDuration: "; int k5 = s68.lastIndexOf(s70); if (k5 != -1) { l3 = TextUtils.toLong(s68.substring(k5 + s70.length(), k5 + s70.length() + 10)); } s70 = "URLMonitorStatus: "; k5 = s68.lastIndexOf(s70); long l21 = l2; if (k5 != -1) { l21 = TextUtils.toLong(s68.substring(k5 + s70.length(), k5 + s70.length() + 10)); } if (l21 != 200L || l2 != (long) kURLContentMatchError && l2 != (long) kURLContentErrorFound) { if (k5 != -1) { l2 = l21; if (debugURL != 0) { System.out.println("Status2 ssl: " + l2); } } else { int j6 = s68.length(); if (j6 > 500) { j6 = 500; } String s78 = s68.substring(0, j6); if (j > 0) { l21 = getURLStatus_ForBackupToRegularMeansOnly(socketsession, l21, s32, 0, j); } LogManager.log("Error", "Remote URL error, [" + HTTPUtils.getLocationIDByURL(s10) + "] " + lookupStatus(l2) + ", " + s10 + ", " + s + ", detail: " + s78); l2 = kURLRemoteMonitoringError; if (debugURL != 0) { System.out.println("Status3 kURLRemoteMonitoringError: " + l2); } } } } s68 = getHTTPContent(s68); int i5 = s68.lastIndexOf("\r\nURLMonitorStatus: "); if (i5 >= 0) { s68 = s68.substring(0, i5); } stringbuffer.setLength(0); stringbuffer.append(s68); l12 = stringbuffer.length(); } else { if (flag3 || s16.equals("https") && !flag1 || flag4) { flag2 = true; counterlock = null; try { if (s16.equals("https")) { counterlock = getSSLGroupLock(socketsession.context); } if (flag4) { Vector vector = new Vector(); if (socketsession.context.getSetting("_sslKeepAlive").length() > 0) { if (s5.length() > 0) { vector.add(new Header("Proxy-Connection", "Keep-Alive")); } else { vector.add(new Header("Connection", "Keep-Alive")); } } vector.add(new Header("User-Agent", s18)); Header header = socketsession.getCookieHeader(s); if (header != null) { vector.add(header); } if (s27.length() > 0) { vector.add(new Header("Content-Type", s26)); } String s42 = ""; HTTPRequestSettings httprequestsettings = new HTTPRequestSettings(s, s8, s9, s42, null, s5, s6, s7, vector, 1, (int) l13, (int) l13); StringBuffer stringbuffer3 = new StringBuffer(); ApacheHttpMethod apachehttpmethod = null; long l17 = System.currentTimeMillis(); apachehttpmethod = ApacheHttpUtils.getRequest(httprequestsettings, stringbuffer3); l3 = System.currentTimeMillis() - l17; l2 = apachehttpmethod.getStatusCode(); if (apachehttpmethod.getResponseBodyAsString() != null) { stringbuffer2.append(apachehttpmethod.getResponseBodyAsString()); } if (apachehttpmethod.getResponseBody() != null) { l12 = apachehttpmethod.getResponseBody().length; } } else { if (s5 == null) { s5 = ""; } Array array1 = new Array(); array1.add(Platform.getRoot() + "/tools/sslget"); if (s19.length() > 0) { Array array3 = Platform.split(' ', s19); Enumeration enumeration = array3.elements(); while (enumeration.hasMoreElements()) { array1.add(enumeration.nextElement()); } } if (socketsession.context.getSetting("_sslKeepAlive").length() > 0) { array1.add("-keepAlive"); } boolean flag6 = socketsession.context.getSetting("_urlUnixSSL").length() == 0; array1.add("-agent"); array1.add("\"" + s18 + "\""); String s14 = s11; s14 = socketsession.getCookieHeader(s, flag6) + s14; if (s14.length() > 0) { String as1[] = TextUtils.split(s14, CRLF); for (int i2 = 0; i2 < as1.length; i2++) { array1.add("-c"); array1.add("\"" + as1[i2] + "\""); } } if (s27.length() > 0) { array1.add("-c"); array1.add("\"" + CONTENT_TYPE_HEADER + s26 + "\""); } if (array != null) { Enumeration enumeration1 = array.elements(); while (enumeration1.hasMoreElements()) { String s44 = (String) enumeration1.nextElement(); if (TextUtils.startsWithIgnoreCase(s44, CUSTOM_HEADER)) { array1.add("-c"); array1.add("\"" + s44.substring(CUSTOM_HEADER.length()) + "\""); } } } array1.add("-x"); array1.add(s); array1.add("" + l14); array1.add("\"" + s8 + "\""); array1.add("\"" + s9 + "\""); array1.add("\"" + s27 + "\""); if (!hostIsProxyException(s20, s)) { array1.add("\"" + s5 + "\""); } else { array1.add("\"\""); } array1.add("\"" + s6 + "\""); array1.add("\"" + s7 + "\""); SSLCounter++; if (sslLock.current() == 0) { LogManager.log("RunMonitor", "ssl block, " + ((sslLock.max - sslLock.current()) + 1) + ", " + s); } else { LogManager.log("RunMonitor", "ssl start, " + SSLCounter + ", " + s); } Array array4 = new Array(); l2 = sendSSLRequest(urlinfo.getHost(), socketsession, array1, sslLock, array4); if (debugURL != 0) { System.out.println("Status4 sendSSLRequest: " + l2); } SSLCounter--; Enumeration enumeration2 = array4.elements(); int k2 = 0; boolean flag7 = false; l12 = -1L; String s52 = "URLMonitorStatus:"; String s55 = "URLMonitorDuration:"; String s57 = "URLMonitorDNSDuration:"; String s60 = "URLMonitorConnectDuration:"; String s62 = "URLMonitorResponseDuration:"; String s66 = "URLMonitorDownloadDuration:"; boolean flag8 = true; while (enumeration2.hasMoreElements()) { String s69 = (String) enumeration2.nextElement(); if (stringbuffer2 != null) { stringbuffer2.append(s69 + "\n"); } if (++k2 > 2) { int j5 = s69.indexOf(s52); if (j5 >= 0) { String s71 = s69.substring(s69.length() - 10); l2 = TextUtils.toLong(s71); if (debugURL != 0) { System.out.println("Status5 statusString: " + l2); } flag8 = false; } int i6 = s69.indexOf(s55); if (i6 >= 0) { String s72 = s69.substring(s69.length() - 10); l3 = TextUtils.toLong(s72); } i6 = s69.indexOf(s57); if (i6 >= 0) { String s73 = s69.substring(s69.length() - 10); l6 = TextUtils.toLong(s73); } i6 = s69.indexOf(s60); if (i6 >= 0) { String s74 = s69.substring(s69.length() - 10); l7 = TextUtils.toLong(s74); } i6 = s69.indexOf(s62); if (i6 >= 0) { String s75 = s69.substring(s69.length() - 10); l8 = TextUtils.toLong(s75); } i6 = s69.indexOf(s66); if (i6 >= 0) { String s76 = s69.substring(s69.length() - 10); l9 = TextUtils.toLong(s76); } if (k2 == 4 && s69.length() == 0) { flag7 = true; } if ((!flag7 || k2 % 2 != 0 || s69.length() != 0) && flag8) { stringbuffer.append(s69); stringbuffer.append('\n'); } } } LogManager.log("RunMonitor", "SSL END, " + SSLCounter + ", " + l3 + " " + s); l12 = stringbuffer.length(); } if (counterlock != null) { releaseSSLGroupLock(counterlock); } } catch (Exception exception1) { if (counterlock != null) { releaseSSLGroupLock(counterlock); } throw exception1; } } else { String s29 = urlinfo.getFile(); String s33 = getHostHeader(array, s17, k, s16); String s37 = null; int j1 = -1; if (s5.length() != 0 && !isProxyException(s20, s17)) { if (!s5.startsWith("http://")) { s5 = "http://" + s5; } j1 = k; s37 = s17; URLInfo urlinfo1 = new URLInfo(s5); s17 = urlinfo1.getHost(); k = urlinfo1.getConnectPort(); if (!s16.equals("https")) { if (s29.equals("/") && !s.endsWith("/")) { s29 = s + "/"; } else { s29 = s; } } } String s45 = socketsession.getCookieHeader(s, false); String s48 = getRequestCommand(array); String s50 = socketsession.getVersion(); String s53 = getRequestProtocol(array); if (s53.endsWith("/")) { s53 = s53 + s50; } String s15 = s11; int j3 = -1; String s58 = s15; if ((j3 = s15.indexOf("&" + URLSequenceMonitor.refererEndToken)) != -1) { s15 = s58.substring(0, j3); s15 = s15 + s58.substring(j3 + ("&" + URLSequenceMonitor.refererEndToken).length()); } if (s15.length() > 0 && !s15.endsWith(CRLF)) { s15 = s15 + CRLF; } if (array != null) { Enumeration enumeration3 = array.elements(); while (enumeration3.hasMoreElements()) { String s63 = (String) enumeration3.nextElement(); if (TextUtils.startsWithIgnoreCase(s63, CUSTOM_HEADER)) { s15 = s15 + s63.substring(CUSTOM_HEADER.length()) + CRLF; } } } String s61 = socketsession.getStreamEncoding(); String s64 = ""; if (s61.length() > 0) { s64 = "Accept-charset: " + s61 + CRLF; } String s67 = s48 + " " + s29 + " " + s53 + CRLF + "User-Agent: " + s18 + CRLF + s64 + "Accept: */*" + CRLF + "Host: " + s33 + CRLF + s22 + s25 + s45 + s15; if (s27.length() == 0) { s67 = s67 + CRLF; } else { if (s61.length() > 0) { s64 = "; charset=" + s61; } s67 = s67 + CONTENT_TYPE_HEADER + s26 + s64 + CRLF + "Content-length: " + s27.length() + CRLF + CRLF + s27; } long l5 = System.currentTimeMillis(); long l19 = l5; InetAddress inetaddress = InetAddress.getByName(s17); long l20 = System.currentTimeMillis(); l6 = l20 - l19; String s77 = Platform.dottedIPString(inetaddress.getAddress()) + ":" + k; l19 = l20; socketstream = socketsession.connect(s77, inetaddress, k, s16, s37, j1, s6, s7, l1); l20 = System.currentTimeMillis(); l7 = l20 - l19; Socket socket = socketstream.socket; int k6 = (int) (l1 - System.currentTimeMillis()); if ((long) k6 <= kTimedOutValue) { throw new InterruptedIOException(); } if (s16.equals("https") && socketsession.context.getSetting("_urlCertDays").length() > 0) { try { SSLSession sslsession = ((SSLSocket) socketstream.socket).getSession(); X509Certificate ax509certificate[] = sslsession.getPeerCertificateChain(); int j7 = 0; for (int k7 = 0; k7 < ax509certificate.length; k7++) { X509Certificate x509certificate = ax509certificate[k7]; long l22 = System.currentTimeMillis(); long l23 = l22 + 0x5265c00L; int i8 = 0; while (true) { Date date = new Date(l23); try { x509certificate.checkValidity(date); } catch (CertificateExpiredException certificateexpiredexception) { if (i8 == 0) { i8++; } break; } catch (CertificateNotYetValidException certificatenotyetvalidexception) { break; } i8++; l23 += 0x5265c00L; } if (i8 <= 0) { continue; } if (j7 == 0) { j7 = i8; continue; } if (j7 > i8) { j7 = i8; } } if (j7 > 1) { l15 = j7; } if (j7 == 1) { l15 = 0L; } } catch (SSLPeerUnverifiedException sslpeerunverifiedexception) { /* empty */ } } Platform.setSocketTimeout(socket, k6); if ((debugURL & kDebugRequest) != 0) { LogManager.log("RunMonitor", "sending request... " + s67); } l19 = System.currentTimeMillis(); socketstream.transmit(s67); if (stringbuffer2 != null) { stringbuffer2.append(s67); } if ((debugURL & kDebugRequest) != 0) { LogManager.log("RunMonitor", "request sent"); } long al3[]; if (s50.equals("1.0")) { al3 = fillBuffer(socketsession, socketstream, l1, stringbuffer, l, l19); } else { al3 = fillBufferParse(s48, socketsession, socketstream, socket, l1, stringbuffer, l, l19); } if (stringbuffer2 != null) { stringbuffer2.append(stringbuffer.toString()); } if (!socketstream.receivedReply || al3.length > 2 && al3[2] == -1L) { socketstream.receivedEndOfStreamOnFirst = false; LogManager.log("RunMonitor", "reopening connection to " + inetaddress); socketstream.reconnect(); l19 = l20; socketstream = socketsession.connect(s77, inetaddress, k, s16, s37, j1, s6, s7, l1); l20 = System.currentTimeMillis(); l7 += l20 - l19; Socket socket1 = socketstream.socket; int i7 = (int) (l1 - System.currentTimeMillis()); if ((long) i7 <= kTimedOutValue) { throw new InterruptedIOException(); } Platform.setSocketTimeout(socket1, i7); if (debugURL != 0) { LogManager.log("RunMonitor", "sending request2..." + s67); System.out.println("URLOriginalMonitor : sending request2..." + s67); } l19 = System.currentTimeMillis(); socketstream.transmit(s67); if (stringbuffer2 != null) { stringbuffer2.append(s67); } if (debugURL != 0) { LogManager.log("RunMonitor", "request2 sent"); System.out.println("URLOriginalMonitor : request2 sent"); } if (s50.equals("1.0")) { al3 = fillBuffer(socketsession, socketstream, l1, stringbuffer, l, l19); } else { al3 = fillBufferParse(s48, socketsession, socketstream, socket1, l1, stringbuffer, l, l19); } if (stringbuffer2 != null) { stringbuffer2.append(stringbuffer.toString()); } } l12 = al3[0]; l8 = al3[1]; l20 = System.currentTimeMillis(); l9 = l20 - l19 - l8; l3 = l20 - l5; if ((debugURL & kDebugIO) != 0) { LogManager.log("RunMonitor", "total, duration: " + l3 + ", clock: " + System.currentTimeMillis()); } } } // 5637 if ((debugURL & kDebugData) != 0) { LogManager.log("RunMonitor", "content=" + stringbuffer); } URLScannerInputStream urlscannerinputstream = new URLScannerInputStream(stringbuffer, l2); urlscannerinputstream.parse(); if (urlscannerinputstream.contentLength != -1L) { l12 = urlscannerinputstream.contentLength; } l10 = urlscannerinputstream.lastModified; l11 = urlscannerinputstream.date; s21 = urlscannerinputstream.location; l2 = urlscannerinputstream.status; if (j > 0) { l2 = getURLStatus_ForBackupToRegularMeansOnly(socketsession, l2, s, 0, j); } if (debugURL != 0) { System.out.println("Status6 scanner.status: " + l2); } if ((debugURL & kDebugReply) != 0) { if (l2 != 200L) { LogManager.log("RunMonitor", "status=" + l2 + ", reply=" + stringbuffer); } else { LogManager.log("RunMonitor", "status=" + l2); } } if (socketstream != null) { socketstream.keepAlive = urlscannerinputstream.isKeepAlive(); } if (!socketsession.inRemoteRequest) { flag = urlscannerinputstream.refreshRedirect; } // 5905 } catch (UnknownHostException e) { l2 = kURLBadHostNameError; if (debugURL != 0) { System.out.println("Status7 kURLBadHostNameError: " + l2 + " exception: " + e.toString()); } } catch (InterruptedIOException e) { l2 = kURLTimeoutError; if (debugURL != 0) { System.out.println("Status8 kURLTimeoutError: " + l2 + " exception: " + e.toString()); } } catch (SocketException e) { if (debugURL != 0) { e.printStackTrace(); LogManager.log("RunMonitor", "socket exception, " + e); } if (Platform.noRoute(e)) { l2 = kURLNoRouteToHostError; if (debugURL != 0) { System.out.println("Status9 kURLNoRouteToHostError: " + l2 + " exception: " + e.toString()); } } else { l2 = kURLNoConnectionError; if (debugURL != 0) { System.out.println("Status10 kURLNoConnectionError: " + l2 + " exception: " + e.toString()); } if (Platform.isWindows()) { l2 = kSSL2NotFoundError; if (debugURL != 0) { System.out.println("Status11 kSSL2NotFoundError: " + l2 + " exception: " + e.toString()); } } } } catch (Exception e) { String s34 = e.getClass() + ", " + e.getMessage(); if (s34.indexOf("SSLException") != -1 && Platform.isWindows()) { String s38 = s17 + ":" + k; addSSL2Only(s38, s + ", " + s34); l2 = kSSL2NotFoundError; if (debugURL != 0) { System.out.println("Status12 kSSL2NotFoundError: " + l2 + " exception: " + e.toString()); } } else { e.printStackTrace(); l2 = kSSL2NotFoundError; if (debugURL != 0) { System.out.println("Status13 kSSL2NotFoundError: " + l2 + " exception: " + e.toString()); } } } finally { if (j > 0) { l2 = getURLStatus_ForBackupToRegularMeansOnly(socketsession, l2, s, 0, j); } if (socketstream != null) { if (socketstream.receivedEndOfStreamOnFirst) { String s79 = s17 + ":" + k; addSSL2Only(s79, s + ", " + " first line null"); l2 = kSSL2NotFoundError; if (debugURL != 0) { System.out.println("Status14 kSSL2NotFoundError: " + l2); } socketstream.receivedEndOfStreamOnFirst = false; } socketsession.release(socketstream); } } // 6637 if (200L < l2 && l2 < 300L && socketsession.context.getSetting("_urlEnable2xxStatus").length() == 0) { l2 = 200L; } if (debugURL != 0) { System.out.println("Status15 200: " + l2); } if (l2 == 301L || l2 == 302L || l2 == 303L || l2 == 307L || flag) { if (s21 != null) { s21 = TextUtils.unescapeHTML(s21); s21 = resolveURL(s21, new URLInfo(s1), ""); socketsession.refererURL = s21; long l16 = socketsession.context.getSettingAsLong("_urlRedirectMax", DEFAULT_MAX_REDIRECTS); if ((long) i <= l16) { if ((debugURL & kDebugRequest) != 0) { LogManager.log("RunMonitor", "redirect=" + s21); } socketsession.updateCookies(stringbuffer.toString(), s); if (stringbuffer1 != null) { stringbuffer1.setLength(0); stringbuffer1.append(s21); } if (flag5 && concatBuffer != null) { concatBuffer.append(stringbuffer.toString()); } stringbuffer.setLength(0); s8 = socketsession.originalUserName; s9 = socketsession.originalPassword; long al1[] = check1URL(socketsession, s21, s21, s2, s3, s4, s5, s6, s7, null, s8, s9, s2, stringbuffer, l, s11, i + 1, l1, stringbuffer1, stringbuffer2); l2 = al1[0]; if (j > 0) { l2 = getURLStatus_ForBackupToRegularMeansOnly(socketsession, l2, s21, 0, j); } if (debugURL != 0) { System.out.println("Status16 redirectResult: " + l2); } l10 = al1[3]; l11 = al1[4]; l3 += al1[1]; l12 += al1[2]; l6 += al1[5]; l7 += al1[6]; l8 += al1[7]; l9 += al1[8]; } } } else { if (l2 == (long) kURLNoStatusError) { if (socketsession.context.getSetting("_urlAllowNoStatus").length() > 0) { l2 = kURLok; if (debugURL != 0) { System.out.println("Status17 kURLok: " + l2); } } else { LogManager.log("Error", "URL missing status: " + s); } } if (flag5 && concatBuffer != null) { concatBuffer.append(stringbuffer.toString()); stringbuffer.setLength(0); stringbuffer.append(concatBuffer.toString()); concatBuffer = null; } String s30 = I18N.UnicodeToString(stringbuffer.toString(), I18N.nullEncoding()); if (l2 == 200L && s4.length() != 0) { int i1 = TextUtils.matchExpression(s30, s4); if (i1 != Monitor.kURLok && I18N.hasUnicode(s4)) { String s39 = getHTMLEncoding(s30); i1 = TextUtils.matchExpression(s30, I18N.UnicodeToString(s4, s39)); } if (i1 == 200) { l2 = kURLContentErrorFound; } if (debugURL != 0) { System.out.println("Status18 kURLContentErrorFound: " + l2); } } if (l2 == 200L && s3.length() != 0) { l2 = TextUtils.matchExpression(s30, s3); if (debugURL != 0) { System.out.println("Status19 TextUtils.matchExpression(contents,match): " + l2); } if (l2 != (long) Monitor.kURLok && I18N.hasUnicode(s3)) { String s35 = getHTMLEncoding(s30); l2 = TextUtils.matchExpression(s30, I18N.UnicodeToString(s3, s35)); if (debugURL != 0) { System.out.println( "Status20 TextUtils.matchExpression(contents, I18N.UnicodeToString(match,encoding): " + l2); } } } } if (socketsession.context.getSetting("_urlDetailLogEnabled").length() > 0 && s.indexOf("get.exe") == -1) { String s31 = ""; if (s10.length() > 0) { s31 = "[" + HTTPUtils.getLocationIDByURL(s10) + "]"; } LogManager.log(socketsession.context.getSetting(pURLLogName), s31 + s + "\t" + l2 + "\t" + l3 + "\t" + l12 + "\t" + l10 + "\t" + l11 + "\t" + l6 + "\t" + l7 + "\t" + l8 + "\t" + l9 + "\t" + socketsession.context.getProperty(pName) + "\t" + socketsession.context.getProperty(pGroupID) + "\t" + socketsession.context.getProperty(pID)); } if (!socketsession.inRemoteRequest) { internalURLs++; internalURLBytes += l12; internalURLDuration += l3; if (l2 != 200L) { internalURLErrors++; } } if (s10.length() > 0) { internalRemoteURLs++; internalRemoteBytes += l12; internalRemoteDuration += l3; if (l2 != 200L) { internalRemoteErrors++; } } else if (s16.equals("https")) { if (flag2) { internalSecureURLs++; internalSecureBytes += l12; internalSecureDuration += l3; if (l2 != 200L) { internalSecureErrors++; } } else { internalSecureJavaURLs++; internalSecureJavaBytes += l12; internalSecureJavaDuration += l3; if (l2 != 200L) { internalSecureJavaErrors++; } } } else if (!socketsession.inRemoteRequest) { internalJavaURLs++; internalJavaBytes += l12; internalJavaDuration += l3; if (l2 != 200L) { internalJavaErrors++; } } long al[] = new long[10]; al[0] = l2; if (debugURL != 0) { System.out.println("Status21 #############################results[0]: " + l2); } al[1] = l3; al[2] = l12; al[3] = l10; al[4] = l11; al[5] = l6; al[6] = l7; al[7] = l8; al[8] = l9; al[9] = l15; return al; }
From source file:com.spotify.helios.client.DefaultRequestDispatcher.java
/** * Sets up a connection, retrying on connect failure. *//*from w w w .j a v a2s .c o m*/ private HttpURLConnection connect(final URI uri, final String method, final byte[] entity, final Map<String, List<String>> headers) throws URISyntaxException, IOException, TimeoutException, InterruptedException, HeliosException { final long deadline = currentTimeMillis() + RETRY_TIMEOUT_MILLIS; final int offset = ThreadLocalRandom.current().nextInt(); while (currentTimeMillis() < deadline) { final List<URI> endpoints = endpointSupplier.get(); if (endpoints.isEmpty()) { throw new RuntimeException("failed to resolve master"); } log.debug("endpoint uris are {}", endpoints); // Resolve hostname into IPs so client will round-robin and retry for multiple A records. // Keep a mapping of IPs to hostnames for TLS verification. final List<URI> ipEndpoints = Lists.newArrayList(); final Map<URI, URI> ipToHostnameUris = Maps.newHashMap(); for (final URI hnUri : endpoints) { try { final InetAddress[] ips = InetAddress.getAllByName(hnUri.getHost()); for (final InetAddress ip : ips) { final URI ipUri = new URI(hnUri.getScheme(), hnUri.getUserInfo(), ip.getHostAddress(), hnUri.getPort(), hnUri.getPath(), hnUri.getQuery(), hnUri.getFragment()); ipEndpoints.add(ipUri); ipToHostnameUris.put(ipUri, hnUri); } } catch (UnknownHostException e) { log.warn("Unable to resolve hostname {} into IP address: {}", hnUri.getHost(), e); } } for (int i = 0; i < ipEndpoints.size() && currentTimeMillis() < deadline; i++) { final URI ipEndpoint = ipEndpoints.get(positive(offset + i) % ipEndpoints.size()); final String fullpath = ipEndpoint.getPath() + uri.getPath(); final String scheme = ipEndpoint.getScheme(); final String host = ipEndpoint.getHost(); final int port = ipEndpoint.getPort(); if (!VALID_PROTOCOLS.contains(scheme) || host == null || port == -1) { throw new HeliosException(String.format( "Master endpoints must be of the form \"%s://heliosmaster.domain.net:<port>\"", VALID_PROTOCOLS_STR)); } final URI realUri = new URI(scheme, host + ":" + port, fullpath, uri.getQuery(), null); AgentProxy agentProxy = null; Deque<Identity> identities = Queues.newArrayDeque(); try { if (scheme.equals("https")) { agentProxy = AgentProxies.newInstance(); for (final Identity identity : agentProxy.list()) { if (identity.getPublicKey().getAlgorithm().equals("RSA")) { // only RSA keys will work with our TLS implementation identities.offerLast(identity); } } } } catch (Exception e) { log.warn("Couldn't get identities from ssh-agent", e); } try { do { final Identity identity = identities.poll(); try { log.debug("connecting to {}", realUri); final HttpURLConnection connection = connect0(realUri, method, entity, headers, ipToHostnameUris.get(ipEndpoint).getHost(), agentProxy, identity); final int responseCode = connection.getResponseCode(); if (((responseCode == HTTP_FORBIDDEN) || (responseCode == HTTP_UNAUTHORIZED)) && !identities.isEmpty()) { // there was some sort of security error. if we have any more SSH identities to try, // retry with the next available identity log.debug("retrying with next SSH identity since {} failed", identity.getComment()); continue; } return connection; } catch (ConnectException | SocketTimeoutException | UnknownHostException e) { // UnknownHostException happens if we can't resolve hostname into IP address. // UnknownHostException's getMessage method returns just the hostname which is a // useless message, so log the exception class name to provide more info. log.debug(e.toString()); // Connecting failed, sleep a bit to avoid hammering and then try another endpoint Thread.sleep(200); } } while (false); } finally { if (agentProxy != null) { agentProxy.close(); } } } log.warn("Failed to connect, retrying in 5 seconds."); Thread.sleep(5000); } throw new TimeoutException("Timed out connecting to master"); }
From source file:org.alfresco.filesys.config.ServerConfigurationBean.java
/** * Process the CIFS server configuration *//*from www . j av a 2 s .c o m*/ protected void processCIFSServerConfig() { // If the configuration section is not valid then CIFS is disabled if (cifsConfigBean == null) { removeConfigSection(CIFSConfigSection.SectionName); return; } // Check if the server has been disabled if (!cifsConfigBean.getServerEnabled()) { removeConfigSection(CIFSConfigSection.SectionName); return; } // Before we go any further, let's make sure there's a compatible authenticator in the authentication chain. ICifsAuthenticator authenticator = cifsConfigBean.getAuthenticator(); if (authenticator == null || authenticator instanceof ActivateableBean && !((ActivateableBean) authenticator).isActive()) { logger.error("No enabled CIFS authenticator found in authentication chain. CIFS Server disabled"); removeConfigSection(CIFSConfigSection.SectionName); return; } // Create the CIFS server configuration section CIFSConfigSection cifsConfig = new CIFSConfigSection(this); try { // Check if native code calls should be disabled on Windows if (cifsConfigBean.getDisableNativeCode()) { // Disable native code calls so that the JNI DLL is not required cifsConfig.setNativeCodeDisabled(true); m_disableNativeCode = true; // Warning logger.warn("CIFS server native calls disabled, JNI code will not be used"); } // Get the network broadcast address // // Note: We need to set this first as the call to getLocalDomainName() may use a NetBIOS // name lookup, so the broadcast mask must be set before then. String broadcastAddess = cifsConfigBean.getBroadcastAddress(); if (broadcastAddess != null && broadcastAddess.length() > 0) { // Check if the broadcast mask is a valid numeric IP address if (IPAddress.isNumericAddress(broadcastAddess) == false) { throw new AlfrescoRuntimeException("CIFS Invalid broadcast mask, must be n.n.n.n format"); } // Set the network broadcast mask cifsConfig.setBroadcastMask(broadcastAddess); } // Get the terminal server address List<String> terminalServerList = cifsConfigBean.getTerminalServerList(); if (terminalServerList != null && terminalServerList.size() > 0) { // Check if the terminal server address is a valid numeric IP address for (String terminalServerAddress : terminalServerList) { if (IPAddress.isNumericAddress(terminalServerAddress) == false) throw new AlfrescoRuntimeException( "Invalid terminal server address, must be n.n.n.n format"); } // Set the terminal server address cifsConfig.setTerminalServerList(terminalServerList); } // Get the load balancer address List<String> loadBalancerList = cifsConfigBean.getLoadBalancerList(); if (loadBalancerList != null && loadBalancerList.size() > 0) { // Check if the load balancer address is a valid numeric IP address for (String loadBalancerAddress : loadBalancerList) { if (IPAddress.isNumericAddress(loadBalancerAddress) == false) throw new AlfrescoRuntimeException("Invalid load balancer address, must be n.n.n.n format"); } // Set the terminal server address cifsConfig.setLoadBalancerList(loadBalancerList); } // Get the host configuration String hostName = cifsConfigBean.getServerName(); if (hostName == null || hostName.length() == 0) { throw new AlfrescoRuntimeException("CIFS Host name not specified or invalid"); } // Get the local server name String srvName = getLocalServerName(true); // Check if the host name contains the local name token int pos = hostName.indexOf(TokenLocalName); if (pos != -1) { // Rebuild the host name substituting the token with the local server name StringBuilder hostStr = new StringBuilder(); hostStr.append(hostName.substring(0, pos)); hostStr.append(srvName); pos += TokenLocalName.length(); if (pos < hostName.length()) { hostStr.append(hostName.substring(pos)); } hostName = hostStr.toString(); } // Make sure the CIFS server name does not match the local server name if (hostName.toUpperCase().equals(srvName.toUpperCase()) && getPlatformType() == Platform.Type.WINDOWS) { throw new AlfrescoRuntimeException("CIFS server name must be unique"); } // Check if the host name is longer than 15 characters. NetBIOS only allows a maximum of 16 characters in // the // server name with the last character reserved for the service type. if (hostName.length() > 15) { // Truncate the CIFS server name hostName = hostName.substring(0, 15); // Output a warning logger.warn("CIFS server name is longer than 15 characters, truncated to " + hostName); } // Set the CIFS server name cifsConfig.setServerName(hostName.toUpperCase()); setServerName(hostName.toUpperCase()); // Get the domain/workgroup name String domain = cifsConfigBean.getDomainName(); if (domain != null && domain.length() > 0) { // Set the domain/workgroup name cifsConfig.setDomainName(domain.toUpperCase()); } else { // Get the local domain/workgroup name String localDomain = getLocalDomainName(); if (localDomain == null && (getPlatformType() != Platform.Type.WINDOWS || isNativeCodeDisabled())) { // Use a default domain/workgroup name localDomain = "WORKGROUP"; // Output a warning logger.warn("CIFS, Unable to get local domain/workgroup name, using default of " + localDomain + ". This may be due to firewall settings or incorrect <broadcast> setting)"); } // Set the local domain/workgroup that the CIFS server belongs to cifsConfig.setDomainName(localDomain); } // Check for a server comment String comment = cifsConfigBean.getServerComment(); if (comment != null && comment.length() > 0) { cifsConfig.setComment(comment); } // Set the maximum virtual circuits per session if (cifsConfigBean.getMaximumVirtualCircuits() < VirtualCircuitList.MinCircuits || cifsConfigBean.getMaximumVirtualCircuits() > VirtualCircuitList.MaxCircuits) throw new AlfrescoRuntimeException("Invalid virtual circuits value, valid range is " + VirtualCircuitList.MinCircuits + " - " + VirtualCircuitList.MaxCircuits); else cifsConfig.setMaximumVirtualCircuits(cifsConfigBean.getMaximumVirtualCircuits()); // Check for a bind address // Check if the network adapter name has been specified String bindToAdapter = cifsConfigBean.getBindToAdapter(); String bindTo; if (bindToAdapter != null && bindToAdapter.length() > 0) { // Get the IP address for the adapter InetAddress bindAddr = parseAdapterName(bindToAdapter); // Set the bind address for the server cifsConfig.setSMBBindAddress(bindAddr); } else if ((bindTo = cifsConfigBean.getBindToAddress()) != null && bindTo.length() > 0 && !bindTo.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(bindTo); // Set the bind address for the server cifsConfig.setSMBBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("CIFS Unable to bind to address :" + bindTo, ex); } } // Get the authenticator if (authenticator != null) { cifsConfig.setAuthenticator(authenticator); } else { throw new AlfrescoRuntimeException("CIFS authenticator not specified"); } // Check if the host announcer has been disabled if (!cifsConfigBean.getHostAccouncerEnabled()) { // Switch off the host announcer cifsConfig.setHostAnnouncer(false); // Log that host announcements are not enabled logger.info("CIFS Host announcements not enabled"); } else { // Check for an announcement interval Integer interval = cifsConfigBean.getHostAccounceInterval(); if (interval != null) { cifsConfig.setHostAnnounceInterval(interval); } // Check if the domain name has been set, this is required if the // host announcer is enabled if (cifsConfig.getDomainName() == null) { throw new AlfrescoRuntimeException( "CIFS Domain name must be specified if host announcement is enabled"); } // Enable host announcement cifsConfig.setHostAnnouncer(true); } // Check if NetBIOS SMB is enabled NetBIOSSMBConfigBean netBIOSSMBConfigBean = cifsConfigBean.getNetBIOSSMB(); if (netBIOSSMBConfigBean != null) { // Check if NetBIOS over TCP/IP is enabled for the current platform String platformsStr = netBIOSSMBConfigBean.getPlatforms(); boolean platformOK = false; if (platformsStr != null && platformsStr.length() > 0) { // Parse the list of platforms that NetBIOS over TCP/IP is to be enabled for and // check if the current platform is included EnumSet<Platform.Type> enabledPlatforms = parsePlatformString(platformsStr); if (enabledPlatforms.contains(getPlatformType())) platformOK = true; } else { // No restriction on platforms platformOK = true; } // Enable the NetBIOS SMB support, if enabled for this platform cifsConfig.setNetBIOSSMB(platformOK); // Parse/check NetBIOS settings, if enabled if (cifsConfig.hasNetBIOSSMB()) { // Check if the broadcast mask has been specified if (cifsConfig.getBroadcastMask() == null) { throw new AlfrescoRuntimeException("CIFS Network broadcast mask not specified"); } // Check for a bind address String bindto = netBIOSSMBConfigBean.getBindTo(); if (bindto != null && bindto.length() > 0 && !bindto.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(bindto); // Set the bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("CIFS Invalid NetBIOS bind address:" + bindto, ex); } } else if (cifsConfig.hasSMBBindAddress()) { // Use the SMB bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(cifsConfig.getSMBBindAddress()); } else { // Get a list of all the local addresses InetAddress[] addrs = null; try { // Get the local server IP address list addrs = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); } catch (UnknownHostException ex) { logger.error("CIFS Failed to get local address list", ex); } // Check the address list for one or more valid local addresses filtering out the loopback // address int addrCnt = 0; if (addrs != null) { for (int i = 0; i < addrs.length; i++) { // Check for a valid address, filter out '127.0.0.1' and '0.0.0.0' addresses if (addrs[i].getHostAddress().equals("127.0.0.1") == false && addrs[i].getHostAddress().equals("0.0.0.0") == false) addrCnt++; } } // Check if any addresses were found if (addrCnt == 0) { // Enumerate the network adapter list Enumeration<NetworkInterface> niEnum = null; try { niEnum = NetworkInterface.getNetworkInterfaces(); } catch (SocketException ex) { } if (niEnum != null) { while (niEnum.hasMoreElements()) { // Get the current network interface NetworkInterface ni = niEnum.nextElement(); // Enumerate the addresses for the network adapter Enumeration<InetAddress> niAddrs = ni.getInetAddresses(); if (niAddrs != null) { // Check for any valid addresses while (niAddrs.hasMoreElements()) { InetAddress curAddr = niAddrs.nextElement(); if (curAddr.getHostAddress().equals("127.0.0.1") == false && curAddr.getHostAddress().equals("0.0.0.0") == false) addrCnt++; } } } // DEBUG if (addrCnt > 0 && logger.isDebugEnabled()) logger.debug("Found valid IP address from interface list"); } // Check if we found any valid network addresses if (addrCnt == 0) { // Log the available IP addresses if (logger.isDebugEnabled()) { logger.debug("Local address list dump :-"); if (addrs != null) { for (int i = 0; i < addrs.length; i++) logger.debug(" Address: " + addrs[i]); } else { logger.debug(" No addresses"); } } // Throw an exception to stop the CIFS/NetBIOS name server from starting throw new AlfrescoRuntimeException( "Failed to get IP address(es) for the local server, check hosts file and/or DNS setup"); } } } // Check if the session port has been specified Integer portNum = netBIOSSMBConfigBean.getSessionPort(); if (portNum != null) { cifsConfig.setSessionPort(portNum); if (cifsConfig.getSessionPort() <= 0 || cifsConfig.getSessionPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS session port out of valid range"); } // Check if the name port has been specified portNum = netBIOSSMBConfigBean.getNamePort(); if (portNum != null) { cifsConfig.setNameServerPort(portNum); if (cifsConfig.getNameServerPort() <= 0 || cifsConfig.getNameServerPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS name port out of valid range"); } // Check if the datagram port has been specified portNum = netBIOSSMBConfigBean.getDatagramPort(); if (portNum != null) { cifsConfig.setDatagramPort(portNum); if (cifsConfig.getDatagramPort() <= 0 || cifsConfig.getDatagramPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS datagram port out of valid range"); } // Check for a bind address String attr = netBIOSSMBConfigBean.getBindTo(); if (attr != null && attr.length() > 0 && !attr.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(attr); // Set the bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new InvalidConfigurationException(ex.toString()); } } // Check for a bind address using the adapter name else if ((attr = netBIOSSMBConfigBean.getAdapter()) != null && attr.length() > 0) { // Get the bind address via the network adapter name InetAddress bindAddr = parseAdapterName(attr); cifsConfig.setNetBIOSBindAddress(bindAddr); } else if (cifsConfig.hasSMBBindAddress()) { // Use the SMB bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(cifsConfig.getSMBBindAddress()); } } } else { // Disable NetBIOS SMB support cifsConfig.setNetBIOSSMB(false); } // Check if TCP/IP SMB is enabled TcpipSMBConfigBean tcpipSMBConfigBean = cifsConfigBean.getTcpipSMB(); if (tcpipSMBConfigBean != null) { // Check if native SMB is enabled for the current platform String platformsStr = tcpipSMBConfigBean.getPlatforms(); boolean platformOK = false; if (platformsStr != null) { // Parse the list of platforms that native SMB is to be enabled for and // check if the current platform is included EnumSet<Platform.Type> enabledPlatforms = parsePlatformString(platformsStr); if (enabledPlatforms.contains(getPlatformType())) platformOK = true; } else { // No restriction on platforms platformOK = true; } // Enable the TCP/IP SMB support, if enabled for this platform cifsConfig.setTcpipSMB(platformOK); // Check if the port has been specified Integer portNum = tcpipSMBConfigBean.getPort(); if (portNum != null) { cifsConfig.setTcpipSMBPort(portNum); if (cifsConfig.getTcpipSMBPort() <= 0 || cifsConfig.getTcpipSMBPort() >= 65535) throw new AlfrescoRuntimeException("TCP/IP SMB port out of valid range"); } // Check if IPv6 support should be enabled if (tcpipSMBConfigBean.getIpv6Enabled()) { try { // Use the IPv6 bind all address cifsConfig.setSMBBindAddress(InetAddress.getByName("::")); // DEBUG if (logger.isInfoEnabled()) { logger.info("Enabled CIFS IPv6 bind address for native SMB"); } } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException( "CIFS Failed to enable IPv6 bind address, " + ex.getMessage()); } } } else { // Disable TCP/IP SMB support cifsConfig.setTcpipSMB(false); } // Check if Win32 NetBIOS is enabled Win32NetBIOSConfigBean win32NetBIOSConfigBean = cifsConfigBean.getWin32NetBIOS(); if (win32NetBIOSConfigBean != null) { // Check if the Win32 NetBIOS server name has been specified String win32Name = win32NetBIOSConfigBean.getName(); if (win32Name != null && win32Name.length() > 0) { // Validate the name if (win32Name.length() > 16) throw new AlfrescoRuntimeException("Invalid Win32 NetBIOS name, " + win32Name); // Set the Win32 NetBIOS file server name cifsConfig.setWin32NetBIOSName(win32Name); } // Check if the Win32 NetBIOS LANA has been specified String lanaStr = win32NetBIOSConfigBean.getLana(); if (lanaStr != null && lanaStr.length() > 0) { // Check if the LANA has been specified as an IP address or adapter name int lana = -1; if (IPAddress.isNumericAddress(lanaStr)) { // Convert the IP address to a LANA id lana = Win32NetBIOS.getLANAForIPAddress(lanaStr); if (lana == -1) throw new AlfrescoRuntimeException( "Failed to convert IP address " + lanaStr + " to a LANA"); } else if (lanaStr.length() > 1 && Character.isLetter(lanaStr.charAt(0))) { // Convert the network adapter to a LANA id lana = Win32NetBIOS.getLANAForAdapterName(lanaStr); if (lana == -1) throw new AlfrescoRuntimeException( "Failed to convert network adapter " + lanaStr + " to a LANA"); } else { try { lana = Integer.parseInt(lanaStr); } catch (NumberFormatException ex) { throw new AlfrescoRuntimeException("Invalid win32 NetBIOS LANA specified"); } } // LANA should be in the range 0-255 if (lana < 0 || lana > 255) throw new AlfrescoRuntimeException("Invalid Win32 NetBIOS LANA number, " + lana); // Set the LANA number cifsConfig.setWin32LANA(lana); } // Check if the native NetBIOS interface has been specified, either 'winsock' or 'netbios' String nativeAPI = win32NetBIOSConfigBean.getApi(); if (nativeAPI != null && nativeAPI.length() > 0) { // Validate the API type boolean useWinsock = true; if (nativeAPI.equalsIgnoreCase("netbios")) useWinsock = false; else if (nativeAPI.equalsIgnoreCase("winsock") == false) throw new AlfrescoRuntimeException( "Invalid NetBIOS API type, spefify 'winsock' or 'netbios'"); // Set the NetBIOS API to use cifsConfig.setWin32WinsockNetBIOS(useWinsock); } // Force the older NetBIOS API code to be used on 64Bit Windows if (cifsConfig.useWinsockNetBIOS() == true && X64.isWindows64()) { // Debug if (logger.isDebugEnabled()) logger.debug("Using older Netbios() API code"); // Use the older NetBIOS API code cifsConfig.setWin32WinsockNetBIOS(false); } // Check if the current operating system is supported by the Win32 // NetBIOS handler String osName = System.getProperty("os.name"); if (osName.startsWith("Windows") && (osName.endsWith("95") == false && osName.endsWith("98") == false && osName.endsWith("ME") == false) && isNativeCodeDisabled() == false) { // Call the Win32NetBIOS native code to make sure it is initialized if (Win32NetBIOS.LanaEnumerate() != null) { // Enable Win32 NetBIOS cifsConfig.setWin32NetBIOS(true); } else { logger.warn("No NetBIOS LANAs available"); } } else { // Win32 NetBIOS not supported on the current operating system cifsConfig.setWin32NetBIOS(false); } } else { // Disable Win32 NetBIOS cifsConfig.setWin32NetBIOS(false); } // Check if the Win32 host announcer has been disabled if (!cifsConfigBean.getWin32HostAnnouncerEnabled()) { // Switch off the Win32 host announcer cifsConfig.setWin32HostAnnouncer(false); // Log that host announcements are not enabled logger.info("Win32 host announcements not enabled"); } else { // Check for an announcement interval Integer interval = cifsConfigBean.getWin32HostAnnounceInterval(); if (interval != null) { cifsConfig.setWin32HostAnnounceInterval(interval); } // Check if the domain name has been set, this is required if the // host announcer is enabled if (cifsConfig.getDomainName() == null) throw new AlfrescoRuntimeException( "Domain name must be specified if host announcement is enabled"); // Enable Win32 NetBIOS host announcement cifsConfig.setWin32HostAnnouncer(true); } // Check if NetBIOS and/or TCP/IP SMB have been enabled if (cifsConfig.hasNetBIOSSMB() == false && cifsConfig.hasTcpipSMB() == false && cifsConfig.hasWin32NetBIOS() == false) throw new AlfrescoRuntimeException("NetBIOS SMB, TCP/IP SMB or Win32 NetBIOS must be enabled"); // Check if WINS servers are configured WINSConfigBean winsConfigBean = cifsConfigBean.getWINSConfig(); if (winsConfigBean != null && !winsConfigBean.isAutoDetectEnabled()) { // Get the primary WINS server String priWins = winsConfigBean.getPrimary(); if (priWins == null || priWins.length() == 0) throw new AlfrescoRuntimeException("No primary WINS server configured"); // Validate the WINS server address InetAddress primaryWINS = null; try { primaryWINS = InetAddress.getByName(priWins); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid primary WINS server address, " + priWins); } // Check if a secondary WINS server has been specified String secWins = winsConfigBean.getSecondary(); InetAddress secondaryWINS = null; if (secWins != null && secWins.length() > 0) { // Validate the secondary WINS server address try { secondaryWINS = InetAddress.getByName(secWins); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid secondary WINS server address, " + secWins); } } // Set the WINS server address(es) cifsConfig.setPrimaryWINSServer(primaryWINS); if (secondaryWINS != null) cifsConfig.setSecondaryWINSServer(secondaryWINS); // Pass the setting to the NetBIOS session class NetBIOSSession.setDefaultWINSServer(primaryWINS); } // Check if WINS is configured, if we are running on Windows and socket based NetBIOS is enabled else if (cifsConfig.hasNetBIOSSMB() && getPlatformType() == Platform.Type.WINDOWS && !isNativeCodeDisabled()) { // Get the WINS server list String winsServers = Win32NetBIOS.getWINSServerList(); if (winsServers != null) { // Use the first WINS server address for now StringTokenizer tokens = new StringTokenizer(winsServers, ","); String addr = tokens.nextToken(); try { // Convert to a network address and check if the WINS server is accessible InetAddress winsAddr = InetAddress.getByName(addr); Socket winsSocket = new Socket(); InetSocketAddress sockAddr = new InetSocketAddress(winsAddr, RFCNetBIOSProtocol.NAME_PORT); winsSocket.connect(sockAddr, 3000); winsSocket.close(); // Set the primary WINS server address cifsConfig.setPrimaryWINSServer(winsAddr); // Debug if (logger.isDebugEnabled()) logger.debug("Configuring to use WINS server " + addr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid auto WINS server address, " + addr); } catch (IOException ex) { if (logger.isDebugEnabled()) logger.debug("Failed to connect to auto WINS server " + addr); } } } // Check for session debug flags String flags = cifsConfigBean.getSessionDebugFlags(); int sessDbg = 0; if (flags != null && flags.length() > 0) { // Parse the flags flags = flags.toUpperCase(); StringTokenizer token = new StringTokenizer(flags, ","); while (token.hasMoreTokens()) { // Get the current debug flag token String dbg = token.nextToken().trim(); // Find the debug flag name int idx = 0; while (idx < m_sessDbgStr.length && m_sessDbgStr[idx].equalsIgnoreCase(dbg) == false) idx++; if (idx > m_sessDbgStr.length) throw new AlfrescoRuntimeException("Invalid session debug flag, " + dbg); // Set the debug flag sessDbg += 1 << idx; } } // Set the session debug flags cifsConfig.setSessionDebugFlags(sessDbg); // Check if NIO based socket code should be disabled if (cifsConfigBean.getDisableNIO()) { // Disable NIO based code cifsConfig.setDisableNIOCode(true); // DEBUG if (logger.isDebugEnabled()) logger.debug("NIO based code disabled for CIFS server"); } // Check if a session timeout is configured Integer tmo = cifsConfigBean.getSessionTimeout(); if (tmo != null) { // Validate the session timeout value cifsConfigBean.validateSessionTimeout(tmo); // Convert the session timeout to milliseconds cifsConfig.setSocketTimeout(tmo * 1000); } } catch (InvalidConfigurationException ex) { throw new AlfrescoRuntimeException(ex.getMessage()); } }
From source file:at.alladin.rmbt.controlServer.ResultResource.java
@Post("json") public String request(final String entity) { final String secret = getContext().getParameters().getFirstValue("RMBT_SECRETKEY"); addAllowOrigin();//from w w w . j a v a 2 s . c o m JSONObject request = null; final ErrorList errorList = new ErrorList(); final JSONObject answer = new JSONObject(); System.out.println(MessageFormat.format(labels.getString("NEW_RESULT"), getIP())); if (entity != null && !entity.isEmpty()) // try parse the string to a JSON object try { request = new JSONObject(entity); System.out.println(request); final String lang = request.optString("client_language"); // Load Language Files for Client final List<String> langs = Arrays .asList(settings.getString("RMBT_SUPPORTED_LANGUAGES").split(",\\s*")); if (langs.contains(lang)) { errorList.setLanguage(lang); labels = ResourceManager.getSysMsgBundle(new Locale(lang)); } // System.out.println(request.toString(4)); if (conn != null) { conn.setAutoCommit(false); final Test test = new Test(conn); if (request.optString("test_token").length() > 0) { final String[] token = request.getString("test_token").split("_"); try { // Check if UUID final UUID testUuid = UUID.fromString(token[0]); final String data = token[0] + "_" + token[1]; final String hmac = Helperfunctions.calculateHMAC(secret, data); if (hmac.length() == 0) errorList.addError("ERROR_TEST_TOKEN"); if (token[2].length() > 0 && hmac.equals(token[2])) { final List<String> clientNames = Arrays .asList(settings.getString("RMBT_CLIENT_NAME").split(",\\s*")); final List<String> clientVersions = Arrays .asList(settings.getString("RMBT_VERSION_NUMBER").split(",\\s*")); if (test.getTestByUuid(testUuid) > 0) if (clientNames.contains(request.optString("client_name")) && clientVersions.contains(request.optString("client_version"))) { test.setFields(request); final String networkOperator = request .optString("telephony_network_operator"); if (MCC_MNC_PATTERN.matcher(networkOperator).matches()) test.getField("network_operator").setString(networkOperator); else test.getField("network_operator").setString(null); final String networkSimOperator = request .optString("telephony_network_sim_operator"); if (MCC_MNC_PATTERN.matcher(networkSimOperator).matches()) test.getField("network_sim_operator").setString(networkSimOperator); else test.getField("network_sim_operator").setString(null); // RMBTClient Info final String ipLocalRaw = request.optString("test_ip_local", null); if (ipLocalRaw != null) { final InetAddress ipLocalAddress = InetAddresses.forString(ipLocalRaw); // original address (not filtered) test.getField("client_ip_local") .setString(InetAddresses.toAddrString(ipLocalAddress)); // anonymized local address final String ipLocalAnonymized = Helperfunctions .anonymizeIp(ipLocalAddress); test.getField("client_ip_local_anonymized") .setString(ipLocalAnonymized); // type of local ip test.getField("client_ip_local_type") .setString(Helperfunctions.IpType(ipLocalAddress)); // public ip final InetAddress ipPublicAddress = InetAddresses .forString(test.getField("client_public_ip").toString()); test.getField("nat_type").setString( Helperfunctions.getNatType(ipLocalAddress, ipPublicAddress)); } final String ipServer = request.optString("test_ip_server", null); if (ipServer != null) { final InetAddress testServerInetAddress = InetAddresses .forString(ipServer); test.getField("server_ip") .setString(InetAddresses.toAddrString(testServerInetAddress)); } //log IP address final String ipSource = getIP(); test.getField("source_ip").setString(ipSource); //log anonymized address try { final InetAddress ipSourceIP = InetAddress.getByName(ipSource); final String ipSourceAnonymized = Helperfunctions .anonymizeIp(ipSourceIP); test.getField("source_ip_anonymized").setString(ipSourceAnonymized); } catch (UnknownHostException e) { System.out.println("Exception thrown:" + e); } // Additional Info ////////////////////////////////////////////////// // extended test stats: ////////////////////////////////////////////////// final TestStat extendedTestStat = TestStat .checkForSubmittedTestStats(request, test.getUid()); if (extendedTestStat != null) { final TestStatDao testStatDao = new TestStatDao(conn); testStatDao.save(extendedTestStat); } ////////////////////////////////////////////////// JSONArray speedData = request.optJSONArray("speed_detail"); if (speedData != null && !test.hasError()) { final PreparedStatement psSpeed = conn.prepareStatement( "INSERT INTO test_speed (test_id, upload, thread, time, bytes) VALUES (?,?,?,?,?)"); psSpeed.setLong(1, test.getUid()); for (int i = 0; i < speedData.length(); i++) { final JSONObject item = speedData.getJSONObject(i); final String direction = item.optString("direction"); if (direction != null && (direction.equals("download") || direction.equals("upload"))) { psSpeed.setBoolean(2, direction.equals("upload")); psSpeed.setInt(3, item.optInt("thread")); psSpeed.setLong(4, item.optLong("time")); psSpeed.setLong(5, item.optLong("bytes")); psSpeed.executeUpdate(); } } } final JSONArray pingData = request.optJSONArray("pings"); if (pingData != null && !test.hasError()) { final PreparedStatement psPing = conn.prepareStatement( "INSERT INTO ping (test_id, value, value_server, time_ns) " + "VALUES(?,?,?,?)"); psPing.setLong(1, test.getUid()); for (int i = 0; i < pingData.length(); i++) { final JSONObject pingDataItem = pingData.getJSONObject(i); long valueClient = pingDataItem.optLong("value", -1); if (valueClient >= 0) psPing.setLong(2, valueClient); else psPing.setNull(2, Types.BIGINT); long valueServer = pingDataItem.optLong("value_server", -1); if (valueServer >= 0) psPing.setLong(3, valueServer); else psPing.setNull(3, Types.BIGINT); long timeNs = pingDataItem.optLong("time_ns", -1); if (timeNs >= 0) psPing.setLong(4, timeNs); else psPing.setNull(4, Types.BIGINT); psPing.executeUpdate(); } } final JSONArray geoData = request.optJSONArray("geoLocations"); if (geoData != null && !test.hasError()) for (int i = 0; i < geoData.length(); i++) { final JSONObject geoDataItem = geoData.getJSONObject(i); if (geoDataItem.optLong("tstamp", 0) != 0 && geoDataItem.optDouble("geo_lat", 0) != 0 && geoDataItem.optDouble("geo_long", 0) != 0) { final GeoLocation geoloc = new GeoLocation(conn); geoloc.setTest_id(test.getUid()); final long clientTime = geoDataItem.optLong("tstamp"); final Timestamp tstamp = java.sql.Timestamp .valueOf(new Timestamp(clientTime).toString()); geoloc.setTime(tstamp, test.getField("timezone").toString()); geoloc.setAccuracy( (float) geoDataItem.optDouble("accuracy", 0)); geoloc.setAltitude(geoDataItem.optDouble("altitude", 0)); geoloc.setBearing((float) geoDataItem.optDouble("bearing", 0)); geoloc.setSpeed((float) geoDataItem.optDouble("speed", 0)); geoloc.setProvider(geoDataItem.optString("provider", "")); geoloc.setGeo_lat(geoDataItem.optDouble("geo_lat", 0)); geoloc.setGeo_long(geoDataItem.optDouble("geo_long", 0)); geoloc.setTime_ns(geoDataItem.optLong("time_ns", 0)); geoloc.storeLocation(); // Store Last Geolocation as // Testlocation if (i == geoData.length() - 1) { if (geoDataItem.has("geo_lat")) test.getField("geo_lat").setField(geoDataItem); if (geoDataItem.has("geo_long")) test.getField("geo_long").setField(geoDataItem); if (geoDataItem.has("accuracy")) test.getField("geo_accuracy").setField(geoDataItem); if (geoDataItem.has("provider")) test.getField("geo_provider").setField(geoDataItem); } if (geoloc.hasError()) { errorList.addError(geoloc.getError()); break; } } } final JSONArray cellData = request.optJSONArray("cellLocations"); if (cellData != null && !test.hasError()) for (int i = 0; i < cellData.length(); i++) { final JSONObject cellDataItem = cellData.getJSONObject(i); final Cell_location cellloc = new Cell_location(conn); cellloc.setTest_id(test.getUid()); final long clientTime = cellDataItem.optLong("time"); final Timestamp tstamp = java.sql.Timestamp .valueOf(new Timestamp(clientTime).toString()); cellloc.setTime(tstamp, test.getField("timezone").toString()); cellloc.setTime_ns(cellDataItem.optLong("time_ns", 0)); cellloc.setLocation_id(cellDataItem.optInt("location_id", 0)); cellloc.setArea_code(cellDataItem.optInt("area_code", 0)); cellloc.setPrimary_scrambling_code( cellDataItem.optInt("primary_scrambling_code", 0)); cellloc.storeLocation(); if (cellloc.hasError()) { errorList.addError(cellloc.getError()); break; } } int signalStrength = Integer.MAX_VALUE; //measured as RSSI (GSM,UMTS,Wifi) int lteRsrp = Integer.MAX_VALUE; // signal strength measured as RSRP int lteRsrq = Integer.MAX_VALUE; // signal quality of LTE measured as RSRQ int linkSpeed = UNKNOWN; final int networkType = test.getField("network_type").intValue(); final JSONArray signalData = request.optJSONArray("signals"); if (signalData != null && !test.hasError()) { for (int i = 0; i < signalData.length(); i++) { final JSONObject signalDataItem = signalData.getJSONObject(i); final Signal signal = new Signal(conn); signal.setTest_id(test.getUid()); final long clientTime = signalDataItem.optLong("time"); final Timestamp tstamp = java.sql.Timestamp .valueOf(new Timestamp(clientTime).toString()); signal.setTime(tstamp, test.getField("timezone").toString()); final int thisNetworkType = signalDataItem.optInt("network_type_id", 0); signal.setNetwork_type_id(thisNetworkType); final int thisSignalStrength = signalDataItem .optInt("signal_strength", UNKNOWN); if (thisSignalStrength != UNKNOWN) signal.setSignal_strength(thisSignalStrength); signal.setGsm_bit_error_rate( signalDataItem.optInt("gsm_bit_error_rate", 0)); final int thisLinkSpeed = signalDataItem.optInt("wifi_link_speed", 0); signal.setWifi_link_speed(thisLinkSpeed); final int rssi = signalDataItem.optInt("wifi_rssi", UNKNOWN); if (rssi != UNKNOWN) signal.setWifi_rssi(rssi); lteRsrp = signalDataItem.optInt("lte_rsrp", UNKNOWN); lteRsrq = signalDataItem.optInt("lte_rsrq", UNKNOWN); final int lteRssnr = signalDataItem.optInt("lte_rssnr", UNKNOWN); final int lteCqi = signalDataItem.optInt("lte_cqi", UNKNOWN); final long timeNs = signalDataItem.optLong("time_ns", UNKNOWN); signal.setLte_rsrp(lteRsrp); signal.setLte_rsrq(lteRsrq); signal.setLte_rssnr(lteRssnr); signal.setLte_cqi(lteCqi); signal.setTime_ns(timeNs); signal.storeSignal(); if (networkType == 99) // wlan { if (rssi < signalStrength && rssi != UNKNOWN) signalStrength = rssi; } else if (thisSignalStrength < signalStrength && thisSignalStrength != UNKNOWN) signalStrength = thisSignalStrength; if (thisLinkSpeed != 0 && (linkSpeed == UNKNOWN || thisLinkSpeed < linkSpeed)) linkSpeed = thisLinkSpeed; if (signal.hasError()) { errorList.addError(signal.getError()); break; } } // set rssi value (typically GSM,UMTS, but also old LTE-phones) if (signalStrength != Integer.MAX_VALUE && signalStrength != UNKNOWN && signalStrength != 0) // 0 dBm is out of range ((IntField) test.getField("signal_strength")) .setValue(signalStrength); // set rsrp value (typically LTE) if (lteRsrp != Integer.MAX_VALUE && lteRsrp != UNKNOWN && lteRsrp != 0) // 0 dBm is out of range ((IntField) test.getField("lte_rsrp")).setValue(lteRsrp); // set rsrq value (LTE) if (lteRsrq != Integer.MAX_VALUE && lteRsrq != UNKNOWN) ((IntField) test.getField("lte_rsrq")).setValue(lteRsrq); if (linkSpeed != Integer.MAX_VALUE && linkSpeed != UNKNOWN) ((IntField) test.getField("wifi_link_speed")).setValue(linkSpeed); } // use max network type final String sqlMaxNetworkType = "SELECT nt.uid" + " FROM signal s" + " JOIN network_type nt" + " ON s.network_type_id=nt.uid" + " WHERE test_id=?" + " ORDER BY nt.technology_order DESC" + " LIMIT 1"; final PreparedStatement psMaxNetworkType = conn .prepareStatement(sqlMaxNetworkType); psMaxNetworkType.setLong(1, test.getUid()); if (psMaxNetworkType.execute()) { final ResultSet rs = psMaxNetworkType.getResultSet(); if (rs.next()) { final int maxNetworkType = rs.getInt("uid"); if (maxNetworkType != 0) ((IntField) test.getField("network_type")) .setValue(maxNetworkType); } } /* * check for different types (e.g. * 2G/3G) */ final String sqlAggSignal = "WITH agg AS" + " (SELECT array_agg(DISTINCT nt.group_name ORDER BY nt.group_name) agg" + " FROM signal s" + " JOIN network_type nt ON s.network_type_id=nt.uid WHERE test_id=?)" + " SELECT uid FROM agg JOIN network_type nt ON nt.aggregate=agg"; final PreparedStatement psAgg = conn.prepareStatement(sqlAggSignal); psAgg.setLong(1, test.getUid()); if (psAgg.execute()) { final ResultSet rs = psAgg.getResultSet(); if (rs.next()) { final int newNetworkType = rs.getInt("uid"); if (newNetworkType != 0) ((IntField) test.getField("network_type")) .setValue(newNetworkType); } } if (test.getField("network_type").intValue() <= 0) errorList.addError("ERROR_NETWORK_TYPE"); final IntField downloadField = (IntField) test.getField("speed_download"); if (downloadField.isNull() || downloadField.intValue() <= 0 || downloadField.intValue() > 10000000) // 10 gbit/s limit errorList.addError("ERROR_DOWNLOAD_INSANE"); final IntField upField = (IntField) test.getField("speed_upload"); if (upField.isNull() || upField.intValue() <= 0 || upField.intValue() > 10000000) // 10 gbit/s limit errorList.addError("ERROR_UPLOAD_INSANE"); //clients still report eg: "test_ping_shortest":9195040 (note the 'test_' prefix there!) final LongField pingField = (LongField) test.getField("ping_shortest"); if (pingField.isNull() || pingField.longValue() <= 0 || pingField.longValue() > 60000000000L) // 1 min limit errorList.addError("ERROR_PING_INSANE"); if (errorList.isEmpty()) test.getField("status").setString("FINISHED"); else test.getField("status").setString("ERROR"); test.storeTestResults(false); if (test.hasError()) errorList.addError(test.getError()); } else errorList.addError("ERROR_CLIENT_VERSION"); } else errorList.addError("ERROR_TEST_TOKEN_MALFORMED"); } catch (final IllegalArgumentException e) { e.printStackTrace(); errorList.addError("ERROR_TEST_TOKEN_MALFORMED"); } } else errorList.addError("ERROR_TEST_TOKEN_MISSING"); conn.commit(); } else errorList.addError("ERROR_DB_CONNECTION"); } catch (final JSONException e) { errorList.addError("ERROR_REQUEST_JSON"); System.out.println("Error parsing JSDON Data " + e.toString()); e.printStackTrace(); } catch (final SQLException e) { System.out.println("Error while storing data " + e.toString()); e.printStackTrace(); } else errorList.addErrorString("Expected request is missing."); try { answer.putOpt("error", errorList.getList()); } catch (final JSONException e) { System.out.println("Error saving ErrorList: " + e.toString()); } return answer.toString(); }