@ -43,6 +43,7 @@ struct iterator_helper {
struct stream_fd * ports [ 0x10000 ] ;
} ;
struct xmlrpc_helper {
enum xmlrpc_format fmt ;
GStringChunk * c ;
char * url ;
GSList * tags ;
@ -992,8 +993,16 @@ retry:
goto fault ;
r = NULL ;
xmlrpc_client_call2f ( & e , c , xh - > url , " di " , & r , " (ssss) " ,
" sbc " , " postControlCmd " , tag - > s , " teardown " ) ;
switch ( xh - > fmt ) {
case XF_SEMS :
xmlrpc_client_call2f ( & e , c , xh - > url , " di " , & r , " (ssss) " ,
" sbc " , " postControlCmd " , tag - > s , " teardown " ) ;
break ;
case XF_CALLID :
xmlrpc_client_call2f ( & e , c , xh - > url , " teardown " , & r , " (s) " , tag - > s ) ;
break ;
}
if ( r )
xmlrpc_DECREF ( r ) ;
if ( e . fault_occurred )
@ -1032,6 +1041,7 @@ void kill_calls_timer(GSList *list, struct callmaster *m) {
xh - > c = g_string_chunk_new ( 64 ) ;
xh - > url = g_string_chunk_insert ( xh - > c , url ) ;
xh - > tags = NULL ;
xh - > fmt = m - > conf . fmt ;
}
while ( list ) {
@ -1042,13 +1052,18 @@ void kill_calls_timer(GSList *list, struct callmaster *m) {
rwlock_lock_r ( & ca - > master_lock ) ;
for ( csl = ca - > monologues ; csl ; csl = csl - > next ) {
cm = csl - > data ;
if ( ! cm - > tag . s | | ! cm - > tag . len )
goto next ;
xh - > tags = g_slist_prepend ( xh - > tags , str_chunk_insert ( xh - > c , & cm - > tag ) ) ;
next :
;
switch ( m - > conf . fmt ) {
case XF_SEMS :
for ( csl = ca - > monologues ; csl ; csl = csl - > next ) {
cm = csl - > data ;
if ( cm - > tag . s & & cm - > tag . len ) {
xh - > tags = g_slist_prepend ( xh - > tags , str_chunk_insert ( xh - > c , & cm - > tag ) ) ;
}
}
break ;
case XF_CALLID :
xh - > tags = g_slist_prepend ( xh - > tags , str_chunk_insert ( xh - > c , & ca - > callid ) ) ;
break ;
}
rwlock_unlock_r ( & ca - > master_lock ) ;