@@ -940,12 +940,12 @@ static int nua_session_client_response(nua_client_request_t *cr,
940
940
char const * received = NULL ;
941
941
942
942
#define LOG3 (m ) \
943
- SU_DEBUG_3(("nua(%p): %s: %s %s in %u %s\n", \
943
+ SU_DEBUG_3(("nua(%p): %s: %s %s in %u %s (%u) \n", \
944
944
(void *)nh, cr->cr_method_name, (m), \
945
- received ? received : "SDP", status, phrase))
945
+ received ? received : "SDP", status, phrase, cr->cr_answer_recv ))
946
946
#define LOG5 (m ) \
947
- SU_DEBUG_5(("nua(%p): %s: %s %s in %u %s\n", \
948
- (void *)nh, cr->cr_method_name, (m), received, status, phrase))
947
+ SU_DEBUG_5(("nua(%p): %s: %s %s in %u %s (%u) \n", \
948
+ (void *)nh, cr->cr_method_name, (m), received, status, phrase, cr->cr_answer_recv ))
949
949
950
950
retry :
951
951
@@ -954,12 +954,16 @@ static int nua_session_client_response(nua_client_request_t *cr,
954
954
else if (!session_get_description (sip , & sdp , & len ))
955
955
/* No SDP */ ;
956
956
else if (cr -> cr_answer_recv ) {
957
- /* Ignore spurious answers after completing O/A */
958
- //LOG3("ignoring duplicate");
959
- //sdp = NULL;
960
- // we need to make sure its *actually* a dup, so we can't assume for now.
961
- cr -> cr_answer_recv = 0 ;
962
- goto retry ;
957
+ if (cr -> cr_answer_recv > status ) {
958
+ LOG3 ("status is older than previous answer, ignoring" );
959
+ sdp = NULL ;
960
+ return 0 ;
961
+ } else {
962
+ // we need to make sure its *actually* a dup, so we can't assume for now.
963
+ LOG3 ("multiple answers received, processing" );
964
+ cr -> cr_answer_recv = 0 ;
965
+ goto retry ;
966
+ }
963
967
}
964
968
else if (cr -> cr_offer_sent ) {
965
969
/* case 1: answer to our offer */
0 commit comments