diff --git a/coreapi/bellesip_sal/sal_op_impl.c b/coreapi/bellesip_sal/sal_op_impl.c index 238ca225c..8eb1b3893 100644 --- a/coreapi/bellesip_sal/sal_op_impl.c +++ b/coreapi/bellesip_sal/sal_op_impl.c @@ -332,6 +332,8 @@ int sal_register(SalOp *op, const char *proxy, const char *from, int expires){ belle_sip_uri_t* contact_uri; sal_op_set_from(op,from); sal_op_set_to(op,from); + belle_sip_uri_t* route_uri=NULL; + belle_sip_header_route_t* route_header; char token[10]; if (expires<0) goto error; from_header = belle_sip_header_from_create(from,belle_sip_random_token(token,sizeof(token))); @@ -349,7 +351,9 @@ int sal_register(SalOp *op, const char *proxy, const char *from, int expires){ belle_sip_header_address_set_uri((belle_sip_header_address_t*)contact_header,contact_uri); sal_op_set_route(op,proxy); /*FIXME use route info if needed*/ - + if (proxy) { + route_uri=belle_sip_uri_parse(proxy); + } req=belle_sip_request_create( req_uri, @@ -363,6 +367,16 @@ int sal_register(SalOp *op, const char *proxy, const char *from, int expires){ belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(contact_header)); + + if (route_uri && !belle_sip_uri_equals(req_uri,route_uri)) { + route_header = belle_sip_header_route_new(); + belle_sip_uri_set_lr_param(route_uri,1); + belle_sip_header_address_set_uri(BELLE_SIP_HEADER_ADDRESS(route_header),route_uri); + belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(route_header)); + } else if (route_uri){ + belle_sip_object_unref(route_uri); + route_uri=NULL; + } send_register_request_with_expires(op,req,expires); return 0; @@ -371,6 +385,7 @@ error: if (contact_header) belle_sip_object_unref(contact_header); if (from_header) belle_sip_object_unref(from_header); if (to_header) belle_sip_object_unref(to_header); + if (route_uri) belle_sip_object_unref(route_uri); return -1; } diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index 3365f5f77..c86acbf65 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -111,10 +111,15 @@ static void register_with_refresh(LinphoneCore* lc, bool_t refresh,const char* d linphone_proxy_config_set_identity(proxy_cfg,linphone_address_as_string(from)); const char* server_addr = linphone_address_get_domain(from); - linphone_proxy_config_set_server_addr(proxy_cfg,server_addr); + linphone_proxy_config_enable_register(proxy_cfg,TRUE); linphone_proxy_config_expires(proxy_cfg,30); - if (route) linphone_proxy_config_set_route(proxy_cfg,route); + if (route) { + linphone_proxy_config_set_route(proxy_cfg,route); + linphone_proxy_config_set_server_addr(proxy_cfg,route); + } else { + linphone_proxy_config_set_server_addr(proxy_cfg,server_addr); + } linphone_address_destroy(from); linphone_core_add_proxy_config(lc,proxy_cfg); @@ -153,6 +158,17 @@ static void simple_register(){ register_with_refresh(create_lc(),FALSE,NULL,NULL); CU_ASSERT_EQUAL(number_of_auth_info_requested,0); } +static void simple_tcp_register(){ + char route[256]; + sprintf(route,"sip:%s;transport=tcp",test_domain); + register_with_refresh(create_lc(),FALSE,NULL,route); +} +static void simple_tls_register(){ + char route[256]; + sprintf(route,"sip:%s;transport=tls",test_domain); + register_with_refresh(create_lc(),FALSE,NULL,route); +} + static void simple_authenticated_register(){ LinphoneCore* lc = create_lc(); LinphoneAuthInfo *info=linphone_auth_info_new(test_username,NULL,test_password,NULL,auth_domain); /*create authentication structure from identity*/ @@ -218,6 +234,12 @@ CU_pSuite pSuite = CU_add_suite("liblinphone init test suite", init, uninit); if (NULL == CU_add_test(pSuite, "simple register tester", simple_register)) { return CU_get_error(); } + if (NULL == CU_add_test(pSuite, "tcp register tester", simple_tcp_register)) { + return CU_get_error(); + } + if (NULL == CU_add_test(pSuite, "tls register tester", simple_tls_register)) { + return CU_get_error(); + } if (NULL == CU_add_test(pSuite, "simple register with digest auth tester", simple_authenticated_register)) { return CU_get_error(); } diff --git a/tester/userdb.conf b/tester/userdb.conf new file mode 100644 index 000000000..65e2b549d --- /dev/null +++ b/tester/userdb.conf @@ -0,0 +1,3 @@ +liblinphone_tester@auth.example.org secret +liblinphone_tester@auth1.example.org secret +liblinphone_tester@auth2.example.org secret