You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kamailio/modules/debugger/debugger_act.c

149 lines
4.4 KiB

/**
* $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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#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];
}