From: Alexei Gradinari Date: Fri, 12 Oct 2018 17:14:03 +0000 (-0400) Subject: res_pjsip: set callerid_tag to empty string X-Git-Tag: 13.24.0-rc1~53^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b1a981ee15bc9afe302989110082400e322859d;p=thirdparty%2Fasterisk.git res_pjsip: set callerid_tag to empty string This patch sets the callerid_tag to empty string by default. If the callerid_tag is set to NULL then the tag does not become part of a connected line update. For example: Alice's tag is "Alice". Bob's tag is empty. Charlie's tag is "Charlie". Alice calls Bob and then does attended transfer to Charlie. When Alice hangs up the CONNECTEDLINE(tag) is "Alice" on the interception routine on the Charlie's channel, but should be empty. Ths patch also fix memory leaks if there are more then one options "callerid", "callerid_tag", "voicemail_extension" and "contact_user" in the pjsip.conf endpoint definition. Change-Id: I86ba455c4677ca8d516d9a04ce7fb4d24dd576e4 --- diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c index b0eb2d455a..477b317283 100644 --- a/res/res_pjsip/pjsip_configuration.c +++ b/res/res_pjsip/pjsip_configuration.c @@ -590,6 +590,13 @@ static int caller_id_handler(const struct aco_option *opt, struct ast_variable * char cid_name[80] = { '\0' }; char cid_num[80] = { '\0' }; + ast_free(endpoint->id.self.name.str); + endpoint->id.self.name.str = NULL; + endpoint->id.self.name.valid = 0; + ast_free(endpoint->id.self.number.str); + endpoint->id.self.number.str = NULL; + endpoint->id.self.number.valid = 0; + ast_callerid_split(var->value, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num)); if (!ast_strlen_zero(cid_name)) { endpoint->id.self.name.str = ast_strdup(cid_name); @@ -656,7 +663,10 @@ static int caller_id_privacy_to_str(const void *obj, const intptr_t *args, char static int caller_id_tag_handler(const struct aco_option *opt, struct ast_variable *var, void *obj) { struct ast_sip_endpoint *endpoint = obj; + + ast_free(endpoint->id.self.tag); endpoint->id.self.tag = ast_strdup(var->value); + return endpoint->id.self.tag ? 0 : -1; } @@ -1059,6 +1069,7 @@ static int voicemail_extension_handler(const struct aco_option *opt, struct ast_ { struct ast_sip_endpoint *endpoint = obj; + ast_free(endpoint->subscription.mwi.voicemail_extension); endpoint->subscription.mwi.voicemail_extension = ast_strdup(var->value); return endpoint->subscription.mwi.voicemail_extension ? 0 : -1; @@ -1078,12 +1089,10 @@ static int contact_user_handler(const struct aco_option *opt, { struct ast_sip_endpoint *endpoint = obj; + ast_free(endpoint->contact_user); endpoint->contact_user = ast_strdup(var->value); - if (!endpoint->contact_user) { - return -1; - } - return 0; + return endpoint->contact_user ? 0 : -1; } static int contact_user_to_str(const void *obj, const intptr_t *args, char **buf) @@ -2028,7 +2037,9 @@ void *ast_sip_endpoint_alloc(const char *name) ao2_cleanup(endpoint); return NULL; } + ast_party_id_init(&endpoint->id.self); + endpoint->id.self.tag = ast_strdup(""); if (AST_VECTOR_INIT(&endpoint->ident_method_order, 1)) { return NULL;