]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r14544@catbus: nickm | 2007-08-13 17:00:09 -0400
authorNick Mathewson <nickm@torproject.org>
Mon, 13 Aug 2007 21:01:02 +0000 (21:01 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 13 Aug 2007 21:01:02 +0000 (21:01 +0000)
 Give a 200 when a duplicate vote gets uploaded.

svn:r11094

src/or/directory.c
src/or/dirvote.c
src/or/or.h

index d5ac919e32f0255f021174ebbc12c4abba1ee902..0a4eb1f34e9005f6854ee88d91663892801dcf40 100644 (file)
@@ -2161,11 +2161,12 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
   if (authdir_mode_v3(options) &&
       !strcmp(url,"/tor/post/vote")) { /* server descriptor post */
     const char *msg = "OK";
-    if (dirvote_add_vote(body, &msg)) {
-      write_http_status_line(conn, 200, "Vote stored");
+    int status;
+    if (dirvote_add_vote(body, &msg, &status)) {
+      write_http_status_line(conn, status, "Vote stored");
     } else {
       tor_assert(msg);
-      write_http_status_line(conn, 400, msg);
+      write_http_status_line(conn, status, msg);
     }
     goto done;
   }
index ccaa0f28915ffa0922c6b243236aac507e5d11ea..b1577b0d9bce4b20980aa1299029dc4ca686868f 100644 (file)
@@ -1131,12 +1131,13 @@ dirvote_perform_vote(void)
 {
   cached_dir_t *new_vote = generate_v3_networkstatus();
   pending_vote_t *pending_vote;
+  int status;
   const char *msg = "";
 
   if (!new_vote)
     return;
 
-  if (!(pending_vote = dirvote_add_vote(new_vote->dir, &msg))) {
+  if (!(pending_vote = dirvote_add_vote(new_vote->dir, &msg, &status))) {
     log_warn(LD_DIR, "Couldn't store my own vote! (I told myself, '%s'.)",
              msg);
     return;
@@ -1171,7 +1172,7 @@ dirvote_clear_pending_votes(void)
 
 /** DOCDOC */
 pending_vote_t *
-dirvote_add_vote(const char *vote_body, const char **msg_out)
+dirvote_add_vote(const char *vote_body, const char **msg_out, int *status_out)
 {
   networkstatus_vote_t *vote;
   networkstatus_voter_info_t *vi;
@@ -1179,6 +1180,8 @@ dirvote_add_vote(const char *vote_body, const char **msg_out)
   pending_vote_t *pending_vote = NULL;
   tor_assert(vote_body);
   tor_assert(msg_out);
+  tor_assert(status_out);
+  *status_out = 0;
 
   if (!pending_vote_list)
     pending_vote_list = smartlist_create();
@@ -1216,6 +1219,7 @@ dirvote_add_vote(const char *vote_body, const char **msg_out)
         if (!memcmp(vi_old->vote_digest, vi->vote_digest, DIGEST_LEN)) {
           /* Ah, it's the same vote. Not a problem. */
           log_info(LD_DIR, "Discarding a vote we already have.");
+          *status_out = 200;
           *msg_out = "ok";
           goto err;
         } else if (v->vote->published < vote->published) {
@@ -1240,7 +1244,8 @@ dirvote_add_vote(const char *vote_body, const char **msg_out)
                                            vote->published);
   pending_vote->vote = vote;
   smartlist_add(pending_vote_list, pending_vote);
-
+  if (!*status_out)
+    *status_out = 200;
   *msg_out = "ok";
   return pending_vote;
  err:
@@ -1248,6 +1253,8 @@ dirvote_add_vote(const char *vote_body, const char **msg_out)
     networkstatus_vote_free(vote);
   if (!*msg_out)
     *msg_out = "Error adding vote";
+  if (!*status_out)
+    *status_out = 400;
   /*XXXX020 free other fields */
   return NULL;
 }
index 80e90924d8f9375153f1b342791773fbe5c316da..332fb4d8a537bb5ad4522788eaffdca53c1c1b92 100644 (file)
@@ -2851,7 +2851,8 @@ void dirvote_act(time_t now);
 void dirvote_perform_vote(void);
 void dirvote_clear_pending_votes(void);
 struct pending_vote_t * dirvote_add_vote(const char *vote_body,
-                                         const char **msg_out);
+                                         const char **msg_out,
+                                         int *status_out);
 int dirvote_compute_consensus(void);
 int dirvote_add_signatures(const char *detached_signatures_body);
 int dirvote_publish_consensus(void);