96 {
98 "httpclient",
99 [](const std::shared_ptr<MasterRequest>& req) {
100 VLOG(1) << req->getSocketContext()->getSocketConnection()->getConnectionName() << ": OnRequestStart";
101
102 req->httpMajor = 1;
103 req->httpMinor = 1;
104 req->url = "/";
105 req->set("Connection", "keep-alive");
106 req->setTrailer("MyTrailer",
107 "MyTrailerValue");
108
109 req->end(
110 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
112 },
113 [](const std::shared_ptr<Request>&, const std::string&) {
114 });
115
116 req->httpMinor = 1;
117 req->method = "GET";
118 req->url = "/sendfile/";
119 req->set("Connection", "keep-alive");
120 req->sendFile(
121 "/home/voc/projects/snodec/snode.c/CMakeLists.tt",
122 [req](int ret) {
123 if (ret == 0) {
124 VLOG(1) << req->getSocketContext()->getSocketConnection()->getConnectionName()
125 << " HTTP: Request accepted: GET / HTTP/" << req->httpMajor << "." << req->httpMinor;
126 VLOG(1) << " /home/voc/projects/snodec/snode.c/CMakeLists.tt";
127 } else {
128 LOG(ERROR) << req->getSocketContext()->getSocketConnection()->getConnectionName()
129 << " HTTP: Request failed: GET / HTTP/" << req->httpMajor << "." << req->httpMinor;
130 PLOG(ERROR) << " /home/voc/projects/snodec/snode.c/CMakeLists.tt";
131 }
132 },
133 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
135 },
136 [](const std::shared_ptr<Request>&, const std::string&) {
137 });
138
139 req->init();
140 req->httpMinor = 1;
141 req->url = "/third";
142 req->set("Connection", "keep-alive");
143 req->setTrailer("MyTrailer",
144 "MyTrailerValue");
145
146 req->end(
147 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
149 },
150 [](const std::shared_ptr<Request>&, const std::string&) {
151 });
152
153#define LONG
154#ifdef LONG
155 req->url = "/";
156 req->set("Connection", "keep-alive");
157 req->end(
158 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
160 },
161 [](const std::shared_ptr<Request>&, const std::string&) {
162 });
163
164 req->httpMinor = 1;
165 req->url = "/index.html";
166
167 req->end(
168 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
170 },
171 [](const std::shared_ptr<Request>&, const std::string&) {
172 });
173 req->url = "/";
174 req->set("Connection", "keep-alive");
175 req->end(
176 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
178 },
179 [req](const std::shared_ptr<Request>&, const std::string&) {
180 });
181 req->url = "/index.html";
182 req->set("Connection", "keep-alive");
183 req->end(
184 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
186 },
187 [req](const std::shared_ptr<Request>&, const std::string&) {
188 });
189 req->url = "/";
190 req->set("Connection", "keep-alive");
191 req->end(
192 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
194 },
195 [req](const std::shared_ptr<Request>&, const std::string&) {
196 });
197 req->url = "/index.html";
198 req->set("Connection", "keep-alive");
199 req->end(
200 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
202 },
203 [req](const std::shared_ptr<Request>&, const std::string&) {
204 });
205 req->url = "/";
206 req->set("Connection", "keep-alive");
207 req->end(
208 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
210 },
211 [req](const std::shared_ptr<Request>&, const std::string&) {
212 });
213 req->url = "/index.html";
214 req->set("Connection", "keep-alive");
215 req->end(
216 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
218 },
219 [req](const std::shared_ptr<Request>&, const std::string&) {
220 });
221 req->url = "/";
222 req->set("Connection", "keep-alive");
223 req->end(
224 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
226 },
227 [req](const std::shared_ptr<Request>&, const std::string&) {
228 });
229 req->url = "/index.html";
230 req->set("Connection", "keep-alive");
231 req->end(
232 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
234 },
235 [req](const std::shared_ptr<Request>&, const std::string&) {
236 });
237 req->url = "/";
238 req->set("Connection", "keep-alive");
239 req->end(
240 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
242 },
243 [req](const std::shared_ptr<Request>&, const std::string&) {
244 });
245 req->url = "/index.html";
246 req->set("Connection", "keep-alive");
247 req->end(
248 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
250 },
251 [req](const std::shared_ptr<Request>&, const std::string&) {
252 });
253 req->url = "/";
254 req->set("Connection", "keep-alive");
255 req->end(
256 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
258 },
259 [req](const std::shared_ptr<Request>&, const std::string&) {
260 });
261 req->url = "/index.html";
262 req->set("Connection", "keep-alive");
263 req->end(
264 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
266 },
267 [req](const std::shared_ptr<Request>&, const std::string&) {
268 });
269 req->url = "/";
270 req->set("Connection", "keep-alive");
271 req->end(
272 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
274 },
275 [req](const std::shared_ptr<Request>&, const std::string&) {
276 });
277 req->url = "/index.html";
278 req->set("Connection", "keep-alive");
279 req->end(
280 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
282 },
283 [req](const std::shared_ptr<Request>&, const std::string&) {
284 });
285 req->url = "/";
286 req->set("Connection", "keep-alive");
287 req->end(
288 [](const std::shared_ptr<Request>& req, const std::shared_ptr<Response>& res) {
290 },
291 [req](const std::shared_ptr<Request>&, const std::string&) {
292 });
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307 const std::shared_ptr<web::http::client::tools::EventSource> eventStream_1 =
308 web::http::legacy::NET::EventSource("http://" + req->hostFieldValue, "/sse?hihi=3");
309
310 if (eventStream_1) {
311 eventStream_1->onOpen([]() {
312 VLOG(0) << "OnOpen 1";
313 });
314
315 eventStream_1->onError([]() {
316 VLOG(0) << "onError 1";
317 });
318
320 VLOG(0) <<
"OnMessage 1:1: " << message.
data;
321 });
323 VLOG(0) <<
"OnMessage 1:2: " << message.
data;
324 });
326 VLOG(0) <<
"EventListener for 'myevent' 1:1: " << message.
lastEventId <<
" : " << message.
data;
327 });
329 VLOG(0) <<
"EventListener for 'myevent' 1:2: " << message.
lastEventId <<
" : " << message.
data;
330 });
331
333 [eventStream_1]() {
334 eventStream_1->close();
335 },
336 5);
337 }
338
339 auto eventStream_2 = web::http::legacy::NET::EventSource("http://localhost:8080/sse");
340
341 if (eventStream_2) {
342 eventStream_2->onOpen([]() {
343 VLOG(0) << "OnOpen 2";
344 });
345
346 eventStream_2->onError([]() {
347 VLOG(0) << "onError 2";
348 });
349
351 VLOG(0) <<
"OnMessage 2:1: " << message.
data;
352 });
354 VLOG(0) <<
"OnMessage 2:2: " << message.
data;
355 });
357 VLOG(0) <<
"EventListener for 'myevent' 2:1: " << message.
lastEventId <<
" : " << message.
data;
358 });
360 VLOG(0) <<
"EventListener for 'myevent' 2:2: " << message.
lastEventId <<
" : " << message.
data;
361 });
362 }
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500#endif
501 },
502 []([[maybe_unused]] const std::shared_ptr<Request>& req) {
503 VLOG(1) << req->getSocketContext()->getSocketConnection()->getConnectionName() << ": OnRequestEnd";
504 });
505
506 client.setOnConnect([](SocketConnection* socketConnection) {
507 VLOG(1) << socketConnection->getConnectionName() << ": OnConnect";
508
509 VLOG(1) << "\tLocal: " << socketConnection->getLocalAddress().toString();
510 VLOG(1) << "\tPeer: " << socketConnection->getRemoteAddress().toString();
511 });
512
513 client.setOnDisconnect([](SocketConnection* socketConnection) {
514 VLOG(1) << socketConnection->getConnectionName() << ": OnDisconnect";
515
516 VLOG(1) << "\tLocal: " << socketConnection->getLocalAddress().toString();
517 VLOG(1) << "\tPeer: " << socketConnection->getRemoteAddress().toString();
518 });
519
520 return client;
521 }
static Timer singleshotTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
static void logResponse(const std::shared_ptr< web::http::client::Request > &req, const std::shared_ptr< web::http::client::Response > &res)
web::http::legacy::NET::Client Client