summaryrefslogtreecommitdiff
path: root/pjnath
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-10-02 17:54:40 +0000
committerBenny Prijono <bennylp@teluu.com>2008-10-02 17:54:40 +0000
commit446ed9bc1a03789b257b5890db515b178ce01527 (patch)
treef0ac365846878667964ce3de59c12cf0ffb82a06 /pjnath
parentdeb475aa4330c22608437d2b4e5b62fe3bb82ff0 (diff)
Ticket #654: Error when falling back to secondary TURN server (thanks Nicolas Fauvel for the report)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2340 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath')
-rw-r--r--pjnath/src/pjnath/turn_session.c4
-rw-r--r--pjnath/src/pjturn-client/client_main.c35
2 files changed, 33 insertions, 6 deletions
diff --git a/pjnath/src/pjnath/turn_session.c b/pjnath/src/pjnath/turn_session.c
index ad3d99ab..7d492551 100644
--- a/pjnath/src/pjnath/turn_session.c
+++ b/pjnath/src/pjnath/turn_session.c
@@ -1074,8 +1074,8 @@ static void on_session_fail( pj_turn_session *sess,
reason = NULL;
PJ_LOG(4,(sess->obj_name, "Trying next server"));
-
- status = pj_turn_session_alloc(sess, NULL);
+ set_state(sess, PJ_TURN_STATE_RESOLVED);
+ break;
} while (status != PJ_SUCCESS);
}
diff --git a/pjnath/src/pjturn-client/client_main.c b/pjnath/src/pjturn-client/client_main.c
index 6c5dc308..b1005305 100644
--- a/pjnath/src/pjturn-client/client_main.c
+++ b/pjnath/src/pjturn-client/client_main.c
@@ -48,6 +48,8 @@ static struct global
pj_thread_t *thread;
pj_bool_t quit;
+ pj_dns_resolver *resolver;
+
pj_turn_sock *relay;
pj_sockaddr relay_addr;
@@ -64,6 +66,7 @@ static struct options
char *password;
pj_bool_t use_fingerprint;
char *stun_server;
+ char *nameserver;
} o;
@@ -243,6 +246,25 @@ static pj_status_t create_relay(void)
return -1;
}
+ /* Create DNS resolver if configured */
+ if (o.nameserver) {
+ pj_str_t ns = pj_str(o.nameserver);
+
+ status = pj_dns_resolver_create(&g.cp.factory, "resolver", 0,
+ g.stun_config.timer_heap,
+ g.stun_config.ioqueue, &g.resolver);
+ if (status != PJ_SUCCESS) {
+ PJ_LOG(1,(THIS_FILE, "Error creating resolver (err=%d)", status));
+ return status;
+ }
+
+ status = pj_dns_resolver_set_ns(g.resolver, 1, &ns, NULL);
+ if (status != PJ_SUCCESS) {
+ PJ_LOG(1,(THIS_FILE, "Error configuring nameserver (err=%d)", status));
+ return status;
+ }
+ }
+
pj_bzero(&rel_cb, sizeof(rel_cb));
rel_cb.on_rx_data = &turn_on_rx_data;
rel_cb.on_state = &turn_on_state;
@@ -267,7 +289,7 @@ static pj_status_t create_relay(void)
CHECK(pj_turn_sock_alloc(g.relay, /* the relay */
&srv, /* srv addr */
(o.srv_port?atoi(o.srv_port):PJ_STUN_PORT),/* def port */
- NULL, /* resolver */
+ g.resolver, /* resolver */
(o.user_name?&cred:NULL), /* credential */
NULL) /* alloc param */
);
@@ -502,7 +524,8 @@ static void usage(void)
puts(" --username, -u UID Set username of the credential to UID");
puts(" --password, -p PASSWD Set password of the credential to PASSWD");
puts(" --fingerprint, -F Use fingerprint for outgoing requests");
- puts(" --stun-srv, -S Use this STUN srv instead of TURN for Binding discovery");
+ puts(" --stun-srv, -S NAME Use this STUN srv instead of TURN for Binding discovery");
+ puts(" --nameserver, -N IP Activate DNS SRV, use this DNS server");
puts(" --help, -h");
}
@@ -515,13 +538,14 @@ int main(int argc, char *argv[])
{ "fingerprint",0, 0, 'F'},
{ "tcp", 0, 0, 'T'},
{ "help", 0, 0, 'h'},
- { "stun-srv", 1, 0, 'S'}
+ { "stun-srv", 1, 0, 'S'},
+ { "nameserver", 1, 0, 'N'}
};
int c, opt_id;
char *pos;
pj_status_t status;
- while((c=pj_getopt_long(argc,argv, "r:u:p:S:hFT", long_options, &opt_id))!=-1) {
+ while((c=pj_getopt_long(argc,argv, "r:u:p:S:N:hFT", long_options, &opt_id))!=-1) {
switch (c) {
case 'r':
o.realm = pj_optarg;
@@ -544,6 +568,9 @@ int main(int argc, char *argv[])
case 'S':
o.stun_server = pj_optarg;
break;
+ case 'N':
+ o.nameserver = pj_optarg;
+ break;
default:
printf("Argument \"%s\" is not valid. Use -h to see help",
argv[pj_optind]);