/** * $Id$ * * Copyright (C) 2010 Daniel-Constantin Mierla (asipto.com) * * This file is part of Kamailio, a free SIP server. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version * * This file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include "../../dprint.h" #include "../../sr_module.h" #include "debugger_act.h" typedef struct _dbg_action { int type; str name; } dbg_action_t; static str _dbg_action_special[] = { str_init("unknown"), /* 0 */ str_init("exit"), /* 1 */ str_init("drop"), /* 2 */ str_init("return"), /* 3 */ {0, 0} }; static dbg_action_t _dbg_action_list[] = { { FORWARD_T, str_init("forward") }, { SEND_T, str_init("send") }, { LOG_T, str_init("log") }, { ERROR_T, str_init("error") }, { ROUTE_T, str_init("route") }, { EXEC_T, str_init("exec") }, { SET_HOST_T, str_init("sethost") }, { SET_HOSTPORT_T, str_init("sethostport") }, { SET_USER_T, str_init("setuser") }, { SET_USERPASS_T, str_init("setuserpass") }, { SET_PORT_T, str_init("setport") }, { SET_URI_T, str_init("seturi") }, { SET_HOSTPORTTRANS_T, str_init("sethostporttrans") }, { SET_HOSTALL_T, str_init("sethostall") }, { SET_USERPHONE_T, str_init("setuserphone") }, { IF_T, str_init("if") }, { SWITCH_T, str_init("switch") }, { BLOCK_T, str_init("block") }, { EVAL_T, str_init("eval") }, { SWITCH_JT_T, str_init("switch") }, { SWITCH_COND_T, str_init("switch") }, { MATCH_COND_T, str_init("case") }, { WHILE_T, str_init("while") }, { SETFLAG_T, str_init("setflag") }, { RESETFLAG_T, str_init("resetflag") }, { ISFLAGSET_T, str_init("isflagset") }, { AVPFLAG_OPER_T, str_init("avpflag") }, { LEN_GT_T, str_init("lengt") }, { PREFIX_T, str_init("prefix") }, { STRIP_T, str_init("strip") }, { STRIP_TAIL_T, str_init("striptail") }, { APPEND_BRANCH_T, str_init("append_branch") }, { REVERT_URI_T, str_init("reverturi") }, { FORWARD_TCP_T, str_init("forward_tcp") }, { FORWARD_UDP_T, str_init("forward_udp") }, { FORWARD_TLS_T, str_init("forward_tls") }, { FORWARD_SCTP_T, str_init("forward_sctp") }, { SEND_TCP_T, str_init("send_tcp") }, { FORCE_RPORT_T, str_init("force_rport") }, { ADD_LOCAL_RPORT_T, str_init("add_local_rport") }, { SET_ADV_ADDR_T, str_init("set_adv_addr") }, { SET_ADV_PORT_T, str_init("set_adv_port") }, { FORCE_TCP_ALIAS_T, str_init("force_tcp_alias") }, { LOAD_AVP_T, str_init("load_avp") }, { AVP_TO_URI_T, str_init("avp_to_uri") }, { FORCE_SEND_SOCKET_T, str_init("force_send_socket") }, { ASSIGN_T, str_init("assign") }, { ADD_T, str_init("add") }, { UDP_MTU_TRY_PROTO_T, str_init("udp_mtu_try_proto") }, { SET_FWD_NO_CONNECT_T, str_init("set_fwd_no_connect") }, { SET_RPL_NO_CONNECT_T, str_init("set_rpl_no_connect") }, { SET_FWD_CLOSE_T, str_init("set_fwd_close") }, { SET_RPL_CLOSE_T, str_init("set_rpl_close") }, { 0, {0, 0} } }; str* dbg_get_action_name(struct action *a) { int i; static str aname; cmd_export_common_t *cmd; if(a==NULL) return &_dbg_action_special[0]; switch(a->type) { case DROP_T: if(a->val[1].u.number&DROP_R_F) return &_dbg_action_special[2]; if(a->val[1].u.number&RETURN_R_F) return &_dbg_action_special[3]; return &_dbg_action_special[1]; case MODULE0_T: case MODULE1_T: case MODULE2_T: case MODULE3_T: case MODULE4_T: case MODULE5_T: case MODULE6_T: case MODULEX_T: case MODULE1_RVE_T: case MODULE2_RVE_T: case MODULE3_RVE_T: case MODULE4_RVE_T: case MODULE5_RVE_T: case MODULE6_RVE_T: case MODULEX_RVE_T: cmd = (cmd_export_common_t*)(a->val[0].u.data); aname.s = cmd->name; aname.len = strlen(aname.s); return &aname; default: for(i=0; _dbg_action_list[i].type!=0; i++) { if(_dbg_action_list[i].type==a->type) return &_dbg_action_list[i].name; } } return &_dbg_action_special[0]; }