Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
55a6e1b
STATE_TRY_DYSTOPIC returns each REMAINING_DYSTOPIC_GUARDS
juniorz Mar 15, 2016
796a029
Fix frees
juniorz Mar 15, 2016
d024a1b
STATE_TRY_DYSTOPIC transitions to STATE_PRIMARY_GUARDS
juniorz Mar 15, 2016
20681aa
on new consensus should track the place of old primary guards
tcz001 Mar 15, 2016
ab4e1e9
add more senario
tcz001 Mar 15, 2016
f2bc1e5
add more senario
tcz001 Mar 15, 2016
277bca4
Fix lint
juniorz Mar 15, 2016
25239fa
Rename test description
juniorz Mar 15, 2016
c9dd8f8
Extract is_bad
juniorz Mar 15, 2016
4e98587
C has enums
juniorz Mar 15, 2016
1e68e1e
Inject options and time in NEXT
juniorz Mar 15, 2016
1d61336
Check PRIMARY_GUARDS_RETRY_INTERVAL and retry PRIMARY_GUARDS
juniorz Mar 15, 2016
d10941c
Mark what is expected to be changed by the algo
juniorz Mar 15, 2016
82b8aa8
Keeping order is not important when using node_sl_choose_by_bandwidth
juniorz Mar 15, 2016
364be41
Finish next_primary_guard()
juniorz Mar 15, 2016
ad32e50
Fix memory leaks
juniorz Mar 15, 2016
8f9e86e
Fix lint
juniorz Mar 15, 2016
61f7562
This is not necessary
juniorz Mar 16, 2016
914b0c8
Make sure unreachable guards will be retried
juniorz Mar 16, 2016
59715ca
Test fill in primay guards
juniorz Mar 16, 2016
0a1a0bb
next_primary_guard should also filter out bad nodes
tcz001 Mar 17, 2016
41632ca
abstraction of bad
tcz001 Mar 17, 2016
b757e8c
Extract should_try()
juniorz Mar 18, 2016
c9198a9
Start impementing choose_random_entry_prop259
juniorz Mar 21, 2016
9268fa6
Update guard profiles on a new consensus
juniorz Mar 21, 2016
3b594cd
Store num_primary_guard on context
juniorz Mar 21, 2016
da2e245
Use num_primary_guards from context
juniorz Mar 21, 2016
5935414
Get all utopic and dystopic guards
juniorz Mar 21, 2016
41056b3
Fix check-spaces
juniorz Mar 21, 2016
877fd1f
Fill in sampled utopic and sampled dystopic guards
juniorz Mar 21, 2016
2870249
Fix check-spaces
juniorz Mar 22, 2016
7ce23b1
USED_GUARDS should be initialized
juniorz Mar 22, 2016
c6c2b0e
Fill in remaining utopic and dystopic
juniorz Mar 22, 2016
7c6d1f6
Fix description
juniorz Mar 22, 2016
5194623
Reorganize
juniorz Mar 22, 2016
ab2bbb9
This is not necessary
juniorz Mar 22, 2016
efe174d
Make distinction of lists of guards and lists of nodes
juniorz Mar 22, 2016
cf205bb
Document why it crashes at the moment
juniorz Mar 22, 2016
d9ff36a
Use original implementation until we support for_directory
juniorz Mar 22, 2016
654f673
remove primary_guards_log
tcz001 Mar 22, 2016
fe005c4
remove nonbad list methods
tcz001 Mar 22, 2016
6441309
remaining utopic shouldn't be in new consensus
tcz001 Mar 22, 2016
dcc3e0f
Add END() function
juniorz Mar 22, 2016
1c1f3d7
Rename algo_choose_entry_guard_start
juniorz Mar 22, 2016
1ca6029
Rename algo_on_new_consensus
juniorz Mar 22, 2016
61df8da
Rename algo_choose_entry_guard_next
juniorz Mar 22, 2016
f434c31
Fix crash
juniorz Mar 22, 2016
ffcc3f0
Enable proposal for directory guards
juniorz Mar 22, 2016
b37e78c
Some smaller updates, make more things private and cleanup some things
olabini Mar 22, 2016
d1be620
Notes
juniorz Mar 22, 2016
fd4afa3
is_bad == not in latest consensus
juniorz Mar 22, 2016
99f28c6
Create the entry_guard_t when the node is chosen as guard
juniorz Mar 22, 2016
9caf6d7
Clean up some things, and ensure that everything is static that shoul…
olabini Mar 23, 2016
a80472c
Use ReachableAddresses to determine if a node is dystopic
juniorz Mar 23, 2016
32eb86f
Add debug log
juniorz Mar 23, 2016
336119f
Fix check-spaces
juniorz Mar 23, 2016
48c2516
Debug level is too noisy
juniorz Mar 23, 2016
eb7141a
Implement for_directory
juniorz Mar 23, 2016
f10fc67
Normalize lists when choosing next primary guard
juniorz Mar 23, 2016
efdc08d
Improve creation of entry_guard_selection
juniorz Mar 23, 2016
f38de7d
Prevent infinite loop when ignoring non directory guards
juniorz Mar 23, 2016
badebc4
Add notes about need_uptime and need_capacity
juniorz Mar 23, 2016
0f5e647
Try to move START() out of the loop
juniorz Mar 24, 2016
97fa69c
Add is_eligible()
juniorz Mar 24, 2016
5e8bf03
Add debug to know the guards we are using
juniorz Mar 24, 2016
7748c23
Fixed computation of remaining using nodes instead of guards.
iapazmino Mar 24, 2016
2562925
Removed bad spaces.
iapazmino Mar 24, 2016
4628af9
Fixed line width.
iapazmino Mar 24, 2016
60156b1
clean up the guard_selection when we got a sucessful connection
tcz001 Mar 24, 2016
3212dad
They should be static
juniorz Mar 24, 2016
720560a
check-spaces
juniorz Mar 24, 2016
c8629ac
free entry_guard_selection pointers before setting as NULL
tcz001 Mar 28, 2016
c323100
forgot to remove primary_guards_log
tcz001 Mar 28, 2016
7c834d0
Fix guard selection cleanup
juniorz Mar 28, 2016
efabb51
guard_selection->used_guards is already used_guards
juniorz Mar 28, 2016
8b1e700
guard_selection_free() should set the pointer to NULL
juniorz Mar 28, 2016
74199c8
Casting to the right struct to remove the const
juniorz Mar 28, 2016
a373eb7
Free the right thing
juniorz Mar 28, 2016
ca26bba
Should not save guard to used_guards unless it is used as entry guard
juniorz Mar 28, 2016
5b0080c
Set entry_guard_selection to NULL using tor_free
juniorz Mar 28, 2016
1094dde
Add our should_continue implementation
juniorz Mar 28, 2016
22ab444
Test algo's should_continue.
iapazmino Mar 29, 2016
d42b604
Added scenario when interval has not finished yet.
iapazmino Mar 29, 2016
734b80b
Add original should_continue to be used when the proposal is turned off
juniorz Mar 29, 2016
7a1d8b2
make entry_node populated only when needed
tcz001 Mar 29, 2016
0beb549
Add default value for PrimaryGuardsRetryInterval
juniorz Mar 29, 2016
9d10f60
make init back and set entry_node null when should not continue
tcz001 Mar 29, 2016
c0db0f2
We should not attempt to init the guard_selection here
juniorz Mar 29, 2016
9f14e70
Fix entry_guard_selection initialization
juniorz Mar 29, 2016
74cea9e
Adds more logging
juniorz Mar 28, 2016
bd29b43
Fixes log output
juniorz Mar 29, 2016
4c726d8
Add step-by-step log
juniorz Mar 29, 2016
f92687e
Must break after each switch case
juniorz Mar 29, 2016
4885c13
last_attempted is better than unreachable_since in this case
juniorz Mar 29, 2016
15e61a6
Retry primary guards when transitioning back to this state
juniorz Mar 29, 2016
a5817cb
More logging
juniorz Mar 29, 2016
0b17aa8
I'll use 0.5% just because it is faster
juniorz Mar 30, 2016
6c3dfb1
Fixed test for finished interval.
iapazmino Mar 30, 2016
b0e9900
Tried before uses last attempted now
iapazmino Mar 30, 2016
71921c5
Extract entry_guard_new()
juniorz Mar 30, 2016
d580355
Extract entry_guard_chosen_on_date()
juniorz Mar 30, 2016
fd97bdc
Parse UsedGuards from state file
juniorz Mar 30, 2016
76e84c0
Add more TODOs
juniorz Mar 30, 2016
90e5aaf
Add guard_selection_parse_state to existing tor code
juniorz Mar 30, 2016
ca52fe3
Fix check-spaces
juniorz Mar 30, 2016
2ce9870
Oops
juniorz Mar 30, 2016
4fe34fa
Save used guards to state file
juniorz Mar 30, 2016
f907adb
Load used guards at the right moment
juniorz Mar 30, 2016
c617e48
Should not check PRIMARY_GUARDS_RETRY_INTERVAL when in PRIMARY_GUARD …
juniorz Mar 31, 2016
32ed776
Remove unused warning
juniorz Apr 1, 2016
44c4974
It seems to be enough to call this in a single place
juniorz Apr 1, 2016
fae4420
We need to compare fingerprints because they may not be the same pointer
juniorz Apr 1, 2016
785c639
filter out ExcludeNodes for guard_selection
tcz001 Apr 1, 2016
22221ef
Load existing EntryGuard into USED_GUARDS
juniorz Apr 1, 2016
71b9726
Fix test
juniorz Apr 1, 2016
1fa77fa
Replace guard_get_by_digest()
juniorz Apr 1, 2016
f3cad5e
Fix USED_GUARDS load
juniorz Apr 1, 2016
9a25be4
Fix check-spaces
juniorz Apr 1, 2016
5b36c00
Keep using the pending guard until the callback is invoked
juniorz Apr 5, 2016
ad03480
Add note
juniorz Apr 5, 2016
8636801
some filter functions
tcz001 Apr 5, 2016
66826f2
remove dystopic state and related guard sets
tcz001 Apr 6, 2016
dff4ce3
Filter using the same logic existing in entrynodes
juniorz Apr 7, 2016
4e0765c
Sampled set is a set of entry_guard_t
juniorz Apr 7, 2016
2a737cd
try to fix but failed, needs more inputs
tcz001 Apr 7, 2016
7439c1c
Remaining should be guards
juniorz Apr 7, 2016
3971465
Fix test and spaces
juniorz Apr 7, 2016
d0bb705
Must compare with fast_memcmp
juniorz Apr 7, 2016
c4901be
Add parsing of path bias
juniorz Apr 7, 2016
d66b559
It should be equal
juniorz Apr 7, 2016
bc6c367
Serialize path bias related properties
juniorz Apr 7, 2016
ce5d65c
Should store SampledGuards but its not
juniorz Apr 7, 2016
34c9b77
try to add ci
tcz001 Apr 8, 2016
50afbca
try to disable asciidoc
tcz001 Apr 8, 2016
41ead6d
we can ignore these for now
tcz001 Apr 8, 2016
0a8c78a
add badge [ci skip]
tcz001 Apr 8, 2016
442ddec
use markdown
tcz001 Apr 8, 2016
c10a067
USED_GUARDS will always have been made contact and SAMPLED_GUARDS
juniorz Apr 8, 2016
1d6ae0b
Adds guardlist_t
juniorz Apr 8, 2016
9c593e7
Use appropriate free functions
juniorz Apr 8, 2016
47d0d4e
This should not leave unused functions
juniorz Apr 8, 2016
f052467
It is the opposite
juniorz Apr 8, 2016
146f102
They should actually be skipped
juniorz Apr 8, 2016
22da831
Start reevaluating all conditions we use to decide if a guard should …
juniorz Apr 8, 2016
aa69a56
Making USED_GUARDS persisted again when there is no global entry_guards
juniorz Apr 8, 2016
98c62c1
Extract function reused in old behavior
juniorz Apr 8, 2016
05bd649
Move things to the apropriate scope
juniorz Apr 8, 2016
da87a0a
Fix more free
juniorz Apr 8, 2016
de43383
Fix check-space
juniorz Apr 8, 2016
804a1c2
using option->EntryNodes as sample_set when we have it in config
tcz001 Apr 8, 2016
4d52224
try to split up sripts
tcz001 Apr 8, 2016
22d5791
Pending investigations
juniorz Apr 8, 2016
1e792b0
USED_GUARDS has made_contact by definition
juniorz Apr 8, 2016
f37b664
Load sample set from state file
juniorz Apr 8, 2016
9cf98f6
Extract function
juniorz Apr 8, 2016
351bb64
This is now used
juniorz Apr 8, 2016
32c742a
This may not be the right place
juniorz Apr 8, 2016
81d553c
Add remove_dead_guards
juniorz Apr 8, 2016
8310f49
Add remove_obsolete_guards
juniorz Apr 8, 2016
aaff341
Remove obsolete guards after parsing.
juniorz Apr 8, 2016
b9af129
They should not be obsolete
juniorz Apr 8, 2016
6bb41f1
Prune dead and obsolete guards when a new consensus arrives
juniorz Apr 11, 2016
0e5106e
Add notes
juniorz Apr 11, 2016
287dc2b
add usebridge case
tcz001 Apr 11, 2016
943914a
check bridge
tcz001 Apr 11, 2016
d1e9486
fix hanging UseBridge mode
tcz001 Apr 12, 2016
de1b39a
prefered_min can be one if entry_list_is_constrained
tcz001 Apr 12, 2016
8284b6e
add test for filter_set
tcz001 Apr 12, 2016
669c674
Sample set is expanded up to ºMINIMUM_FILTERED_SAMPLE_SIZE
iapazmino Apr 13, 2016
7a704a4
fix compiling
tcz001 Apr 13, 2016
abeae4a
comment out some code for now
tcz001 Apr 13, 2016
17cf604
Aborts expansion if there are more guards than it should.
iapazmino Apr 13, 2016
d89df95
fix compiling
tcz001 Apr 13, 2016
15da97f
fix test
tcz001 Apr 13, 2016
da87393
consider constrained case for fill_in_remaining_utopic
tcz001 Apr 13, 2016
bd8469d
no need to export
tcz001 Apr 14, 2016
a096b58
fix test
tcz001 Apr 14, 2016
ac16793
Removed exclude_nodes from start as they can be accessed trough options.
iapazmino Apr 14, 2016
1b9fa5e
Extracted filtering of sampled guards.
iapazmino Apr 14, 2016
8d595ec
Renamed remaining guards to match spec wording.
iapazmino Apr 14, 2016
871e418
Renamed REMAINING_STATE to match spec naming.
iapazmino Apr 14, 2016
8614866
Renamed transition to new state name.
iapazmino Apr 14, 2016
aea17ae
change this back to increase probablity finding a live guard
tcz001 Apr 14, 2016
1ae887a
CI should run the extended set of tests.
iapazmino Apr 14, 2016
8a7752b
remove choose_entry_guard_algo_new_consensus because it's no more use…
tcz001 Apr 14, 2016
1535909
use parameter instead of global entry_guard_selection is possible
tcz001 Apr 15, 2016
5173765
make +entry_guard_selection_init static
tcz001 Apr 15, 2016
6408a79
Refactoring, remove global used_guards, make guard_selection_ensure
tcz001 Apr 16, 2016
590d96f
forgot to change header, and remove const restriction
tcz001 Apr 17, 2016
25c6b9d
Refactoring, move global sampled_guards to guard_selection_t
tcz001 Apr 18, 2016
bd8670c
replace started with state=STATE_INIT
tcz001 Apr 18, 2016
bb3237d
add for_directory case
tcz001 Apr 18, 2016
e54551a
ensure all guards for selection are for_directory guards
tcz001 Apr 20, 2016
81ec0f3
extract function find_guard_by_node and also fix the filter_Set behavior
tcz001 Apr 21, 2016
d7ed996
move pending_guard only inside of try REMAINING_REMAINING_GUARDS
tcz001 Apr 21, 2016
2c2d3f1
Change the TRY_REMAINING logic to be FIFO,
tcz001 Apr 22, 2016
14a7630
Using only 2 spaces
tdruiva Apr 25, 2016
67f667b
Check space for prop259
tdruiva Apr 26, 2016
baa8685
Check space for prop259
tdruiva Apr 26, 2016
f4aed4e
Ups, deleted too much
tdruiva Apr 26, 2016
98f0e05
remove decide_num, and fix one segmentfault at update_router_have_min…
tcz001 Apr 26, 2016
6999899
Craches if reaches INVALID o INIT state for next guard
tdruiva Apr 26, 2016
e4754a1
Removes unnecessary vars and comments
tdruiva Apr 26, 2016
e3b209e
Moves internetLikelyDownInterval to option
tdruiva Apr 26, 2016
7c3eb34
Well, change this latter
tdruiva Apr 26, 2016
55d97bf
We have a better filter
tdruiva Apr 27, 2016
96a2eae
Moves numbers to constants
tdruiva Apr 27, 2016
f052573
Removes for_dir parameter as it will be by default true
tdruiva Apr 27, 2016
e24513d
fix a segmentfault by using sampled_guards and used_guards while hop
tcz001 Apr 27, 2016
40c836e
Fix #15: brief and short description of this file's intention.
iapazmino May 4, 2016
27bc8e3
#13 - Used guards are not filetered to match specification.
iapazmino May 4, 2016
d53a2c1
#13 - Notes to document function related to current implementation.
iapazmino May 4, 2016
263ff7b
#13 - Documenting the difference with function with the same name in …
iapazmino May 4, 2016
d210f24
Adds explanation for guard_selection_register_connect_status
tdruiva May 25, 2016
c8358be
Removes unnecessary function
tdruiva May 25, 2016
1ec9684
#15 add some brief details
tcz001 May 30, 2016
29eb39f
#15 add more details
tcz001 May 30, 2016
1c898bd
add some comments
tcz001 Jun 2, 2016
e96cfac
add some comments
tcz001 Jun 2, 2016
fdf306d
add some comments
tcz001 Jun 2, 2016
b7a79a0
Removes unnecessary function
tdruiva May 25, 2016
826b64b
#16 Documentation
tdruiva Jun 3, 2016
ea8f3c4
Removes trash
tdruiva Jun 6, 2016
a4b6377
#16 Documentation for fill_in_from_entrynodes
tdruiva Jun 3, 2016
bde0bbe
#16 Documentation for fill_in_from_entrynodes
tdruiva Jun 3, 2016
344ce42
#16 Doc for state_PRIMARY_GUARDS_next
tdruiva Jun 9, 2016
ef6a161
#16 Doc for transition_to
tdruiva Jun 9, 2016
9d4c50c
#16 doc functions
tdruiva Jun 14, 2016
468adba
#16 doc functions
tdruiva Jun 14, 2016
21d35df
#16 doc functions
tdruiva Jun 14, 2016
6773e14
#16 doc functions...
tdruiva Jun 14, 2016
35c7641
#16 Moves constants and adds more doc
tdruiva Jun 14, 2016
d1d1ee3
Missing semicoma
tdruiva Jun 14, 2016
03f092f
#16 Doc for code block
tdruiva Jun 15, 2016
052a72c
#16 Check spaces
tdruiva Jun 15, 2016
1ad77c5
#16 Functions doc
tdruiva Jun 15, 2016
c27e9b4
#16 Functions doc
tdruiva Jun 15, 2016
43a37b7
Double is better than int
tdruiva Jun 15, 2016
113a8f8
#16 Doc
tdruiva Jun 15, 2016
ab228c9
#16 More doc
tdruiva Jun 16, 2016
eedd77c
#16 more comments
tdruiva Jun 17, 2016
c5c8760
Removes unused parameter and add doc to choose_random_entry_prop259
tdruiva Jun 20, 2016
25d7db1
#16 More docs for functions
tdruiva Jun 20, 2016
a0b12c7
#16 Doc
tdruiva Jun 20, 2016
97350da
#16 Moves initialization of primary and remaining guards to same place
tdruiva Jun 20, 2016
cb00b11
#16 More doc
tdruiva Jun 20, 2016
578fa90
#16 Better doc
tdruiva Jun 21, 2016
0576c42
#16 More pretty doc
tdruiva Jun 21, 2016
7e38abe
#16 Fix spaces
tdruiva Jun 21, 2016
18905c8
Merge pull request #25 from twstrike/prop259_doc
tdruiva Jun 21, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
language: c
branches:
only:
- prop259
compiler:
- clang
- gcc
install: ./autogen.sh
script:
- ./configure --enable-prop259 --enable-coverage --disable-asciidoc --enable-gcc-warnings
- make && make check
- make check-spaces
2 changes: 2 additions & 0 deletions README → README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
[![Build Status](https://travis-ci.org/twstrike/tor_for_patching.svg?branch=master)](https://travis-ci.org/twstrike/tor_for_patching)

Tor protects your privacy on the internet by hiding the connection
between your Internet address and the services you use. We believe Tor
is reasonably secure, but please ensure you read the instructions and
Expand Down
11 changes: 11 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ AC_ARG_ENABLE(systemd,
esac], [systemd=auto])


AC_ARG_ENABLE(prop259,
AS_HELP_STRING(--enable-prop259, [enable proposal 259]),
[case "${enableval}" in
"yes") prop259=true ;;
"no") prop259=false ;;
* ) AC_MSG_ERROR(bad value for --enable-prop259) ;;
esac], [prop259=auto])

# systemd support
if test "x$enable_systemd" = "xno"; then
Expand Down Expand Up @@ -1101,6 +1108,10 @@ if test "x$transparent" = "xtrue"; then
fi
fi

if test "x$prop259" = "xtrue"; then
AC_DEFINE(USE_PROP_259, 1, "Define to enable prop259 support")
fi

AC_CHECK_MEMBERS([struct timeval.tv_sec], , ,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
Expand Down
5 changes: 4 additions & 1 deletion src/or/circuitbuild.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
#include "routerparse.h"
#include "routerset.h"
#include "crypto.h"
#include "prop259.h"

#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
Expand Down Expand Up @@ -2420,7 +2421,8 @@ build_state_get_exit_nickname(cpath_build_state_t *state)
}

/** Return true iff the given address can be used to extend to. */
int extend_info_addr_is_allowed(const tor_addr_t *addr)
int
extend_info_addr_is_allowed(const tor_addr_t *addr)
{
tor_assert(addr);

Expand All @@ -2434,3 +2436,4 @@ int extend_info_addr_is_allowed(const tor_addr_t *addr)
disallow:
return 0;
}

1 change: 1 addition & 0 deletions src/or/circuituse.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
#include "prop259.h"

static void circuit_expire_old_circuits_clientside(void);
static void circuit_increment_failure_count(void);
Expand Down
2 changes: 2 additions & 0 deletions src/or/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#include "transports.h"
#include "ext_orport.h"
#include "torgzip.h"
#include "prop259.h"
#ifdef _WIN32
#include <shlobj.h>
#endif
Expand Down Expand Up @@ -1759,6 +1760,7 @@ options_act(const or_options_t *old_options)
"Changed to using entry guards or bridges, or changed "
"preferred or excluded node lists. "
"Abandoning previous circuits.");
guard_selection_fill_in_from_entrynodes(options);
circuit_mark_all_unused_circs();
circuit_mark_all_dirty_circs_as_unusable();
revise_trackexithosts = 1;
Expand Down
7 changes: 5 additions & 2 deletions src/or/directory.c
Original file line number Diff line number Diff line change
Expand Up @@ -405,14 +405,17 @@ directory_pick_generic_dirserver(dirinfo_type_t type, int pds_flags,

if (should_use_directory_guards(options)) {
const node_t *node = choose_random_dirguard(type);
if (node)
if (node) {
log_warn(LD_DIR,
"We got a guard for dir and will use it to connect dirserver.");
rs = node->rs;
}
} else {
/* anybody with a non-zero dirport will do */
rs = router_pick_directory_server(type, pds_flags);
}
if (!rs) {
log_info(LD_DIR, "No router found for %s; falling back to "
log_warn(LD_DIR, "No router found for %s; falling back to "
"dirserver list.", dir_conn_purpose_to_string(dir_purpose));
rs = router_pick_fallback_dirserver(type, pds_flags);
}
Expand Down
Loading