Exemple #1
0
	virtual void TearDown() {
		delete nad;
		delete nhid;
		delete nsid;
		if (ai)
			Xfreeaddrinfo(ai);
	}
static belle_sip_socket_t create_udp_socket(const char *addr, int port, int *family){
/*	struct addrinfo hints={0}; */
	struct addrinfo *res=NULL;
	int err;
	belle_sip_socket_t sock;
	char portnum[10];
/*	int optval=1; */

	snprintf(portnum,sizeof(portnum),"%i",port);
/*	hints.ai_family=AF_UNSPEC;
	hints.ai_socktype=SOCK_DGRAM;
	hints.ai_protocol=IPPROTO_UDP;
	hints.ai_flags=AI_NUMERICSERV; */
	err=Xgetaddrinfo(addr,NULL,NULL,&res);
	if (err!=0){
		printf("getaddrinfo() failed for %s port %i: %s",addr,port,gai_strerror(err));
		return -1;
	}
	*family=res->ai_family;
/*	sock=Xsocket(res->ai_family,res->ai_socktype,res->ai_protocol); */
	sock=Xsocket(AF_XIA, SOCK_DGRAM, 0);
	if (sock==-1){
		printf("Cannot create UDP socket: %s",belle_sip_get_socket_error_string());
		Xfreeaddrinfo(res);
		return -1;
	}
/*	err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
			(char*)&optval, sizeof (optval)); 
	if (err == -1){
		belle_sip_warning ("Fail to set SIP/UDP address reusable: %s.", belle_sip_get_socket_error_string());
	} */
	
	err=Xbind(sock,res->ai_addr,res->ai_addrlen);
	if (err==-1){
		printf("udp bind() failed for %s port %i: %s",addr,port,belle_sip_get_socket_error_string());
		close_socket(sock);
		Xfreeaddrinfo(res);
		return -1;
	}
	Xfreeaddrinfo(res);
	return sock;
}
Exemple #3
0
int linphone_core_get_local_ip_for(int type, const char *dest, char *result){
	struct addrinfo hints={0};
	struct addrinfo *res=NULL;
	socklen_t s;
	int err;
	hints.ai_flags = AI_PASSIVE;
	hints.ai_family = AF_XIA;
	err=Xgetaddrinfo(NULL, NULL, &hints, &res);
	if (err!=0){
		ms_error("getaddrinfo() error: %s",gai_strerror(err));
		return -1;
	} 
	s=sizeof(sockaddr_x);
	err=Xgetnameinfo(res->ai_addr,s,result,LINPHONE_IPADDR_SIZE,NULL,0,NI_NUMERICHOST);
//	printf("getnameinfo: %s\n", result);
	Xfreeaddrinfo(res);
    return 0;  
}
Exemple #4
0
int parse_hostname_to_addr(const char *server, sockaddr_x *ss, socklen_t *socklen){
/*	struct addrinfo hints,*res=NULL;
	int family = PF_INET;
	int port_int = 3478;
	int ret;
	char port[6];
	char host[NI_MAXHOST];
	char *p1, *p2;
	if ((sscanf(server, "[%64[^]]]:%d", host, &port_int) == 2) || (sscanf(server, "[%64[^]]]", host) == 1)) {
		family = PF_INET6;
	} else {
		p1 = strchr(server, ':');
		p2 = strrchr(server, ':');
		if (p1 && p2 && (p1 != p2)) {
			family = PF_INET6;
			host[NI_MAXHOST-1]='\0';
			strncpy(host, server, sizeof(host) - 1);
		} else if (sscanf(server, "%[^:]:%d", host, &port_int) != 2) {
			host[NI_MAXHOST-1]='\0';
			strncpy(host, server, sizeof(host) - 1);
		}
	}
	snprintf(port, sizeof(port), "%d", port_int);
	memset(&hints,0,sizeof(hints));
	hints.ai_family=family;
	hints.ai_socktype=SOCK_DGRAM;
	hints.ai_protocol=IPPROTO_UDP; */
	int ret;
	struct addrinfo *res=NULL;
	ret=Xgetaddrinfo(server,NULL,NULL,&res);
	if (ret!=0){
/*		ms_error("getaddrinfo() failed for %s:%s : %s",host,port,gai_strerror(ret)); */
		return -1;
	}
	if (!res) return -1;
	memcpy(ss,res->ai_addr,res->ai_addrlen);
	*socklen=res->ai_addrlen;
	Xfreeaddrinfo(res);
	return 0;
}