/*************************************************************** * * stopandwait.h * * For the stop-and-wait cnet example from section 5 * of "Getting Started With cnet," Jeff Ondich, 2000. * * Adapted from Chris McDonald's stopandwait.c. * ***************************************************************/ #ifndef STOPANDWAIT_H #define STOPANDWAIT_H #include typedef enum { DATA, ACK } FrameKind; typedef struct { FrameKind kind; /* only ever DATA or ACK */ int messageLength; /* the length of the message portion only */ int checksum; /* checksum of the whole frame */ int sequenceNumber; /* only ever 0 or 1 */ char message[MAX_MESSAGE_SIZE]; } Frame; #define FRAME_HEADER_SIZE (sizeof(FrameKind) + 3*sizeof(int)) #define FRAME_SIZE(f) (FRAME_HEADER_SIZE + f.messageLength * sizeof(char)) void on_physical_ready( CnetEvent ev, CnetTimer ts, CnetData data ); void on_application_ready( CnetEvent ev, CnetTimer ts, CnetData data ); void on_timer_expired( CnetEvent ev, CnetTimer ts, CnetData data ); void transmit_frame( char *message, int messageLength, FrameKind kind, int sequenceNumber ); #endif