]>
Commit | Line | Data |
---|---|---|
8e64903f | 1 | /* |
77b1029d | 2 | * Copyright (C) 1996-2020 The Squid Software Foundation and contributors |
8e64903f AJ |
3 | * |
4 | * Squid software is distributed under GPLv2+ license and includes | |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
7 | */ | |
8 | ||
9 | /* | |
10 | * DEBUG: section 33 Client Request Pipeline | |
11 | */ | |
12 | #include "squid.h" | |
22d80540 | 13 | #include "anyp/PortCfg.h" |
8e64903f AJ |
14 | #include "client_side.h" |
15 | #include "Debug.h" | |
d3dddfb5 | 16 | #include "http/Stream.h" |
8e64903f AJ |
17 | #include "Pipeline.h" |
18 | ||
19 | void | |
d3dddfb5 | 20 | Pipeline::add(const Http::StreamPointer &c) |
8e64903f AJ |
21 | { |
22 | requests.push_back(c); | |
23 | ++nrequests; | |
24 | debugs(33, 3, "Pipeline " << (void*)this << " add request " << nrequests << ' ' << c); | |
25 | } | |
26 | ||
d3dddfb5 | 27 | Http::StreamPointer |
8e64903f AJ |
28 | Pipeline::front() const |
29 | { | |
30 | if (requests.empty()) { | |
31 | debugs(33, 3, "Pipeline " << (void*)this << " empty"); | |
d3dddfb5 | 32 | return Http::StreamPointer(); |
8e64903f AJ |
33 | } |
34 | ||
35 | debugs(33, 3, "Pipeline " << (void*)this << " front " << requests.front()); | |
36 | return requests.front(); | |
37 | } | |
38 | ||
da6dbcd1 EB |
39 | Http::StreamPointer |
40 | Pipeline::back() const | |
41 | { | |
42 | if (requests.empty()) { | |
43 | debugs(33, 3, "Pipeline " << (void*)this << " empty"); | |
44 | return Http::StreamPointer(); | |
45 | } | |
46 | ||
47 | debugs(33, 3, "Pipeline " << (void*)this << " back " << requests.back()); | |
48 | return requests.back(); | |
49 | } | |
50 | ||
8e64903f AJ |
51 | void |
52 | Pipeline::terminateAll(int xerrno) | |
53 | { | |
54 | while (!requests.empty()) { | |
d3dddfb5 | 55 | Http::StreamPointer context = requests.front(); |
8e64903f AJ |
56 | debugs(33, 3, "Pipeline " << (void*)this << " notify(" << xerrno << ") " << context); |
57 | context->noteIoError(xerrno); | |
d20f59e2 | 58 | context->finished(); // cleanup and self-deregister |
8e64903f AJ |
59 | assert(context != requests.front()); |
60 | } | |
61 | } | |
62 | ||
63 | void | |
d3dddfb5 | 64 | Pipeline::popMe(const Http::StreamPointer &which) |
8e64903f AJ |
65 | { |
66 | if (requests.empty()) | |
67 | return; | |
68 | ||
2c391676 AJ |
69 | debugs(33, 3, "Pipeline " << (void*)this << " drop " << requests.front()); |
70 | // in reality there may be multiple contexts doing processing in parallel. | |
71 | // XXX: pipeline still assumes HTTP/1 FIFO semantics are obeyed. | |
72 | assert(which == requests.front()); | |
73 | requests.pop_front(); | |
8e64903f AJ |
74 | } |
75 |