Commit ffc30233 authored by Simon Morlat's avatar Simon Morlat
Browse files

work in progress

parent d25b05a2
......@@ -152,6 +152,7 @@ const char* belle_sip_header_via_get_branch(belle_sip_header_via_t* via);
const char* belle_sip_header_via_get_transport(belle_sip_header_via_t* via);
const char* belle_sip_header_via_get_host(belle_sip_header_via_t* via);
int belle_sip_header_via_get_port(belle_sip_header_via_t* via);
int belle_sip_header_via_get_listening_port(belle_sip_header_via_t *via);
const char* belle_sip_header_via_get_maddr(belle_sip_header_via_t* via);
const char* belle_sip_header_via_get_protocol(belle_sip_header_via_t* via);
......
......@@ -26,6 +26,9 @@ typedef struct _belle_sip_response belle_sip_response_t;
#define BELLE_SIP_REQUEST(obj) BELLE_SIP_CAST(obj,belle_sip_request_t)
#define BELLE_SIP_RESPONSE(obj) BELLE_SIP_CAST(obj,belle_sip_response_t)
BELLE_SIP_BEGIN_DECLS
int belle_sip_message_is_request(belle_sip_message_t *msg);
belle_sip_request_t* belle_sip_request_new();
belle_sip_request_t* belle_sip_request_parse(const char* raw);
......@@ -41,9 +44,13 @@ void belle_sip_request_set_method(belle_sip_request_t* request,const char* metho
int belle_sip_message_is_response(belle_sip_message_t *msg);
belle_sip_header_t *belle_sip_message_get_header_first(belle_sip_message_t *msg, const char *header_name);
belle_sip_header_t *belle_sip_message_get_header_last(belle_sip_message_t *msg, const char *header_name);
char *belle_sip_message_to_string(belle_sip_message_t *msg);
BELLE_SIP_END_DECLS
#endif
......@@ -167,6 +167,7 @@ GET_SET_STRING_PARAM(belle_sip_header_via,received);
GET_SET_INT_PARAM_PRIVATE(belle_sip_header_via,rport,int,_)
GET_SET_INT_PARAM_PRIVATE(belle_sip_header_via,ttl,int,_)
int belle_sip_header_via_set_rport (belle_sip_header_via_t* obj,int value) {
if (value ==-1 || (value>0 && value<65536)) {
_belle_sip_header_via_set_rport(obj,value);
......@@ -194,6 +195,13 @@ int belle_sip_header_via_set_port (belle_sip_header_via_t* obj,int value) {
return -1;
}
}
int belle_sip_header_via_get_listening_port(belle_sip_header_via_t *via){
int ret=belle_sip_header_via_get_port(via);
if (ret==-1) ret=belle_sip_listening_point_get_well_known_port(via->protocol);
return ret;
}
/**************************
* call_id header object inherent from object
****************************
......
......@@ -365,6 +365,8 @@ typedef struct belle_sip_udp_listening_point belle_sip_udp_listening_point_t;
belle_sip_listening_point_t * belle_sip_udp_listening_point_new(belle_sip_stack_t *s, const char *ipaddress, int port);
belle_sip_channel_t *belle_sip_listening_point_find_output_channel(belle_sip_listening_point_t *ip, const struct addrinfo *dest);
belle_sip_source_t *belle_sip_channel_create_source(belle_sip_channel_t *, unsigned int events, int timeout, belle_sip_source_func_t callback, void *data);
int belle_sip_listening_point_get_well_known_port(const char *transport);
/*
belle_sip_stack_t
......@@ -404,6 +406,11 @@ typedef struct listener_ctx{
belle_sip_client_transaction_t * belle_sip_client_transaction_new(belle_sip_provider_t *prov,belle_sip_request_t *req);
belle_sip_server_transaction_t * belle_sip_server_transaction_new(belle_sip_provider_t *prov,belle_sip_request_t *req);
/*
belle_sip_response_t
*/
void belle_sip_response_get_return_hop(belle_sip_response_t *msg, belle_sip_hop_t *hop);
#ifdef __cplusplus
}
#endif
......
......@@ -226,4 +226,10 @@ belle_sip_listening_point_t * belle_sip_udp_listening_point_new(belle_sip_stack_
}
int belle_sip_listening_point_get_well_known_port(const char *transport){
if (strcasecmp(transport,"UDP")==0 || strcasecmp(transport,"TCP")==0 ) return 5060;
if (strcasecmp(transport,"DTLS")==0 || strcasecmp(transport,"TLS")==0 ) return 5061;
belle_sip_error("No well known port for transport %s", transport);
return -1;
}
......@@ -96,9 +96,8 @@ static void sender_task_cb(belle_sip_sender_task_t *t, void *data, int retcode){
}
void belle_sip_provider_send_request(belle_sip_provider_t *p, belle_sip_request_t *req){
belle_sip_hop_t hop;
belle_sip_sender_task_t *task;
belle_sip_stack_get_next_hop (p->stack,req,&hop);
task=belle_sip_sender_task_new(p, BELLE_SIP_MESSAGE(req), sender_task_cb, NULL);
belle_sip_sender_task_send(task);
}
......@@ -106,8 +105,6 @@ void belle_sip_provider_send_request(belle_sip_provider_t *p, belle_sip_request_
void belle_sip_provider_send_response(belle_sip_provider_t *p, belle_sip_response_t *resp){
belle_sip_sender_task_t *task;
/* fill the hop with the destination of the response */
/*belle_sip_stack_get_next_hop (p->stack,req,&hop);*/
task=belle_sip_sender_task_new(p, BELLE_SIP_MESSAGE(resp), sender_task_cb, NULL);
belle_sip_sender_task_send(task);
}
......
......@@ -111,14 +111,9 @@ void belle_sip_sender_task_send(belle_sip_sender_task_t *t){
belle_sip_stack_get_next_hop(stack,BELLE_SIP_REQUEST(t->message),&t->hop);
t->resolver_id=belle_sip_resolve(t->hop.host,t->hop.port,0,sender_task_res_done,t,stack->ml);
}else{
/*fill the hop structure from the last via */
//belle_sip_header_via_t *via=BELLE_SIP_HEADER_VIA(belle_sip_message_get_header_last(t->message,"via"));
t->hop.host=NULL; /*TODO belle_sip_header_via_get_host(via);*/
t->hop.transport=NULL; /*TODO*/
t->hop.port=0; /*TODO*/
belle_sip_response_get_return_hop(BELLE_SIP_RESPONSE(t->message),&t->hop);
sender_task_find_channel_and_send(t);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment