List of usage examples for java.sql ResultSet getBytes
byte[] getBytes(String columnLabel) throws SQLException;
ResultSet
object as a byte
array in the Java programming language. From source file:com.pari.nm.utils.db.InventoryDBHelper.java
public static String getShowCli(int nodeId, String cli) { ResultSet rs = null; Connection c = null;//from ww w . j a v a 2 s .c o m PreparedStatement ps = null; String sql = "select out_put from show_commands_new where device_id=? and cli=?"; try { c = DBHelper.getConnection(); ps = c.prepareStatement(sql); ps.setInt(1, nodeId); ps.setString(2, cli); rs = ps.executeQuery(); byte b[] = null; if (rs != null && rs.next()) { if (ServerProperties.getInstance().isPostgres()) { b = rs.getBytes(1); } else { Blob blob = rs.getBlob(1); if (blob != null) { b = blob.getBytes(1, (int) blob.length()); } } if (b != null) { return CompressionUtils.getUncompressedString(b); } } } catch (Exception ee) { logger.warn("Error while getting show cli for the node = " + nodeId + " and cli = " + cli, ee); } finally { if (rs != null) { try { rs.close(); } catch (Exception ex) { } } if (ps != null) { try { ps.close(); } catch (Exception ee) { } } if (c != null) { try { DBHelper.releaseConnection(c); } catch (Exception ex) { } } } return ""; }
From source file:com.pari.nm.utils.db.InventoryDBHelper.java
public static String loadRunningConfig(int nodeId) { ResultSet rs = null; Connection c = null;/* w ww .j av a 2 s.c om*/ PreparedStatement ps = null; try { c = DBHelper.getConnection(); ps = c.prepareStatement( "select config from node_current_config where id= ? AND conf_type=" + Constants.RUN_CONF); // rs = // DBHelper.executeQuery("select config from node_current_config where id=" // + nodeId + // " AND conf_type=" // + Constants.STARTUP_CONF); ps.setInt(1, nodeId); rs = ps.executeQuery(); if (rs.next()) { byte b[] = null; if (ServerProperties.getInstance().isPostgres()) { b = rs.getBytes(1); } else { Blob blob = rs.getBlob(1); if (blob != null) { b = blob.getBytes(1, (int) blob.length()); } } if (b != null) { return CompressionUtils.getUncompressedString(b); } } } catch (Exception ex) { logger.error("Exception while loading running config for device: " + nodeId, ex); } finally { if (rs != null) { try { rs.close(); } catch (Exception ex) { } } if (ps != null) { try { ps.close(); } catch (Exception e) { } } DBHelper.releaseConnection(c); } return ""; }
From source file:org.torproject.ernie.web.ExoneraTorServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { /* Start writing response. */ PrintWriter out = response.getWriter(); writeHeader(out);/*w w w .j a v a 2 s . c o m*/ /* Look up first and last consensus in the database. */ long firstValidAfter = -1L, lastValidAfter = -1L; try { Connection conn = this.ds.getConnection(); Statement statement = conn.createStatement(); String query = "SELECT MIN(validafter) AS first, " + "MAX(validafter) AS last FROM consensus"; ResultSet rs = statement.executeQuery(query); if (rs.next()) { firstValidAfter = rs.getTimestamp(1).getTime(); lastValidAfter = rs.getTimestamp(2).getTime(); } rs.close(); statement.close(); conn.close(); } catch (SQLException e) { /* Looks like we don't have any consensuses. */ } if (firstValidAfter < 0L || lastValidAfter < 0L) { out.println("<p><font color=\"red\"><b>Warning: </b></font>This " + "server doesn't have any relay lists available. If this " + "problem persists, please " + "<a href=\"mailto:tor-assistants@freehaven.net\">let us " + "know</a>!</p>\n"); writeFooter(out); return; } out.println("<a name=\"relay\"></a><h3>Was there a Tor relay running " + "on this IP address?</h3>"); /* Parse IP parameter. */ Pattern ipAddressPattern = Pattern .compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); String ipParameter = request.getParameter("ip"); String relayIP = "", ipWarning = ""; if (ipParameter != null && ipParameter.length() > 0) { Matcher ipParameterMatcher = ipAddressPattern.matcher(ipParameter); if (ipParameterMatcher.matches()) { String[] ipParts = ipParameter.split("\\."); relayIP = Integer.parseInt(ipParts[0]) + "." + Integer.parseInt(ipParts[1]) + "." + Integer.parseInt(ipParts[2]) + "." + Integer.parseInt(ipParts[3]); } else { ipWarning = "\"" + (ipParameter.length() > 20 ? ipParameter.substring(0, 20) + "[...]" : ipParameter) + "\" is not a valid IP address."; } } /* Parse timestamp parameter. */ String timestampParameter = request.getParameter("timestamp"); long timestamp = 0L; String timestampStr = "", timestampWarning = ""; SimpleDateFormat shortDateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); shortDateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC")); if (timestampParameter != null && timestampParameter.length() > 0) { try { timestamp = shortDateTimeFormat.parse(timestampParameter).getTime(); timestampStr = shortDateTimeFormat.format(timestamp); if (timestamp < firstValidAfter || timestamp > lastValidAfter) { timestampWarning = "Please pick a value between \"" + shortDateTimeFormat.format(firstValidAfter) + "\" and \"" + shortDateTimeFormat.format(lastValidAfter) + "\"."; } } catch (ParseException e) { /* We have no way to handle this exception, other than leaving timestampStr at "". */ timestampWarning = "\"" + (timestampParameter.length() > 20 ? timestampParameter.substring(0, 20) + "[...]" : timestampParameter) + "\" is not a valid timestamp."; } } /* If either IP address or timestamp is provided, the other one must * be provided, too. */ if (relayIP.length() < 1 && timestampStr.length() > 0 && ipWarning.length() < 1) { ipWarning = "Please provide an IP address."; } if (relayIP.length() > 0 && timestampStr.length() < 1 && timestampWarning.length() < 1) { timestampWarning = "Please provide a timestamp."; } /* Parse target IP parameter. */ String targetIP = "", targetPort = "", target = ""; String[] targetIPParts = null; String targetAddrParameter = request.getParameter("targetaddr"); String targetAddrWarning = ""; if (targetAddrParameter != null && targetAddrParameter.length() > 0) { Matcher targetAddrParameterMatcher = ipAddressPattern.matcher(targetAddrParameter); if (targetAddrParameterMatcher.matches()) { String[] targetAddrParts = targetAddrParameter.split("\\."); targetIP = Integer.parseInt(targetAddrParts[0]) + "." + Integer.parseInt(targetAddrParts[1]) + "." + Integer.parseInt(targetAddrParts[2]) + "." + Integer.parseInt(targetAddrParts[3]); target = targetIP; targetIPParts = targetIP.split("\\."); } else { targetAddrWarning = "\"" + (targetAddrParameter.length() > 20 ? timestampParameter.substring(0, 20) + "[...]" : timestampParameter) + "\" is not a valid IP address."; } } /* Parse target port parameter. */ String targetPortParameter = request.getParameter("targetport"); String targetPortWarning = ""; if (targetPortParameter != null && targetPortParameter.length() > 0) { Pattern targetPortPattern = Pattern.compile("\\d+"); if (targetPortParameter.length() < 5 && targetPortPattern.matcher(targetPortParameter).matches() && !targetPortParameter.equals("0") && Integer.parseInt(targetPortParameter) < 65536) { targetPort = targetPortParameter; if (target != null) { target += ":" + targetPort; } else { target = targetPort; } } else { targetPortWarning = "\"" + (targetPortParameter.length() > 8 ? targetPortParameter.substring(0, 8) + "[...]" : targetPortParameter) + "\" is not a valid TCP port."; } } /* If target port is provided, a target address must be provided, * too. */ if (targetPort.length() > 0 && targetIP.length() < 1 && targetAddrWarning.length() < 1) { targetAddrWarning = "Please provide an IP address."; } /* Write form with IP address and timestamp. */ out.println(" <form action=\"exonerator.html#relay\">\n" + " <input type=\"hidden\" name=\"targetaddr\" " + (targetIP.length() > 0 ? " value=\"" + targetIP + "\"" : "") + ">\n" + " <input type=\"hidden\" name=\"targetPort\"" + (targetPort.length() > 0 ? " value=\"" + targetPort + "\"" : "") + ">\n" + " <table>\n" + " <tr>\n" + " <td align=\"right\">IP address in question:" + "</td>\n" + " <td><input type=\"text\" name=\"ip\"" + (relayIP.length() > 0 ? " value=\"" + relayIP + "\"" : "") + ">" + (ipWarning.length() > 0 ? "<br><font color=\"red\">" + ipWarning + "</font>" : "") + "</td>\n" + " <td><i>(Ex.: 1.2.3.4)</i></td>\n" + " </tr>\n" + " <tr>\n" + " <td align=\"right\">Timestamp, in UTC:</td>\n" + " <td><input type=\"text\" name=\"timestamp\"" + (timestampStr.length() > 0 ? " value=\"" + timestampStr + "\"" : "") + ">" + (timestampWarning.length() > 0 ? "<br><font color=\"red\">" + timestampWarning + "</font>" : "") + "</td>\n" + " <td><i>(Ex.: 2010-01-01 12:00)</i></td>\n" + " </tr>\n" + " <tr>\n" + " <td></td>\n" + " <td>\n" + " <input type=\"submit\">\n" + " <input type=\"reset\">\n" + " </td>\n" + " <td></td>\n" + " </tr>\n" + " </table>\n" + " </form>\n"); if (relayIP.length() < 1 || timestampStr.length() < 1) { writeFooter(out); return; } /* Look up relevant consensuses. */ long timestampTooOld = timestamp - 15L * 60L * 60L * 1000L; long timestampFrom = timestamp - 3L * 60L * 60L * 1000L; long timestampTooNew = timestamp + 12L * 60L * 60L * 1000L; out.printf( "<p>Looking up IP address %s in the relay lists published " + "between %s and %s. " + "Clients could have used any of these relay lists to " + "select relays for their paths and build circuits using them. " + "You may follow the links to relay lists and relay descriptors " + "to grep for the lines printed below and confirm that results " + "are correct.<br>", relayIP, shortDateTimeFormat.format(timestampFrom), timestampStr); SimpleDateFormat validAfterTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); validAfterTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC")); String fromValidAfter = validAfterTimeFormat.format(timestampTooOld); String toValidAfter = validAfterTimeFormat.format(timestampTooNew); SortedMap<Long, String> tooOldConsensuses = new TreeMap<Long, String>(); SortedMap<Long, String> relevantConsensuses = new TreeMap<Long, String>(); SortedMap<Long, String> tooNewConsensuses = new TreeMap<Long, String>(); try { Connection conn = this.ds.getConnection(); Statement statement = conn.createStatement(); String query = "SELECT validafter, rawdesc FROM consensus " + "WHERE validafter >= '" + fromValidAfter + "' AND validafter <= '" + toValidAfter + "'"; ResultSet rs = statement.executeQuery(query); while (rs.next()) { long consensusTime = rs.getTimestamp(1).getTime(); String rawConsensusString = new String(rs.getBytes(2), "US-ASCII"); if (consensusTime < timestampFrom) { tooOldConsensuses.put(consensusTime, rawConsensusString); } else if (consensusTime > timestamp) { tooNewConsensuses.put(consensusTime, rawConsensusString); } else { relevantConsensuses.put(consensusTime, rawConsensusString); } } rs.close(); statement.close(); conn.close(); } catch (SQLException e) { /* Looks like we don't have any consensuses in the requested interval. */ } SortedMap<Long, String> allConsensuses = new TreeMap<Long, String>(); allConsensuses.putAll(tooOldConsensuses); allConsensuses.putAll(relevantConsensuses); allConsensuses.putAll(tooNewConsensuses); if (allConsensuses.isEmpty()) { out.println(" <p>No relay lists found!</p>\n" + " <p>Result is INDECISIVE!</p>\n" + " <p>We cannot make any statement whether there was " + "a Tor relay running on IP address " + relayIP + " at " + timestampStr + "! We " + "did not find any relevant relay lists preceding the given " + "time. If you think this is an error on our side, please " + "<a href=\"mailto:tor-assistants@freehaven.net\">contact " + "us</a>!</p>\n"); writeFooter(out); return; } /* Parse consensuses to find descriptors belonging to the IP address. */ SortedSet<Long> positiveConsensusesNoTarget = new TreeSet<Long>(); Set<String> addressesInSameNetwork = new HashSet<String>(); SortedMap<String, Set<Long>> relevantDescriptors = new TreeMap<String, Set<Long>>(); SimpleDateFormat validAfterUrlFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); validAfterUrlFormat.setTimeZone(TimeZone.getTimeZone("UTC")); for (Map.Entry<Long, String> e : allConsensuses.entrySet()) { long consensus = e.getKey(); if (relevantConsensuses.containsKey(consensus)) { long validAfterTime = -1L; String validAfterDatetime = validAfterTimeFormat.format(consensus); String validAfterString = validAfterUrlFormat.format(consensus); out.println(" <br><tt>valid-after <b>" + "<a href=\"consensus?valid-after=" + validAfterString + "\" target=\"_blank\">" + validAfterDatetime + "</b></a></tt><br>"); } String rawConsensusString = e.getValue(); BufferedReader br = new BufferedReader(new StringReader(rawConsensusString)); String line = null; while ((line = br.readLine()) != null) { if (!line.startsWith("r ")) { continue; } String[] parts = line.split(" "); String address = parts[6]; if (address.equals(relayIP)) { String hex = String.format("%040x", new BigInteger(1, Base64.decodeBase64(parts[3] + "=="))); if (!relevantDescriptors.containsKey(hex)) { relevantDescriptors.put(hex, new HashSet<Long>()); } relevantDescriptors.get(hex).add(consensus); positiveConsensusesNoTarget.add(consensus); if (relevantConsensuses.containsKey(consensus)) { out.println(" <tt>r " + parts[1] + " " + parts[2] + " " + "<a href=\"serverdesc?desc-id=" + hex + "\" " + "target=\"_blank\">" + parts[3] + "</a> " + parts[4] + " " + parts[5] + " <b>" + parts[6] + "</b> " + parts[7] + " " + parts[8] + "</tt><br>"); } } else { if (relayIP.startsWith(address.substring(0, address.lastIndexOf(".")))) { addressesInSameNetwork.add(address); } } } br.close(); } if (relevantDescriptors.isEmpty()) { out.printf( " <p>None found!</p>\n" + " <p>Result is NEGATIVE with moderate certainty!</p>\n" + " <p>We did not find IP " + "address " + relayIP + " in any of the relay lists that were " + "published between %s and %s.\n\nA possible " + "reason for false negatives is that the relay is using a " + "different IP address when generating a descriptor than for " + "exiting to the Internet. We hope to provide better checks " + "for this case in the future.</p>\n", shortDateTimeFormat.format(timestampTooOld), shortDateTimeFormat.format(timestampTooNew)); if (!addressesInSameNetwork.isEmpty()) { out.println(" <p>The following other IP addresses of Tor " + "relays were found in the mentioned relay lists that " + "are in the same /24 network and that could be related to " + "IP address " + relayIP + ":</p>\n"); for (String s : addressesInSameNetwork) { out.println(" <p>" + s + "</p>\n"); } } writeFooter(out); return; } /* Print out result. */ Set<Long> matches = positiveConsensusesNoTarget; if (matches.contains(relevantConsensuses.lastKey())) { out.println(" <p>Result is POSITIVE with high certainty!" + "</p>\n" + " <p>We found one or more relays on IP address " + relayIP + " in the most recent relay list preceding " + timestampStr + " that clients were likely to know.</p>\n"); } else { boolean inOtherRelevantConsensus = false, inTooOldConsensuses = false, inTooNewConsensuses = false; for (long match : matches) { if (relevantConsensuses.containsKey(match)) { inOtherRelevantConsensus = true; } else if (tooOldConsensuses.containsKey(match)) { inTooOldConsensuses = true; } else if (tooNewConsensuses.containsKey(match)) { inTooNewConsensuses = true; } } if (inOtherRelevantConsensus) { out.println(" <p>Result is POSITIVE " + "with moderate certainty!</p>\n"); out.println("<p>We found one or more relays on IP address " + relayIP + ", but not in the relay list immediately " + "preceding " + timestampStr + ". A possible reason for the " + "relay being missing in the last relay list preceding the " + "given time might be that some of the directory " + "authorities had difficulties connecting to the relay. " + "However, clients might still have used the relay.</p>\n"); } else { out.println(" <p>Result is NEGATIVE " + "with high certainty!</p>\n"); out.println(" <p>We did not find any relay on IP address " + relayIP + " in the relay lists 3 hours preceding " + timestampStr + ".</p>\n"); if (inTooOldConsensuses || inTooNewConsensuses) { if (inTooOldConsensuses && !inTooNewConsensuses) { out.println(" <p>Note that we found a matching relay " + "in relay lists that were published between 5 and 3 " + "hours before " + timestampStr + ".</p>\n"); } else if (!inTooOldConsensuses && inTooNewConsensuses) { out.println(" <p>Note that we found a matching relay " + "in relay lists that were published up to 2 hours " + "after " + timestampStr + ".</p>\n"); } else { out.println(" <p>Note that we found a matching relay " + "in relay lists that were published between 5 and 3 " + "hours before and in relay lists that were published " + "up to 2 hours after " + timestampStr + ".</p>\n"); } out.println("<p>Make sure that the timestamp you provided is " + "in the correct timezone: UTC (or GMT).</p>"); } writeFooter(out); return; } } /* Second part: target */ out.println("<br><a name=\"exit\"></a><h3>Was this relay configured " + "to permit exiting to a given target?</h3>"); out.println(" <form action=\"exonerator.html#exit\">\n" + " <input type=\"hidden\" name=\"timestamp\"\n" + " value=\"" + timestampStr + "\">\n" + " <input type=\"hidden\" name=\"ip\" " + "value=\"" + relayIP + "\">\n" + " <table>\n" + " <tr>\n" + " <td align=\"right\">Target address:</td>\n" + " <td><input type=\"text\" name=\"targetaddr\"" + (targetIP.length() > 0 ? " value=\"" + targetIP + "\"" : "") + "\">" + (targetAddrWarning.length() > 0 ? "<br><font color=\"red\">" + targetAddrWarning + "</font>" : "") + "</td>\n" + " <td><i>(Ex.: 4.3.2.1)</i></td>\n" + " </tr>\n" + " <tr>\n" + " <td align=\"right\">Target port:</td>\n" + " <td><input type=\"text\" name=\"targetport\"" + (targetPort.length() > 0 ? " value=\"" + targetPort + "\"" : "") + ">" + (targetPortWarning.length() > 0 ? "<br><font color=\"red\">" + targetPortWarning + "</font>" : "") + "</td>\n" + " <td><i>(Ex.: 80)</i></td>\n" + " </tr>\n" + " <tr>\n" + " <td></td>\n" + " <td>\n" + " <input type=\"submit\">\n" + " <input type=\"reset\">\n" + " </td>\n" + " <td></td>\n" + " </tr>\n" + " </table>\n" + " </form>\n"); if (targetIP.length() < 1) { writeFooter(out); return; } /* Parse router descriptors to check exit policies. */ out.println("<p>Searching the relay descriptors published by the " + "relay on IP address " + relayIP + " to find out whether this " + "relay permitted exiting to " + target + ". You may follow the " + "links above to the relay descriptors and grep them for the " + "lines printed below to confirm that results are correct.</p>"); SortedSet<Long> positiveConsensuses = new TreeSet<Long>(); Set<String> missingDescriptors = new HashSet<String>(); Set<String> descriptors = relevantDescriptors.keySet(); for (String descriptor : descriptors) { byte[] rawDescriptor = null; try { Connection conn = this.ds.getConnection(); Statement statement = conn.createStatement(); String query = "SELECT rawdesc FROM descriptor " + "WHERE descriptor = '" + descriptor + "'"; ResultSet rs = statement.executeQuery(query); if (rs.next()) { rawDescriptor = rs.getBytes(1); } rs.close(); statement.close(); conn.close(); } catch (SQLException e) { /* Consider this descriptors as 'missing'. */ continue; } if (rawDescriptor != null && rawDescriptor.length > 0) { missingDescriptors.remove(descriptor); String rawDescriptorString = new String(rawDescriptor, "US-ASCII"); try { BufferedReader br = new BufferedReader(new StringReader(rawDescriptorString)); String line = null, routerLine = null, publishedLine = null; StringBuilder acceptRejectLines = new StringBuilder(); boolean foundMatch = false; while ((line = br.readLine()) != null) { if (line.startsWith("router ")) { routerLine = line; } else if (line.startsWith("published ")) { publishedLine = line; } else if (line.startsWith("reject ") || line.startsWith("accept ")) { if (foundMatch) { out.println("<tt> " + line + "</tt><br>"); continue; } boolean ruleAccept = line.split(" ")[0].equals("accept"); String ruleAddress = line.split(" ")[1].split(":")[0]; if (!ruleAddress.equals("*")) { if (!ruleAddress.contains("/") && !ruleAddress.equals(targetIP)) { /* IP address does not match. */ acceptRejectLines.append("<tt> " + line + "</tt><br>\n"); continue; } String[] ruleIPParts = ruleAddress.split("/")[0].split("\\."); int ruleNetwork = ruleAddress.contains("/") ? Integer.parseInt(ruleAddress.split("/")[1]) : 32; for (int i = 0; i < 4; i++) { if (ruleNetwork == 0) { break; } else if (ruleNetwork >= 8) { if (ruleIPParts[i].equals(targetIPParts[i])) { ruleNetwork -= 8; } else { break; } } else { int mask = 255 ^ 255 >>> ruleNetwork; if ((Integer.parseInt(ruleIPParts[i]) & mask) == (Integer.parseInt(targetIPParts[i]) & mask)) { ruleNetwork = 0; } break; } } if (ruleNetwork > 0) { /* IP address does not match. */ acceptRejectLines.append("<tt> " + line + "</tt><br>\n"); continue; } } String rulePort = line.split(" ")[1].split(":")[1]; if (targetPort.length() < 1 && !ruleAccept && !rulePort.equals("*")) { /* With no port given, we only consider reject :* rules as matching. */ acceptRejectLines.append("<tt> " + line + "</tt><br>\n"); continue; } if (targetPort.length() > 0 && !rulePort.equals("*") && rulePort.contains("-")) { int fromPort = Integer.parseInt(rulePort.split("-")[0]); int toPort = Integer.parseInt(rulePort.split("-")[1]); int targetPortInt = Integer.parseInt(targetPort); if (targetPortInt < fromPort || targetPortInt > toPort) { /* Port not contained in interval. */ continue; } } if (targetPort.length() > 0) { if (!rulePort.equals("*") && !rulePort.contains("-") && !targetPort.equals(rulePort)) { /* Ports do not match. */ acceptRejectLines.append("<tt> " + line + "</tt><br>\n"); continue; } } boolean relevantMatch = false; for (long match : relevantDescriptors.get(descriptor)) { if (relevantConsensuses.containsKey(match)) { relevantMatch = true; } } if (relevantMatch) { String[] routerParts = routerLine.split(" "); out.println("<br><tt>" + routerParts[0] + " " + routerParts[1] + " <b>" + routerParts[2] + "</b> " + routerParts[3] + " " + routerParts[4] + " " + routerParts[5] + "</tt><br>"); String[] publishedParts = publishedLine.split(" "); out.println("<tt>" + publishedParts[0] + " <b>" + publishedParts[1] + " " + publishedParts[2] + "</b></tt><br>"); out.println(acceptRejectLines.toString()); out.println("<tt><b>" + line + "</b></tt><br>"); foundMatch = true; } if (ruleAccept) { positiveConsensuses.addAll(relevantDescriptors.get(descriptor)); } } } br.close(); } catch (IOException e) { /* Could not read descriptor string. */ continue; } } } /* Print out result. */ matches = positiveConsensuses; if (matches.contains(relevantConsensuses.lastKey())) { out.println(" <p>Result is POSITIVE with high certainty!</p>" + "\n" + " <p>We found one or more relays on IP address " + relayIP + " permitting exit to " + target + " in the most recent relay list preceding " + timestampStr + " that clients were likely to know.</p>\n"); writeFooter(out); return; } boolean resultIndecisive = target.length() > 0 && !missingDescriptors.isEmpty(); if (resultIndecisive) { out.println(" <p>Result is INDECISIVE!</p>\n" + " <p>At least one referenced descriptor could not be " + "found. This is a rare case, but one that (apparently) " + "happens. We cannot make any good statement about exit " + "relays without these descriptors. The following descriptors " + "are missing:</p>"); for (String desc : missingDescriptors) out.println(" <p>" + desc + "</p>\n"); } boolean inOtherRelevantConsensus = false, inTooOldConsensuses = false, inTooNewConsensuses = false; for (long match : matches) { if (relevantConsensuses.containsKey(match)) { inOtherRelevantConsensus = true; } else if (tooOldConsensuses.containsKey(match)) { inTooOldConsensuses = true; } else if (tooNewConsensuses.containsKey(match)) { inTooNewConsensuses = true; } } if (inOtherRelevantConsensus) { if (!resultIndecisive) { out.println(" <p>Result is POSITIVE " + "with moderate certainty!</p>\n"); } out.println("<p>We found one or more relays on IP address " + relayIP + " permitting exit to " + target + ", but not in " + "the relay list immediately preceding " + timestampStr + ". A possible reason for the relay being missing in the last " + "relay list preceding the given time might be that some of " + "the directory authorities had difficulties connecting to " + "the relay. However, clients might still have used the " + "relay.</p>\n"); } else { if (!resultIndecisive) { out.println(" <p>Result is NEGATIVE " + "with high certainty!</p>\n"); } out.println(" <p>We did not find any relay on IP address " + relayIP + " permitting exit to " + target + " in the relay list 3 hours preceding " + timestampStr + ".</p>\n"); if (inTooOldConsensuses || inTooNewConsensuses) { if (inTooOldConsensuses && !inTooNewConsensuses) { out.println(" <p>Note that we found a matching relay in " + "relay lists that were published between 5 and 3 " + "hours before " + timestampStr + ".</p>\n"); } else if (!inTooOldConsensuses && inTooNewConsensuses) { out.println(" <p>Note that we found a matching relay in " + "relay lists that were published up to 2 hours after " + timestampStr + ".</p>\n"); } else { out.println(" <p>Note that we found a matching relay in " + "relay lists that were published between 5 and 3 " + "hours before and in relay lists that were published up " + "to 2 hours after " + timestampStr + ".</p>\n"); } out.println("<p>Make sure that the timestamp you provided is " + "in the correct timezone: UTC (or GMT).</p>"); } } if (target != null) { if (positiveConsensuses.isEmpty() && !positiveConsensusesNoTarget.isEmpty()) { out.println(" <p>Note that although the found relay(s) did " + "not permit exiting to " + target + ", there have been one " + "or more relays running at the given time.</p>"); } } /* Finish writing response. */ writeFooter(out); }
From source file:l2next.gameserver.model.Player.java
/** * Retrieve a L2Player from the characters table of the database and add it in _allObjects of the L2World * * @return The L2Player loaded from the database *//*from w ww.j av a2 s. c o m*/ public static Player restore(final int objectId) { Player player = null; Connection con = null; Statement statement = null; Statement statement2 = null; PreparedStatement statement3 = null; ResultSet rset = null; ResultSet rset2 = null; ResultSet rset3 = null; try { // Retrieve the L2Player from the characters table of the database con = DatabaseFactory.getInstance().getConnection(); statement = con.createStatement(); statement2 = con.createStatement(); rset = statement.executeQuery("SELECT * FROM `characters` WHERE `obj_Id`=" + objectId + " LIMIT 1"); rset2 = statement2.executeQuery("SELECT `class_id` FROM `character_subclasses` WHERE `char_obj_id`=" + objectId + " AND `type`=" + SubClassType.BASE_CLASS.ordinal() + " LIMIT 1"); if (rset.next() && rset2.next()) { final ClassId classId = ClassId.VALUES[rset2.getInt("class_id")]; final int raceId = rset.getInt("race"); final PlayerTemplate template = PlayerTemplateHolder.getInstance() .getPlayerTemplate(Race.values()[raceId], classId, Sex.VALUES[rset.getInt("sex")]); player = new Player(objectId, template); player.loadVariables(); player.loadInstanceReuses(); player.setPremiumItemList(CharactersPremiumItemsDAO.getInstance().loadPremiumItemList(objectId)); player.bookmarks.setCapacity(rset.getInt("bookmarks")); player.bookmarks.restore(); player._friendList.restore(); player._postFriends = CharacterPostFriendDAO.getInstance().select(player); CharacterGroupReuseDAO.getInstance().select(player); player._login = rset.getString("account_name"); player.setName(rset.getString("char_name")); player.setFace(rset.getInt("face")); player.setHairStyle(rset.getInt("hairStyle")); player.setHairColor(rset.getInt("hairColor")); player.setHeading(0); player.setKarma(rset.getInt("karma")); player.setPvpKills(rset.getInt("pvpkills")); player.setPkKills(rset.getInt("pkkills")); player.setLeaveClanTime(rset.getLong("leaveclan") * 1000L); if (player.getLeaveClanTime() > 0 && player.canJoinClan()) { player.setLeaveClanTime(0); } player.setDeleteClanTime(rset.getLong("deleteclan") * 1000L); if (player.getDeleteClanTime() > 0 && player.canCreateClan()) { player.setDeleteClanTime(0); } player.setNoChannel(rset.getLong("nochannel") * 1000L); if (player.getNoChannel() > 0 && player.getNoChannelRemained() < 0) { player.setNoChannel(0); } player.setOnlineTime(rset.getLong("onlinetime") * 1000L); final int clanId = rset.getInt("clanid"); if (clanId > 0) { player.setClan(ClanTable.getInstance().getClan(clanId)); player.setPledgeType(rset.getInt("pledge_type")); player.setPowerGrade(rset.getInt("pledge_rank")); player.setLvlJoinedAcademy(rset.getInt("lvl_joined_academy")); player.setApprentice(rset.getInt("apprentice")); } player.setCreateTime(rset.getLong("createtime") * 1000L); player.setDeleteTimer(rset.getInt("deletetime")); player.setTitle(rset.getString("title")); if (player.getVar("titlecolor") != null) { player.setTitleColor(Integer.decode("0x" + player.getVar("titlecolor"))); } if (player.getVar("namecolor") == null) { if (player.isGM()) { player.setNameColor(Config.GM_NAME_COLOUR); } else if (player.getClan() != null && player.getClan().getLeaderId() == player.getObjectId()) { player.setNameColor(Config.CLANLEADER_NAME_COLOUR); } else { player.setNameColor(Config.NORMAL_NAME_COLOUR); } } else { player.setNameColor(Integer.decode("0x" + player.getVar("namecolor"))); } if (Config.AUTO_LOOT_INDIVIDUAL) { player._autoLoot = player.getVarB("AutoLoot", Config.AUTO_LOOT); player.AutoLootHerbs = player.getVarB("AutoLootHerbs", Config.AUTO_LOOT_HERBS); } player.setUptime(System.currentTimeMillis()); player.setLastAccess(rset.getLong("lastAccess")); player.setRecomHave(rset.getInt("rec_have")); player.setRecomLeft(rset.getInt("rec_left")); player.setRecomBonusTime(rset.getInt("rec_bonus_time")); if (player.getVar("recLeftToday") != null) { player.setRecomLeftToday(Integer.parseInt(player.getVar("recLeftToday"))); } else { player.setRecomLeftToday(0); } player.setKeyBindings(rset.getBytes("key_bindings")); player.setPcBangPoints(rset.getInt("pcBangPoints")); player.setFame(rset.getInt("fame"), null); CharacterRecipebookDAO.getInstance().restoreRecipeBook(player); if (Config.ENABLE_OLYMPIAD) { player.setHero(Hero.getInstance().isHero(player.getObjectId())); player.setNoble(Olympiad.isNoble(player.getObjectId())); } player.updatePledgeClass(); int reflection = 0; if (player.getVar("jailed") != null && System.currentTimeMillis() / 1000 < Integer.parseInt(player.getVar("jailed")) + 60) { player.setXYZ(-114648, -249384, -2984); /* * NOTUSED*String[] re = player.getVar("jailedFrom").split(";"); Location loc = new * Location(Integer.parseInt(re[0]), Integer.parseInt(re[1]), Integer.parseInt(re[2])); */ player.sitDown(null); player.block(); player._unjailTask = ThreadPoolManager.getInstance().schedule(new UnJailTask(player), Integer.parseInt(player.getVar("jailed")) * 1000L); } else { player.setXYZ(rset.getInt("x"), rset.getInt("y"), rset.getInt("z")); // ? ? ?, // ? (). String jumpSafeLoc = player.getVar("@safe_jump_loc"); if (jumpSafeLoc != null) { player.setLoc(Location.parseLoc(jumpSafeLoc)); player.unsetVar("@safe_jump_loc"); } String ref = player.getVar("reflection"); if (ref != null) { reflection = Integer.parseInt(ref); if (reflection > 0) // , , // { String back = player.getVar("backCoords"); if (back != null) { player.setLoc(Location.parseLoc(back)); player.unsetVar("backCoords"); } reflection = 0; } } } player.setReflection(reflection); EventHolder.getInstance().findEvent(player); // TODO [G1ta0] ? Quest.restoreQuestStates(player); player.getInventory().restore(); //Restore mentoring system player.getMentorSystem().restore(); player.setActiveSubClass(player.getActiveClassId(), false); try { String var = player.getVar("ExpandInventory"); if (var != null) { player.setExpandInventory(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar("ExpandWarehouse"); if (var != null) { player.setExpandWarehouse(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar(NO_ANIMATION_OF_CAST_VAR); if (var != null) { player.setNotShowBuffAnim(Boolean.parseBoolean(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar(NO_TRADERS_VAR); if (var != null) { player.setNotShowTraders(Boolean.parseBoolean(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar("pet"); if (var != null) { player.setPetControlItem(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } statement3 = con.prepareStatement( "SELECT obj_Id, char_name FROM characters WHERE account_name=? AND obj_Id!=?"); statement3.setString(1, player._login); statement3.setInt(2, objectId); rset3 = statement3.executeQuery(); while (rset3.next()) { final Integer charId = rset3.getInt("obj_Id"); final String charName = rset3.getString("char_name"); player._chars.put(charId, charName); } DbUtils.close(statement3, rset3); // if(!player.isGM()) { GArray<Zone> zones = new GArray<Zone>(); World.getZones(zones, player.getLoc(), player.getReflection()); if (!zones.isEmpty()) { for (Zone zone : zones) { if (zone.getType() == ZoneType.no_restart) { if (System.currentTimeMillis() / 1000L - player.getLastAccess() > zone .getRestartTime()) { player.sendMessage(new CustomMessage( "l2next.gameserver.clientpackets.EnterWorld.TeleportedReasonNoRestart", player)); player.setLoc(TeleportUtils.getRestartLocation(player, RestartType.TO_VILLAGE)); } } else if (zone.getType() == ZoneType.SIEGE) { SiegeEvent<?, ?> siegeEvent = player.getEvent(SiegeEvent.class); if (siegeEvent != null) { player.setLoc(siegeEvent.getEnterLoc(player)); } else { Residence r = ResidenceHolder.getInstance() .getResidence(zone.getParams().getInteger("residence")); player.setLoc(r.getNotOwnerRestartPoint(player)); } } } } zones.clear(); if (DimensionalRiftManager.getInstance().checkIfInRiftZone(player.getLoc(), false)) { player.setLoc(DimensionalRiftManager.getInstance().getRoom(0, 0).getTeleportCoords()); } } player.restoreBlockList(); player._macroses.restore(); // FIXME [VISTALL] ? player.refreshExpertisePenalty(); player.refreshOverloaded(); player.getWarehouse().restore(); player.getFreight().restore(); player.restoreTradeList(); if (player.getVar("storemode") != null) { player.setPrivateStoreType(Integer.parseInt(player.getVar("storemode"))); player.setSitting(true); } player.updateKetraVarka(); player.updateRam(); player.checkRecom(); if (Config.ALT_VITALITY_ENABLED) { player._vitality.restore(); } //player.getSummonList().restore(); } } catch (final Exception e) { _log.error("Could not restore char data!", e); } finally { DbUtils.closeQuietly(statement2, rset2); DbUtils.closeQuietly(statement3, rset3); DbUtils.closeQuietly(con, statement, rset); } return player; }
From source file:lineage2.gameserver.model.Player.java
/** * Method restore.//from w ww . j a v a2s .c o m * @param objectId int * @return Player */ public static Player restore(final int objectId) { Player player = null; Connection con = null; Statement statement = null; Statement statement2 = null; PreparedStatement statement3 = null; ResultSet rset = null; ResultSet rset2 = null; ResultSet rset3 = null; try { con = DatabaseFactory.getInstance().getConnection(); statement = con.createStatement(); statement2 = con.createStatement(); rset = statement.executeQuery("SELECT * FROM `characters` WHERE `obj_Id`=" + objectId + " LIMIT 1"); rset2 = statement2.executeQuery( "SELECT `class_id`, `default_class_id` FROM `character_subclasses` WHERE `char_obj_id`=" + objectId + " AND `type`=" + SubClassType.BASE_CLASS.ordinal() + " LIMIT 1"); if (rset.next() && rset2.next()) { final ClassId classId = ClassId.VALUES[rset2.getInt("class_id")]; final ClassId defaultClassId = ClassId.VALUES[rset2.getInt("default_class_id")]; final PlayerTemplate template = PlayerTemplateHolder.getInstance() .getPlayerTemplate(defaultClassId.getRace(), classId, Sex.VALUES[rset.getInt("sex")]); player = new Player(objectId, template); player.loadVariables(); player.loadInstanceReuses(); player.loadPremiumItemList(); player.bookmarks.setCapacity(rset.getInt("bookmarks")); player.bookmarks.restore(); player._friendList.restore(); player._postFriends = CharacterPostFriendDAO.getInstance().select(player); CharacterGroupReuseDAO.getInstance().select(player); player._login = rset.getString("account_name"); player.setName(rset.getString("char_name")); player.setFace(rset.getInt("face")); player.setHairStyle(rset.getInt("hairStyle")); player.setHairColor(rset.getInt("hairColor")); player.setHeading(0); player.setKarma(rset.getInt("karma")); player.setPvpKills(rset.getInt("pvpkills")); player.setPkKills(rset.getInt("pkkills")); player.setLeaveClanTime(rset.getLong("leaveclan") * 1000L); if ((player.getLeaveClanTime() > 0) && player.canJoinClan()) { player.setLeaveClanTime(0); } player.setDeleteClanTime(rset.getLong("deleteclan") * 1000L); if ((player.getDeleteClanTime() > 0) && player.canCreateClan()) { player.setDeleteClanTime(0); } player.setNoChannel(rset.getLong("nochannel") * 1000L); if ((player.getNoChannel() > 0) && (player.getNoChannelRemained() < 0)) { player.setNoChannel(0); } player.setOnlineTime(rset.getLong("onlinetime") * 1000L); final int clanId = rset.getInt("clanid"); if (clanId > 0) { player.setClan(ClanTable.getInstance().getClan(clanId)); player.setPledgeType(rset.getInt("pledge_type")); player.setPowerGrade(rset.getInt("pledge_rank")); player.setLvlJoinedAcademy(rset.getInt("lvl_joined_academy")); player.setApprentice(rset.getInt("apprentice")); } player.setCreateTime(rset.getLong("createtime") * 1000L); player.setDeleteTimer(rset.getInt("deletetime")); player.setTitle(rset.getString("title")); if (player.getVar("titlecolor") != null) { player.setTitleColor(Integer.decode("0x" + player.getVar("titlecolor"))); } if (player.getVar("namecolor") == null) { if (player.isGM()) { player.setNameColor(Config.GM_NAME_COLOUR); } else if ((player.getClan() != null) && (player.getClan().getLeaderId() == player.getObjectId())) { player.setNameColor(Config.CLANLEADER_NAME_COLOUR); } else { player.setNameColor(Config.NORMAL_NAME_COLOUR); } } else { player.setNameColor(Integer.decode("0x" + player.getVar("namecolor"))); } if (Config.AUTO_LOOT_INDIVIDUAL) { player._autoLoot = player.getVarB("AutoLoot", Config.AUTO_LOOT); player.AutoLootHerbs = player.getVarB("AutoLootHerbs", Config.AUTO_LOOT_HERBS); } player.setUptime(System.currentTimeMillis()); player.setLastAccess(rset.getLong("lastAccess")); player.setRecomHave(rset.getInt("rec_have")); player.setRecomLeft(rset.getInt("rec_left")); player.setRecomBonusTime(rset.getInt("rec_bonus_time")); if (player.getVar("recLeftToday") != null) { player.setRecomLeftToday(Integer.parseInt(player.getVar("recLeftToday"))); } else { player.setRecomLeftToday(0); } player.setKeyBindings(rset.getBytes("key_bindings")); player.setPcBangPoints(rset.getInt("pcBangPoints")); player.setFame(rset.getInt("fame"), null); player.restoreRecipeBook(); if (Config.ENABLE_OLYMPIAD) { player.setHero(Hero.getInstance().isHero(player.getObjectId())); player.setNoble(Olympiad.isNoble(player.getObjectId())); } player.updatePledgeClass(); int reflection = 0; if ((player.getVar("jailed") != null) && ((System.currentTimeMillis() / 1000) < (Integer.parseInt(player.getVar("jailed")) + 60))) { player.setXYZ(-114648, -249384, -2984); player.sitDown(null); player.block(); player._unjailTask = ThreadPoolManager.getInstance().schedule(new UnJailTask(player), Integer.parseInt(player.getVar("jailed")) * 1000L); } else { player.setXYZ(rset.getInt("x"), rset.getInt("y"), rset.getInt("z")); String jumpSafeLoc = player.getVar("@safe_jump_loc"); if (jumpSafeLoc != null) { player.setLoc(Location.parseLoc(jumpSafeLoc)); player.unsetVar("@safe_jump_loc"); } String ref = player.getVar("reflection"); if (ref != null) { reflection = Integer.parseInt(ref); if (reflection > 0) { String back = player.getVar("backCoords"); if (back != null) { player.setLoc(Location.parseLoc(back)); player.unsetVar("backCoords"); } reflection = 0; } } } player.setReflection(reflection); EventHolder.getInstance().findEvent(player); Quest.restoreQuestStates(player); player.getSubClassList().restore(); player.setActiveSubClass(player.getActiveClassId(), false, 0); player.restoreVitality(); player.getInventory().restore(); player._menteeMentorList.restore(); try { String var = player.getVar("ExpandInventory"); if (var != null) { player.setExpandInventory(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar("ExpandWarehouse"); if (var != null) { player.setExpandWarehouse(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar(NO_ANIMATION_OF_CAST_VAR); if (var != null) { player.setNotShowBuffAnim(Boolean.parseBoolean(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar(NO_TRADERS_VAR); if (var != null) { player.setNotShowTraders(Boolean.parseBoolean(var)); } } catch (Exception e) { _log.error("", e); } try { String var = player.getVar("pet"); if (var != null) { player.setPetControlItem(Integer.parseInt(var)); } } catch (Exception e) { _log.error("", e); } statement3 = con.prepareStatement( "SELECT obj_Id, char_name FROM characters WHERE account_name=? AND obj_Id!=?"); statement3.setString(1, player._login); statement3.setInt(2, objectId); rset3 = statement3.executeQuery(); while (rset3.next()) { final Integer charId = rset3.getInt("obj_Id"); final String charName = rset3.getString("char_name"); player._chars.put(charId, charName); } DbUtils.close(statement3, rset3); { List<Zone> zones = new ArrayList<Zone>(); World.getZones(zones, player.getLoc(), player.getReflection()); if (!zones.isEmpty()) { for (Zone zone : zones) { if (zone.getType() == ZoneType.no_restart) { if (((System.currentTimeMillis() / 1000L) - player.getLastAccess()) > zone .getRestartTime()) { player.sendMessage(new CustomMessage( "lineage2.gameserver.clientpackets.EnterWorld.TeleportedReasonNoRestart", player)); player.setLoc(TeleportUtils.getRestartLocation(player, RestartType.TO_VILLAGE)); } } else if (zone.getType() == ZoneType.SIEGE) { SiegeEvent<?, ?> siegeEvent = player.getEvent(SiegeEvent.class); if (siegeEvent != null) { player.setLoc(siegeEvent.getEnterLoc(player)); } else { Residence r = ResidenceHolder.getInstance() .getResidence(zone.getParams().getInteger("residence")); player.setLoc(r.getNotOwnerRestartPoint(player)); } } } } zones.clear(); } player.restoreBlockList(); player._macroses.restore(); player.refreshExpertisePenalty(); player.refreshOverloaded(); player.getWarehouse().restore(); player.getFreight().restore(); player.restoreTradeList(); if (player.getVar("storemode") != null) { player.setPrivateStoreType(Integer.parseInt(player.getVar("storemode"))); player.setSitting(true); } player.updateKetraVarka(); player.updateRam(); player.checkRecom(); player.restoreVitality(); player.getSummonList().restore(); } } catch (final Exception e) { _log.error("Could not restore char data!", e); } finally { DbUtils.closeQuietly(statement2, rset2); DbUtils.closeQuietly(statement3, rset3); DbUtils.closeQuietly(con, statement, rset); } return player; }