Fixed showing TOS floater.
This creates a separate events interface structure for CurlResponderBuffer (AICurlResponderBufferEvents) for dealing with received HTTP headers. The headers are passed to the Responder, but only if the class derived from Responder implements completedHeaders (otherwise it makes little sense to even decode the headers). Basically this is a reimplementation of the functionality of the old LLHTTPClientURLAdaptor class.
This commit is contained in:
@@ -54,6 +54,9 @@ class AIHTTPHeaders {
|
||||
// Construct a container with a single header.
|
||||
AIHTTPHeaders(std::string const& key, std::string const& value);
|
||||
|
||||
// Clear all headers.
|
||||
void clear(void) { if (mContainer) mContainer->mKeyValuePairs.clear(); }
|
||||
|
||||
// Add a header. Returns true if the header already existed.
|
||||
bool addHeader(std::string const& key, std::string const& value, op_type op = new_header);
|
||||
|
||||
@@ -63,7 +66,7 @@ class AIHTTPHeaders {
|
||||
// Return true if the header already exists.
|
||||
bool hasHeader(std::string const& key) const;
|
||||
|
||||
// Return true if key exists and full value_out with the value. Return false otherwise.
|
||||
// Return true if key exists and fill value_out with the value. Return false otherwise.
|
||||
bool getValue(std::string const& key, std::string& value_out) const;
|
||||
|
||||
// Append the headers to slist.
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace LLAvatarNameCache
|
||||
// Erase expired names from cache
|
||||
void eraseUnrefreshed();
|
||||
|
||||
bool expirationFromCacheControl(LLSD headers, F64 *expires);
|
||||
bool expirationFromCacheControl(AIHTTPHeaders const& headers, F64* expires);
|
||||
}
|
||||
|
||||
/* Sample response:
|
||||
@@ -179,16 +179,14 @@ private:
|
||||
std::vector<LLUUID> mAgentIDs;
|
||||
|
||||
// Need the headers to look up Expires: and Retry-After:
|
||||
LLSD mHeaders;
|
||||
AIHTTPHeaders mHeaders;
|
||||
|
||||
public:
|
||||
LLAvatarNameResponder(const std::vector<LLUUID>& agent_ids)
|
||||
: mAgentIDs(agent_ids),
|
||||
mHeaders()
|
||||
: mAgentIDs(agent_ids)
|
||||
{ }
|
||||
|
||||
/*virtual*/ void completedHeader(U32 status, const std::string& reason,
|
||||
const LLSD& headers)
|
||||
/*virtual*/ void completedHeaders(U32 status, std::string const& reason, AIHTTPHeaders const& headers)
|
||||
{
|
||||
mHeaders = headers;
|
||||
}
|
||||
@@ -788,7 +786,7 @@ void LLAvatarNameCache::insert(const LLUUID& agent_id, const LLAvatarName& av_na
|
||||
sCache[agent_id] = av_name;
|
||||
}
|
||||
|
||||
F64 LLAvatarNameCache::nameExpirationFromHeaders(LLSD headers)
|
||||
F64 LLAvatarNameCache::nameExpirationFromHeaders(AIHTTPHeaders const& headers)
|
||||
{
|
||||
F64 expires = 0.0;
|
||||
if (expirationFromCacheControl(headers, &expires))
|
||||
@@ -804,16 +802,15 @@ F64 LLAvatarNameCache::nameExpirationFromHeaders(LLSD headers)
|
||||
}
|
||||
}
|
||||
|
||||
bool LLAvatarNameCache::expirationFromCacheControl(LLSD headers, F64 *expires)
|
||||
bool LLAvatarNameCache::expirationFromCacheControl(AIHTTPHeaders const& headers, F64* expires)
|
||||
{
|
||||
bool fromCacheControl = false;
|
||||
F64 now = LLFrameTimer::getTotalSeconds();
|
||||
// Allow the header to override the default
|
||||
LLSD cache_control_header = headers["cache-control"];
|
||||
if (cache_control_header.isDefined())
|
||||
std::string cache_control;
|
||||
if (headers.getValue("cache-control", cache_control))
|
||||
{
|
||||
S32 max_age = 0;
|
||||
std::string cache_control = cache_control_header.asString();
|
||||
if (max_age_from_cache_control(cache_control, &max_age))
|
||||
{
|
||||
*expires = now + (F64)max_age;
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
class LLSD;
|
||||
class LLUUID;
|
||||
class AIHTTPHeaders;
|
||||
|
||||
namespace LLAvatarNameCache
|
||||
{
|
||||
@@ -98,7 +98,7 @@ namespace LLAvatarNameCache
|
||||
|
||||
// Compute name expiration time from HTTP Cache-Control header,
|
||||
// or return default value, in seconds from epoch.
|
||||
F64 nameExpirationFromHeaders(LLSD headers);
|
||||
F64 nameExpirationFromHeaders(AIHTTPHeaders const& headers);
|
||||
|
||||
void addUseDisplayNamesCallback(const use_display_name_signal_t::slot_type& cb);
|
||||
}
|
||||
|
||||
@@ -37,52 +37,6 @@
|
||||
F32 const HTTP_REQUEST_EXPIRY_SECS = 60.0f;
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if 0
|
||||
class LLHTTPClientURLAdaptor : public LLURLRequestComplete
|
||||
{
|
||||
public:
|
||||
LLHTTPClientURLAdaptor(LLCurl::ResponderPtr responder)
|
||||
: LLURLRequestComplete(), mResponder(responder), mStatus(499),
|
||||
mReason("LLURLRequest complete w/no status")
|
||||
{
|
||||
}
|
||||
|
||||
~LLHTTPClientURLAdaptor()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void httpStatus(U32 status, const std::string& reason)
|
||||
{
|
||||
LLURLRequestComplete::httpStatus(status,reason);
|
||||
|
||||
mStatus = status;
|
||||
mReason = reason;
|
||||
}
|
||||
|
||||
virtual void complete(const LLChannelDescriptors& channels,
|
||||
const buffer_ptr_t& buffer)
|
||||
{
|
||||
if (mResponder.get())
|
||||
{
|
||||
// Allow clients to parse headers before we attempt to parse
|
||||
// the body and provide completed/result/error calls.
|
||||
mResponder->completedHeader(mStatus, mReason, mHeaderOutput);
|
||||
mResponder->completedRaw(mStatus, mReason, channels, buffer);
|
||||
}
|
||||
}
|
||||
virtual void header(const std::string& header, const std::string& value)
|
||||
{
|
||||
mHeaderOutput[header] = value;
|
||||
}
|
||||
|
||||
private:
|
||||
LLCurl::ResponderPtr mResponder;
|
||||
U32 mStatus;
|
||||
std::string mReason;
|
||||
LLSD mHeaderOutput;
|
||||
};
|
||||
#endif
|
||||
|
||||
class LLSDInjector : public Injector
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user