mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-04-20 19:18:31 +00:00
Answer 500 server internal error in case of unexpected request arriving at core level
This commit is contained in:
parent
6fffcc0f9c
commit
e59db8daec
6 changed files with 96 additions and 5 deletions
|
|
@ -464,6 +464,9 @@ SalReason sal_reason_to_sip_code(SalReason r){
|
||||||
case SalReasonBadGateway:
|
case SalReasonBadGateway:
|
||||||
ret=502;
|
ret=502;
|
||||||
break;
|
break;
|
||||||
|
case SalReasonInternalError:
|
||||||
|
ret=500;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -508,6 +511,8 @@ SalReason _sal_reason_from_sip_code(int code) {
|
||||||
return SalReasonNotAcceptable;
|
return SalReasonNotAcceptable;
|
||||||
case 491:
|
case 491:
|
||||||
return SalReasonRequestPending;
|
return SalReasonRequestPending;
|
||||||
|
case 500:
|
||||||
|
return SalReasonInternalError;
|
||||||
case 501:
|
case 501:
|
||||||
return SalReasonNotImplemented;
|
return SalReasonNotImplemented;
|
||||||
case 502:
|
case 502:
|
||||||
|
|
|
||||||
|
|
@ -747,7 +747,7 @@ static void call_updating(SalOp *op, bool_t is_update){
|
||||||
case LinphoneCallPausing:
|
case LinphoneCallPausing:
|
||||||
case LinphoneCallResuming:
|
case LinphoneCallResuming:
|
||||||
case LinphoneCallUpdatedByRemote:
|
case LinphoneCallUpdatedByRemote:
|
||||||
sal_call_decline(call->op,SalReasonNotImplemented,NULL);
|
sal_call_decline(call->op,SalReasonInternalError,NULL);
|
||||||
/*no break*/
|
/*no break*/
|
||||||
case LinphoneCallIdle:
|
case LinphoneCallIdle:
|
||||||
case LinphoneCallOutgoingInit:
|
case LinphoneCallOutgoingInit:
|
||||||
|
|
|
||||||
|
|
@ -1274,6 +1274,7 @@ LinphoneReason linphone_reason_from_sal(SalReason r){
|
||||||
ret=LinphoneReasonIOError;
|
ret=LinphoneReasonIOError;
|
||||||
break;
|
break;
|
||||||
case SalReasonUnknown:
|
case SalReasonUnknown:
|
||||||
|
case SalReasonInternalError:
|
||||||
ret=LinphoneReasonUnknown;
|
ret=LinphoneReasonUnknown;
|
||||||
break;
|
break;
|
||||||
case SalReasonBusy:
|
case SalReasonBusy:
|
||||||
|
|
@ -1304,7 +1305,7 @@ LinphoneReason linphone_reason_from_sal(SalReason r){
|
||||||
ret=LinphoneReasonIOError;
|
ret=LinphoneReasonIOError;
|
||||||
break;
|
break;
|
||||||
case SalReasonRequestPending:
|
case SalReasonRequestPending:
|
||||||
ret=LinphoneReasonNone;
|
ret=LinphoneReasonTemporarilyUnavailable; /*might not be exactly the perfect matching, but better than LinphoneReasonNone*/
|
||||||
break;
|
break;
|
||||||
case SalReasonUnauthorized:
|
case SalReasonUnauthorized:
|
||||||
ret=LinphoneReasonUnauthorized;
|
ret=LinphoneReasonUnauthorized;
|
||||||
|
|
|
||||||
|
|
@ -355,7 +355,8 @@ typedef enum SalReason{
|
||||||
SalReasonNotImplemented,
|
SalReasonNotImplemented,
|
||||||
SalReasonBadGateway,
|
SalReasonBadGateway,
|
||||||
SalReasonServerTimeout,
|
SalReasonServerTimeout,
|
||||||
SalReasonIOError
|
SalReasonIOError,
|
||||||
|
SalReasonInternalError
|
||||||
}SalReason;
|
}SalReason;
|
||||||
|
|
||||||
const char* sal_reason_to_string(const SalReason reason);
|
const char* sal_reason_to_string(const SalReason reason);
|
||||||
|
|
|
||||||
|
|
@ -1837,7 +1837,7 @@ static void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager*
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) {
|
void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) {
|
||||||
video_call_base_2(pauline,marie,using_policy,mode,callee_video_enabled,caller_video_enabled);
|
video_call_base_2(pauline,marie,using_policy,mode,callee_video_enabled,caller_video_enabled);
|
||||||
linphone_core_terminate_all_calls(pauline->lc);
|
linphone_core_terminate_all_calls(pauline->lc);
|
||||||
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
||||||
|
|
@ -2805,6 +2805,89 @@ static void call_established_with_rejected_info(void) {
|
||||||
linphone_core_manager_destroy(pauline);
|
linphone_core_manager_destroy(pauline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void call_established_with_complex_rejected_operation(void) {
|
||||||
|
|
||||||
|
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
|
||||||
|
LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc");
|
||||||
|
bool_t call_ok=FALSE;
|
||||||
|
LinphoneCallParams *params;
|
||||||
|
|
||||||
|
BC_ASSERT_TRUE((call_ok=call(pauline,marie)));
|
||||||
|
if (call_ok){
|
||||||
|
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1));
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1));
|
||||||
|
|
||||||
|
linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMU",8000,1),FALSE); /*disable PCMU*/
|
||||||
|
linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMA",8000,1),TRUE); /*enable PCMA*/
|
||||||
|
linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMU",8000,1),FALSE); /*disable PCMU*/
|
||||||
|
linphone_core_enable_payload_type(marie->lc,linphone_core_find_payload_type(marie->lc,"PCMA",8000,1),TRUE); /*enable PCMA*/
|
||||||
|
|
||||||
|
/*just to authenticate marie*/
|
||||||
|
linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),linphone_core_create_info_message(marie->lc));
|
||||||
|
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_inforeceived,1));
|
||||||
|
BC_ASSERT_EQUAL(pauline->stat.number_of_inforeceived,1, int, "%d");
|
||||||
|
/*to give time for 200ok to arrive*/
|
||||||
|
wait_for_until(marie->lc,pauline->lc,NULL,0,1000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
linphone_core_update_call( pauline->lc
|
||||||
|
,linphone_core_get_current_call(pauline->lc)
|
||||||
|
,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)));
|
||||||
|
|
||||||
|
|
||||||
|
linphone_core_update_call( marie->lc
|
||||||
|
,linphone_core_get_current_call(marie->lc)
|
||||||
|
,linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)));
|
||||||
|
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||||
|
|
||||||
|
BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d");
|
||||||
|
BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d");
|
||||||
|
|
||||||
|
check_call_state(pauline,LinphoneCallStreamsRunning);
|
||||||
|
check_call_state(marie,LinphoneCallStreamsRunning);
|
||||||
|
|
||||||
|
linphone_core_update_call( pauline->lc
|
||||||
|
,linphone_core_get_current_call(pauline->lc)
|
||||||
|
,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)));
|
||||||
|
|
||||||
|
|
||||||
|
linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),linphone_core_create_info_message(marie->lc));
|
||||||
|
|
||||||
|
|
||||||
|
/*by chance, UPDATES can be sent in // to invite, but drawback is that it will not be rejected with 491*/
|
||||||
|
params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc));
|
||||||
|
params->no_user_consent=TRUE;
|
||||||
|
linphone_core_update_call( marie->lc
|
||||||
|
,linphone_core_get_current_call(marie->lc)
|
||||||
|
,params);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
linphone_call_params_destroy(params);
|
||||||
|
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,3));
|
||||||
|
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,3));
|
||||||
|
|
||||||
|
BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d");
|
||||||
|
BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d");
|
||||||
|
|
||||||
|
|
||||||
|
/*just to sleep*/
|
||||||
|
linphone_core_terminate_all_calls(pauline->lc);
|
||||||
|
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
||||||
|
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1));
|
||||||
|
}
|
||||||
|
|
||||||
|
linphone_core_manager_destroy(marie);
|
||||||
|
linphone_core_manager_destroy(pauline);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void call_established_with_rejected_reinvite(void) {
|
static void call_established_with_rejected_reinvite(void) {
|
||||||
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
|
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
|
||||||
|
|
@ -4264,6 +4347,7 @@ test_t call_tests[] = {
|
||||||
{ "Call established with rejected RE-INVITE",call_established_with_rejected_reinvite},
|
{ "Call established with rejected RE-INVITE",call_established_with_rejected_reinvite},
|
||||||
{ "Call established with rejected incoming RE-INVITE", call_established_with_rejected_incoming_reinvite },
|
{ "Call established with rejected incoming RE-INVITE", call_established_with_rejected_incoming_reinvite },
|
||||||
{ "Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error},
|
{ "Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error},
|
||||||
|
{ "Call established with complex rejected operation",call_established_with_complex_rejected_operation},
|
||||||
{ "Call redirected by callee", call_redirect},
|
{ "Call redirected by callee", call_redirect},
|
||||||
{ "Call with specified codec bitrate", call_with_specified_codec_bitrate},
|
{ "Call with specified codec bitrate", call_with_specified_codec_bitrate},
|
||||||
{ "Call with in-dialog UPDATE request", call_with_in_dialog_update },
|
{ "Call with in-dialog UPDATE request", call_with_in_dialog_update },
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,6 @@ static const int audio_cmp_max_shift=20;
|
||||||
* this function return max value in the last 3 seconds*/
|
* this function return max value in the last 3 seconds*/
|
||||||
int linphone_core_manager_get_max_audio_down_bw(const LinphoneCoreManager *mgr);
|
int linphone_core_manager_get_max_audio_down_bw(const LinphoneCoreManager *mgr);
|
||||||
int linphone_core_manager_get_max_audio_up_bw(const LinphoneCoreManager *mgr);
|
int linphone_core_manager_get_max_audio_up_bw(const LinphoneCoreManager *mgr);
|
||||||
|
void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled);
|
||||||
#endif /* LIBLINPHONE_TESTER_H_ */
|
#endif /* LIBLINPHONE_TESTER_H_ */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue