Example #1
0
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;
}
Example #2
0
 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;
 }
Example #3
0
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));
    }
  }
}