コード例 #1
0
void print_expr(struct expr* exp)
{
    if (exp==0) {
        LOG(L_CRIT, "ERROR: print_expr: null expression!\n");
        return;
    }
    if (exp->type==ELEM_T) {
        switch(exp->l.operand) {
        case METHOD_O:
            DBG("method");
            break;
        case URI_O:
            DBG("uri");
            break;
        case SRCIP_O:
            DBG("srcip");
            break;
        case SRCPORT_O:
            DBG("srcport");
            break;
        case DSTIP_O:
            DBG("dstip");
            break;
        case NUMBER_O:
            break;
        case ACTION_O:
            print_action((struct action*) exp->r.param);
            break;
        default:
            DBG("UNKNOWN");
        }
        switch(exp->op) {
        case EQUAL_OP:
            DBG("==");
            break;
        case MATCH_OP:
            DBG("=~");
            break;
        case NO_OP:
            break;
        default:
            DBG("<UNKNOWN>");
        }
        switch(exp->subtype) {
        case NOSUBTYPE:
            DBG("N/A");
            break;
        case STRING_ST:
            DBG("\"%s\"", (char*)exp->r.param);
            break;
        case NET_ST:
            print_net((struct net*)exp->r.param);
            break;
        case IP_ST:
            print_ip("", (struct ip_addr*)exp->r.param, "");
            break;
        case ACTIONS_ST:
            print_action((struct action*)exp->r.param);
            break;
        case NUMBER_ST:
            DBG("%d",exp->r.intval);
            break;
        case MYSELF_ST:
            DBG("_myself_");
            break;
        default:
            DBG("type<%d>", exp->subtype);
        }
    } else if (exp->type==EXP_T) {
        switch(exp->op) {
        case AND_OP:
            DBG("AND( ");
            print_expr(exp->l.expr);
            DBG(", ");
            print_expr(exp->r.expr);
            DBG(" )");
            break;
        case OR_OP:
            DBG("OR( ");
            print_expr(exp->l.expr);
            DBG(", ");
            print_expr(exp->r.expr);
            DBG(" )");
            break;
        case NOT_OP:
            DBG("NOT( ");
            print_expr(exp->l.expr);
            DBG(" )");
            break;
        default:
            DBG("UNKNOWN_EXP ");
        }

    } else {
        DBG("ERROR:print_expr: unknown type\n");
    }
}
コード例 #2
0
ファイル: route_struct.c プロジェクト: 4N7HR4X/kamailio
void print_expr(struct expr* exp)
{
	if (exp==0){
		LM_CRIT("null expression!\n");
		return;
	}
	if (exp->type==ELEM_T){
		switch(exp->l_type){
			case METHOD_O:
				DBG("method");
				break;
			case URI_O:
				DBG("uri");
				break;
			case FROM_URI_O:
				DBG("from_uri");
				break;
			case TO_URI_O:
				DBG("to_uri");
				break;
			case SRCIP_O:
				DBG("srcip");
				break;
			case SRCPORT_O:
				DBG("srcport");
				break;
			case DSTIP_O:
				DBG("dstip");
				break;
			case DSTPORT_O:
				DBG("dstport");
				break;
			case PROTO_O:
				DBG("proto");
				break;
			case AF_O:
				DBG("af");
				break;
			case MSGLEN_O:
				DBG("msglen");
				break;
			case ACTION_O:
				break;
			case NUMBER_O:
				break;
			case AVP_O:
				DBG("avp");
				break;
			case SNDIP_O:
				DBG("sndip");
				break;
			case SNDPORT_O:
				DBG("sndport");
				break;
			case TOIP_O:
				DBG("toip");
				break;
			case TOPORT_O:
				DBG("toport");
				break;
			case SNDPROTO_O:
				DBG("sndproto");
				break;
			case SNDAF_O:
				DBG("sndaf");
				break;
			case RETCODE_O:
				DBG("retcode");
				break;
			case SELECT_O:
				DBG("select");
				break;
			case RVEXP_O:
				DBG("rval");
				break;

			default:
				DBG("UNKNOWN");
		}
		switch(exp->op){
			case EQUAL_OP:
				DBG("==");
				break;
			case MATCH_OP:
				DBG("=~");
				break;
			case NO_OP:
				break;
			case GT_OP:
				DBG(">");
				break;
			case GTE_OP:
				DBG(">=");
				break;
			case LT_OP:
				DBG("<");
				break;
			case LTE_OP:
				DBG("<=");
				break;
			case DIFF_OP:
				DBG("!=");
				break;
			default:
				DBG("<UNKNOWN>");
		}
		switch(exp->r_type){
			case NOSUBTYPE:
					DBG("N/A");
					break;
			case STRING_ST:
					DBG("\"%s\"", ZSW((char*)exp->r.param));
					break;
			case NET_ST:
					print_net((struct net*)exp->r.param);
					break;
			case IP_ST:
					print_ip("", (struct ip_addr*)exp->r.param, "");
					break;
			case ACTIONS_ST:
					print_actions((struct action*)exp->r.param);
					break;
			case NUMBER_ST:
					DBG("%ld",exp->r.numval);
					break;
			case MYSELF_ST:
					DBG("_myself_");
					break;
		        case AVP_ST:
				        DBG("attr");
			 	        break;
		        case SELECT_ST:
				        DBG("select");
				        break;
			default:
					DBG("type<%d>", exp->r_type);
		}
	}else if (exp->type==EXP_T){
		switch(exp->op){
			case LOGAND_OP:
					DBG("AND( ");
					print_expr(exp->l.expr);
					DBG(", ");
					print_expr(exp->r.expr);
					DBG(" )");
					break;
			case LOGOR_OP:
					DBG("OR( ");
					print_expr(exp->l.expr);
					DBG(", ");
					print_expr(exp->r.expr);
					DBG(" )");
					break;
			case NOT_OP:
					DBG("NOT( ");
					print_expr(exp->l.expr);
					DBG(" )");
					break;
			default:
					DBG("UNKNOWN_EXP ");
		}

	}else{
		DBG("ERROR:print_expr: unknown type\n");
	}
}
コード例 #3
0
ファイル: route_struct.c プロジェクト: Drooids/openser-xmlrpc
void print_expr(struct expr* exp)
{
	if (exp==0){
		LM_CRIT("null expression!\n");
		return;
	}
	if (exp->type==ELEM_T){
		switch(exp->left.type){
			case METHOD_O:
				LM_DBG("method");
				break;
			case URI_O:
				LM_DBG("uri");
				break;
			case FROM_URI_O:
				LM_DBG("from_uri");
				break;
			case TO_URI_O:
				LM_DBG("to_uri");
				break;
			case SRCIP_O:
				LM_DBG("srcip");
				break;
			case SRCPORT_O:
				LM_DBG("srcport");
				break;
			case DSTIP_O:
				LM_DBG("dstip");
				break;
			case DSTPORT_O:
				LM_DBG("dstport");
				break;
			case SCRIPTVAR_O:
				LM_DBG("scriptvar[%d]",
					(exp->left.v.spec)?exp->left.v.spec->type:0);
				break;
			case NUMBER_O:
			case NUMBERV_O:
				LM_DBG("%d",exp->left.v.n);
				break;
			case STRINGV_O:
				LM_DBG("\"%s\"", ZSW((char*)exp->left.v.data));
				break;
			case ACTION_O:
				break;
			case EXPR_O:
				print_expr((struct expr*)exp->left.v.data);
				break;
			default:
				LM_DBG("UNKNOWN[%d]", exp->left.type);
		}
		switch(exp->op){
			case EQUAL_OP:
				LM_DBG("==");
				break;
			case MATCHD_OP:
			case MATCH_OP:
				LM_DBG("=~");
				break;
			case NOTMATCHD_OP:
			case NOTMATCH_OP:
				LM_DBG("!~");
				break;
			case GT_OP:
				LM_DBG(">");
				break;
			case GTE_OP:
				LM_DBG(">=");
				break;
			case LT_OP:
				LM_DBG("<");
				break;
			case LTE_OP:
				LM_DBG("<=");
				break;
			case DIFF_OP:
				LM_DBG("!=");
				break;
			case PLUS_OP:
				LM_DBG("+");
				break;
			case MINUS_OP:
				LM_DBG("-");
				break;
			case DIV_OP:
				LM_DBG("/");
				break;
			case MULT_OP:
				LM_DBG("*");
				break;
			case MODULO_OP:
				LM_DBG(" mod ");
				break;
			case BAND_OP:
				LM_DBG("&");
				break;
			case BOR_OP:
				LM_DBG("|");
				break;
			case BXOR_OP:
				LM_DBG("^");
				break;
			case BNOT_OP:
				LM_DBG("~");
				break;
			case VALUE_OP:
			case NO_OP:
				break;
			default:
				LM_DBG("<UNKNOWN[%d]>", exp->op);
		}
		switch(exp->right.type){
			case NOSUBTYPE: 
					/* LM_DBG("N/A"); */
					break;
			case STRING_ST:
					LM_DBG("\"%s\"", ZSW((char*)exp->right.v.data));
					break;
			case NET_ST:
					print_net((struct net*)exp->right.v.data);
					break;
			case IP_ST:
					print_ip("", (struct ip_addr*)exp->right.v.data, "");
					break;
			case ACTIONS_ST:
					print_actions((struct action*)exp->right.v.data);
					break;
			case NUMBER_ST:
					LM_DBG("%d",exp->right.v.n);
					break;
			case MYSELF_ST:
					LM_DBG("_myself_");
					break;
			case SCRIPTVAR_ST:
					LM_DBG("scriptvar[%d]", exp->right.v.spec->type);
					break;
			case NULLV_ST:
					LM_DBG("null");
					break;
			case EXPR_ST:
					print_expr((struct expr*)exp->right.v.data);
					break;
			default:
					LM_DBG("type<%d>", exp->right.type);
		}
	}else if (exp->type==EXP_T){
		switch(exp->op){
			case AND_OP:
					LM_DBG("AND( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case OR_OP:
					LM_DBG("OR( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case NOT_OP:	
					LM_DBG("NOT( ");
					print_expr(exp->left.v.expr);
					LM_DBG(" )");
					break;
			case EVAL_OP:
					LM_DBG("EVAL( ");
					print_expr(exp->left.v.expr);
					LM_DBG(" )");
					break;
			case PLUS_OP:
					LM_DBG("PLUS( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case MINUS_OP:
					LM_DBG("MINUS( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case DIV_OP:
					LM_DBG("DIV( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case MULT_OP:
					LM_DBG("MULT( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case MODULO_OP:
					LM_DBG("MODULO( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case BAND_OP:
					LM_DBG("BAND( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case BOR_OP:
					LM_DBG("BOR( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case BXOR_OP:
					LM_DBG("BXOR( ");
					print_expr(exp->left.v.expr);
					LM_DBG(", ");
					print_expr(exp->right.v.expr);
					LM_DBG(" )");
					break;
			case BNOT_OP:
					LM_DBG("BNOT( ");
					print_expr(exp->left.v.expr);
					LM_DBG(" )");
					break;
			default:
					LM_DBG("UNKNOWN_EXP[%d] ", exp->op);
		}
					
	}else{
		LM_ERR("unknown type\n");
	}
}