static void test_connection_too_long(const char *transport){ belle_sip_request_t *req; int orig=belle_sip_stack_get_transport_timeout(stack); char *no_response_here_with_transport = belle_sip_strdup_printf(no_response_here, transport); io_error_count=0; belle_sip_stack_set_transport_timeout(stack,2000); req=try_register_user_at_domain(stack, prov, transport,1,"tester","sip.linphone.org",no_response_here_with_transport,0); CU_ASSERT_TRUE(io_error_count>=1); belle_sip_stack_set_transport_timeout(stack,orig); belle_sip_free(no_response_here_with_transport); if (req) belle_sip_object_unref(req); }
static void test_tls_to_tcp(void){ belle_sip_request_t *req; int orig=belle_sip_stack_get_transport_timeout(stack); io_error_count=0; belle_sip_stack_set_transport_timeout(stack,2000); req=try_register_user_at_domain(stack, prov, "TLS",1,"tester",test_domain,test_domain_tls_to_tcp,0); if (req){ CU_ASSERT_TRUE(io_error_count>=1); belle_sip_object_unref(req); } belle_sip_stack_set_transport_timeout(stack,orig); }
static int tls_process_data(belle_sip_channel_t *obj,unsigned int revents){ belle_sip_tls_channel_t* channel=(belle_sip_tls_channel_t*)obj; if (obj->state == BELLE_SIP_CHANNEL_CONNECTING ) { if (!channel->socket_connected) { channel->socklen=sizeof(channel->ss); if (finalize_stream_connection((belle_sip_stream_channel_t*)obj,revents,(struct sockaddr*)&channel->ss,&channel->socklen)) { goto process_error; } belle_sip_message("Channel [%p]: Connected at TCP level, now doing TLS handshake",obj); channel->socket_connected=1; belle_sip_source_set_events((belle_sip_source_t*)channel,BELLE_SIP_EVENT_READ|BELLE_SIP_EVENT_ERROR); belle_sip_source_set_timeout((belle_sip_source_t*)obj,belle_sip_stack_get_transport_timeout(obj->stack)); if (tls_process_handshake(obj)==-1) goto process_error; }else{ if (revents & BELLE_SIP_EVENT_READ){ if (tls_process_handshake(obj)==-1) goto process_error; }else if (revents==BELLE_SIP_EVENT_TIMEOUT){ belle_sip_error("channel [%p]: SSL handshake took too much time.",obj); goto process_error; }else{ belle_sip_warning("channeEHHCXCCCl [%p]: unexpected event [%i] during TLS handshake.",obj,revents); } } } else if ( obj->state == BELLE_SIP_CHANNEL_READY) { return belle_sip_channel_process_data(obj,revents); } else { belle_sip_warning("Unexpected event [%i], for channel [%p]",revents,channel); return BELLE_SIP_STOP; } return BELLE_SIP_CONTINUE; process_error: belle_sip_error("Cannot connect to [%s://%s:%i]",belle_sip_channel_get_transport_name(obj),obj->peer_name,obj->peer_port); channel_set_state(obj,BELLE_SIP_CHANNEL_ERROR); return BELLE_SIP_STOP; }
int sal_get_transport_timeout(const Sal* sal) { return belle_sip_stack_get_transport_timeout(sal->stack); }