Skip to content
Snippets Groups Projects
Commit 95157828 authored by Matt Traudt's avatar Matt Traudt
Browse files

Add scanner nickname to results. See note ...

Old results are not compatible moving forward because they
are missing this field
parent a35e89da
Branches
Tags
No related merge requests found
......@@ -145,6 +145,7 @@ def measure_relay(args, conf, helpers, cb, rl, relay):
4.4. write down the results
'''
our_nick = conf['client']['nickname']
helper = helpers.next(blacklist=[relay.fingerprint])
if not helper:
log.warn('Unable to get helper to measure', relay.nickname)
......@@ -153,7 +154,8 @@ def measure_relay(args, conf, helpers, cb, rl, relay):
if not circ_id:
log.debug('Could not build circuit involving', relay.nickname)
return ResultErrorCircuit(
relay, [relay.fingerprint, helper.fingerprint], helper.server_host)
relay, [relay.fingerprint, helper.fingerprint], helper.server_host,
our_nick)
circ_fps = cb.get_circuit_path(circ_id)
# A function that attaches all streams that gets created on
# connect() to the given circuit
......@@ -179,7 +181,7 @@ def measure_relay(args, conf, helpers, cb, rl, relay):
if not authenticate_to_server(s, helper.password, log.info):
log.info('Unable to authenticate to the server')
res = ResultErrorAuth(
relay, circ_fps, helper.server_host)
relay, circ_fps, helper.server_host, our_nick)
close_socket(s)
cb.close_circuit(circ_id)
return res
......@@ -234,7 +236,8 @@ def measure_relay(args, conf, helpers, cb, rl, relay):
expected_amount = int(
expected_amount * download_times['target'] / result_time)
cb.close_circuit(circ_id)
return ResultSuccess(rtts, results, relay, circ_fps, helper.server_host)
return ResultSuccess(rtts, results, relay, circ_fps, helper.server_host,
our_nick)
def result_putter(result_dump):
......
......@@ -9,6 +9,8 @@ data_period = 5
log_level = notice
[client]
# A human-readable string with chars in a-zA-Z0-9 to identify your scanner
nickname = IDidntEditTheSBWSConfig
# Maximum number of bytes to read for each sock.recv() call
max_recv_per_read = 1048576
# Limits on what download times are too fast/slow/etc.
......
......@@ -107,11 +107,12 @@ class Result:
self.nickname = nickname
self.address = address
def __init__(self, relay, circ, server_host, t=None):
def __init__(self, relay, circ, server_host, client_nick, t=None):
self._relay = Result.Relay(relay.fingerprint, relay.nickname,
relay.address)
self._circ = circ
self._server_host = server_host
self._scanner = client_nick
self._time = time.time() if t is None else t
@property
......@@ -138,6 +139,10 @@ class Result:
def server_host(self):
return self._server_host
@property
def scanner(self):
return self._scanner
@property
def time(self):
return self._time
......@@ -151,6 +156,7 @@ class Result:
'server_host': self.server_host,
'time': self.time,
'type': self.type,
'scanner': self.scanner,
}
@staticmethod
......@@ -192,7 +198,8 @@ class ResultError(Result):
assert isinstance(d, dict)
return ResultError(
Result.Relay(d['fingerprint'], d['nickname'], d['address']),
d['circ'], d['server_host'], msg=d['msg'], t=d['time'])
d['circ'], d['server_host'], d['scanner'],
msg=d['msg'], t=d['time'])
def to_dict(self):
d = super().to_dict()
......@@ -215,7 +222,8 @@ class ResultErrorCircuit(ResultError):
assert isinstance(d, dict)
return ResultErrorCircuit(
Result.Relay(d['fingerprint'], d['nickname'], d['address']),
d['circ'], d['server_host'], msg=d['msg'], t=d['time'])
d['circ'], d['server_host'], d['scanner'],
msg=d['msg'], t=d['time'])
def to_dict(self):
d = super().to_dict()
......@@ -235,7 +243,8 @@ class ResultErrorStream(ResultError):
assert isinstance(d, dict)
return ResultErrorStream(
Result.Relay(d['fingerprint'], d['nickname'], d['address']),
d['circ'], d['server_host'], msg=d['msg'], t=d['time'])
d['circ'], d['server_host'], d['scanner'],
msg=d['msg'], t=d['time'])
def to_dict(self):
d = super().to_dict()
......@@ -255,7 +264,8 @@ class ResultErrorAuth(ResultError):
assert isinstance(d, dict)
return ResultErrorAuth(
Result.Relay(d['fingerprint'], d['nickname'], d['address']),
d['circ'], d['server_host'], msg=d['msg'], t=d['time'])
d['circ'], d['server_host'], d['scanner'],
msg=d['msg'], t=d['time'])
def to_dict(self):
d = super().to_dict()
......@@ -289,7 +299,8 @@ class ResultSuccess(Result):
return ResultSuccess(
d['rtts'], d['downloads'],
Result.Relay(d['fingerprint'], d['nickname'], d['address']),
d['circ'], d['server_host'], t=d['time'])
d['circ'], d['server_host'], d['scanner'],
t=d['time'])
def to_dict(self):
d = super().to_dict()
......
......@@ -112,13 +112,17 @@ def _validate_client(conf):
'tor_socks_port': {},
}
all_valid_keys = list(ints.keys()) + list(floats.keys()) + \
list(hosts.keys()) + list(ports.keys())
list(hosts.keys()) + list(ports.keys()) + ['nickname']
errors.extend(_validate_section_keys(conf, sec, all_valid_keys, err_tmpl))
errors.extend(_validate_section_ints(conf, sec, ints, err_tmpl))
errors.extend(_validate_section_floats(conf, sec, floats, err_tmpl))
# XXX: validate hosts func doesn't do anything currently
errors.extend(_validate_section_hosts(conf, sec, hosts, err_tmpl))
errors.extend(_validate_section_ports(conf, sec, ports, err_tmpl))
valid, error_msg = _validate_nickname(conf[sec], 'nickname')
if not valid:
errors.append(err_tmpl.substitute(
sec=sec, key='nickname', val=conf[sec]['nickname'], e=error_msg))
return errors
......@@ -371,6 +375,14 @@ def _validate_password(section, key):
alphabet=alphabet)
def _validate_nickname(section, key):
alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
min_len = 1
max_len = 32
return _validate_string(section, key, min_len=min_len, max_len=max_len,
alphabet=alphabet)
def _validate_string(section, key, min_len=None, max_len=None, alphabet=None):
s = section[key]
if min_len is not None and len(s) < min_len:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment