[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r8799: Implement status event backend logic. (in tor/trunk: . doc src/or)
Author: nickm
Date: 2006-10-23 01:24:57 -0400 (Mon, 23 Oct 2006)
New Revision: 8799
Modified:
tor/trunk/
tor/trunk/doc/TODO
tor/trunk/src/or/control.c
tor/trunk/src/or/or.h
Log:
r9347@Kushana: nickm | 2006-10-23 01:24:48 -0400
Implement status event backend logic.
Property changes on: tor/trunk
___________________________________________________________________
svk:merge ticket from /tor/trunk [r9347] on c95137ef-5f19-0410-b913-86e773d04f59
Modified: tor/trunk/doc/TODO
===================================================================
--- tor/trunk/doc/TODO 2006-10-23 04:52:56 UTC (rev 8798)
+++ tor/trunk/doc/TODO 2006-10-23 05:24:57 UTC (rev 8799)
@@ -44,10 +44,10 @@
reintroduce Lasse's attacks from the Oakland paper.
- enumerate events of important things that occur in tor, so vidalia can
react.
-N - Backend implementation
+ o Backend implementation
R - Actually list all the events (notice and warn log messages are a good
place to look.) Divide messages into categories, perhaps.
-N - Specify general event system
+R - Specify general event system
R - Specify actual events.
N . Have (and document) a BEGIN_DIR relay cell that means "Connect to your
@@ -220,7 +220,7 @@
- Design next-version protocol for connections
For blocking-resistance scheme:
- X allow ordinary-looking ssl for dir connections. need a new dirport
+ o allow ordinary-looking ssl for dir connections. need a new dirport
for this, or can we handle both ssl and non-ssl, or should we
entirely switch to ssl in certain cases?
d - need to figure out how to fetch status of a few servers from the BDA
Modified: tor/trunk/src/or/control.c
===================================================================
--- tor/trunk/src/or/control.c 2006-10-23 04:52:56 UTC (rev 8798)
+++ tor/trunk/src/or/control.c 2006-10-23 05:24:57 UTC (rev 8799)
@@ -83,7 +83,10 @@
#define EVENT_AUTHDIR_NEWDESCS 0x000D
#define EVENT_DESCCHANGED 0x000E
#define EVENT_NS 0x000F
-#define _EVENT_MAX 0x000F
+#define EVENT_STATUS_CLIENT 0x0010
+#define EVENT_STATUS_SERVER 0x0011
+#define EVENT_STATUS_GENERAL 0x0012
+#define _EVENT_MAX 0x0012
/* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */
/** Array mapping from message type codes to human-readable message
@@ -1054,6 +1057,12 @@
event_code = EVENT_DESCCHANGED;
else if (!strcasecmp(ev, "NS"))
event_code = EVENT_NS;
+ else if (!strcasecmp(ev, "STATUS_GENERAL"))
+ event_code = EVENT_STATUS_GENERAL;
+ else if (!strcasecmp(ev, "STATUS_CLIENT"))
+ event_code = EVENT_STATUS_CLIENT;
+ else if (!strcasecmp(ev, "STATUS_SERVER"))
+ event_code = EVENT_STATUS_SERVER;
else {
connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n",
ev);
@@ -2408,10 +2417,10 @@
else if (!strcasecmp(arg, "EXTENDED_EVENTS")) /* <- documented */
extended_events = 1;
else if (!strcasecmp(arg, "EXTENDED_FORMAT")) {
- /* remove this in 0.1.2.4; EXTENDED_FORMAT only ever worked for a little
- * while during 0.1.2.2-alpha-dev. */
+ /* remove this in 0.1.2.4; EXTENDED_FORMAT only ever worked for a
+ * little while during 0.1.2.2-alpha-dev. */
log_warn(LD_GENERAL,
- "EXTENDED_FORMAT is deprecated; use EXTENDED_EVENTS instead.");
+ "EXTENDED_FORMAT is deprecated; use EXTENDED_EVENTS instead.");
extended_events = 1;
} else {
connection_printf_to_buf(conn, "552 Unrecognized feature \"%s\"\r\n",
@@ -3399,6 +3408,7 @@
return 0;
}
+/* DOCDOC */
int
control_event_networkstatus_changed_single(local_routerstatus_t *rs)
{
@@ -3424,6 +3434,96 @@
return 0;
}
+/* DOCDOC */
+static int
+control_event_status(int type, int severity, const char *format, va_list args)
+{
+ char format_buf[160];
+ const char *status, *sev;
+
+ switch (type) {
+ case EVENT_STATUS_GENERAL:
+ status = "STATUS_GENERAL";
+ break;
+ case EVENT_STATUS_CLIENT:
+ status = "STATUS_CLIENT";
+ break;
+ case EVENT_STATUS_SERVER:
+ status = "STATUS_SEVER";
+ break;
+ default:
+ log_warn(LD_BUG, "Unrecognized status type %d", type);
+ return -1;
+ }
+ switch (severity) {
+ case LOG_NOTICE:
+ sev = "NOTICE";
+ break;
+ case LOG_WARN:
+ sev = "WARN";
+ break;
+ case LOG_ERR:
+ sev = "ERR";
+ break;
+ default:
+ log_warn(LD_BUG, "Unrecognized status severity %d", severity);
+ return -1;
+ }
+ if (tor_snprintf(format_buf, sizeof(format_buf), "650 %s %s %s\r\n",
+ status, sev, format)<0) {
+ log_warn(LD_BUG, "Format string too long.");
+ return -1;
+ }
+
+ send_control1_event_impl(type, ALL_NAMES|ALL_FORMATS, 0, format_buf, args);
+ return 0;
+}
+
+/* DOCDOC */
+int
+control_event_general_status(int severity, const char *format, ...)
+{
+ va_list ap;
+ int r;
+ if (!EVENT_IS_INTERESTING1(EVENT_STATUS_GENERAL))
+ return 0;
+
+ va_start(ap, format);
+ r = control_event_status(EVENT_STATUS_GENERAL, severity, format, ap);
+ va_end(ap);
+ return r;
+}
+
+/* DOCDOC */
+int
+control_event_client_status(int severity, const char *format, ...)
+{
+ va_list ap;
+ int r;
+ if (!EVENT_IS_INTERESTING1(EVENT_STATUS_CLIENT))
+ return 0;
+
+ va_start(ap, format);
+ r = control_event_status(EVENT_STATUS_CLIENT, severity, format, ap);
+ va_end(ap);
+ return r;
+}
+
+/* DOCDOC */
+int
+control_event_server_status(int severity, const char *format, ...)
+{
+ va_list ap;
+ int r;
+ if (!EVENT_IS_INTERESTING1(EVENT_STATUS_SERVER))
+ return 0;
+
+ va_start(ap, format);
+ r = control_event_status(EVENT_STATUS_SERVER, severity, format, ap);
+ va_end(ap);
+ return r;
+}
+
/** Choose a random authentication cookie and write it to disk.
* Anybody who can read the cookie from disk will be considered
* authorized to use the control connection. */
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2006-10-23 04:52:56 UTC (rev 8798)
+++ tor/trunk/src/or/or.h 2006-10-23 05:24:57 UTC (rev 8799)
@@ -2121,6 +2121,12 @@
int control_event_my_descriptor_changed(void);
int control_event_networkstatus_changed(smartlist_t *statuses);
int control_event_networkstatus_changed_single(local_routerstatus_t *rs);
+int control_event_general_status(int severity, const char *format, ...)
+ CHECK_PRINTF(2,3);
+int control_event_client_status(int severity, const char *format, ...)
+ CHECK_PRINTF(2,3);
+int control_event_server_status(int severity, const char *format, ...)
+ CHECK_PRINTF(2,3);
int init_cookie_authentication(int enabled);
int decode_hashed_password(char *buf, const char *hashed);