[or-cvs] Make OP work on windows! (Also misc logging tweaks)

Nick Mathewson nickm at seul.org
Thu Mar 11 06:19:11 UTC 2004


Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/tmp/cvs-serv3675/src/or

Modified Files:
	buffers.c connection.c directory.c main.c or.h routerlist.c 
Log Message:
Make OP work on windows! (Also misc logging tweaks)

Index: buffers.c
===================================================================
RCS file: /home/or/cvsroot/src/or/buffers.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- buffers.c	9 Mar 2004 22:01:16 -0000	1.69
+++ buffers.c	11 Mar 2004 06:19:08 -0000	1.70
@@ -188,13 +188,13 @@
     return 0; /* we shouldn't read anything */
 
 //  log_fn(LOG_DEBUG,"reading at most %d bytes.",at_most);
-  read_result = read(s, buf->mem+buf->datalen, at_most);
+  read_result = recv(s, buf->mem+buf->datalen, at_most, 0);
   if (read_result < 0) {
     if(!ERRNO_EAGAIN(errno)) { /* it's a real error */
       return -1;
     }
-#ifdef MS_WINDOWS
-    e = correct_socket_errno(s);
+#ifdef MS_WINDOWS
+    e = correct_socket_errno(s);
     if(!ERRNO_EAGAIN(e)) { /* no, it *is* a real error! */
       return -1;
     }
@@ -249,14 +249,14 @@
 
   if(*buf_flushlen == 0) /* nothing to flush */
     return 0;
-
-  write_result = write(s, buf->mem, *buf_flushlen);
+
+  write_result = send(s, buf->mem, *buf_flushlen, 0);
   if (write_result < 0) {
     if(!ERRNO_EAGAIN(errno)) { /* it's a real error */
       return -1;
     }
-#ifdef MS_WINDOWS
-    e = correct_socket_errno(s);
+#ifdef MS_WINDOWS
+    e = correct_socket_errno(s);
     if(!ERRNO_EAGAIN(e)) { /* no, it *is* a real error! */
       return -1;
     }

Index: connection.c
===================================================================
RCS file: /home/or/cvsroot/src/or/connection.c,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -d -r1.178 -r1.179
--- connection.c	9 Mar 2004 22:09:13 -0000	1.178
+++ connection.c	11 Mar 2004 06:19:08 -0000	1.179
@@ -154,8 +154,8 @@
     return;
   }
   if (conn->outbuf_flushlen) {
-    log_fn(LOG_INFO,"Closing connection (fd %d, type %d, state %d) with data on outbuf.",
-           conn->s, conn->type, conn->state);
+    log_fn(LOG_INFO,"Closing connection (fd %d, type %s, state %d) with data on outbuf.",
+           conn->s, CONN_TYPE_TO_STRING(conn->type), conn->state);
   }
   close(conn->s);
   conn->s = -1;
@@ -226,7 +226,8 @@
     if (conn->hold_open_until_flushed) {
       assert(conn->marked_for_close);
       if (now - conn->timestamp_lastwritten >= 15) {
-        log_fn(LOG_WARN,"Giving up on marked_for_close conn that's been flushing for 15s (fd %d, type %d, state %d).", conn->s, conn->type, conn->state);
+        log_fn(LOG_WARN,"Giving up on marked_for_close conn that's been flushing for 15s (fd %d, type %s, state %d).", 
+			conn->s, CONN_TYPE_TO_STRING(conn->type), conn->state);
         conn->hold_open_until_flushed = 0;
       }
     }
@@ -610,7 +611,7 @@
        */
     }
   } else {
-    if (flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen) < 0) {
+    if (flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen) < 0) {
       connection_close_immediate(conn); /* Don't flush; connection is dead. */
       connection_mark_for_close(conn, END_STREAM_REASON_MISC);
       return -1;

Index: directory.c
===================================================================
RCS file: /home/or/cvsroot/src/or/directory.c,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- directory.c	6 Mar 2004 05:09:33 -0000	1.61
+++ directory.c	11 Mar 2004 06:19:08 -0000	1.62
@@ -46,12 +46,12 @@
   }
 
   switch(connection_connect(conn, router->address, router->addr, router->dir_port)) {
-    case -1:
+    case -1:
       router_mark_as_down(conn->nickname); /* don't try him again */
       connection_remove(conn);
       connection_free(conn);
       return;
-    case 0:
+    case 0:
       connection_set_poll_socket(conn);
       connection_watch_events(conn, POLLIN | POLLOUT | POLLERR);
       /* writable indicates finish, readable indicates broken link,
@@ -59,7 +59,7 @@
       conn->state = command;
       return;
     /* case 1: fall through */
-  }
+  }
 
   connection_set_poll_socket(conn);
   if(directory_send_command(conn, command) < 0) {
@@ -237,7 +237,7 @@
   int e, len=sizeof(e);
 
   assert(conn && conn->type == CONN_TYPE_DIR);
-
+
   switch(conn->state) {
     case DIR_CONN_STATE_CONNECTING_FETCH:
     case DIR_CONN_STATE_CONNECTING_UPLOAD:

Index: main.c
===================================================================
RCS file: /home/or/cvsroot/src/or/main.c,v
retrieving revision 1.196
retrieving revision 1.197
diff -u -d -r1.196 -r1.197
--- main.c	10 Mar 2004 06:26:38 -0000	1.196
+++ main.c	11 Mar 2004 06:19:08 -0000	1.197
@@ -69,7 +69,8 @@
 
   nfds++;
 
-  log(LOG_INFO,"connection_add(): new conn type %d, socket %d, nfds %d.",conn->type, conn->s, nfds);
+  log(LOG_INFO,"connection_add(): new conn type %s, socket %d, nfds %d.",
+	  CONN_TYPE_TO_STRING(conn->type), conn->s, nfds);
 
   return 0;
 }
@@ -88,7 +89,8 @@
   assert(conn);
   assert(nfds>0);
 
-  log(LOG_INFO,"connection_remove(): removing socket %d, nfds now %d",conn->s, nfds-1);
+  log_fn(LOG_INFO,"removing socket %d (type %s), nfds now %d",
+	  conn->s, CONN_TYPE_TO_STRING(conn->type), nfds-1);
   /* if it's an edge conn, remove it from the list
    * of conn's on this circuit. If it's not on an edge,
    * flush and send destroys for all circuits on this conn
@@ -174,7 +176,7 @@
   if(!(poll_array[i].revents & (POLLIN|POLLHUP|POLLERR)))
     if(!connection_is_reading(conn) ||
        !connection_has_pending_tls_data(conn))
-      return; /* this conn should not read */
+      return; /* this conn should not read */
 
   log_fn(LOG_DEBUG,"socket %d wants to read.",conn->s);
 
@@ -191,7 +193,7 @@
         /* XXX This shouldn't ever happen anymore. */
         /* XXX but it'll clearly happen on MS_WINDOWS from POLLERR, right? */
         log_fn(LOG_ERR,"Unhandled error on read for %s connection (fd %d); removing",
-               conn_type_to_string[conn->type], conn->s);
+               CONN_TYPE_TO_STRING(conn->type), conn->s);
         connection_mark_for_close(conn,0);
       }
     }
@@ -202,7 +204,7 @@
   connection_t *conn;
 
   if(!(poll_array[i].revents & POLLOUT))
-    return; /* this conn doesn't want to write */
+    return; /* this conn doesn't want to write */
 
   conn = connection_array[i];
   log_fn(LOG_DEBUG,"socket %d wants to write.",conn->s);
@@ -215,7 +217,7 @@
     if (!conn->marked_for_close) {
       /* this connection is broken. remove it. */
       log_fn(LOG_WARN,"Unhandled error on read for %s connection (fd %d); removing",
-             conn_type_to_string[conn->type], conn->s);
+             CONN_TYPE_TO_STRING(conn->type), conn->s);
       conn->has_sent_end = 1; /* otherwise we cry wolf about duplicate close */
       connection_mark_for_close(conn,0);
     }
@@ -238,9 +240,9 @@
      * has already been closed as unflushable. */
     if(!conn->hold_open_until_flushed)
       log_fn(LOG_WARN,
-        "Conn (fd %d, type %d, state %d) marked, but wants to flush %d bytes. "
+        "Conn (fd %d, type %s, state %d) marked, but wants to flush %d bytes. "
         "(Marked at %s:%d)",
-        conn->s, conn->type, conn->state,
+        conn->s, CONN_TYPE_TO_STRING(conn->type), conn->state,
         conn->outbuf_flushlen, conn->marked_for_close_file, conn->marked_for_close);
     if(connection_speaks_cells(conn)) {
       if(conn->state == OR_CONN_STATE_OPEN) {
@@ -654,7 +656,7 @@
   for(i=0;i<nfds;i++) {
     conn = connection_array[i];
     log(severity, "Conn %d (socket %d) type %d (%s), state %d (%s), created %ld secs ago",
-      i, conn->s, conn->type, conn_type_to_string[conn->type],
+      i, conn->s, conn->type, CONN_TYPE_TO_STRING(conn->type),
       conn->state, conn_state_to_string[conn->type][conn->state], now - conn->timestamp_created);
     if(!connection_is_listener(conn)) {
       log(severity,"Conn %d is to '%s:%d'.",i,conn->address, conn->port);

Index: or.h
===================================================================
RCS file: /home/or/cvsroot/src/or/or.h,v
retrieving revision 1.249
retrieving revision 1.250
diff -u -d -r1.249 -r1.250
--- or.h	11 Mar 2004 05:14:06 -0000	1.249
+++ or.h	11 Mar 2004 06:19:08 -0000	1.250
@@ -3,9 +3,16 @@
 /* $Id$ */
 
 #ifndef __OR_H
-#define __OR_H
+#define __OR_H
 
-#include "orconfig.h"
+#include "orconfig.h"
+#ifdef MS_WINDOWS
+#define WIN32_WINNT 0x400
+#define _WIN32_WINNT 0x400
+#define WIN32_LEAN_AND_MEAN
+/* Number of fds that select will accept; default is 64. */
+#define FD_SETSIZE 512
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -86,9 +93,6 @@
 #include <io.h>
 #include <process.h>
 #include <direct.h>
-#define WIN32_WINNT 0x400
-#define _WIN32_WINNT 0x400
-#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #define snprintf _snprintf
 #endif
@@ -658,7 +662,12 @@
 int config_assign_default_dirservers(void);
 int getconfig(int argc, char **argv, or_options_t *options);
 
-/********************************* connection.c ***************************/
+/********************************* connection.c ***************************/
+
+#define CONN_TYPE_TO_STRING(t) (((t) < _CONN_TYPE_MIN || (t) > _CONN_TYPE_MAX) ? "Unknown" : \
+	                            conn_type_to_string[(t)])
+
+extern char *conn_type_to_string[];
 
 connection_t *connection_new(int type);
 void connection_free(connection_t *conn);

Index: routerlist.c
===================================================================
RCS file: /home/or/cvsroot/src/or/routerlist.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- routerlist.c	9 Mar 2004 22:17:35 -0000	1.36
+++ routerlist.c	11 Mar 2004 06:19:08 -0000	1.37
@@ -390,7 +390,7 @@
   if (router_resolve_routerlist(routerlist)) {
     log_fn(LOG_WARN, "Error resolving routerlist");
     return -1;
-  }
+  }
   if (compare_recommended_versions(VERSION, routerlist->software_versions) < 0) {
     log(options.IgnoreVersion ? LOG_WARN : LOG_ERR,
         "You are running Tor version %s, which will not work with this network.\n"
@@ -555,11 +555,11 @@
 	log_fn(LOG_WARN, "Published time was unparseable"); return -1;
   }
   if (year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ||
-	  hour > 24 || minute > 61 || second > 62) {
+	  hour > 23 || minute > 59 || second > 61) {
 	log_fn(LOG_WARN, "Published time was nonsensical"); return -1;
   }
   st_tm.tm_year = year;
-  st_tm.tm_mon = month;
+  st_tm.tm_mon = month-1;
   st_tm.tm_mday = day;
   st_tm.tm_hour = hour;
   st_tm.tm_min = minute;



More information about the tor-commits mailing list