Selaa lähdekoodia

Make _with_err return routerinfo, like old function does

rl1987 6 vuotta sitten
vanhempi
commit
36f7d0a940
4 muutettua tiedostoa jossa 51 lisäystä ja 35 poistoa
  1. 11 12
      src/or/policies.c
  2. 28 15
      src/or/router.c
  3. 1 1
      src/or/router.h
  4. 11 7
      src/test/test_policy.c

+ 11 - 12
src/or/policies.c

@@ -2999,9 +2999,8 @@ getinfo_helper_policies(control_connection_t *conn,
     smartlist_free(private_policy_strings);
   } else if (!strcmp(question, "exit-policy/reject-private/relay")) {
     const or_options_t *options = get_options();
-    const routerinfo_t *me = NULL;
-
-    int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me);
+    int err = 0;
+    const routerinfo_t *me = router_get_my_routerinfo_with_err(&err);
 
     if (!me) {
       *errmsg = routerinfo_errno_to_string(err);
@@ -3043,8 +3042,13 @@ getinfo_helper_policies(control_connection_t *conn,
     int include_ipv4 = 0;
     int include_ipv6 = 0;
 
-    const routerinfo_t *me = NULL;
-    int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me);
+    int err = 0;
+    const routerinfo_t *me = router_get_my_routerinfo_with_err(&err);
+
+    if (!me) {
+      *errmsg = routerinfo_errno_to_string(err);
+      return routerinfo_err_is_transient(err) ? -1 : 0;
+    }
 
     if (!strcmp(question, "exit-policy/ipv4")) {
       include_ipv4 = 1;
@@ -3056,13 +3060,8 @@ getinfo_helper_policies(control_connection_t *conn,
       return 0; /* No such key. */
     }
 
-    if (!me) {
-      *errmsg = routerinfo_errno_to_string(err);
-      return routerinfo_err_is_transient(err) ? -1 : 0;
-    } else {
-      *answer = router_dump_exit_policy_to_string(me,include_ipv4,
-                                                  include_ipv6);
-    }
+    *answer = router_dump_exit_policy_to_string(me,include_ipv4,
+                                                include_ipv6);
   }
 
   return 0;

+ 28 - 15
src/or/router.c

@@ -2073,28 +2073,41 @@ router_get_my_routerinfo,(void))
   return desc_routerinfo;
 }
 
-/** Set <b>ri</b> to routerinfo of this OR. Rebuild it from
- * scratch if needed. Return 0 on success or an appropriate
- * TOR_ROUTERINFO_ERROR_* value on failure.
+/** Return routerinfo of this OR. Rebuild it from
+ * scratch if needed. Set <b>*err</b> to 0 on success or to
+ * appropriate TOR_ROUTERINFO_ERROR_* value on failure.
  */
-MOCK_IMPL(int,
-router_get_my_routerinfo_with_err,(routerinfo_t **ri))
+MOCK_IMPL(const routerinfo_t *,
+router_get_my_routerinfo_with_err,(int *err))
 {
-  if (!server_mode(get_options()))
-    return TOR_ROUTERINFO_ERROR_NOT_A_SERVER;
+  if (!server_mode(get_options())) {
+    if (err)
+      *err = TOR_ROUTERINFO_ERROR_NOT_A_SERVER;
+
+    return NULL;
+  }
 
   if (!desc_clean_since) {
-    int err = router_rebuild_descriptor(0);
-    if (err < 0)
-      return err;
+    int rebuild_err = router_rebuild_descriptor(0);
+    if (rebuild_err < 0) {
+      if (err)
+        *err = rebuild_err;
+
+      return NULL;
+    }
   }
 
-  if (!desc_routerinfo)
-    return TOR_ROUTERINFO_ERROR_NOT_SO_FAST;
+  if (!desc_routerinfo) {
+    if (err)
+      *err = TOR_ROUTERINFO_ERROR_NOT_SO_FAST;
 
-  if (ri)
-    *ri = desc_routerinfo;
-  return 0;
+    return NULL;
+  }
+
+  if (err)
+    *err = 0;
+
+  return desc_routerinfo;
 }
 
 /** OR only: Return a signed server descriptor for this OR, rebuilding a fresh

+ 1 - 1
src/or/router.h

@@ -92,7 +92,7 @@ void router_new_address_suggestion(const char *suggestion,
 int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port);
 MOCK_DECL(int, router_my_exit_policy_is_reject_star,(void));
 MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
-MOCK_DECL(int, router_get_my_routerinfo_with_err,(routerinfo_t **ri));
+MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo_with_err,(int *err));
 extrainfo_t *router_get_my_extrainfo(void);
 const char *router_get_my_descriptor(void);
 const char *router_get_descriptor_gen_reason(void);

+ 11 - 7
src/test/test_policy.c

@@ -1498,16 +1498,20 @@ test_dump_exit_policy_to_string(void *arg)
 static routerinfo_t *mock_desc_routerinfo = NULL;
 static int routerinfo_err;
 
-static int
-mock_router_get_my_routerinfo_with_err(routerinfo_t **ri)
+static const routerinfo_t *
+mock_router_get_my_routerinfo_with_err(int *err)
 {
-  if (routerinfo_err)
-    return routerinfo_err;
+  if (routerinfo_err) {
+    if (err)
+      *err = routerinfo_err;
 
-  if (ri)
-    *ri = mock_desc_routerinfo;
+    return NULL;
+  }
 
-  return 0;
+  if (err)
+    *err = 0;
+
+  return mock_desc_routerinfo;
 }
 
 #define DEFAULT_POLICY_STRING "reject *:*"