/* 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) {
/* 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 "
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;
}
}
/** 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;
/* 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);