~ubuntu-branches/ubuntu/oneiric/squid3/oneiric-security

« back to all changes in this revision

Viewing changes to src/adaptation/Initiate.cc

  • Committer: Bazaar Package Importer
  • Author(s): Mahyuddin Susanto
  • Date: 2011-02-15 18:46:13 UTC
  • mfrom: (21.2.4 sid)
  • Revision ID: james.westby@ubuntu.com-20110215184613-1u3dh5sz4i055flk
Tags: 3.1.10-1ubuntu1
* Merge from debian unstable. (LP: #719283)  Remaining changes:
  - debian/patches/18-fix-ftbfs-binutils-gold.dpatch: Add library linker into
    LIBS instead to LDFLAGS to fixing FTBFS binutils-gold.
* Drop Ubuntu configuration for ufw which landed in Debian and sync it: 
  - debian/squid3.ufw.profile.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
#include "HttpMsg.h"
7
7
#include "adaptation/Initiator.h"
8
8
#include "adaptation/Initiate.h"
 
9
#include "base/AsyncJobCalls.h"
9
10
 
10
11
namespace Adaptation
11
12
{
17
18
public:
18
19
    typedef UnaryMemFunT<Initiator, HttpMsg*> Parent;
19
20
 
20
 
    AnswerDialer(Initiator *obj, Parent::Method meth, HttpMsg *msg):
21
 
            Parent(obj, meth, msg) { HTTPMSGLOCK(arg1); }
22
 
    AnswerDialer(const AnswerDialer &d):
23
 
            Parent(d) { HTTPMSGLOCK(arg1); }
 
21
    AnswerDialer(const Parent::JobPointer &job, Parent::Method meth,
 
22
                 HttpMsg *msg): Parent(job, meth, msg) { HTTPMSGLOCK(arg1); }
 
23
    AnswerDialer(const AnswerDialer &d): Parent(d) { HTTPMSGLOCK(arg1); }
24
24
    virtual ~AnswerDialer() { HTTPMSGUNLOCK(arg1); }
 
25
 
 
26
private:
 
27
    AnswerDialer &operator =(const AnswerDialer &); // not implemented
25
28
};
26
29
 
27
30
} // namespace Adaptation
29
32
 
30
33
/* Initiate */
31
34
 
32
 
Adaptation::Initiate::Initiate(const char *aTypeName, Initiator *anInitiator):
33
 
        AsyncJob(aTypeName), theInitiator(anInitiator)
 
35
Adaptation::Initiate::Initiate(const char *aTypeName): AsyncJob(aTypeName)
34
36
{
35
 
    assert(theInitiator);
36
37
}
37
38
 
38
39
Adaptation::Initiate::~Initiate()
42
43
    // can assert(!(wasStarted && theInitiator)).
43
44
}
44
45
 
 
46
void
 
47
Adaptation::Initiate::initiator(const CbcPointer<Initiator> &i)
 
48
{
 
49
    Must(!theInitiator);
 
50
    Must(i.valid());
 
51
    theInitiator = i;
 
52
}
 
53
 
 
54
 
45
55
// internal cleanup
46
56
void Adaptation::Initiate::swanSong()
47
57
{
48
58
    debugs(93, 5, HERE << "swan sings" << status());
49
59
 
50
 
    if (theInitiator) {
 
60
    if (theInitiator.set()) {
51
61
        debugs(93, 3, HERE << "fatal failure; sending abort notification");
52
62
        tellQueryAborted(true); // final by default
53
63
    }
57
67
 
58
68
void Adaptation::Initiate::clearInitiator()
59
69
{
60
 
    if (theInitiator)
61
 
        theInitiator.clear();
 
70
    theInitiator.clear();
62
71
}
63
72
 
64
73
void Adaptation::Initiate::sendAnswer(HttpMsg *msg)
65
74
{
66
75
    assert(msg);
67
 
    if (theInitiator.isThere()) {
68
 
        CallJob(93, 5, __FILE__, __LINE__, "Initiator::noteAdaptAnswer",
69
 
                AnswerDialer(theInitiator.ptr(), &Initiator::noteAdaptationAnswer, msg));
70
 
    }
 
76
    CallJob(93, 5, __FILE__, __LINE__, "Initiator::noteAdaptationAnswer",
 
77
            AnswerDialer(theInitiator, &Initiator::noteAdaptationAnswer, msg));
71
78
    clearInitiator();
72
79
}
73
80
 
74
81
 
75
82
void Adaptation::Initiate::tellQueryAborted(bool final)
76
83
{
77
 
    if (theInitiator.isThere()) {
78
 
        CallJobHere1(93, 5, theInitiator.ptr(),
79
 
                     Initiator::noteAdaptationQueryAbort, final);
80
 
    }
 
84
    CallJobHere1(93, 5, theInitiator,
 
85
                 Initiator, noteAdaptationQueryAbort, final);
81
86
    clearInitiator();
82
87
}
83
88
 
85
90
{
86
91
    return AsyncJob::status(); // for now
87
92
}
88
 
 
89
 
 
90
 
/* InitiatorHolder */
91
 
 
92
 
Adaptation::InitiatorHolder::InitiatorHolder(Initiator *anInitiator):
93
 
        prime(0), cbdata(0)
94
 
{
95
 
    if (anInitiator) {
96
 
        cbdata = cbdataReference(anInitiator->toCbdata());
97
 
        prime = anInitiator;
98
 
    }
99
 
}
100
 
 
101
 
Adaptation::InitiatorHolder::InitiatorHolder(const InitiatorHolder &anInitiator):
102
 
        prime(0), cbdata(0)
103
 
{
104
 
    if (anInitiator != NULL && cbdataReferenceValid(anInitiator.cbdata)) {
105
 
        cbdata = cbdataReference(anInitiator.cbdata);
106
 
        prime = anInitiator.prime;
107
 
    }
108
 
}
109
 
 
110
 
Adaptation::InitiatorHolder::~InitiatorHolder()
111
 
{
112
 
    clear();
113
 
}
114
 
 
115
 
void Adaptation::InitiatorHolder::clear()
116
 
{
117
 
    if (prime) {
118
 
        prime = NULL;
119
 
        cbdataReferenceDone(cbdata);
120
 
    }
121
 
}
122
 
 
123
 
Adaptation::Initiator *Adaptation::InitiatorHolder::ptr()
124
 
{
125
 
    assert(isThere());
126
 
    return prime;
127
 
}
128
 
 
129
 
bool
130
 
Adaptation::InitiatorHolder::isThere()
131
 
{
132
 
    return prime && cbdataReferenceValid(cbdata);
133
 
}
134
 
 
135
 
// should not be used
136
 
Adaptation::InitiatorHolder &
137
 
Adaptation::InitiatorHolder::operator =(const InitiatorHolder &anInitiator)
138
 
{
139
 
    assert(false);
140
 
    return *this;
141
 
}