Esempio n. 1
0
void print_statistics(int socktype, struct timeval start, struct timeval end, int total_bytes, int io) {
	int i;
	struct s_time_record *record;
	struct timeval tdiff, total_delay, avg_delay, sqrsum;// sdiv, tmp;
	int npackets = 0;
	double t_delay, t_avg, t_total;

	record = time_record_head.next;

	int last_seq = 1;
	struct s_seqlist *seqlist;

	total_delay.tv_sec = 0;
	total_delay.tv_usec = 0;
	sqrsum.tv_sec = 0;
	sqrsum.tv_usec = 0;

	while(record != NULL) {

		/*
		printf("%i ", record->seq);
		if(seqformat++ == 10) {
			printf("\n");
			seqformat = 0;
		}*/

		if(socktype == SOCK_DGRAM) {

			/* save potentially lost sequence numbers */
			for(i = last_seq + 1; i < record->seq; i++)
				insert_seq(i);

			/* saved sequence number found. Delete it from lost-seq-number list */
			if(last_seq > record->seq)
				delete_seq(record->seq);

			last_seq = record->seq;
		}



		tvsub(&tdiff, &(record->my_time), &(record->his_time)); /* delay */
		tvadd(&total_delay, &total_delay, &tdiff);	/* sum delay */


		npackets++;
		record = record->next;
	}

	avg_delay.tv_sec = total_delay.tv_sec / npackets;
	avg_delay.tv_usec = total_delay.tv_usec / npackets;

	/*
	//standard diviation:
	record = time_record_head.next;
	while(record != NULL) {
		tvsub(&tdiff, &(record->my_time), &(record->his_time)); //delay
		tvsub(&tmp, &tdiff, &avg_delay); // x1 - mü
		tvsqr(&tmp); // (x - mü)^2

		tvadd(&sdiv, &tmp);


		record = record->next;
	}*/

	tvsub(&tdiff, &end, &start);
	t_avg = tvtosec(&avg_delay);
	t_total = tvtosec(&tdiff);
	t_delay = tvtosec(&total_delay);

	printf("\n\nprinting statistics:\n" \
	       "--------------------------\n");
	printf("%i bytes received in %.2f seconds\n", total_bytes, t_total);
	printf("I/O calls: %i\n", io);
	printf("packets received: %i\n", npackets);
	printf("total delay: %.2f seconds\n", t_delay);
	printf("average delay: %f seconds\n", t_avg);

	/* printf("standard diviation: %ld seconds, %ld microseconds\n", sdiv.tv_sec / npackets,
							     sdiv.tv_usec / npackets); */



	/* print lost packets (only UDP) */
	if(socktype == SOCK_DGRAM) {

		seqlist = seqlist_head.next;
		if(seqlist == NULL)
			printf("No packet loss\n");
		else {
			int format = 0;
			int packetloss = 0;
			printf("\nPackets with the following sequence numbers are lost:\n\n");
			while(seqlist != NULL) {
				packetloss++;
				printf("%i ", seqlist->val);
				seqlist = seqlist->next;
				if(format++ == 10) {
					printf("\n");
					format = 0;
				}
			}
			printf("\n\nNumber of packets lost: %i\n", packetloss);

		}
	}
	printf("\n\n");

}
Esempio n. 2
0
/**********************************************************************
 *  Function  util_menu()
 *                                                                    
 *  Parameter:                                                       
 *   
 *                                                              
 *  This function is the backbone of the interface.  All file input/ouput
 *  happens here.  This is also where the user can key in their own string
 *  if desired.  Here the user can view, delete and list the available 
 *  sequences.
 *  
 *                                                                   
 **********************************************************************/
void util_menu()  
{
  int num_seqs, num_lines;

  while (1) {
    num_seqs = get_num_sequences();

    num_lines = 14;
    printf("\n**   String Utilites Menu    **\n\n");
    printf("1)  Read formatted file\n");
    printf("2)  Read unformatted file\n");
    printf("3)  Create new sequence\n");
    if (num_seqs == 0)
      printf("4)  List sequences (currently available: None)\n");
    else
      printf("4)  List sequences (currently available: 1 - %d)\n", num_seqs);
    printf("5)  Print sequence\n");
    printf("6)  Save sequences\n");
    printf("7)  Delete sequences\n");
    printf("8)  Set output options\n");
    printf("0)  Exit\n");
    printf("\nEnter Selection: ");

    while ((choice = my_getline(stdin, &ch_len)) == NULL) ;
    switch (choice[0]) {
    case '0':
      return;

    case '1':
      fread_formatted();
      break;

    case '2':
      fread_unformatted();
      break;

    case '3':
      type_in_seq();
      break;

    case '4':
      list_sequences(num_lines);
      break;

    case '5':
      print_seq(num_lines);
      break;    

    case '6':
      fwrite_formatted();      
      break;

    case '7':
      delete_seq();
      break;

    case '8':
      set_display_options();
      break;

    default:
      printf("\nThat is not a choice.\n");
    }
  }
}