#include #include #include #include #include #include #include #include "header.h" #include void send_packet(int transmit, struct packet const * const foo); int read_packet(int recieve, struct packet* const foo); void box_RX(int transmit, int recieve); void box_TX(int transmit, int recieve); unsigned char *buffer; FILE* test; struct packet foo; int main() { pid_t child; int TX[2]; int RX[2]; ssize_t rw_return; int pipe_return; foo.md5sum[16] = '\0'; buffer = malloc(128); foo.payload = buffer; assert((pipe_return = pipe(TX)) == 0); assert((pipe_return = pipe(RX)) == 0); if((child = fork()) == -1) { return -1; } else if(child == 0) { unsigned char md5sum[16]; /* child RX side*/ assert(read_packet(RX[0], &foo) == 0); /*confirm MD5 */ send_packet(TX[1], &foo); box_RX(TX[1], RX[0]); } else { fgets(buffer, 128, stdin); foo.pack_size = strlen(foo.payload)+20; MD5(foo.payload, foo.pack_size - 20, foo.md5sum); send_packet(RX[1], &foo); assert(read_packet(TX[0], &foo) == 0); printf("got %s\n", foo.payload); box_TX(RX[1], TX[0]); wait(NULL); /* parent TX side*/ } return 0; } void send_packet(int transmit, struct packet const * const foo) { static unsigned char md[16]; int rw; rw = write(transmit, foo, 4); assert(rw == 4); rw = write(transmit, foo->payload, foo->pack_size- 20); assert(rw == foo->pack_size-20); MD5(foo->payload, foo->pack_size-20, md); rw = write(transmit, md, 16); /* rw = write(transmit, foo->md5sum, 16); */ assert(rw == 16); } int read_packet(int recieve, struct packet* const foo) { static unsigned char md[16]; int rw; if(foo->payload) free(foo->payload); rw = read(recieve, foo, 4); assert(rw == 4); foo->payload = malloc(foo->pack_size - 20); rw = read(recieve, foo->payload, foo->pack_size-20); assert(rw == foo->pack_size-20); rw = read(recieve, foo->md5sum, 16); assert(rw == 16); MD5(foo->payload, foo->pack_size-20, md); return memcmp(md, foo->md5sum, 16); } void box_RX(int transmit, int recieve) { } void box_TX(int transmit, int recieve) { }