/******************************************************************************/ /************************** MM-Prot *******************************************/ /******************************************************************************/ #define STRLEN 256 #define TAG_LEN 6 #define ALPHA 0.3 #define MIN(x,y) ((x)<(y))?(x):(y) typedef struct mm_client { struct sockaddr_in client; char hostname[STRLEN]; //convenience int port; //detto char file[STRLEN]; FILE *fp; long fpos; long rate; //byte per second long usecs; //how long did the last rate-serve take? long avg_usecs; struct mm_client *prev; struct mm_client *next; } mm_client; typedef struct mm_stats { float avg_bytes_per_usec; long sum_usecs; long avg_sum_usecs; long sum_bytes; int num_clients; long remaining_time; long adjust; long avg_adjust; long algo_time; long cycles; long working_time; long sum_working_time; } mm_stats; typedef struct header_tag { char tag[TAG_LEN]; } header_tag; typedef struct hello_pkt { char tag[TAG_LEN]; char file[STRLEN]; long fpos; long rate; } hello_pkt; typedef struct accept_pkt { char tag[TAG_LEN]; } accept_pkt; typedef struct reject_pkt { char tag[TAG_LEN]; } reject_pkt; typedef struct end_pkt { char tag[TAG_LEN]; } end_pkt;