diff options
author | malcolmd <malcolmd@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-02-24 19:48:46 +0000 |
---|---|---|
committer | malcolmd <malcolmd@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-02-24 19:48:46 +0000 |
commit | f8a7731f2e27c63f7c0ffa49ea4f347ccfb69815 (patch) | |
tree | fc68bd668b4acfb793722877d121c69530394de6 /channels | |
parent | 3931098be899ebfee2114847cf3d99bac27bacf6 (diff) |
Fix Bug # 935 and Bug # 1052
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2231 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_sip.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index d4befb15a..425205781 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -687,7 +687,7 @@ static int sip_sendtext(struct ast_channel *ast, char *text) #ifdef MYSQL_FRIENDS -static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username) +static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *username, int expiry) { if (mysql && (strlen(peer) < 128)) { char query[512]; @@ -700,7 +700,7 @@ static void mysql_update_peer(char *peer, struct sockaddr_in *sin, char *usernam mysql_real_escape_string(mysql, name, peer, strlen(peer)); mysql_real_escape_string(mysql, uname, username, strlen(username)); snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"", - inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime, uname, name); + inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name); ast_mutex_lock(&mysqllock); if (mysql_real_query(mysql, query, strlen(query))) ast_log(LOG_WARNING, "Unable to update database\n"); @@ -763,7 +763,7 @@ static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin) } } time(&nowtime); - if ((nowtime - regseconds) > default_expiry) + if (nowtime > regseconds) memset(&p->addr, 0, sizeof(p->addr)); } mysql_free_result(result); @@ -3503,10 +3503,6 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req if (!p->temponly) p->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, p); pvt->expiry = expiry; -#ifdef MYSQL_FRIENDS - if (p->temponly) - mysql_update_peer(p->name, &p->addr, p->username); -#endif snprintf(data, sizeof(data), "%s:%d:%d:%s", inet_ntoa(p->addr.sin_addr), ntohs(p->addr.sin_port), expiry, p->username); ast_db_put("SIP/Registry", p->name, data); if (inaddrcmp(&p->addr, &oldsin)) { @@ -3819,6 +3815,10 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si if (parse_contact(p, peer, req)) { ast_log(LOG_WARNING, "Failed to parse contact info\n"); } else { +#ifdef MYSQL_FRIENDS + if (peer->temponly) + mysql_update_peer(peer->name, &peer->addr, peer->username, p->expiry); +#endif /* Say OK and ask subsystem to retransmit msg counter */ transmit_response_with_date(p, "200 OK", req); peer->lastmsgssent = -1; |