@@ -2834,13 +2834,12 @@ static bencode_item_t *rtpe_function_call(bencode_buffer_t *bencbuf, struct sip_
28342834 str error ;
28352835 struct rtpe_node * node , * failed_node ;
28362836 char * cp , * err = NULL ;
2837- pv_value_t val ;
2837+ pv_value_t val , socket_val ;
28382838 struct rtpe_ignore_node * ignore_list = NULL ;
2839- int ret ;
2839+ int ret , forced_socket ;
28402840 memset (& ng_flags , 0 , sizeof (ng_flags ));
28412841 error .len = 0 ;
28422842 error .s = "" ;
2843- pv_value_t socket_val ;
28442843
28452844 /*** get & init basic stuff needed ***/
28462845 if (rtpe_function_call_prepare (bencbuf , msg , op , & ng_flags , flags_str , body_in , extra_dict ,& err ) < 0 )
@@ -2853,10 +2852,10 @@ static bencode_item_t *rtpe_function_call(bencode_buffer_t *bencbuf, struct sip_
28532852 }
28542853
28552854 /*** If the spvar "sock_var" has been specified, parse it into a (socket_val) STR variable ***/
2856- if ( spvar ) {
2857- memset ( & socket_val , 0 , sizeof ( pv_value_t ));
2855+ memset ( & socket_val , 0 , sizeof ( pv_value_t ));
2856+ if ( spvar )
28582857 pv_get_spec_value (msg , spvar , & socket_val );
2859- }
2858+ forced_socket = socket_val . rs . len > 0 ;
28602859
28612860 failed_node = NULL ;
28622861
@@ -2873,16 +2872,23 @@ static bencode_item_t *rtpe_function_call(bencode_buffer_t *bencbuf, struct sip_
28732872 if (spvar && (socket_val .rs .len > 0 )) {
28742873 LM_DBG ("Sending command [%d] to RTPEngine socket: [%.*s] set id: [%d]\n" , op , (int )(socket_val .rs .len ), (char * )(socket_val .rs .s ), set -> id_set );
28752874 node = lookup_rtpe_node (set , & socket_val .rs );
2876- if (node == NULL ) {
2877- RTPE_STOP_READ ();
2878- goto error ;
2875+ socket_val .rs .s = NULL ;
2876+ socket_val .rs .len = 0 ;
2877+ if (node && ((node -> rn_disabled = rtpe_test (node , node -> rn_disabled , 0 )) ||
2878+ rtpe_is_ignore_node (ignore_list , node ))) {
2879+ LM_DBG ("RTPEngine socket [%.*s] is not available\n" ,
2880+ node -> rn_url .len , node -> rn_url .s );
2881+ node = NULL ;
28792882 }
28802883
2884+ if (node == NULL && op == OP_OFFER )
2885+ node = select_rtpe_node (ng_flags .call_id , set , ignore_list );
2886+ } else if (forced_socket && op != OP_OFFER ) {
2887+ node = NULL ;
28812888 } else if (snode && snode -> s ) {
28822889 if ((node = get_rtpe_node (snode , set )) == NULL && op == OP_OFFER )
28832890 node = select_rtpe_node (ng_flags .call_id , set , ignore_list );
28842891 snode = NULL ;
2885-
28862892 } else {
28872893 node = select_rtpe_node (ng_flags .call_id , set , ignore_list );
28882894 }
@@ -5030,6 +5036,7 @@ static int rtpengine_api_offer(struct rtp_relay_session *sess,
50305036 fill_rtpengine_node (server , & val .rs );
50315037 else
50325038 LM_ERR ("could not retrieve the value of the used rtpengine!\n" );
5039+ pv_set_value (NULL , & media_pvar , EQ_T , NULL );
50335040 }
50345041 return ret ;
50355042}
0 commit comments