int cpl_run_script( struct cpl_interpreter *intr ) { char *new_ip; do { check_overflow_by_offset( SIMPLE_NODE_SIZE(intr->ip), intr, error); switch ( NODE_TYPE(intr->ip) ) { case CPL_NODE: LM_DBG("processing CPL node \n"); new_ip = run_cpl_node( intr ); /*UPDATED&TESTED*/ break; case ADDRESS_SWITCH_NODE: LM_DBG("processing address-switch node\n"); new_ip = run_address_switch( intr ); /*UPDATED&TESTED*/ break; case STRING_SWITCH_NODE: LM_DBG("processing string-switch node\n"); new_ip = run_string_switch( intr ); /*UPDATED&TESTED*/ break; case PRIORITY_SWITCH_NODE: LM_DBG("processing priority-switch node\n"); new_ip = run_priority_switch( intr ); /*UPDATED&TESTED*/ break; case TIME_SWITCH_NODE: LM_DBG("processing time-switch node\n"); new_ip = run_time_switch( intr ); /*UPDATED&TESTED*/ break; case LANGUAGE_SWITCH_NODE: LM_DBG("processing language-switch node\n"); new_ip = run_language_switch( intr ); /*UPDATED&TESTED*/ break; case LOOKUP_NODE: LM_DBG("processing lookup node\n"); new_ip = run_lookup( intr ); /*UPDATED&TESTED*/ break; case LOCATION_NODE: LM_DBG("processing location node\n"); new_ip = run_location( intr ); /*UPDATED&TESTED*/ break; case REMOVE_LOCATION_NODE: LM_DBG("processing remove_location node\n"); new_ip = run_remove_location( intr ); /*UPDATED&TESTED*/ break; case PROXY_NODE: LM_DBG("processing proxy node\n"); new_ip = run_proxy( intr );/*UPDATED&TESTED*/ break; case REJECT_NODE: LM_DBG("processing reject node\n"); new_ip = run_reject( intr ); /*UPDATED&TESTED*/ break; case REDIRECT_NODE: LM_DBG("processing redirect node\n"); new_ip = run_redirect( intr ); /*UPDATED&TESTED*/ break; case LOG_NODE: LM_DBG("processing log node\n"); new_ip = run_log( intr ); /*UPDATED&TESTED*/ break; case MAIL_NODE: LM_DBG("processing mail node\n"); new_ip = run_mail( intr ); /*UPDATED&TESTED*/ break; case SUB_NODE: LM_DBG("processing sub node\n"); new_ip = run_sub( intr ); /*UPDATED&TESTED*/ break; default: LM_ERR("unknown type node (%d)\n", NODE_TYPE(intr->ip)); goto error; } if (new_ip==CPL_RUNTIME_ERROR) { LM_ERR("runtime error\n"); return SCRIPT_RUN_ERROR; } else if (new_ip==CPL_SCRIPT_ERROR) { LM_ERR("script error\n"); return SCRIPT_FORMAT_ERROR; } else if (new_ip==DEFAULT_ACTION) { LM_DBG("running default action\n"); return run_default(intr); } else if (new_ip==EO_SCRIPT) { LM_DBG("script interpretation done!\n"); return SCRIPT_END; } else if (new_ip==CPL_TO_CONTINUE) { LM_DBG("done for the moment; waiting after signaling!\n"); return SCRIPT_TO_BE_CONTINUED; } /* move to the new instruction */ intr->ip = new_ip; }while(1); error: return SCRIPT_FORMAT_ERROR; }
int main (int argc, char **argv) { int c, errflg = 0; char *in, *out; Dbptr dbin, dbout; char aline[STRSZ]; int verbose = 0; char *pfname, *error; long orid ; int nostdin=0 ; pfname=strdup("dbgenloc"); elog_init (argc, argv); elog_set ( ELOG_MAXMSG, -1, 0 ) ; while ((c = getopt (argc, argv, "hnp:vV")) != -1) { switch (c) { case 'h': usage (); break ; case 'n': nostdin = 1; break ; case 'p': pfname = optarg ; break ; case 'v': verbose = 1; break; case 'V': cbanner("$Revision$ $Date$\n", "dbgenloc input-db output-db", "Gary Pavlis", "Indiana University", "*****@*****.**"); exit (0); default: errflg++; } } if (errflg || argc - optind != 2) usage (); in = argv[optind++]; if (dbopen (in, "r+", &dbin)) die (1, "Can't open input database %s\n", in); out = argv[optind++]; if (dbopen (out, "r+", &dbout)) die (1, "Unable to open output database %s\n", out); while (nostdin || gets (aline)) { switch (run_location (dbin, dbout, pfname, &orid, &error)) { case 0: printf ("location_solution: new origin %ld\n", orid); break; default: printf ("location_solution: no_solution : %s\n", error); break; } fflush (stdout); elog_flush (1, 0) ; if ( nostdin ) break; } return 0; }