diff --git a/coreapi/bellesip_sal/sal_op_publish.c b/coreapi/bellesip_sal/sal_op_publish.c index 81a7ce724..0e2ca3da9 100644 --- a/coreapi/bellesip_sal/sal_op_publish.c +++ b/coreapi/bellesip_sal/sal_op_publish.c @@ -24,18 +24,20 @@ static void publish_refresher_listener (belle_sip_refresher_t* refresher ,unsigned int status_code ,const char* reason_phrase) { SalOp* op = (SalOp*)user_pointer; + const belle_sip_client_transaction_t* last_publish_trans=belle_sip_refresher_get_transaction(op->refresher); + belle_sip_request_t* last_publish=belle_sip_transaction_get_request(BELLE_SIP_TRANSACTION(last_publish_trans)); + belle_sip_response_t *response=belle_sip_transaction_get_response(BELLE_SIP_TRANSACTION(last_publish_trans)); /*belle_sip_response_t* response=belle_sip_transaction_get_response(BELLE_SIP_TRANSACTION(belle_sip_refresher_get_transaction(refresher)));*/ ms_message("Publish refresher [%i] reason [%s] for proxy [%s]",status_code,reason_phrase?reason_phrase:"none",sal_op_get_proxy(op)); if (status_code==412){ /*resubmit the request after removing the SIP-If-Match*/ - const belle_sip_client_transaction_t* last_publish_trans=belle_sip_refresher_get_transaction(op->refresher); - belle_sip_request_t* last_publish=belle_sip_transaction_get_request(BELLE_SIP_TRANSACTION(last_publish_trans)); belle_sip_message_remove_header((belle_sip_message_t*)last_publish,"SIP-If-Match"); belle_sip_refresher_refresh(op->refresher,BELLE_SIP_REFRESHER_REUSE_EXPIRES); }else if (status_code==0){ op->base.root->callbacks.on_expire(op); }else if (status_code>=200){ sal_error_info_set(&op->error_info,SalReasonUnknown,status_code,reason_phrase,NULL); + sal_op_assign_recv_headers(op,(belle_sip_message_t*)response); op->base.root->callbacks.on_publish_response(op); } } diff --git a/coreapi/event.c b/coreapi/event.c index 731412153..28ea5914b 100644 --- a/coreapi/event.c +++ b/coreapi/event.c @@ -234,7 +234,10 @@ static int _linphone_event_send_publish(LinphoneEvent *lev, const LinphoneConten ms_error("linphone_event_update_publish(): this is not a PUBLISH event."); return -1; } - + if (lev->send_custom_headers){ + sal_op_set_sent_custom_header(lev->op,lev->send_custom_headers); + lev->send_custom_headers=NULL; + }else sal_op_set_sent_custom_header(lev->op,NULL); err=sal_publish(lev->op,NULL,NULL,lev->name,lev->expires,sal_body_from_content(&salbody,body)); if (err==0){ linphone_event_set_publish_state(lev,LinphonePublishProgress); diff --git a/tester/eventapi_tester.c b/tester/eventapi_tester.c index 5f10a5183..9d776fa40 100644 --- a/tester/eventapi_tester.c +++ b/tester/eventapi_tester.c @@ -97,7 +97,11 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon stats* counters = get_stats(lc); switch(state){ case LinphonePublishProgress: counters->number_of_LinphonePublishProgress++; break; - case LinphonePublishOk: counters->number_of_LinphonePublishOk++; break; + case LinphonePublishOk: + /*make sure custom header access API is working*/ + CU_ASSERT_PTR_NOT_NULL(linphone_event_get_custom_header(ev,"From")); + counters->number_of_LinphonePublishOk++; + break; case LinphonePublishError: counters->number_of_LinphonePublishError++; break; case LinphonePublishExpiring: counters->number_of_LinphonePublishExpiring++; break; case LinphonePublishCleared: counters->number_of_LinphonePublishCleared++;break; @@ -300,24 +304,26 @@ static void publish_test_with_args(bool_t refresh){ lp_config_set_int(marie->lc->config,"sip","refresh_generic_publish",refresh); - lev=linphone_core_publish(marie->lc,pauline->identity,"dodo",5,&content); + lev=linphone_core_create_publish(marie->lc,pauline->identity,"dodo",5); + linphone_event_add_custom_header(lev,"CustomHeader","someValue"); + linphone_event_send_publish(lev,&content); linphone_event_ref(lev); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,1000)); + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); if (!refresh){ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishExpiring,1,5000)); linphone_event_update_publish(lev,&content); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,1000)); + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); }else{ } linphone_event_terminate(lev); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,1000)); + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,3000)); linphone_event_unref(lev); diff --git a/tester/tester.c b/tester/tester.c index 9eedb0ed1..caeb78009 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -216,7 +216,7 @@ LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_f proxy_count=0; if (proxy_count) - wait_for_until(mgr->lc,NULL,&mgr->stat.number_of_LinphoneRegistrationOk,proxy_count,3000*proxy_count); + wait_for_until(mgr->lc,NULL,&mgr->stat.number_of_LinphoneRegistrationOk,proxy_count,5000*proxy_count); CU_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationOk,proxy_count); enable_codec(mgr->lc,"PCMU",8000);