This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
keith gerrit-no-reply at lists.osmocom.orgkeith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-sip-connector/+/25675 ) Change subject: Implement basic Support for Global Call Reference. ...................................................................... Implement basic Support for Global Call Reference. * Add GCR to mncc struct and therefore bump mncc version. * Add the GCR as a SIP Header and retrieve and such header from incoming sip calls, passing the GCR on to MNCC Depends: osmo-msc I705c860e51637b4537cad65a330ecbaaca96dd5b Change-Id: Id40d7e0fed9356f801b3627c118150055e7232b1 --- M src/call.h M src/mncc.c M src/mncc_protocol.h M src/sip.c 4 files changed, 31 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-sip-connector refs/changes/75/25675/1 diff --git a/src/call.h b/src/call.h index d1732f9..8360711 100644 --- a/src/call.h +++ b/src/call.h @@ -31,6 +31,7 @@ const char *source; const char *dest; + struct osmo_gcr_parsed gcr; }; enum { diff --git a/src/mncc.c b/src/mncc.c index 9d75950..fc99400 100644 --- a/src/mncc.c +++ b/src/mncc.c @@ -543,6 +543,7 @@ leg->conn = conn; leg->state = MNCC_CC_INITIAL; leg->dir = MNCC_DIR_MO; + leg->base.call->gcr = data->gcr; memcpy(&leg->called, called, sizeof(leg->called)); memcpy(&leg->calling, &data->calling, sizeof(leg->calling)); memcpy(&leg->imsi, data->imsi, sizeof(leg->imsi)); @@ -898,6 +899,7 @@ mncc.fields |= MNCC_F_CALLING; mncc.calling.plan = GSM48_NPI_ISDN_E164; + mncc.gcr = call->gcr; if (call->source && call->source[0] == '+') { mncc.calling.type = GSM48_TON_INTERNATIONAL; diff --git a/src/mncc_protocol.h b/src/mncc_protocol.h index 5d35191..11969ee 100644 --- a/src/mncc_protocol.h +++ b/src/mncc_protocol.h @@ -26,6 +26,7 @@ #include <osmocom/core/linuxlist.h> #include <osmocom/gsm/mncc.h> +#include <osmocom/gsm/gsm29205.h> #include <stdint.h> #include <netinet/in.h> @@ -159,6 +160,7 @@ unsigned char lchan_type; unsigned char lchan_mode; + struct osmo_gcr_parsed gcr; /* A buffer to contain SDP ('\0' terminated) */ char sdp[1024]; @@ -170,7 +172,7 @@ unsigned char data[0]; }; -#define MNCC_SOCK_VERSION 7 +#define MNCC_SOCK_VERSION 8 struct gsm_mncc_hello { uint32_t msg_type; uint32_t version; diff --git a/src/sip.c b/src/sip.c index f0bc4c3..2455ddf 100644 --- a/src/sip.c +++ b/src/sip.c @@ -113,9 +113,22 @@ struct sip_call_leg *leg; const char *from = NULL, *to = NULL; char ip_addr[INET6_ADDRSTRLEN]; + char gcr_hex[sizeof(call->gcr)*2] = {0}; + uint8_t gcr_back[28] = {0}; + LOGP(DSIP, LOGL_INFO, "Incoming call(%s) handle(%p)\n", sip->sip_call_id->i_id, nh); + sip_unknown_t *unknown_header = sip->sip_unknown; + while (unknown_header != NULL) { + if (!strcmp("X-Global-Call-Ref", unknown_header->un_name)) { + memcpy(gcr_hex, unknown_header->un_value, sizeof(gcr_hex)); + osmo_hexparse(gcr_hex, gcr_back, sizeof(gcr_back)); + break; + } + unknown_header = unknown_header->un_next; + } + if (!sdp_screen_sdp(sip)) { LOGP(DSIP, LOGL_ERROR, "No supported codec.\n"); nua_respond(nh, SIP_406_NOT_ACCEPTABLE, TAG_END()); @@ -131,6 +144,8 @@ return; } + osmo_dec_gcr(&call->gcr, gcr_back, sizeof(gcr_back)); + if (sip->sip_to) to = sip->sip_to->a_url->url_user; if (sip->sip_from) @@ -594,6 +609,13 @@ const char *calling_num, const char *called_num) { struct call_leg *other = leg->base.call->initial; + char gcr_hex[sizeof(leg->base.call->gcr)*2] = { NULL }; + + struct msgb *msg = msgb_alloc(128, "gcr-header"); + uint8_t len = osmo_enc_gcr(msg, &leg->base.call->gcr); + osmo_strlcpy(gcr_hex, osmo_hexdump_nospc(msg->data, len*2+2), len*2+2); + msgb_free(msg); + char *from = talloc_asprintf(leg, "sip:%s@%s:%d", calling_num, @@ -605,6 +627,8 @@ agent->app->sip.remote_port); char *sdp = sdp_create_file(leg, other, sdp_sendrecv); + char *x_gcr = talloc_asprintf(leg, "X-Global-Call-Ref: %s", gcr_hex); + leg->state = SIP_CC_INITIAL; leg->dir = SIP_DIR_MT; nua_invite(leg->nua_handle, @@ -612,6 +636,7 @@ SIPTAG_TO_STR(to), NUTAG_MEDIA_ENABLE(0), SIPTAG_CONTENT_TYPE_STR("application/sdp"), + SIPTAG_HEADER_STR(x_gcr), SIPTAG_PAYLOAD_STR(sdp), TAG_END()); -- To view, visit https://gerrit.osmocom.org/c/osmo-sip-connector/+/25675 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-sip-connector Gerrit-Branch: master Gerrit-Change-Id: Id40d7e0fed9356f801b3627c118150055e7232b1 Gerrit-Change-Number: 25675 Gerrit-PatchSet: 1 Gerrit-Owner: keith <keith at rhizomatica.org> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211004/0f00fe55/attachment.htm>