mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2202 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -687,17 +687,20 @@ static int sip_sendtext(struct ast_channel *ast, char *text) | |||||||
|  |  | ||||||
| #ifdef MYSQL_FRIENDS | #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, char *username) | ||||||
| { | { | ||||||
| 	if (mysql && (strlen(peer) < 128)) { | 	if (mysql && (strlen(peer) < 128)) { | ||||||
| 		char query[512]; | 		char query[512]; | ||||||
| 		char *name; | 		char *name; | ||||||
|  | 		char *uname; | ||||||
| 		time_t nowtime; | 		time_t nowtime; | ||||||
| 		name = alloca(strlen(peer) * 2 + 1); | 		name = alloca(strlen(peer) * 2 + 1); | ||||||
|  | 		uname = alloca(strlen(username) * 2 + 1); | ||||||
| 		time(&nowtime); | 		time(&nowtime); | ||||||
| 		mysql_real_escape_string(mysql, name, peer, strlen(peer)); | 		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\"",  | 		mysql_real_escape_string(mysql, uname, username, strlen(username)); | ||||||
| 			inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), nowtime, name); | 		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); | ||||||
| 		ast_mutex_lock(&mysqllock); | 		ast_mutex_lock(&mysqllock); | ||||||
| 		if (mysql_real_query(mysql, query, strlen(query)))  | 		if (mysql_real_query(mysql, query, strlen(query)))  | ||||||
| 			ast_log(LOG_WARNING, "Unable to update database\n"); | 			ast_log(LOG_WARNING, "Unable to update database\n"); | ||||||
| @@ -745,6 +748,8 @@ static struct sip_peer *mysql_peer(char *peer, struct sockaddr_in *sin) | |||||||
| 							strncpy(p->name, rowval[x], sizeof(p->name) - 1); | 							strncpy(p->name, rowval[x], sizeof(p->name) - 1); | ||||||
| 						} else if (!strcasecmp(fields[x].name, "context")) { | 						} else if (!strcasecmp(fields[x].name, "context")) { | ||||||
| 							strncpy(p->context, rowval[x], sizeof(p->context) - 1); | 							strncpy(p->context, rowval[x], sizeof(p->context) - 1); | ||||||
|  | 						} else if (!strcasecmp(fields[x].name, "username")) { | ||||||
|  | 							strncpy(p->username, rowval[x], sizeof(p->username) - 1); | ||||||
| 						} else if (!strcasecmp(fields[x].name, "ipaddr")) { | 						} else if (!strcasecmp(fields[x].name, "ipaddr")) { | ||||||
| 							inet_aton(rowval[x], &p->addr.sin_addr); | 							inet_aton(rowval[x], &p->addr.sin_addr); | ||||||
| 						} else if (!strcasecmp(fields[x].name, "port")) { | 						} else if (!strcasecmp(fields[x].name, "port")) { | ||||||
| @@ -855,8 +860,11 @@ static int create_addr(struct sip_pvt *r, char *peer) | |||||||
| 					r->sa.sin_port = p->defaddr.sin_port; | 					r->sa.sin_port = p->defaddr.sin_port; | ||||||
| 				} | 				} | ||||||
| 				memcpy(&r->recv, &r->sa, sizeof(r->recv)); | 				memcpy(&r->recv, &r->sa, sizeof(r->recv)); | ||||||
| 			} else | 			} else { | ||||||
|  | 				if (p->temponly) | ||||||
|  | 					free(p); | ||||||
| 				p = NULL; | 				p = NULL; | ||||||
|  | 			} | ||||||
| 	} | 	} | ||||||
| 	ast_mutex_unlock(&peerl.lock); | 	ast_mutex_unlock(&peerl.lock); | ||||||
| 	if (!p && !found) { | 	if (!p && !found) { | ||||||
| @@ -3495,14 +3503,14 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req | |||||||
| 	if (!p->temponly) | 	if (!p->temponly) | ||||||
| 		p->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, p); | 		p->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, p); | ||||||
| 	pvt->expiry = expiry; | 	pvt->expiry = expiry; | ||||||
| 	if (inaddrcmp(&p->addr, &oldsin)) { |  | ||||||
| #ifdef MYSQL_FRIENDS | #ifdef MYSQL_FRIENDS | ||||||
| 		if (p->temponly) | 	if (p->temponly) | ||||||
| 			mysql_update_peer(p->name, &p->addr); | 		mysql_update_peer(p->name, &p->addr, p->username); | ||||||
| #endif | #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)) { | ||||||
| 		sip_poke_peer(p); | 		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); |  | ||||||
| 		if (option_verbose > 2) | 		if (option_verbose > 2) | ||||||
| 			ast_verbose(VERBOSE_PREFIX_3 "Registered SIP '%s' at %s port %d expires %d\n", p->name, inet_ntoa(p->addr.sin_addr), ntohs(p->addr.sin_port), expiry); | 			ast_verbose(VERBOSE_PREFIX_3 "Registered SIP '%s' at %s port %d expires %d\n", p->name, inet_ntoa(p->addr.sin_addr), ntohs(p->addr.sin_port), expiry); | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ CREATE TABLE `sipfriends` ( | |||||||
|   `name` varchar(40) NOT NULL default '', |   `name` varchar(40) NOT NULL default '', | ||||||
|   `secret` varchar(40) NOT NULL default '', |   `secret` varchar(40) NOT NULL default '', | ||||||
|   `context` varchar(40) NOT NULL default '', |   `context` varchar(40) NOT NULL default '', | ||||||
|  |   `username` varchar(40) default '', | ||||||
|   `ipaddr` varchar(20) NOT NULL default '', |   `ipaddr` varchar(20) NOT NULL default '', | ||||||
|   `port` int(6) NOT NULL default '0', |   `port` int(6) NOT NULL default '0', | ||||||
|   `regseconds` int(11) NOT NULL default '0', |   `regseconds` int(11) NOT NULL default '0', | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user