struct Handshake { char Time[4]; char Zero[4]; char Random[1528]; };//Handshake void doHandshake(){ srand(time(NULL)); char Version; Handshake Client; Handshake Server; /** Read C0 **/ fread(&(Version), 1, 1, stdin); /** Read C1 **/ fread(Client.Time, 1, 4, stdin); fread(Client.Zero, 1, 4, stdin); fread(Client.Random, 1, 1528, stdin); /** Build S1 Packet **/ Server.Time[0] = 0; Server.Time[1] = 0; Server.Time[2] = 0; Server.Time[3] = 0; Server.Zero[0] = 0; Server.Zero[1] = 0; Server.Zero[2] = 0; Server.Zero[3] = 0; for (int i = 0; i < 1528; i++){Server.Random[i] = (rand() % 256);} /** Send S0 **/ fwrite(&(Version), 1, 1, stdout); /** Send S1 **/ fwrite(Server.Time, 1, 4, stdout); fwrite(Server.Zero, 1, 4, stdout); fwrite(Server.Random, 1, 1528, stdout); /** Flush output, just for certainty **/ fflush(stdout); /** Send S2 **/ fwrite(Client.Time, 1, 4, stdout); fwrite(Client.Time, 1, 4, stdout); fwrite(Client.Random, 1, 1528, stdout); /** Flush, necessary in order to work **/ fflush(stdout); /** Read and discard C2 **/ fread(Client.Time, 1, 4, stdin); fread(Client.Zero, 1, 4, stdin); fread(Client.Random, 1, 1528, stdin); }//doHandshake