adapt code to new object ref management

This commit is contained in:
Jehan Monnier 2013-01-14 18:24:38 +01:00
parent 48b1a8be8d
commit ca59e093f5
6 changed files with 16 additions and 15 deletions

View file

@ -22,15 +22,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
SalAddress * sal_address_new(const char *uri){
belle_sip_header_address_t* result;
if (uri) {
return (SalAddress *)belle_sip_header_address_parse (uri);
result=belle_sip_header_address_parse (uri);
} else {
result = belle_sip_header_address_new();
belle_sip_header_address_set_uri(result,belle_sip_uri_new());
return (SalAddress *)result;
}
belle_sip_object_ref(result);
return (SalAddress *)result;
}
SalAddress * sal_address_clone(const SalAddress *addr){
return (SalAddress *) belle_sip_object_clone(BELLE_SIP_OBJECT(addr));
return (SalAddress *) belle_sip_object_ref(belle_sip_object_clone(BELLE_SIP_OBJECT(addr)));
}
const char *sal_address_get_scheme(const SalAddress *addr){
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);

View file

@ -425,7 +425,6 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i
belle_sip_listening_point_t* lp = belle_sip_stack_create_listening_point(ctx->stack,addr,port,sal_transport_to_string(tr));
if (lp) {
result = belle_sip_provider_add_listening_point(ctx->prov,lp);
belle_sip_object_unref(lp);
} else {
return -1;
}

View file

@ -75,7 +75,7 @@ belle_sip_request_t* sal_op_build_request(SalOp *op,const char* method);
void sal_op_call_fill_cbs(SalOp*op);
void set_or_update_dialog(SalOp* op, const belle_sip_response_event_t* event);
void set_or_update_dialog(SalOp* op, belle_sip_dialog_t* dialog);
void sal_op_set_remote_ua(SalOp*op,belle_sip_message_t* message);
int sal_op_send_request(SalOp* op, belle_sip_request_t* request);

View file

@ -33,7 +33,7 @@ static void sdp_process(SalOp *h){
belle_sip_object_unref(h->sdp_answer);
}
offer_answer_initiate_incoming(h->base.local_media,h->base.remote_media,h->result,h->base.root->one_matching_codec);
h->sdp_answer=media_description_to_sdp(h->result);
h->sdp_answer=(belle_sdp_session_description_t *)belle_sip_object_ref(media_description_to_sdp(h->result));
/*once we have generated the SDP answer, we modify the result description for processing by the upper layer.
It should contains media parameters constraint from the remote offer, not our response*/
strcpy(h->result->addr,h->base.remote_media->addr);
@ -171,7 +171,7 @@ static void call_response_event(void *op_base, const belle_sip_response_event_t
}
return;
}
set_or_update_dialog(op,event);
set_or_update_dialog(op,belle_sip_response_event_get_dialog(event));
/*check if op is terminating*/
@ -180,6 +180,7 @@ static void call_response_event(void *op_base, const belle_sip_response_event_t
&& (!op->dialog
|| belle_sip_dialog_get_state(op->dialog)==BELLE_SIP_DIALOG_NULL
|| belle_sip_dialog_get_state(op->dialog)==BELLE_SIP_DIALOG_EARLY)) {
/*FIXME if DIALOG_CONFIRM then ACK+BYE*/
cancelling_invite(op);
return;
@ -278,7 +279,7 @@ static void process_sdp_for_invite(SalOp* op,belle_sip_request_t* invite) {
static void process_request_event(void *op_base, const belle_sip_request_event_t *event) {
SalOp* op = (SalOp*)op_base;
belle_sip_server_transaction_t* server_transaction = belle_sip_provider_create_server_transaction(op->base.root->prov,belle_sip_request_event_get_request(event));
belle_sip_object_ref(server_transaction);
if (server_transaction) belle_sip_object_ref(server_transaction); /*ACK does'nt create srv transaction*/
if (op->pending_server_trans) belle_sip_object_unref(op->pending_server_trans);
op->pending_server_trans=server_transaction;
belle_sdp_session_description_t* sdp;
@ -289,8 +290,7 @@ static void process_request_event(void *op_base, const belle_sip_request_event_t
belle_sip_header_t* call_info;
if (!op->dialog) {
op->dialog=belle_sip_provider_create_dialog(op->base.root->prov,BELLE_SIP_TRANSACTION(op->pending_server_trans));
belle_sip_dialog_set_application_data(op->dialog,op);
set_or_update_dialog(op,belle_sip_provider_create_dialog(op->base.root->prov,BELLE_SIP_TRANSACTION(op->pending_server_trans)));
ms_message("new incoming call from [%s] to [%s]",sal_op_get_from(op),sal_op_get_to(op));
}
dialog_state=belle_sip_dialog_get_state(op->dialog);

View file

@ -32,6 +32,7 @@ void sal_op_release(SalOp *op){
belle_sip_main_loop_cancel_source(belle_sip_stack_get_main_loop(op->base.root->stack),op->registration_refresh_timer);
}
if (op->auth_info) sal_auth_info_delete(op->auth_info);
if (op->sdp_answer) belle_sip_object_unref(op->sdp_answer);
__sal_op_free(op);
return ;
}
@ -198,13 +199,13 @@ bool_t sal_compute_sal_errors(belle_sip_response_t* response,SalError* sal_err,S
return FALSE;
}
}
void set_or_update_dialog(SalOp* op, const belle_sip_response_event_t* event) {
void set_or_update_dialog(SalOp* op, belle_sip_dialog_t* dialog) {
/*check if dialog has changed*/
if (belle_sip_response_event_get_dialog(event) != op->dialog) {
ms_message("Dialog set from [%p] to [%p] for op [%p]",op->dialog,belle_sip_response_event_get_dialog(event),op);
if (dialog != op->dialog) {
ms_message("Dialog set from [%p] to [%p] for op [%p]",op->dialog,dialog,op);
/*fixme, shouldn't we cancel previous dialog*/
if (op->dialog)belle_sip_object_unref(op->dialog);
op->dialog=belle_sip_response_event_get_dialog(event);
op->dialog=dialog;
belle_sip_dialog_set_application_data(op->dialog,op);
belle_sip_object_ref(op->dialog);
}

View file

@ -424,7 +424,7 @@ static void presence_response_event(void *op_base, const belle_sip_response_even
op->base.root->callbacks.notify_presence(op,SalSubscribeTerminated, SalPresenceOffline,NULL);
return;
}
set_or_update_dialog(op_base,event);
set_or_update_dialog(op_base,belle_sip_response_event_get_dialog(event));
if (!op->dialog) {
ms_message("presence op [%p] receive out of dialog answer [%i]",op,code);
return;