/*! * \brief Output all dialogs via the MI interface * \param cmd_tree MI command tree * \param param unused * \return mi node with the dialog information, or NULL on failure */ struct mi_root * mi_print_dlgs(struct mi_root *cmd_tree, void *param ) { struct mi_root* rpl_tree= NULL; struct mi_node* rpl = NULL; struct dlg_cell* dlg = NULL; rpl_tree = process_mi_params( cmd_tree, &dlg); if (rpl_tree) /* param error */ return rpl_tree; rpl_tree = init_mi_tree( 200, MI_SSTR(MI_OK)); if (rpl_tree==0) return 0; rpl = &rpl_tree->node; if (dlg==NULL) { if ( internal_mi_print_dlgs(rpl,0)!=0 ) goto error; } else { if ( internal_mi_print_dlg(rpl,dlg,0)!=0 ) goto error; } return rpl_tree; error: free_mi_tree(rpl_tree); return NULL; }
struct mi_root * mi_print_dlgs_ctx(struct mi_root *cmd_tree, void *param ) { struct mi_root* rpl_tree= NULL; struct mi_node* rpl = NULL; struct dlg_cell* dlg = NULL; unsigned int idx,cnt; rpl_tree = process_mi_params( cmd_tree, &dlg, &idx, &cnt); if (rpl_tree) /* param error */ return rpl_tree; rpl_tree = init_mi_tree( 200, MI_SSTR(MI_OK)); if (rpl_tree==0) goto error; rpl = &rpl_tree->node; if (dlg==NULL) { if ( internal_mi_print_dlgs(rpl_tree, rpl, 1, idx, cnt)!=0 ) goto error; } else { if ( internal_mi_print_dlg(rpl,dlg,1)!=0 ) goto error; /* done with the dialog -> unlock it */ dlg_unlock_dlg(dlg); } return rpl_tree; error: /* if a dialog ref was returned, unlock it now */ if (dlg) dlg_unlock_dlg(dlg); /* trash everything that was built so far */ if (rpl_tree) free_mi_tree(rpl_tree); return NULL; }
/*! * \brief Terminate all or selected dialogs via the MI interface * \param cmd_tree MI command tree * \param param unused * \return mi node with the dialog information, or NULL on failure */ struct mi_root * mi_terminate_dlgs(struct mi_root *cmd_tree, void *param ) { struct mi_root* rpl_tree= NULL; struct dlg_cell* dlg = NULL; str headers = {0, 0}; rpl_tree = process_mi_params( cmd_tree, &dlg); if (rpl_tree) /* param error */ return rpl_tree; if (dlg==NULL) return init_mi_tree( 400, MI_SSTR(MI_MISSING_PARM)); rpl_tree = init_mi_tree( 200, MI_SSTR(MI_OK)); if (rpl_tree==0) return 0; if (dlg_bye_all(dlg, &headers)!=0) goto error; return rpl_tree; error: free_mi_tree(rpl_tree); return NULL; }