res_pjsip: Fix infinite recursion when loading transports from realtime
Attempting to load a transport from realtime was forcing asterisk into an infinite recursion loop. The first thing transport_apply did was to do a sorcery retrieve by id for an existing transport of the same name. For files, this just returns the previous object from res_sorcery_config's internal container, if any. For realtime, the res_sourcery_realtime driver looks in the database and finds the existing row but now it has to rehydrate it into a sorcery object which means calling... transport_apply. And so it goes. The main issue with loading from realtime (apart from the loop) was that transport stores structures and pointers directly in the ast_sip_transport structure instead of the separate ast_transport_state structure. This patch separates those items into the ast_sip_transport_state structure. The pattern is roughly the same as res_pjsip_outbound_registration. Although all current usages of ast_sip_transport and ast_sip_transport_state were modified to use the new ast_sip_get_transport_state API, the original items are left in ast_sip_transport and kept updated to maintain ABI compatability for third-party modules. They are marked as deprecated and noted that they're now in ast_sip_transport_state. ASTERISK-25606 #close Reported-by: Martin Moučka Change-Id: Ic7a836ea8e786e8def51fe3f8cce855ea54f5f19
Showing
- include/asterisk/res_pjsip.h 113 additions, 25 deletionsinclude/asterisk/res_pjsip.h
- res/res_pjsip.c 7 additions, 5 deletionsres/res_pjsip.c
- res/res_pjsip/config_transport.c 558 additions, 145 deletionsres/res_pjsip/config_transport.c
- res/res_pjsip_endpoint_identifier_anonymous.c 11 additions, 9 deletionsres/res_pjsip_endpoint_identifier_anonymous.c
- res/res_pjsip_endpoint_identifier_user.c 12 additions, 10 deletionsres/res_pjsip_endpoint_identifier_user.c
- res/res_pjsip_multihomed.c 9 additions, 11 deletionsres/res_pjsip_multihomed.c
- res/res_pjsip_nat.c 25 additions, 14 deletionsres/res_pjsip_nat.c
- res/res_pjsip_outbound_registration.c 6 additions, 6 deletionsres/res_pjsip_outbound_registration.c
- res/res_pjsip_sdp_rtp.c 3 additions, 2 deletionsres/res_pjsip_sdp_rtp.c
- res/res_pjsip_session.c 3 additions, 2 deletionsres/res_pjsip_session.c
- res/res_pjsip_t38.c 3 additions, 2 deletionsres/res_pjsip_t38.c
- res/res_pjsip_transport_websocket.c 11 additions, 8 deletionsres/res_pjsip_transport_websocket.c
Loading
Please register or sign in to comment