|
|
|
@ -2304,32 +2304,31 @@ static int create_addr(struct sip_pvt *dialog, const char *opeer)
|
|
|
|
|
int res = create_addr_from_peer(dialog, p);
|
|
|
|
|
ASTOBJ_UNREF(p, sip_destroy_peer);
|
|
|
|
|
return res;
|
|
|
|
|
} else {
|
|
|
|
|
hostn = peer;
|
|
|
|
|
portno = port ? atoi(port) : DEFAULT_SIP_PORT;
|
|
|
|
|
if (srvlookup) {
|
|
|
|
|
char service[MAXHOSTNAMELEN];
|
|
|
|
|
int tportno;
|
|
|
|
|
int ret;
|
|
|
|
|
snprintf(service, sizeof(service), "_sip._udp.%s", peer);
|
|
|
|
|
ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
|
|
|
|
|
if (ret > 0) {
|
|
|
|
|
hostn = host;
|
|
|
|
|
portno = tportno;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
hp = ast_gethostbyname(hostn, &ahp);
|
|
|
|
|
if (hp) {
|
|
|
|
|
ast_string_field_set(dialog, tohost, peer);
|
|
|
|
|
memcpy(&dialog->sa.sin_addr, hp->h_addr, sizeof(dialog->sa.sin_addr));
|
|
|
|
|
dialog->sa.sin_port = htons(portno);
|
|
|
|
|
dialog->recv = dialog->sa;
|
|
|
|
|
return 0;
|
|
|
|
|
} else {
|
|
|
|
|
ast_log(LOG_WARNING, "No such host: %s\n", peer);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
hostn = peer;
|
|
|
|
|
portno = port ? atoi(port) : DEFAULT_SIP_PORT;
|
|
|
|
|
if (srvlookup) {
|
|
|
|
|
char service[MAXHOSTNAMELEN];
|
|
|
|
|
int tportno;
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
snprintf(service, sizeof(service), "_sip._udp.%s", peer);
|
|
|
|
|
ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
|
|
|
|
|
if (ret > 0) {
|
|
|
|
|
hostn = host;
|
|
|
|
|
portno = tportno;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
hp = ast_gethostbyname(hostn, &ahp);
|
|
|
|
|
if (!hp) {
|
|
|
|
|
ast_log(LOG_WARNING, "No such host: %s\n", peer);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
ast_string_field_set(dialog, tohost, peer);
|
|
|
|
|
memcpy(&dialog->sa.sin_addr, hp->h_addr, sizeof(dialog->sa.sin_addr));
|
|
|
|
|
dialog->sa.sin_port = htons(portno);
|
|
|
|
|
dialog->recv = dialog->sa;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*! \brief Scheduled congestion on a call */
|
|
|
|
|