| 213 | } |
| 214 | std::vector<int> rec; |
| 215 | int chunked_handler_pt(void*, net::ISocketStream* sock) { |
| 216 | EXPECT_NE(nullptr, sock); |
| 217 | LOG_DEBUG("Accepted"); |
| 218 | char recv[4096]; |
| 219 | auto len = sock->recv(recv, 4096); |
| 220 | EXPECT_GT(len, 0); |
| 221 | LOG_INFO("source server recv request, len:", len); |
| 222 | LOG_INFO("req:", std::string_view(recv, len)); |
| 223 | auto ret = sock->write(header_data, sizeof(header_data) - 1); |
| 224 | EXPECT_EQ(sizeof(header_data) - 1, ret); |
| 225 | size_t offset = 0; |
| 226 | rec.clear(); |
| 227 | while (offset < std_data_size) { |
| 228 | auto remain = std_data_size - offset; |
| 229 | if (remain <= 1024) { |
| 230 | rec.push_back(remain); |
| 231 | chunked_send(offset, remain, sock); |
| 232 | break; |
| 233 | } |
| 234 | auto max_seg = std::min(remain - 1024, 2 * 4 * 1024UL); |
| 235 | auto seg = 1024 + rand() % max_seg; |
| 236 | chunked_send(offset, seg, sock); |
| 237 | rec.push_back(seg); |
| 238 | offset += seg; |
| 239 | } |
| 240 | sock->write("0\r\n\r\n", 5); |
| 241 | return 0; |
| 242 | } |
| 243 | |
| 244 | int test_director(void* src_, Request& src, Request& dst) { |
| 245 | auto source_server = (ISocketServer*)src_; |