@ -4731,7 +4731,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
int codec ;
int destiterator = 0 ;
int iterator ;
int sendonly = 0 ;
int sendonly = - 1 ;
int numberofports ;
struct ast_rtp * newaudiortp , * newvideortp ; /* Buffers for codec handling */
int newjointcapability ; /* Negotiated capability */
@ -4965,12 +4965,15 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
continue ;
}
if ( ! strcasecmp ( a , " sendonly " ) ) {
if ( sendonly = = - 1 )
sendonly = 1 ;
continue ;
} else if ( ! strcasecmp ( a , " inactive " ) ) {
if ( sendonly = = - 1 )
sendonly = 2 ;
continue ;
} else if ( ! strcasecmp ( a , " sendrecv " ) ) {
if ( sendonly = = - 1 )
sendonly = 0 ;
continue ;
} else if ( strlen ( a ) > 5 & & ! strncasecmp ( a , " ptime " , 5 ) ) {
@ -5227,7 +5230,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
ast_set_write_format ( p - > owner , p - > owner - > writeformat ) ;
}
if ( sin . sin_addr . s_addr & & ! sendonly ) {
if ( sin . sin_addr . s_addr & & ( ! sendonly | | sendonly = = - 1 ) ) {
ast_queue_control ( p - > owner , AST_CONTROL_UNHOLD ) ;
/* Activate a re-invite */
ast_queue_frame ( p - > owner , & ast_null_frame ) ;
@ -5243,7 +5246,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
}
/* Manager Hold and Unhold events must be generated, if necessary */
if ( sin . sin_addr . s_addr & & ! sendonly ) {
if ( sin . sin_addr . s_addr & & ( ! sendonly | | sendonly = = - 1 ) ) {
if ( ast_test_flag ( & p - > flags [ 1 ] , SIP_PAGE2_CALL_ONHOLD ) ) {
append_history ( p , " Unhold " , " %s " , req - > data ) ;
if ( global_callevents )