From 652ac5f9b9fad23313f37a58d1034aa621b72a7a Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Sun, 3 Aug 2014 22:51:47 +0200 Subject: [PATCH] Fix #211 - ADC IINF should have flag AP for application name, and VE for version. x# Please enter the commit message for your changes. Lines starting --- src/adc/adcconst.h | 5 ++++- src/core/hub.c | 3 ++- src/core/inf.c | 37 +++++++++++++++++++++++++++---------- src/tools/adcclient.c | 3 ++- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/adc/adcconst.h b/src/adc/adcconst.h index 30ee31c..365281c 100644 --- a/src/adc/adcconst.h +++ b/src/adc/adcconst.h @@ -111,7 +111,10 @@ typedef uint32_t fourcc_t; #define ADC_INF_FLAG_CLIENT_ID "ID" /* client id, aka CID */ #define ADC_INF_FLAG_NICK "NI" /* nick name */ #define ADC_INF_FLAG_DESCRIPTION "DE" /* user description */ -#define ADC_INF_FLAG_USER_AGENT "VE" /* software version */ + +#define ADC_INF_FLAG_USER_AGENT_PRODUCT "AP" /* software name */ +#define ADC_INF_FLAG_USER_AGENT_VERSION "VE" /* software version */ + #define ADC_INF_FLAG_SUPPORT "SU" /* support (extensions, feature cast) */ #define ADC_INF_FLAG_SHARED_SIZE "SS" /* size of total files shared in bytes */ #define ADC_INF_FLAG_SHARED_FILES "SF" /* number of files shared */ diff --git a/src/core/hub.c b/src/core/hub.c index b2912b5..2d4249e 100644 --- a/src/core/hub.c +++ b/src/core/hub.c @@ -909,7 +909,8 @@ void hub_set_variables(struct hub_info* hub, struct acl_handle* acl) if (hub->command_info) { adc_msg_add_named_argument(hub->command_info, ADC_INF_FLAG_CLIENT_TYPE, ADC_CLIENT_TYPE_HUB); - adc_msg_add_named_argument(hub->command_info, ADC_INF_FLAG_USER_AGENT, server); + adc_msg_add_named_argument(hub->command_info, ADC_INF_FLAG_USER_AGENT_PRODUCT, PRODUCT); + adc_msg_add_named_argument(hub->command_info, ADC_INF_FLAG_USER_AGENT_VERSION, GIT_VERSION); tmp = adc_msg_escape(hub->config->hub_name); adc_msg_add_named_argument(hub->command_info, ADC_INF_FLAG_NICK, tmp); diff --git a/src/core/inf.c b/src/core/inf.c index 4406167..3bb789f 100644 --- a/src/core/inf.c +++ b/src/core/inf.c @@ -366,21 +366,37 @@ static int check_logged_in(struct hub_info* hub, struct hub_user* user, struct a */ static int check_user_agent(struct hub_info* hub, struct hub_user* user, struct adc_message* cmd) { - char* ua_encoded = 0; - char* ua = 0; + char* ua_name_encoded = 0; + char* ua_version_encoded = 0; + char* str = 0; + size_t offset = 0; /* Get client user agent version */ - ua_encoded = adc_msg_get_named_argument(cmd, ADC_INF_FLAG_USER_AGENT); - if (ua_encoded) + ua_name_encoded = adc_msg_get_named_argument(cmd, ADC_INF_FLAG_USER_AGENT_PRODUCT); + ua_version_encoded = adc_msg_get_named_argument(cmd, ADC_INF_FLAG_USER_AGENT_VERSION); + if (ua_name_encoded) { - ua = adc_msg_unescape(ua_encoded); - if (ua) + str = adc_msg_unescape(ua_name_encoded); + if (str) { - memcpy(user->id.user_agent, ua, MIN(strlen(ua), MAX_UA_LEN)); - hub_free(ua); + offset = strlen(str); + memcpy(user->id.user_agent, str, MIN(offset, MAX_UA_LEN)); + hub_free(str); } } - hub_free(ua_encoded); + + if (ua_version_encoded) + { + str = adc_msg_unescape(ua_version_encoded); + if (str) + { + memcpy(user->id.user_agent + offset, str, MIN(strlen(str), MAX_UA_LEN) - offset); + hub_free(str); + } + } + + hub_free(ua_name_encoded); + hub_free(ua_version_encoded); return 0; } @@ -622,7 +638,8 @@ static int hub_handle_info_low_bandwidth(struct hub_info* hub, struct hub_user* { if (hub->config->low_bandwidth_mode) { - adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_USER_AGENT); + adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_USER_AGENT_VERSION); + adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_USER_AGENT_PRODUCT); adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_SHARED_FILES); adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_COUNT_HUB_NORMAL); adc_msg_remove_named_argument(cmd, ADC_INF_FLAG_COUNT_HUB_REGISTER); diff --git a/src/tools/adcclient.c b/src/tools/adcclient.c index a445c1d..24ccc7e 100644 --- a/src/tools/adcclient.c +++ b/src/tools/adcclient.c @@ -508,7 +508,8 @@ void ADC_client_send_info(struct ADC_client* client) adc_msg_add_named_argument_string(client->info, ADC_INF_FLAG_DESCRIPTION, client->desc); } - adc_msg_add_named_argument_string(client->info, ADC_INF_FLAG_USER_AGENT, PRODUCT " " VERSION); + adc_msg_add_named_argument_string(client->info, ADC_INF_FLAG_USER_AGENT_PRODUCT, PRODUCT); + adc_msg_add_named_argument_string(client->info, ADC_INF_FLAG_USER_AGENT_VERSION, VERSION); adc_msg_add_named_argument_int(client->info, ADC_INF_FLAG_UPLOAD_SLOTS, 0); adc_msg_add_named_argument_int(client->info, ADC_INF_FLAG_SHARED_SIZE, 0); adc_msg_add_named_argument_int(client->info, ADC_INF_FLAG_SHARED_FILES, 0);