mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-19 12:08:11 +00:00
Workaround eXosip behaviour to put proxy hostname instead of domain in SIP registers. The register should contain the SIP domain as request uri.
This commit is contained in:
parent
5cecdf1d7b
commit
3fa5c26ceb
1 changed files with 21 additions and 5 deletions
|
|
@ -382,8 +382,7 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i
|
|||
}
|
||||
|
||||
err=0;
|
||||
eXosip_set_option(13,&err); /*13=EXOSIP_OPT_SRV_WITH_NAPTR, as it is an enum value, we can't use it unless we are sure of the
|
||||
version of eXosip, which is not the case*/
|
||||
eXosip_set_option(EXOSIP_OPT_DNS_CAPABILITIES,&err); /*0=no NAPTR */
|
||||
/*see if it looks like an IPv6 address*/
|
||||
int use_rports = ctx->use_rports; // Copy char to int to avoid bad alignment
|
||||
eXosip_set_option(EXOSIP_OPT_USE_RPORT,&use_rports);
|
||||
|
|
@ -2007,16 +2006,31 @@ static void register_set_contact(osip_message_t *msg, const char *contact){
|
|||
osip_uri_uparam_add(ct->url,osip_strdup("line"),line);
|
||||
}
|
||||
|
||||
static void sal_register_add_route(osip_message_t *msg, const char *proxy){
|
||||
char tmp[256]={0};
|
||||
snprintf(tmp,sizeof(tmp)-1,"<%s;lr>",proxy);
|
||||
osip_message_set_route(msg,tmp);
|
||||
}
|
||||
|
||||
int sal_register(SalOp *h, const char *proxy, const char *from, int expires){
|
||||
osip_message_t *msg;
|
||||
const char *contact=sal_op_get_contact(h);
|
||||
|
||||
|
||||
sal_op_set_route(h,proxy);
|
||||
if (h->rid==-1){
|
||||
SalAddress *from_parsed=sal_address_new(from);
|
||||
char domain[256];
|
||||
if (from_parsed==NULL) {
|
||||
ms_warning("sal_register() bad from %s",from);
|
||||
return -1;
|
||||
}
|
||||
snprintf(domain,sizeof(domain),"sip:%s",sal_address_get_domain(from_parsed));
|
||||
sal_address_destroy(from_parsed);
|
||||
eXosip_lock();
|
||||
h->rid=eXosip_register_build_initial_register(from,proxy,NULL,expires,&msg);
|
||||
h->rid=eXosip_register_build_initial_register(from,domain,NULL,expires,&msg);
|
||||
if (msg){
|
||||
if (contact) register_set_contact(msg,contact);
|
||||
sal_register_add_route(msg,proxy);
|
||||
sal_add_register(h->base.root,h);
|
||||
}else{
|
||||
ms_error("Could not build initial register.");
|
||||
|
|
@ -2025,7 +2039,8 @@ int sal_register(SalOp *h, const char *proxy, const char *from, int expires){
|
|||
}
|
||||
}else{
|
||||
eXosip_lock();
|
||||
eXosip_register_build_register(h->rid,expires,&msg);
|
||||
eXosip_register_build_register(h->rid,expires,&msg);
|
||||
sal_register_add_route(msg,proxy);
|
||||
}
|
||||
eXosip_register_send_register(h->rid,msg);
|
||||
eXosip_unlock();
|
||||
|
|
@ -2045,6 +2060,7 @@ int sal_register_refresh(SalOp *op, int expires){
|
|||
eXosip_register_build_register(op->rid,expires,&msg);
|
||||
if (msg!=NULL){
|
||||
if (contact) register_set_contact(msg,contact);
|
||||
sal_register_add_route(msg,sal_op_get_route(op));
|
||||
eXosip_register_send_register(op->rid,msg);
|
||||
}else ms_error("Could not build REGISTER refresh message.");
|
||||
eXosip_unlock();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue