Include "IMPLEMENTATION" parameter to STATUS TYPE=version PT messages.

This commit is contained in:
Alexander Færøy 2023-07-21 02:10:21 +02:00 committed by David Goulet
parent d27ce6b8f0
commit f459344488
3 changed files with 21 additions and 1 deletions

View File

@ -743,6 +743,7 @@ managed_proxy_destroy(managed_proxy_t *mp,
/* free our version, if any is set. */
tor_free(mp->version);
tor_free(mp->implementation);
/* do we want to terminate our process if it's still running? */
if (also_terminate_process && mp->process) {
@ -1318,6 +1319,8 @@ handle_status_message(const config_line_t *values,
/* Handle VERSION messages. */
if (! strcasecmp(message_type->value, "version")) {
const config_line_t *version = config_line_find(values, "VERSION");
const config_line_t *implementation = config_line_find(values,
"IMPLEMENTATION");
if (version == NULL) {
log_warn(LD_PT, "Managed proxy \"%s\" wrote a STATUS TYPE=version line "
@ -1325,9 +1328,18 @@ handle_status_message(const config_line_t *values,
return;
}
if (implementation == NULL) {
log_warn(LD_PT, "Managed proxy \"%s\" wrote a STATUS TYPE=version line "
"with a missing IMPLEMENTATION field", mp->argv[0]);
return;
}
tor_free(mp->version);
mp->version = tor_strdup(version->value);
tor_free(mp->implementation);
mp->implementation = tor_strdup(implementation->value);
return;
}
}

View File

@ -117,6 +117,9 @@ typedef struct {
/** Version as set by STATUS TYPE=version messages. */
char *version;
/** Implementation as set by the STATUS TYPE=version messages. */
char *implementation;
/* The 'transports' list contains all the transports this proxy has
launched. */
smartlist_t *transports;

View File

@ -160,12 +160,17 @@ test_pt_status_parsing(void *arg)
/* STATUS TYPE=version messages. */
tt_ptr_op(mp->version, OP_EQ, NULL);
strlcpy(line, "STATUS TRANSPORT=x "
tt_ptr_op(mp->implementation, OP_EQ, NULL);
strlcpy(line, "STATUS "
"IMPLEMENTATION=xyz "
"TYPE=version "
"VERSION=\"1.33.7-hax beta\"",
sizeof(line));
handle_proxy_line(line, mp);
tt_str_op(mp->version, OP_EQ, "1.33.7-hax beta");
tt_str_op(mp->implementation, OP_EQ, "xyz");
reset_mp(mp);