int main(int argc , char *argv[]) { /*just echo the prompt and wait for a line to be enterred in *then search the url as the key to find data * then output */ bstring url = NULL ; bstring route = NULL; check(argc == 2 , "usage: urlor <urlfile>"); TSTree *routes = load_routes(argv[1]); check(routes != NULL , "your route file has an errro."); while(1){ url = read_line("URL>"); check_debug(url != NULL , "goodbye"); route = match_url(routes , url); if(route) { printf("match %s == %s\n" , bdata(url) , bdata(route)); } else{ printf("fail;%s \n" , bdata(url)); } bdestroy(url); } destroy_routes(routes); return 0; error: destroy_routes(routes); return 1; }
int main(int argc, char *argv[]) { bstring url = NULL; bstring route = NULL; TSTree *routes = NULL; check(argc == 2, "USAGE: urlor <urlfile>"); routes = load_routes(argv[1]); check(routes != NULL, "Your route file has an error."); while (1) { url = read_line("URL> "); check_debug(url != NULL, "goodbye."); route = match_url(routes, url); if (route) { printf("MATCH: %s == %s\n", bdata(url), bdata(route)); } else { printf("FAIL: %s\n", bdata(url)); } bdestroy(url); } destroy_routes(routes); return 0; error: destroy_routes(routes); return 1; }
int main(int argc, char **argv) { struct packet { unsigned long word1; unsigned long word2; unsigned long word3; unsigned long src_addr; unsigned long dst_addr; unsigned char rest[8172]; }; int addrlen; int fd; int i; int n; struct packet packet; struct route *rp; struct sockaddr_in addr; if (argc >= 2) { load_routes(); dump_routes(); exit(0); } if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) halt("socket"); memset((char *) &addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(PORT); if (bind(fd, (struct sockaddr *) &addr, sizeof(addr))) halt("bind"); for (n = 0; n < 60; n++) { if (n != fd) close(n); } if (fork()) exit(0); setsid(); if (fork()) exit(0); load_routes(); for (;;) { addrlen = sizeof(addr); n = recvfrom(fd, (char *) &packet, sizeof(struct packet), 0, (struct sockaddr *) &addr, &addrlen); if (n < 20) continue; i = (int) (packet.src_addr & 0xff); for (rp = Routes[i]; rp && rp->a_addr != packet.src_addr; rp = rp->next) ; if (!rp) { rp = (struct route *) malloc(sizeof(struct route)); if (rp) { rp->a_addr = packet.src_addr; rp->i_addr = 0; rp->i_port = 0; rp->next = Routes[i]; Routes[i] = rp; } } if (rp && (rp->i_addr != addr.sin_addr.s_addr || rp->i_port != addr.sin_port)) { rp->i_addr = addr.sin_addr.s_addr; rp->i_port = addr.sin_port; save_routes(); } i = (int) (packet.dst_addr & 0xff); for (rp = Routes[i]; rp && rp->a_addr != packet.dst_addr; rp = rp->next) ; if (!rp) rp = find_subnet_route(packet.dst_addr); if (rp) { addr.sin_addr.s_addr = rp->i_addr; addr.sin_port = rp->i_port; sendto(fd, (char *) &packet, n, 0, (struct sockaddr *) &addr, sizeof(addr)); } } }