Exemple #1
0
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;
}