diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 749f7a26b3..67c02af120 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -11218,12 +11218,15 @@ static void extract_uri(struct sip_pvt *p, struct sip_request *req) /*! \brief Build contact header - the contact header we send out */ static void build_contact(struct sip_pvt *p) { + char tmp[SIPBUFSIZE]; + char *user = ast_uri_encode(p->exten, tmp, sizeof(tmp), 1); + if (p->socket.type == SIP_TRANSPORT_UDP) { - ast_string_field_build(p, our_contact, "", p->exten, - ast_strlen_zero(p->exten) ? "" : "@", ast_sockaddr_stringify(&p->ourip)); + ast_string_field_build(p, our_contact, "", user, + ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify(&p->ourip)); } else { - ast_string_field_build(p, our_contact, "", p->exten, - ast_strlen_zero(p->exten) ? "" : "@", ast_sockaddr_stringify(&p->ourip), + ast_string_field_build(p, our_contact, "", user, + ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify(&p->ourip), get_transport(p->socket.type)); } }