Advertisement
Guest User

b7ping

a guest
Nov 28th, 2014
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <oping.h>
  5.  
  6. #define NUM_COPS 100
  7.  
  8. int do_ping(const char *url, double *time)
  9. {
  10.    
  11.     double acum = 0.0, cur_time = 0.0;
  12.     int i, cops_fet = 0;
  13.     for (i = 0; i < NUM_COPS; i++) {
  14.    
  15.         pingobj_t *ping;
  16.         pingobj_iter_t *iter;
  17.  
  18.         if ((ping = ping_construct()) == NULL) {
  19.             fprintf(stderr, "ping_construct failed\n");
  20.             return -1;
  21.         }
  22.         printf("ping_construct() success\n");
  23.  
  24.         if (ping_host_add(ping, url) < 0) {
  25.             const char * errmsg = ping_get_error(ping);
  26.             fprintf(stderr, "ping_host_add(%s) failed. %s\n", url, errmsg);
  27.             return -1;
  28.         }
  29.         printf("ping_host_add() success\n");
  30.  
  31.         if (ping_send(ping) < 0) {
  32.             fprintf(stderr, "ping_send failed\n");
  33.             return -1;
  34.         }
  35.         printf("ping_send() success\n");
  36.    
  37.         for (iter = ping_iterator_get(ping); iter != NULL; iter =
  38.                 ping_iterator_next(iter)) {
  39.             char hostname[100];
  40.             double latency;
  41.             size_t len;
  42.  
  43.             printf("ping_iterator_get() success\n");
  44.             len = 100;
  45.             ping_iterator_get_info(iter, PING_INFO_HOSTNAME, hostname, &len);
  46.             len = sizeof(double);
  47.             ping_iterator_get_info(iter, PING_INFO_LATENCY, &latency, &len);
  48.            
  49.             cur_time = latency;
  50.             printf("hostname = %s, latency = %f\n", hostname, latency);
  51.         }
  52.        
  53.         if (cur_time > 0.0) {
  54.             cops_fet++;
  55.             acum += cur_time;
  56.         }
  57.         ping_destroy(ping);
  58.         usleep(1000);
  59.     }
  60.     *time = acum/cops_fet;
  61.    
  62.     printf("exiting...\n");
  63.     return 0;
  64. }
  65.  
  66. int main(int argc, char *argv[])
  67. {
  68.     if (argc < 3) {
  69.         printf("Usage:\n\t b7ping serverlist outfile\n");
  70.         return -1;
  71.     }
  72.  
  73.     FILE *fp_in, *fp_out;
  74.     char *line = NULL;
  75.     size_t len = 0;
  76.     ssize_t read;
  77.  
  78.     fp_in = fopen(argv[1], "r");
  79.     if (fp_in == NULL) {
  80.         printf("Error opening %s\n", argv[1]);
  81.         return-1;
  82.     }
  83.    
  84.     fp_out = fopen(argv[2], "w");
  85.     if (fp_in == NULL) {
  86.         printf("Error opening %s\n", argv[2]);
  87.         return-1;
  88.     }
  89.    
  90.     double time;
  91.    
  92.     while ((read = getline(&line, &len, fp_in)) != -1) {
  93.         line[strlen(line)-1] = '\0';
  94.         do_ping(line, &time);
  95.         fprintf(fp_out, "%s %f\n", line, time);
  96.         usleep(25*1000);
  97.     }
  98.    
  99.     fclose(fp_in);
  100.     fclose(fp_out);
  101.     if (line) free(line);
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement