--- asterisk/channels/chan_sip.c.20040218 Wed Feb 18 01:17:39 2004 +++ asterisk/channels/chan_sip.c Thu Feb 19 00:40:47 2004 @@ -687,7 +687,7 @@ #ifdef MYSQL_FRIENDS -static void mysql_update_peer(char *peer, struct sockaddr_in *sin) +static void mysql_update_peer(char *peer, struct sockaddr_in *sin, int expiry) { if (mysql && (strlen(peer) < 128)) { char query[512]; @@ -697,7 +697,7 @@ time(&nowtime); mysql_real_escape_string(mysql, name, peer, strlen(peer)); snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\" WHERE name=\"%s\"", - inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime, name); + inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, name); ast_mutex_lock(&mysqllock); if (mysql_real_query(mysql, query, strlen(query))) ast_log(LOG_WARNING, "Unable to update database\n"); @@ -758,7 +758,7 @@ } } time(&nowtime); - if ((nowtime - regseconds) > default_expiry) + if (nowtime > regseconds) memset(&p->addr, 0, sizeof(p->addr)); } mysql_free_result(result); @@ -855,8 +855,11 @@ r->sa.sin_port = p->defaddr.sin_port; } memcpy(&r->recv, &r->sa, sizeof(r->recv)); - } else + } else { + if (p->temponly) + free(p); p = NULL; + } } ast_mutex_unlock(&peerl.lock); if (!p && !found) { @@ -3496,10 +3499,6 @@ p->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, p); pvt->expiry = expiry; if (inaddrcmp(&p->addr, &oldsin)) { -#ifdef MYSQL_FRIENDS - if (p->temponly) - mysql_update_peer(p->name, &p->addr); -#endif sip_poke_peer(p); 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); @@ -3792,6 +3791,10 @@ 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, p->expiry); +#endif /* Say OK and ask subsystem to retransmit msg counter */ transmit_response_with_date(p, "200 OK", req); peer->lastmsgssent = -1;