From 7b6912fd28b8c6b06d615bb07ebee195426ac1a5 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Sat, 12 Apr 2003 17:06:14 +0000 Subject: [PATCH] Add support for :authuser... git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@841 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c45822186f..754acd85a0 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -313,7 +313,8 @@ static struct ast_peer_list { struct sip_registry { pthread_mutex_t lock; /* Channel private lock */ struct sockaddr_in addr; /* Who we connect to for registration purposes */ - char username[80]; + char username[80]; /* Who we are registering as */ + char authuser[80]; /* Who we *authenticate* as */ char hostname[80]; char secret[80]; /* Password or key name in []'s */ char contact[80]; /* Contact extension */ @@ -1394,9 +1395,9 @@ static int sip_register(char *value, int lineno) { struct sip_registry *reg; char copy[256] = ""; - char *username, *hostname, *secret; - char *porta; - char *contact; + char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL; + char *porta=NULL; + char *contact=NULL; char *stringp=NULL; struct hostent *hp; @@ -1410,16 +1411,21 @@ static int sip_register(char *value, int lineno) *hostname = '\0'; hostname++; } - if (!hostname) { - ast_log(LOG_WARNING, "Format for registration is user[:secret]@host[:port] at line %d", lineno); + if (!username || !strlen(username) || !hostname || !strlen(hostname)) { + ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port] at line %d", lineno); return -1; } stringp=username; username = strsep(&stringp, ":"); - secret = strsep(&stringp, ":"); + if (username) { + secret = strsep(&stringp, ":"); + if (secret) + authuser = strsep(&stringp, ":"); + } stringp = hostname; hostname = strsep(&stringp, "/"); - contact = strsep(&stringp, "/"); + if (hostname) + contact = strsep(&stringp, "/"); if (!contact || !strlen(contact)) contact = "s"; stringp=hostname; @@ -1439,8 +1445,12 @@ static int sip_register(char *value, int lineno) if (reg) { memset(reg, 0, sizeof(struct sip_registry)); strncpy(reg->contact, contact, sizeof(reg->contact) - 1); - strncpy(reg->username, username, sizeof(reg->username)-1); - strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1); + if (username) + strncpy(reg->username, username, sizeof(reg->username)-1); + if (hostname) + strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1); + if (authuser) + strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1); if (secret) strncpy(reg->secret, secret, sizeof(reg->secret)-1); reg->expire = -1; @@ -2524,7 +2534,10 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth) r->call=p; p->registry=r; strncpy(p->peersecret, r->secret, sizeof(p->peersecret)-1); - strncpy(p->peername, r->username, sizeof(p->peername)-1); + if (strlen(r->authuser)) + strncpy(p->peername, r->authuser, sizeof(p->peername)-1); + else + strncpy(p->peername, r->username, sizeof(p->peername)-1); strncpy(p->username, r->username, sizeof(p->username)-1); strncpy(p->exten, r->contact, sizeof(p->exten) - 1); build_contact(p); @@ -2536,7 +2549,7 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth) ast_log(LOG_WARNING, "Still have a timeout, %d\n", r->timeout); ast_sched_del(sched, r->timeout); } - r->timeout = ast_sched_add(sched, 10*1000, sip_reg_timeout, r); + r->timeout = ast_sched_add(sched, 20*1000, sip_reg_timeout, r); ast_log(LOG_DEBUG, "Scheduled a timeout # %d\n", r->timeout); } @@ -4783,6 +4796,8 @@ static struct ast_channel *sip_request(char *type, int format, void *data) sip_destroy(p); return NULL; } + if (!strlen(p->peername) && ext) + strncpy(p->peername, ext, sizeof(p->peername) - 1); /* Recalculate our side, and recalculate Call ID */ memcpy(&p->ourip, myaddrfor(&p->sa.sin_addr), sizeof(p->ourip)); snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", inet_ntoa(p->ourip), ourport, p->branch); -- GitLab