mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	acl.c: Improve ast_ouraddrfor() diagnostic messages.
* Made not generate strings unless they will actually be used. ASTERISK-26672 Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3
This commit is contained in:
		
							
								
								
									
										36
									
								
								main/acl.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								main/acl.c
									
									
									
									
									
								
							| @@ -912,40 +912,48 @@ int ast_get_ip(struct ast_sockaddr *addr, const char *hostname) | ||||
|  | ||||
| int ast_ouraddrfor(const struct ast_sockaddr *them, struct ast_sockaddr *us) | ||||
| { | ||||
| 	/* | ||||
| 	 * We must create the errno string before creating the address | ||||
| 	 * string because it could wipe out errno on the error return | ||||
| 	 * paths. | ||||
| 	 */ | ||||
| 	const char *sock_err; | ||||
| 	int port; | ||||
| 	int s; | ||||
|  | ||||
| 	/* Preserve our original address port */ | ||||
| 	port = ast_sockaddr_port(us); | ||||
|  | ||||
| 	if ((s = socket(ast_sockaddr_is_ipv6(them) ? AF_INET6 : AF_INET, | ||||
| 			SOCK_DGRAM, 0)) < 0) { | ||||
| 		ast_log(LOG_ERROR, "Cannot create socket\n"); | ||||
| 	s = socket(ast_sockaddr_is_ipv6(them) ? AF_INET6 : AF_INET, SOCK_DGRAM, 0); | ||||
| 	if (s < 0) { | ||||
| 		sock_err = ast_strdupa(strerror(errno)); | ||||
| 		ast_log(LOG_ERROR, "Cannot create socket to %s: %s\n", | ||||
| 			ast_sockaddr_stringify_addr(them), sock_err); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (ast_connect(s, them)) { | ||||
| 		ast_log(LOG_WARNING, "Cannot connect\n"); | ||||
| 		sock_err = ast_strdupa(strerror(errno)); | ||||
| 		ast_log(LOG_WARNING, "Cannot connect to %s: %s\n", | ||||
| 			ast_sockaddr_stringify_addr(them), sock_err); | ||||
| 		close(s); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if (ast_getsockname(s, us)) { | ||||
|  | ||||
| 		ast_log(LOG_WARNING, "Cannot get socket name\n"); | ||||
| 		sock_err = ast_strdupa(strerror(errno)); | ||||
| 		ast_log(LOG_WARNING, "Cannot get socket name for connection to %s: %s\n", | ||||
| 			ast_sockaddr_stringify_addr(them), sock_err); | ||||
| 		close(s); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	close(s); | ||||
|  | ||||
| 	{ | ||||
| 		const char *them_addr = ast_strdupa(ast_sockaddr_stringify_addr(them)); | ||||
| 		const char *us_addr = ast_strdupa(ast_sockaddr_stringify_addr(us)); | ||||
|  | ||||
| 		ast_debug(3, "For destination '%s', our source address is '%s'.\n", | ||||
| 				them_addr, us_addr); | ||||
| 	} | ||||
|  | ||||
| 	ast_sockaddr_set_port(us, port); | ||||
|  | ||||
| 	ast_debug(3, "For destination '%s', our source address is '%s'.\n", | ||||
| 		ast_strdupa(ast_sockaddr_stringify_addr(them)), | ||||
| 		ast_strdupa(ast_sockaddr_stringify_addr(us))); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user