예제 #1
0
static struct mi_root* mi_set_dbg_mod_level(struct mi_root *cmd_tree, void *param) {
    struct mi_node *node;
    str mod_str, level_str;
    int l;

    /* get first param */
    node = cmd_tree->node.kids;
    if (node == NULL) {
        return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);
    }

    if (node->value.s == NULL || node->value.len == 0) {
        return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN);
    }

    /* get module str */
    mod_str = node->value;

    /* get second param */
    node = node->next;
    if (node == NULL) {
        return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);
    }

    if (node->value.s == NULL || node->value.len == 0) {
        return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN);
    }

    /* get level str */
    level_str = node->value;

    /* no further params expected */
    node = node->next;
    if (node != NULL) {
        return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);
    }

    /* get level int */
    if (str2sint(&level_str, &l) < 0) {
        LM_ERR("invalid parameter - level value: %.*s\n",
               level_str.len, level_str.s);
        return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN);
    }

    /* set level int */
    if (default_dbg_cfg.mod_hash_size <= 0 || default_dbg_cfg.mod_level_mode <= 0) {
        LM_ERR("can't set level for module=%.*s; enable mod_hash_size and mod_level_mode config parameters!\n",
               mod_str.len, mod_str.s);
        return init_mi_tree(500, MI_INTERNAL_ERR_S, MI_INTERNAL_ERR_LEN);
    } else if (dbg_set_mod_debug_level(mod_str.s, mod_str.len, &l) < 0) {
        LM_ERR("failed set level for module=%.*s\n", mod_str.len, mod_str.s);
        return init_mi_tree(500, MI_INTERNAL_ERR_S, MI_INTERNAL_ERR_LEN);
    } else {
        LM_DBG("module=%.*s level_str=%.*s level_int=%d\n",
               mod_str.len, mod_str.s, level_str.len, level_str.s, l);
    }

    return init_mi_tree(200, MI_OK_S, MI_OK_LEN);
}
예제 #2
0
static int dbg_mod_level_param(modparam_t type, void *val)
{
	char *p;
	str s;
	int l;
	if(val==NULL)
		return -1;

	p = strchr((char*)val, '=');
	if(p==NULL) {
		LM_ERR("invalid parameter value: %s\n", (char*)val);
		return -1;
	}
	s.s = p + 1;
	s.len = strlen(s.s);

	if(str2sint(&s, &l)<0) {
		LM_ERR("invalid parameter - level value: %s\n", (char*)val);
		return -1;
	}
	s.s = (char*)val;
	s.len = p - s.s;

	if (!dbg_cfg) {
		return -1;
	}

	LM_DBG("cfg level_mode:%d hash_size:%d\n",
		cfg_get(dbg, dbg_cfg, mod_level_mode),
		cfg_get(dbg, dbg_cfg, mod_hash_size));

	if(dbg_init_mod_levels(cfg_get(dbg, dbg_cfg, mod_hash_size))<0)
	{
		LM_ERR("failed to init per module log level\n");
		return -1;
	}

	if(dbg_set_mod_debug_level(s.s, s.len, &l)<0)
	{
		LM_ERR("cannot store parameter: %s\n", (char*)val);
		return -1;
	}

	return 0;

}
예제 #3
0
static void dbg_rpc_mod_level(rpc_t* rpc, void* ctx){
	int l;
	str value = {0,0};

	if (rpc->scan(ctx, "Sd", &value, &l) < 1)
	{
		rpc->fault(ctx, 500, "invalid parameters");
		return;
	}

	if(dbg_set_mod_debug_level(value.s, value.len, &l)<0)
	{
		rpc->fault(ctx, 500, "cannot store parameter\n");
		return;
	}
	rpc->add(ctx, "s", "200 ok");
}