diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-08-24 22:33:43 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-08-24 22:33:43 +0000 |
commit | 3ce635b33f0ca19de6ff586da41d6504ecd48bd8 (patch) | |
tree | 068746e92c99ed0199a9808489b6e16c55283a32 /channels | |
parent | fe6e236af2f47f7c4b959008e97122e36ddc7eee (diff) |
Enable Asterisk to register with itself (with authentication)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1418 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_sip.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index f6b5dcba9..54cee4bb9 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -125,7 +125,7 @@ static char ourhost[256]; static struct in_addr __ourip; static int ourport; -static int sipdebug = 0; +static int sipdebug = 1; static int tos = 0; @@ -2802,7 +2802,7 @@ static int transmit_notify(struct sip_pvt *p, int newmsgs, int oldmsgs) return send_request(p, &req, 1, p->ocseq); } -static int transmit_register(struct sip_registry *r, char *cmd, char *auth); +static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader); static int sip_reregister(void *data) { @@ -2818,7 +2818,7 @@ static int sip_do_register(struct sip_registry *r) { int res; ast_mutex_lock(&r->lock); - res=transmit_register(r, "REGISTER", NULL); + res=transmit_register(r, "REGISTER", NULL, NULL); ast_mutex_unlock(&r->lock); return res; } @@ -2841,12 +2841,12 @@ static int sip_reg_timeout(void *data) } r->regstate=REG_STATE_UNREGISTERED; r->timeout = -1; - res=transmit_register(r, "REGISTER", NULL); + res=transmit_register(r, "REGISTER", NULL, NULL); ast_mutex_unlock(&r->lock); return 0; } -static int transmit_register(struct sip_registry *r, char *cmd, char *auth) +static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader) { struct sip_request req; char from[256]; @@ -2929,7 +2929,7 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth) add_header(&req, "CSeq", tmp); add_header(&req, "User-Agent", "Asterisk PBX"); if (auth) - add_header(&req, "Authorization", auth); + add_header(&req, authheader, auth); snprintf(tmp, sizeof(tmp), "%d", default_expiry); add_header(&req, "Expires", tmp); @@ -4086,15 +4086,15 @@ static int sip_no_debug(int fd, int argc, char *argv[]) static int reply_digest(struct sip_pvt *p, struct sip_request *req, char *header, char *orig_header, char *digest, int digest_len); -static int do_register_auth(struct sip_pvt *p, struct sip_request *req) { +static int do_register_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader) { char digest[256]; p->authtries++; memset(digest,0,sizeof(digest)); - if (reply_digest(p,req, "WWW-Authenticate", "REGISTER", digest, sizeof(digest))) { + if (reply_digest(p,req, header, "REGISTER", digest, sizeof(digest))) { /* There's nothing to use for authentication */ return -1; } - return transmit_register(p->registry,"REGISTER",digest); + return transmit_register(p->registry,"REGISTER",digest, respheader); } static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *msg, int init) { @@ -4438,7 +4438,7 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ break; case 401: /* Not authorized on REGISTER */ if (p->registry && !strcasecmp(msg, "REGISTER")) { - if ((p->authtries > 1) || do_register_auth(p, req)) { + if ((p->authtries > 1) || do_register_auth(p, req, "WWW-Authenticate", "Authorization")) { ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s'\n", get_header(&p->initreq, "From")); p->needdestroy = 1; } @@ -4463,8 +4463,8 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ p->needdestroy = 1; } } else if (p->registry && !strcasecmp(msg, "REGISTER")) { - if ((p->authtries > 1) || do_register_auth(p, req)) { - ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s'\n", get_header(&p->initreq, "From")); + if ((p->authtries > 1) || do_register_auth(p, req, "Proxy-Authenticate", "Proxy-Authorization")) { + ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s' (tries '%d')\n", get_header(&p->initreq, "From"), p->authtries); p->needdestroy = 1; } } else |