From e22cb62493da28955cc98e43fdf237c829eae407 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Sun, 2 May 2004 04:46:52 +0000 Subject: [PATCH] handle /setTime?blah&now=yyyyMMdd_HH:mm:ss.SSSS (updating the router's clock) yes, we'll want to filter the access to the admin manager ;) --- .../src/net/i2p/router/admin/AdminRunner.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/router/java/src/net/i2p/router/admin/AdminRunner.java b/router/java/src/net/i2p/router/admin/AdminRunner.java index d9677e5c8e..f0db749140 100644 --- a/router/java/src/net/i2p/router/admin/AdminRunner.java +++ b/router/java/src/net/i2p/router/admin/AdminRunner.java @@ -8,6 +8,9 @@ import java.io.OutputStream; import java.net.Socket; import java.util.Iterator; import java.util.Set; +import java.util.Locale; +import java.text.SimpleDateFormat; +import java.text.ParseException; import net.i2p.data.Hash; import net.i2p.router.Router; @@ -48,6 +51,9 @@ class AdminRunner implements Runnable { reply(out, _generator.generateStatsPage()); } else if (command.indexOf("/profile/") >= 0) { replyText(out, getProfile(command)); + } else if (command.indexOf("setTime") >= 0) { + setTime(command); + reply(out, "<html><body>Time updated</body></html>"); } else if (true || command.indexOf("routerConsole.html") > 0) { reply(out, _context.router().renderStatusHTML()); } @@ -105,4 +111,30 @@ class AdminRunner implements Runnable { return "No such peer is being profiled\n"; } + + + private static final String FORMAT_STRING = "yyyyMMdd_HH:mm:ss.SSS"; + private SimpleDateFormat _fmt = new SimpleDateFormat(FORMAT_STRING, Locale.UK); + + private long getTime(String now) throws ParseException { + synchronized (_fmt) { + return _fmt.parse(now).getTime(); + } + } + private void setTime(String cmd) { + int start = cmd.indexOf("now="); + String str = cmd.substring(start + 4, start+4+FORMAT_STRING.length()); + try { + long now = getTime(str); + if (_log.shouldLog(Log.INFO)) + _log.log(Log.INFO, "Admin time set to " + str); + setTime(now); + } catch (ParseException pe) { + _log.error("Invalid time specified [" + str + "]", pe); + } + } + + private void setTime(long now) { + _context.clock().setNow(now); + } } -- GitLab