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"); } }
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"); } }
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"); } }