From 0b96a468dd67b6c8a6d661e3489d04e72ee62d8d Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Sat, 16 Mar 2019 18:57:44 +0200 Subject: [PATCH] core: factor out code that adds tag to To: header DRY cleanup: the exact same code was repeated in 3 different places. --- src/core/sipe-conf.c | 10 +--------- src/core/sipe-incoming.c | 12 +----------- src/core/sipe-media.c | 12 +----------- src/core/sipmsg.c | 9 +++++++++ src/core/sipmsg.h | 7 +++++++ 5 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/core/sipe-conf.c b/src/core/sipe-conf.c index bb686f7b..366f97dc 100644 --- a/src/core/sipe-conf.c +++ b/src/core/sipe-conf.c @@ -945,17 +945,9 @@ accept_incoming_invite_conf(struct sipe_core_private *sipe_private, struct sipmsg *msg) { struct sip_session *session; - gchar *newTag = gentag(); - const gchar *oldHeader = sipmsg_find_header(msg, "To"); - gchar *newHeader; - - newHeader = g_strdup_printf("%s;tag=%s", oldHeader, newTag); - g_free(newTag); - sipmsg_remove_header_now(msg, "To"); - sipmsg_add_header_now(msg, "To", newHeader); - g_free(newHeader); /* acknowledge invite */ + sipmsg_update_to_header_tag(msg); sip_transport_response(sipe_private, msg, 200, "OK", NULL); /* add self to conf */ diff --git a/src/core/sipe-incoming.c b/src/core/sipe-incoming.c index 5ccdfde0..82982228 100644 --- a/src/core/sipe-incoming.c +++ b/src/core/sipe-incoming.c @@ -373,9 +373,6 @@ void sipe_incoming_cancel_delayed_invite(struct sipe_core_private *sipe_private, void process_incoming_invite(struct sipe_core_private *sipe_private, struct sipmsg *msg) { - gchar *newTag; - const gchar *oldHeader; - gchar *newHeader; gboolean is_multiparty = FALSE; gboolean was_multiparty = TRUE; gboolean just_joined = FALSE; @@ -449,14 +446,7 @@ void process_incoming_invite(struct sipe_core_private *sipe_private, } // TODO There *must* be a better way to clean up the To header to add a tag... - SIPE_DEBUG_INFO_NOFORMAT("Adding a Tag to the To Header on Invite Request..."); - oldHeader = sipmsg_find_header(msg, "To"); - newTag = gentag(); - newHeader = g_strdup_printf("%s;tag=%s", oldHeader, newTag); - g_free(newTag); - sipmsg_remove_header_now(msg, "To"); - sipmsg_add_header_now(msg, "To", newHeader); - g_free(newHeader); + sipmsg_update_to_header_tag(msg); if (end_points_hdr) { end_points = sipmsg_parse_endpoints_header(end_points_hdr); diff --git a/src/core/sipe-media.c b/src/core/sipe-media.c index 9fe6eccc..49a280be 100644 --- a/src/core/sipe-media.c +++ b/src/core/sipe-media.c @@ -1170,17 +1170,7 @@ sipe_media_call_new(struct sipe_core_private *sipe_private, const gchar* with, dialog->with = g_strdup(with); if (msg) { - gchar *newTag = gentag(); - const gchar *oldHeader; - gchar *newHeader; - - oldHeader = sipmsg_find_header(msg, "To"); - newHeader = g_strdup_printf("%s;tag=%s", oldHeader, newTag); - sipmsg_remove_header_now(msg, "To"); - sipmsg_add_header_now(msg, "To", newHeader); - g_free(newTag); - g_free(newHeader); - + sipmsg_update_to_header_tag(msg); dialog->callid = g_strdup(sipmsg_find_header(msg, "Call-ID")); sipe_dialog_parse(dialog, msg, FALSE); } else { diff --git a/src/core/sipmsg.c b/src/core/sipmsg.c index 95a672da..489d1e82 100644 --- a/src/core/sipmsg.c +++ b/src/core/sipmsg.c @@ -734,6 +734,15 @@ gchar *sipmsg_parse_to_address(struct sipmsg *msg) { return(sipmsg_parse_address_from_header(msg, "To")); } +void sipmsg_update_to_header_tag(struct sipmsg *msg) { + const gchar *old = sipmsg_find_header(msg, "To"); + gchar *tag = gentag(); + gchar *new = g_strdup_printf("%s;tag=%s", old, tag); + g_free(tag); + sipmsg_remove_header_now(msg, "To"); + sipmsg_add_header_now(msg, "To", new); + g_free(new); +} //------------------------------------------------------------------------------------------ diff --git a/src/core/sipmsg.h b/src/core/sipmsg.h index da146207..8c01cad0 100644 --- a/src/core/sipmsg.h +++ b/src/core/sipmsg.h @@ -162,3 +162,10 @@ gchar *sipmsg_parse_from_address(struct sipmsg *msg); gchar *sipmsg_parse_to_address(struct sipmsg *msg); gchar *sipmsg_parse_address_from_header(struct sipmsg *msg, const gchar *name); + +/** + * Generate and append new tag to the "To:" header in the message + * + * @param msg (in) SIP message + */ +void sipmsg_update_to_header_tag(struct sipmsg *msg); -- 2.11.4.GIT