void testservers_connection(SocketStream &rStream) { IOStreamGetLine getline(rStream); if(typeid(rStream) == typeid(SocketStreamTLS)) { // need to wait for some data before sending stuff, otherwise timeout test doesn't work std::string line; while(!getline.GetLine(line)) ; SocketStreamTLS &rtls = (SocketStreamTLS&)rStream; std::string line1("CONNECTED:"); line1 += rtls.GetPeerCommonName(); line1 += '\n'; testservers_pause_before_reply(); rStream.Write(line1.c_str(), line1.size()); } while(!getline.IsEOF()) { std::string line; while(!getline.GetLine(line)) ; if(line == "QUIT") { break; } if(line == "LARGEDATA") { { // Send lots of data char data[LARGE_DATA_BLOCK_SIZE]; for(unsigned int y = 0; y < sizeof(data); y++) { data[y] = y & 0xff; } for(int s = 0; s < (LARGE_DATA_SIZE / LARGE_DATA_BLOCK_SIZE); ++s) { rStream.Write(data, sizeof(data), SHORT_TIMEOUT); } } { // Receive lots of data char buf[1024]; int total = 0; int r = 0; while(total < LARGE_DATA_SIZE && (r = rStream.Read(buf, sizeof(buf), SHORT_TIMEOUT)) != 0) { total += r; } TEST_THAT(total == LARGE_DATA_SIZE); if (total != LARGE_DATA_SIZE) { BOX_ERROR("Expected " << LARGE_DATA_SIZE << " bytes " << "but was " << total); return; } } { // Send lots of data again char data[LARGE_DATA_BLOCK_SIZE]; for(unsigned int y = 0; y < sizeof(data); y++) { data[y] = y & 0xff; } for(int s = 0; s < (LARGE_DATA_SIZE / LARGE_DATA_BLOCK_SIZE); ++s) { rStream.Write(data, sizeof(data), SHORT_TIMEOUT); } } // next! continue; } std::string backwards; for(std::string::const_reverse_iterator i(line.end()); i != std::string::const_reverse_iterator(line.begin()); ++i) { backwards += (*i); } backwards += '\n'; testservers_pause_before_reply(); rStream.Write(backwards.c_str(), backwards.size()); } rStream.Shutdown(); rStream.Close(); }