summaryrefslogtreecommitdiff
path: root/indra/llmessage
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2015-09-15 17:01:26 -0700
committerRider Linden <rider@lindenlab.com>2015-09-15 17:01:26 -0700
commit907efc9cc9bcf4a935ed0e1bd17b19da2bb99dce (patch)
tree8453041f5ba3e07fbe0e7d2a632ee1fbf08698e7 /indra/llmessage
parent5f7985f6a79a21256162785cd9f0b97baac0504a (diff)
MAINT-5507: Remove llcurl, move constant values and untilities to llcorehttp lib
Diffstat (limited to 'indra/llmessage')
-rwxr-xr-xindra/llmessage/CMakeLists.txt4
-rwxr-xr-xindra/llmessage/llcurl.cpp360
-rwxr-xr-xindra/llmessage/llcurl.h142
-rwxr-xr-xindra/llmessage/llhttpconstants.cpp226
-rwxr-xr-xindra/llmessage/llhttpconstants.h226
-rwxr-xr-xindra/llmessage/llproxy.cpp13
-rwxr-xr-xindra/llmessage/llproxy.h2
-rwxr-xr-xindra/llmessage/lltrustedmessageservice.cpp1
-rwxr-xr-xindra/llmessage/message.h1
9 files changed, 8 insertions, 967 deletions
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index 9cbb76e794..3bcee13d28 100755
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -42,13 +42,11 @@ set(llmessage_SOURCE_FILES
llclassifiedflags.cpp
llcoproceduremanager.cpp
llcorehttputil.cpp
- llcurl.cpp
lldatapacker.cpp
lldispatcher.cpp
llexperiencecache.cpp
llfiltersd2xmlrpc.cpp
llhost.cpp
- llhttpconstants.cpp
llhttpnode.cpp
llhttpsdhandler.cpp
llinstantmessage.cpp
@@ -126,7 +124,6 @@ set(llmessage_HEADER_FILES
llclassifiedflags.h
llcoproceduremanager.h
llcorehttputil.h
- llcurl.h
lldatapacker.h
lldbstrings.h
lldispatcher.h
@@ -136,7 +133,6 @@ set(llmessage_HEADER_FILES
llfiltersd2xmlrpc.h
llfollowcamparams.h
llhost.h
- llhttpconstants.h
llhttpnode.h
llhttpnodeadapter.h
llhttpsdhandler.h
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
deleted file mode 100755
index 0094c42a02..0000000000
--- a/indra/llmessage/llcurl.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-/**
- * @file llcurl.cpp
- * @author Zero / Donovan
- * @date 2006-10-15
- * @brief Implementation of wrapper around libcurl.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010-2013, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#if LL_WINDOWS
-#define SAFE_SSL 1
-#elif LL_DARWIN
-#define SAFE_SSL 1
-#else
-#define SAFE_SSL 1
-#endif
-
-#include "linden_common.h"
-
-#include "llcurl.h"
-
-#include <algorithm>
-#include <iomanip>
-#include <curl/curl.h>
-#if SAFE_SSL
-#include <openssl/crypto.h>
-#endif
-
-#include "llbufferstream.h"
-#include "llproxy.h"
-#include "llsdserialize.h"
-#include "llstl.h"
-#include "llstring.h"
-#include "llthread.h"
-#include "lltimer.h"
-
-//////////////////////////////////////////////////////////////////////////////
-/*
- The trick to getting curl to do keep-alives is to reuse the
- same easy handle for the requests. It appears that curl
- keeps a pool of connections alive for each easy handle, but
- doesn't share them between easy handles. Therefore it is
- important to keep a pool of easy handles and reuse them,
- rather than create and destroy them with each request. This
- code does this.
-
- Furthermore, it would behoove us to keep track of which
- hosts an easy handle was used for and pick an easy handle
- that matches the next request. This code does not current
- do this.
- */
-
-// *TODO: TSN remove the commented code from this file
-//////////////////////////////////////////////////////////////////////////////
-
-//static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;
-
-// DEBUG //
-S32 gCurlEasyCount = 0;
-S32 gCurlMultiCount = 0;
-
-//////////////////////////////////////////////////////////////////////////////
-
-//static
-std::vector<LLMutex*> LLCurl::sSSLMutex;
-std::string LLCurl::sCAPath;
-std::string LLCurl::sCAFile;
-//LLCurlThread* LLCurl::sCurlThread = NULL ;
-LLMutex* LLCurl::sHandleMutexp = NULL ;
-S32 LLCurl::sTotalHandles = 0 ;
-bool LLCurl::sNotQuitting = true;
-F32 LLCurl::sCurlRequestTimeOut = 120.f; //seonds
-S32 LLCurl::sMaxHandles = 256; //max number of handles, (multi handles and easy handles combined).
-CURL* LLCurl::sCurlTemplateStandardHandle = NULL;
-
-void check_curl_code(CURLcode code)
-{
- if (code != CURLE_OK)
- {
- // linux appears to throw a curl error once per session for a bad initialization
- // at a pretty random time (when enabling cookies).
- LL_WARNS("curl") << "curl error detected: " << curl_easy_strerror(code) << LL_ENDL;
- }
-}
-
-void check_curl_multi_code(CURLMcode code)
-{
- if (code != CURLM_OK)
- {
- // linux appears to throw a curl error once per session for a bad initialization
- // at a pretty random time (when enabling cookies).
- LL_WARNS("curl") << "curl multi error detected: " << curl_multi_strerror(code) << LL_ENDL;
- }
-}
-
-//static
-void LLCurl::setCAPath(const std::string& path)
-{
- sCAPath = path;
-}
-
-//static
-void LLCurl::setCAFile(const std::string& file)
-{
- sCAFile = file;
-}
-
-//static
-std::string LLCurl::getVersionString()
-{
- return std::string(curl_version());
-}
-
-
-//static
-std::string LLCurl::strerror(CURLcode errorcode)
-{
- return std::string(curl_easy_strerror(errorcode));
-}
-
-
-////////////////////////////////////////////////////////////////////////////
-
-#if SAFE_SSL
-//static
-void LLCurl::ssl_locking_callback(int mode, int type, const char *file, int line)
-{
- if (mode & CRYPTO_LOCK)
- {
- LLCurl::sSSLMutex[type]->lock();
- }
- else
- {
- LLCurl::sSSLMutex[type]->unlock();
- }
-}
-
-//static
-unsigned long LLCurl::ssl_thread_id(void)
-{
- return LLThread::currentID();
-}
-#endif
-
-void LLCurl::initClass(F32 curl_reuest_timeout, S32 max_number_handles, bool multi_threaded)
-{
- sCurlRequestTimeOut = curl_reuest_timeout ; //seconds
- sMaxHandles = max_number_handles ; //max number of handles, (multi handles and easy handles combined).
-
- // Do not change this "unless you are familiar with and mean to control
- // internal operations of libcurl"
- // - http://curl.haxx.se/libcurl/c/curl_global_init.html
- CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
-
- check_curl_code(code);
-
-#if SAFE_SSL
- S32 mutex_count = CRYPTO_num_locks();
- for (S32 i=0; i<mutex_count; i++)
- {
- sSSLMutex.push_back(new LLMutex(NULL));
- }
- CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);
- CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);
-#endif
-
-// sCurlThread = new LLCurlThread(multi_threaded) ;
- if(multi_threaded)
- {
- sHandleMutexp = new LLMutex(NULL) ;
-// Easy::sHandleMutexp = new LLMutex(NULL) ;
- }
-}
-
-void LLCurl::cleanupClass()
-{
- sNotQuitting = false; //set quitting
-
- //shut down curl thread
-// while(1)
-// {
-// if(!sCurlThread->update(1)) //finish all tasks
-// {
-// break ;
-// }
-// }
- LL_CHECK_MEMORY
-// sCurlThread->shutdown() ;
- LL_CHECK_MEMORY
-// delete sCurlThread ;
-// sCurlThread = NULL ;
- LL_CHECK_MEMORY
-
-#if SAFE_SSL
- CRYPTO_set_locking_callback(NULL);
- for_each(sSSLMutex.begin(), sSSLMutex.end(), DeletePointer());
- sSSLMutex.clear();
-#endif
-
- LL_CHECK_MEMORY
-
- // Free the template easy handle
- curl_easy_cleanup(sCurlTemplateStandardHandle);
- sCurlTemplateStandardHandle = NULL;
- LL_CHECK_MEMORY
-
-
- delete sHandleMutexp ;
- sHandleMutexp = NULL ;
-
- LL_CHECK_MEMORY
-
- // removed as per https://jira.secondlife.com/browse/SH-3115
- //llassert(Easy::sActiveHandles.empty());
-}
-
-//static
-CURLM* LLCurl::newMultiHandle()
-{
- llassert(sNotQuitting);
-
- LLMutexLock lock(sHandleMutexp) ;
-
- if(sTotalHandles + 1 > sMaxHandles)
- {
- LL_WARNS() << "no more handles available." << LL_ENDL ;
- return NULL ; //failed
- }
- sTotalHandles++;
-
- CURLM* ret = curl_multi_init() ;
- if(!ret)
- {
- LL_WARNS() << "curl_multi_init failed." << LL_ENDL ;
- }
-
- return ret ;
-}
-
-//static
-CURLMcode LLCurl::deleteMultiHandle(CURLM* handle)
-{
- if(handle)
- {
- LLMutexLock lock(sHandleMutexp) ;
- sTotalHandles-- ;
- return curl_multi_cleanup(handle) ;
- }
- return CURLM_OK ;
-}
-
-//static
-CURL* LLCurl::newEasyHandle()
-{
- llassert(sNotQuitting);
- LLMutexLock lock(sHandleMutexp) ;
-
- if(sTotalHandles + 1 > sMaxHandles)
- {
- LL_WARNS() << "no more handles available." << LL_ENDL ;
- return NULL ; //failed
- }
- sTotalHandles++;
-
- CURL* ret = createStandardCurlHandle();
- if(!ret)
- {
- LL_WARNS() << "failed to create curl handle." << LL_ENDL ;
- }
-
- return ret ;
-}
-
-//static
-void LLCurl::deleteEasyHandle(CURL* handle)
-{
- if(handle)
- {
- LLMutexLock lock(sHandleMutexp) ;
- LL_CHECK_MEMORY
- curl_easy_cleanup(handle) ;
- LL_CHECK_MEMORY
- sTotalHandles-- ;
- }
-}
-
-const unsigned int LLCurl::MAX_REDIRECTS = 5;
-
-// Provide access to LLCurl free functions outside of llcurl.cpp without polluting the global namespace.
-void LLCurlFF::check_easy_code(CURLcode code)
-{
- check_curl_code(code);
-}
-// void LLCurlFF::check_multi_code(CURLMcode code)
-// {
-// check_curl_multi_code(code);
-// }
-
-
-// Static
-CURL* LLCurl::createStandardCurlHandle()
-{
- if (sCurlTemplateStandardHandle == NULL)
- { // Late creation of the template curl handle
- sCurlTemplateStandardHandle = curl_easy_init();
- if (sCurlTemplateStandardHandle == NULL)
- {
- LL_WARNS() << "curl error calling curl_easy_init()" << LL_ENDL;
- }
- else
- {
- CURLcode result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_NOSIGNAL, 1);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_NOPROGRESS, 1);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_ENCODING, "");
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_AUTOREFERER, 1);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_FOLLOWLOCATION, 1);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_SSL_VERIFYPEER, 1);
- check_curl_code(result);
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_SSL_VERIFYHOST, 0);
- check_curl_code(result);
-
- // The Linksys WRT54G V5 router has an issue with frequent
- // DNS lookups from LAN machines. If they happen too often,
- // like for every HTTP request, the router gets annoyed after
- // about 700 or so requests and starts issuing TCP RSTs to
- // new connections. Reuse the DNS lookups for even a few
- // seconds and no RSTs.
- result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_DNS_CACHE_TIMEOUT, 15);
- check_curl_code(result);
- }
- }
-
- return curl_easy_duphandle(sCurlTemplateStandardHandle);
-}
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
deleted file mode 100755
index 289e4bfd22..0000000000
--- a/indra/llmessage/llcurl.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * @file llcurl.h
- * @author Zero / Donovan
- * @date 2006-10-15
- * @brief A wrapper around libcurl.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLCURL_H
-#define LL_LLCURL_H
-
-#include "linden_common.h"
-
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include <boost/intrusive_ptr.hpp>
-#include <curl/curl.h> // TODO: remove dependency
-
-#include "llbuffer.h"
-#include "llhttpconstants.h"
-#include "lliopipe.h"
-#include "llsd.h"
-#include "llqueuedthread.h"
-#include "llframetimer.h"
-#include "llpointer.h"
-#include "llsingleton.h"
-
-class LLMutex;
-//class LLCurlThread;
-
-// For whatever reason, this is not typedef'd in curl.h
-typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream);
-
-class LLCurl
-{
- LOG_CLASS(LLCurl);
-
-public:
-
- /**
- * @ brief Set certificate authority file used to verify HTTPS certs.
- */
- static void setCAFile(const std::string& file);
-
- /**
- * @ brief Set certificate authority path used to verify HTTPS certs.
- */
- static void setCAPath(const std::string& path);
-
- /**
- * @ brief Return human-readable string describing libcurl version.
- */
- static std::string getVersionString();
-
- /**
- * @ brief Get certificate authority file used to verify HTTPS certs.
- */
- static const std::string& getCAFile() { return sCAFile; }
-
- /**
- * @ brief Get certificate authority path used to verify HTTPS certs.
- */
- static const std::string& getCAPath() { return sCAPath; }
-
- /**
- * @ brief Initialize LLCurl class
- */
- static void initClass(F32 curl_reuest_timeout = 120.f, S32 max_number_handles = 256, bool multi_threaded = false);
-
- /**
- * @ brief Cleanup LLCurl class
- */
- static void cleanupClass();
-
- /**
- * @ brief curl error code -> string
- */
- static std::string strerror(CURLcode errorcode);
-
- // For OpenSSL callbacks
- static std::vector<LLMutex*> sSSLMutex;
-
- // OpenSSL callbacks
- static void ssl_locking_callback(int mode, int type, const char *file, int line);
- static unsigned long ssl_thread_id(void);
-
-// static LLCurlThread* getCurlThread() { return sCurlThread ;}
-
- static CURLM* newMultiHandle() ;
- static CURLMcode deleteMultiHandle(CURLM* handle) ;
- static CURL* newEasyHandle() ;
- static void deleteEasyHandle(CURL* handle) ;
-
- static CURL* createStandardCurlHandle();
-
-private:
- static std::string sCAPath;
- static std::string sCAFile;
- static const unsigned int MAX_REDIRECTS;
- // static LLCurlThread* sCurlThread;
-// static LLCurlThread* sCurlThread;
-
- static LLMutex* sHandleMutexp ;
- static S32 sTotalHandles ;
- static S32 sMaxHandles;
- static CURL* sCurlTemplateStandardHandle;
-public:
- static bool sNotQuitting;
- static F32 sCurlRequestTimeOut;
-};
-
-
-// Provide access to LLCurl free functions outside of llcurl.cpp without polluting the global namespace.
-namespace LLCurlFF
-{
- void check_easy_code(CURLcode code);
- //void check_multi_code(CURLMcode code);
-}
-
-#endif // LL_LLCURL_H
diff --git a/indra/llmessage/llhttpconstants.cpp b/indra/llmessage/llhttpconstants.cpp
deleted file mode 100755
index 32f76f0d70..0000000000
--- a/indra/llmessage/llhttpconstants.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * @file llhttpconstants.cpp
- * @brief Implementation of the HTTP request / response constant lookups
- *
- * $LicenseInfo:firstyear=2013&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2013-2014, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-#include "llhttpconstants.h"
-#include "lltimer.h"
-
-// for curl_getdate() (apparently parsing RFC 1123 dates is hard)
-#include <curl/curl.h>
-
-// Outgoing headers. Do *not* use these to check incoming headers.
-// For incoming headers, use the lower-case headers, below.
-const std::string HTTP_OUT_HEADER_ACCEPT("Accept");
-const std::string HTTP_OUT_HEADER_ACCEPT_CHARSET("Accept-Charset");
-const std::string HTTP_OUT_HEADER_ACCEPT_ENCODING("Accept-Encoding");
-const std::string HTTP_OUT_HEADER_ACCEPT_LANGUAGE("Accept-Language");
-const std::string HTTP_OUT_HEADER_ACCEPT_RANGES("Accept-Ranges");
-const std::string HTTP_OUT_HEADER_AGE("Age");
-const std::string HTTP_OUT_HEADER_ALLOW("Allow");
-const std::string HTTP_OUT_HEADER_AUTHORIZATION("Authorization");
-const std::string HTTP_OUT_HEADER_CACHE_CONTROL("Cache-Control");
-const std::string HTTP_OUT_HEADER_CONNECTION("Connection");
-const std::string HTTP_OUT_HEADER_CONTENT_DESCRIPTION("Content-Description");
-const std::string HTTP_OUT_HEADER_CONTENT_ENCODING("Content-Encoding");
-const std::string HTTP_OUT_HEADER_CONTENT_ID("Content-ID");
-const std::string HTTP_OUT_HEADER_CONTENT_LANGUAGE("Content-Language");
-const std::string HTTP_OUT_HEADER_CONTENT_LENGTH("Content-Length");
-const std::string HTTP_OUT_HEADER_CONTENT_LOCATION("Content-Location");
-const std::string HTTP_OUT_HEADER_CONTENT_MD5("Content-MD5");
-const std::string HTTP_OUT_HEADER_CONTENT_RANGE("Content-Range");
-const std::string HTTP_OUT_HEADER_CONTENT_TRANSFER_ENCODING("Content-Transfer-Encoding");
-const std::string HTTP_OUT_HEADER_CONTENT_TYPE("Content-Type");
-const std::string HTTP_OUT_HEADER_COOKIE("Cookie");
-const std::string HTTP_OUT_HEADER_DATE("Date");
-const std::string HTTP_OUT_HEADER_DESTINATION("Destination");
-const std::string HTTP_OUT_HEADER_ETAG("ETag");
-const std::string HTTP_OUT_HEADER_EXPECT("Expect");
-const std::string HTTP_OUT_HEADER_EXPIRES("Expires");
-const std::string HTTP_OUT_HEADER_FROM("From");
-const std::string HTTP_OUT_HEADER_HOST("Host");
-const std::string HTTP_OUT_HEADER_IF_MATCH("If-Match");
-const std::string HTTP_OUT_HEADER_IF_MODIFIED_SINCE("If-Modified-Since");
-const std::string HTTP_OUT_HEADER_IF_NONE_MATCH("If-None-Match");
-const std::string HTTP_OUT_HEADER_IF_RANGE("If-Range");
-const std::string HTTP_OUT_HEADER_IF_UNMODIFIED_SINCE("If-Unmodified-Since");
-const std::string HTTP_OUT_HEADER_KEEP_ALIVE("Keep-Alive");
-const std::string HTTP_OUT_HEADER_LAST_MODIFIED("Last-Modified");
-const std::string HTTP_OUT_HEADER_LOCATION("Location");
-const std::string HTTP_OUT_HEADER_MAX_FORWARDS("Max-Forwards");
-const std::string HTTP_OUT_HEADER_MIME_VERSION("MIME-Version");
-const std::string HTTP_OUT_HEADER_PRAGMA("Pragma");
-const std::string HTTP_OUT_HEADER_PROXY_AUTHENTICATE("Proxy-Authenticate");
-const std::string HTTP_OUT_HEADER_PROXY_AUTHORIZATION("Proxy-Authorization");
-const std::string HTTP_OUT_HEADER_RANGE("Range");
-const std::string HTTP_OUT_HEADER_REFERER("Referer");
-const std::string HTTP_OUT_HEADER_RETRY_AFTER("Retry-After");
-const std::string HTTP_OUT_HEADER_SERVER("Server");
-const std::string HTTP_OUT_HEADER_SET_COOKIE("Set-Cookie");
-const std::string HTTP_OUT_HEADER_TE("TE");
-const std::string HTTP_OUT_HEADER_TRAILER("Trailer");
-const std::string HTTP_OUT_HEADER_TRANSFER_ENCODING("Transfer-Encoding");
-const std::string HTTP_OUT_HEADER_UPGRADE("Upgrade");
-const std::string HTTP_OUT_HEADER_USER_AGENT("User-Agent");
-const std::string HTTP_OUT_HEADER_VARY("Vary");
-const std::string HTTP_OUT_HEADER_VIA("Via");
-const std::string HTTP_OUT_HEADER_WARNING("Warning");
-const std::string HTTP_OUT_HEADER_WWW_AUTHENTICATE("WWW-Authenticate");
-
-// Incoming headers are normalized to lower-case.
-const std::string HTTP_IN_HEADER_ACCEPT_LANGUAGE("accept-language");
-const std::string HTTP_IN_HEADER_CACHE_CONTROL("cache-control");
-const std::string HTTP_IN_HEADER_CONTENT_LENGTH("content-length");
-const std::string HTTP_IN_HEADER_CONTENT_LOCATION("content-location");
-const std::string HTTP_IN_HEADER_CONTENT_TYPE("content-type");
-const std::string HTTP_IN_HEADER_HOST("host");
-const std::string HTTP_IN_HEADER_LOCATION("location");
-const std::string HTTP_IN_HEADER_RETRY_AFTER("retry-after");
-const std::string HTTP_IN_HEADER_SET_COOKIE("set-cookie");
-const std::string HTTP_IN_HEADER_USER_AGENT("user-agent");
-const std::string HTTP_IN_HEADER_X_FORWARDED_FOR("x-forwarded-for");
-
-const std::string HTTP_CONTENT_LLSD_XML("application/llsd+xml");
-const std::string HTTP_CONTENT_OCTET_STREAM("application/octet-stream");
-const std::string HTTP_CONTENT_VND_LL_MESH("application/vnd.ll.mesh");
-const std::string HTTP_CONTENT_XML("application/xml");
-const std::string HTTP_CONTENT_JSON("application/json");
-const std::string HTTP_CONTENT_TEXT_HTML("text/html");
-const std::string HTTP_CONTENT_TEXT_HTML_UTF8("text/html; charset=utf-8");
-const std::string HTTP_CONTENT_TEXT_PLAIN_UTF8("text/plain; charset=utf-8");
-const std::string HTTP_CONTENT_TEXT_LLSD("text/llsd");
-const std::string HTTP_CONTENT_TEXT_XML("text/xml");
-const std::string HTTP_CONTENT_TEXT_LSL("text/lsl");
-const std::string HTTP_CONTENT_TEXT_PLAIN("text/plain");
-const std::string HTTP_CONTENT_IMAGE_X_J2C("image/x-j2c");
-const std::string HTTP_CONTENT_IMAGE_J2C("image/j2c");
-const std::string HTTP_CONTENT_IMAGE_JPEG("image/jpeg");
-const std::string HTTP_CONTENT_IMAGE_PNG("image/png");
-const std::string HTTP_CONTENT_IMAGE_BMP("image/bmp");
-
-const std::string HTTP_NO_CACHE("no-cache");
-const std::string HTTP_NO_CACHE_CONTROL("no-cache, max-age=0");
-
-const std::string HTTP_VERB_INVALID("(invalid)");
-const std::string HTTP_VERB_HEAD("HEAD");
-const std::string HTTP_VERB_GET("GET");
-const std::string HTTP_VERB_PUT("PUT");
-const std::string HTTP_VERB_POST("POST");
-const std::string HTTP_VERB_DELETE("DELETE");
-const std::string HTTP_VERB_MOVE("MOVE");
-const std::string HTTP_VERB_OPTIONS("OPTIONS");
-const std::string HTTP_VERB_PATCH("PATCH");
-const std::string HTTP_VERB_COPY("COPY");
-
-const std::string& httpMethodAsVerb(EHTTPMethod method)
-{
- static const std::string VERBS[] =
- {
- HTTP_VERB_INVALID,
- HTTP_VERB_HEAD,
- HTTP_VERB_GET,
- HTTP_VERB_PUT,
- HTTP_VERB_POST,
- HTTP_VERB_DELETE,
- HTTP_VERB_MOVE,
- HTTP_VERB_OPTIONS,
- HTTP_VERB_PATCH,
- HTTP_VERB_COPY
- };
- if(((S32)method <=0) || ((S32)method >= HTTP_METHOD_COUNT))
- {
- return VERBS[0];
- }
- return VERBS[method];
-}
-
-bool isHttpInformationalStatus(S32 status)
-{
- // Check for status 1xx.
- return((100 <= status) && (status < 200));
-}
-
-bool isHttpGoodStatus(S32 status)
-{
- // Check for status 2xx.
- return((200 <= status) && (status < 300));
-}
-
-bool isHttpRedirectStatus(S32 status)
-{
- // Check for status 3xx.
- return((300 <= status) && (status < 400));
-}
-
-bool isHttpClientErrorStatus(S32 status)
-{
- // Status 499 is sometimes used for re-interpreted status 2xx errors
- // based on body content. Treat these as potentially retryable 'server' status errors,
- // since we do not have enough context to know if this will always fail.
- if (HTTP_INTERNAL_ERROR == status) return false;
-
- // Check for status 5xx.
- return((400 <= status) && (status < 500));
-}
-
-bool isHttpServerErrorStatus(S32 status)
-{
- // Status 499 is sometimes used for re-interpreted status 2xx errors.
- // Allow retry of these, since we don't have enough information in this
- // context to know if this will always fail.
- if (HTTP_INTERNAL_ERROR == status) return true;
-
- // Check for status 5xx.
- return((500 <= status) && (status < 600));
-}
-
-// Parses 'Retry-After' header contents and returns seconds until retry should occur.
-bool getSecondsUntilRetryAfter(const std::string& retry_after, F32& seconds_to_wait)
-{
- // *TODO: This needs testing! Not in use yet.
- // Examples of Retry-After headers:
- // Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
- // Retry-After: 120
-
- // Check for number of seconds version, first:
- char* end = 0;
- // Parse as double
- double seconds = std::strtod(retry_after.c_str(), &end);
- if ( end != 0 && *end == 0 )
- {
- // Successful parse
- seconds_to_wait = (F32) seconds;
- return true;
- }
-
- // Parse rfc1123 date.
- time_t date = curl_getdate(retry_after.c_str(), NULL );
- if (-1 == date) return false;
-
- seconds_to_wait = (F64)date - LLTimer::getTotalSeconds();
-
- return true;
-}
-
diff --git a/indra/llmessage/llhttpconstants.h b/indra/llmessage/llhttpconstants.h
deleted file mode 100755
index d6bcbd3c19..0000000000
--- a/indra/llmessage/llhttpconstants.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * @file llhttpconstants.h
- * @brief Constants for HTTP requests and responses
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2001-2014, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_HTTP_CONSTANTS_H
-#define LL_HTTP_CONSTANTS_H
-
-#include "stdtypes.h"
-
-/////// HTTP STATUS CODES ///////
-
-// Standard errors from HTTP spec:
-// http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1
-const S32 HTTP_CONTINUE = 100;
-const S32 HTTP_SWITCHING_PROTOCOLS = 101;
-
-// Success
-const S32 HTTP_OK = 200;
-const S32 HTTP_CREATED = 201;
-const S32 HTTP_ACCEPTED = 202;
-const S32 HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
-const S32 HTTP_NO_CONTENT = 204;
-const S32 HTTP_RESET_CONTENT = 205;
-const S32 HTTP_PARTIAL_CONTENT = 206;
-
-// Redirection
-const S32 HTTP_MULTIPLE_CHOICES = 300;
-const S32 HTTP_MOVED_PERMANENTLY = 301;
-const S32 HTTP_FOUND = 302;
-const S32 HTTP_SEE_OTHER = 303;
-const S32 HTTP_NOT_MODIFIED = 304;
-const S32 HTTP_USE_PROXY = 305;
-const S32 HTTP_TEMPORARY_REDIRECT = 307;
-
-// Client Error
-const S32 HTTP_BAD_REQUEST = 400;
-const S32 HTTP_UNAUTHORIZED = 401;
-const S32 HTTP_PAYMENT_REQUIRED = 402;
-const S32 HTTP_FORBIDDEN = 403;
-const S32 HTTP_NOT_FOUND = 404;
-const S32 HTTP_METHOD_NOT_ALLOWED = 405;
-const S32 HTTP_NOT_ACCEPTABLE = 406;
-const S32 HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
-const S32 HTTP_REQUEST_TIME_OUT = 408;
-const S32 HTTP_CONFLICT = 409;
-const S32 HTTP_GONE = 410;
-const S32 HTTP_LENGTH_REQUIRED = 411;
-const S32 HTTP_PRECONDITION_FAILED = 412;
-const S32 HTTP_REQUEST_ENTITY_TOO_LARGE = 413;
-const S32 HTTP_REQUEST_URI_TOO_LARGE = 414;
-const S32 HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
-const S32 HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
-const S32 HTTP_EXPECTATION_FAILED = 417;
-
-// Server Error
-const S32 HTTP_INTERNAL_SERVER_ERROR = 500;
-const S32 HTTP_NOT_IMPLEMENTED = 501;
-const S32 HTTP_BAD_GATEWAY = 502;
-const S32 HTTP_SERVICE_UNAVAILABLE = 503;
-const S32 HTTP_GATEWAY_TIME_OUT = 504;
-const S32 HTTP_VERSION_NOT_SUPPORTED = 505;
-
-// We combine internal process errors with status codes
-// These status codes should not be sent over the wire
-// and indicate something went wrong internally.
-// If you get these they are not normal.
-const S32 HTTP_INTERNAL_CURL_ERROR = 498;
-const S32 HTTP_INTERNAL_ERROR = 499;
-
-
-////// HTTP Methods //////
-
-extern const std::string HTTP_VERB_INVALID;
-extern const std::string HTTP_VERB_HEAD;
-extern const std::string HTTP_VERB_GET;
-extern const std::string HTTP_VERB_PUT;
-extern const std::string HTTP_VERB_POST;
-extern const std::string HTTP_VERB_DELETE;
-extern const std::string HTTP_VERB_MOVE;
-extern const std::string HTTP_VERB_OPTIONS;
-
-enum EHTTPMethod
-{
- HTTP_INVALID = 0,
- HTTP_HEAD,
- HTTP_GET,
- HTTP_PUT,
- HTTP_POST,
- HTTP_DELETE,
- HTTP_MOVE, // Caller will need to set 'Destination' header
- HTTP_OPTIONS,
- HTTP_PATCH,
- HTTP_COPY,
- HTTP_METHOD_COUNT
-};
-
-const std::string& httpMethodAsVerb(EHTTPMethod method);
-bool isHttpInformationalStatus(S32 status);
-bool isHttpGoodStatus(S32 status);
-bool isHttpRedirectStatus(S32 status);
-bool isHttpClientErrorStatus(S32 status);
-bool isHttpServerErrorStatus(S32 status);
-
-// Parses 'Retry-After' header contents and returns seconds until retry should occur.
-bool getSecondsUntilRetryAfter(const std::string& retry_after, F32& seconds_to_wait);
-
-//// HTTP Headers /////
-
-// Outgoing headers. Do *not* use these to check incoming headers.
-// For incoming headers, use the lower-case headers, below.
-extern const std::string HTTP_OUT_HEADER_ACCEPT;
-extern const std::string HTTP_OUT_HEADER_ACCEPT_CHARSET;
-extern const std::string HTTP_OUT_HEADER_ACCEPT_ENCODING;
-extern const std::string HTTP_OUT_HEADER_ACCEPT_LANGUAGE;
-extern const std::string HTTP_OUT_HEADER_ACCEPT_RANGES;
-extern const std::string HTTP_OUT_HEADER_AGE;
-extern const std::string HTTP_OUT_HEADER_ALLOW;
-extern const std::string HTTP_OUT_HEADER_AUTHORIZATION;
-extern const std::string HTTP_OUT_HEADER_CACHE_CONTROL;
-extern const std::string HTTP_OUT_HEADER_CONNECTION;
-extern const std::string HTTP_OUT_HEADER_CONTENT_DESCRIPTION;
-extern const std::string HTTP_OUT_HEADER_CONTENT_ENCODING;
-extern const std::string HTTP_OUT_HEADER_CONTENT_ID;
-extern const std::string HTTP_OUT_HEADER_CONTENT_LANGUAGE;
-extern const std::string HTTP_OUT_HEADER_CONTENT_LENGTH;
-extern const std::string HTTP_OUT_HEADER_CONTENT_LOCATION;
-extern const std::string HTTP_OUT_HEADER_CONTENT_MD5;
-extern const std::string HTTP_OUT_HEADER_CONTENT_RANGE;
-extern const std::string HTTP_OUT_HEADER_CONTENT_TRANSFER_ENCODING;
-extern const std::string HTTP_OUT_HEADER_CONTENT_TYPE;
-extern const std::string HTTP_OUT_HEADER_COOKIE;
-extern const std::string HTTP_OUT_HEADER_DATE;
-extern const std::string HTTP_OUT_HEADER_DESTINATION;
-extern const std::string HTTP_OUT_HEADER_ETAG;
-extern const std::string HTTP_OUT_HEADER_EXPECT;
-extern const std::string HTTP_OUT_HEADER_EXPIRES;
-extern const std::string HTTP_OUT_HEADER_FROM;
-extern const std::string HTTP_OUT_HEADER_HOST;
-extern const std::string HTTP_OUT_HEADER_IF_MATCH;
-extern const std::string HTTP_OUT_HEADER_IF_MODIFIED_SINCE;
-extern const std::string HTTP_OUT_HEADER_IF_NONE_MATCH;
-extern const std::string HTTP_OUT_HEADER_IF_RANGE;
-extern const std::string HTTP_OUT_HEADER_IF_UNMODIFIED_SINCE;
-extern const std::string HTTP_OUT_HEADER_KEEP_ALIVE;
-extern const std::string HTTP_OUT_HEADER_LAST_MODIFIED;
-extern const std::string HTTP_OUT_HEADER_LOCATION;
-extern const std::string HTTP_OUT_HEADER_MAX_FORWARDS;
-extern const std::string HTTP_OUT_HEADER_MIME_VERSION;
-extern const std::string HTTP_OUT_HEADER_PRAGMA;
-extern const std::string HTTP_OUT_HEADER_PROXY_AUTHENTICATE;
-extern const std::string HTTP_OUT_HEADER_PROXY_AUTHORIZATION;
-extern const std::string HTTP_OUT_HEADER_RANGE;
-extern const std::string HTTP_OUT_HEADER_REFERER;
-extern const std::string HTTP_OUT_HEADER_RETRY_AFTER;
-extern const std::string HTTP_OUT_HEADER_SERVER;
-extern const std::string HTTP_OUT_HEADER_SET_COOKIE;
-extern const std::string HTTP_OUT_HEADER_TE;
-extern const std::string HTTP_OUT_HEADER_TRAILER;
-extern const std::string HTTP_OUT_HEADER_TRANSFER_ENCODING;
-extern const std::string HTTP_OUT_HEADER_UPGRADE;
-extern const std::string HTTP_OUT_HEADER_USER_AGENT;
-extern const std::string HTTP_OUT_HEADER_VARY;
-extern const std::string HTTP_OUT_HEADER_VIA;
-extern const std::string HTTP_OUT_HEADER_WARNING;
-extern const std::string HTTP_OUT_HEADER_WWW_AUTHENTICATE;
-
-// Incoming headers are normalized to lower-case.
-extern const std::string HTTP_IN_HEADER_ACCEPT_LANGUAGE;
-extern const std::string HTTP_IN_HEADER_CACHE_CONTROL;
-extern const std::string HTTP_IN_HEADER_CONTENT_LENGTH;
-extern const std::string HTTP_IN_HEADER_CONTENT_LOCATION;
-extern const std::string HTTP_IN_HEADER_CONTENT_TYPE;
-extern const std::string HTTP_IN_HEADER_HOST;
-extern const std::string HTTP_IN_HEADER_LOCATION;
-extern const std::string HTTP_IN_HEADER_RETRY_AFTER;
-extern const std::string HTTP_IN_HEADER_SET_COOKIE;
-extern const std::string HTTP_IN_HEADER_USER_AGENT;
-extern const std::string HTTP_IN_HEADER_X_FORWARDED_FOR;
-
-//// HTTP Content Types ////
-
-extern const std::string HTTP_CONTENT_LLSD_XML;
-extern const std::string HTTP_CONTENT_OCTET_STREAM;
-extern const std::string HTTP_CONTENT_VND_LL_MESH;
-extern const std::string HTTP_CONTENT_XML;
-extern const std::string HTTP_CONTENT_JSON;
-extern const std::string HTTP_CONTENT_TEXT_HTML;
-extern const std::string HTTP_CONTENT_TEXT_HTML_UTF8;
-extern const std::string HTTP_CONTENT_TEXT_PLAIN_UTF8;
-extern const std::string HTTP_CONTENT_TEXT_LLSD;
-extern const std::string HTTP_CONTENT_TEXT_XML;
-extern const std::string HTTP_CONTENT_TEXT_LSL;
-extern const std::string HTTP_CONTENT_TEXT_PLAIN;
-extern const std::string HTTP_CONTENT_IMAGE_X_J2C;
-extern const std::string HTTP_CONTENT_IMAGE_J2C;
-extern const std::string HTTP_CONTENT_IMAGE_JPEG;
-extern const std::string HTTP_CONTENT_IMAGE_PNG;
-extern const std::string HTTP_CONTENT_IMAGE_BMP;
-
-//// HTTP Cache Settings ////
-extern const std::string HTTP_NO_CACHE;
-extern const std::string HTTP_NO_CACHE_CONTROL;
-
-#endif
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
index c25f1ec5e5..537efa69d8 100755
--- a/indra/llmessage/llproxy.cpp
+++ b/indra/llmessage/llproxy.cpp
@@ -30,9 +30,8 @@
#include <string>
#include <curl/curl.h>
-
+#include "httpcommon.h"
#include "llapr.h"
-#include "llcurl.h"
#include "llhost.h"
// Static class variable instances
@@ -429,21 +428,21 @@ void LLProxy::applyProxySettings(CURL* handle)
// Now test again to verify that the proxy wasn't disabled between the first check and the lock.
if (mHTTPProxyEnabled)
{
- LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXY, mHTTPProxy.getIPString().c_str()));
- LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYPORT, mHTTPProxy.getPort()));
+ LLCore::LLHttp::check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXY, mHTTPProxy.getIPString().c_str()), CURLOPT_PROXY);
+ LLCore::LLHttp::check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYPORT, mHTTPProxy.getPort()), CURLOPT_PROXYPORT);
if (mProxyType == LLPROXY_SOCKS)
{
- LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5));
+ LLCore::LLHttp::check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5), CURLOPT_PROXYTYPE);
if (mAuthMethodSelected == METHOD_PASSWORD)
{
std::string auth_string = mSocksUsername + ":" + mSocksPassword;
- LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, auth_string.c_str()));
+ LLCore::LLHttp::check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, auth_string.c_str()), CURLOPT_PROXYUSERPWD);
}
}
else
{
- LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP));
+ LLCore::LLHttp::check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP), CURLOPT_PROXYTYPE);
}
}
}
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
index da965219fa..bd23dd39de 100755
--- a/indra/llmessage/llproxy.h
+++ b/indra/llmessage/llproxy.h
@@ -27,12 +27,12 @@
#ifndef LL_PROXY_H
#define LL_PROXY_H
-#include "llcurl.h"
#include "llhost.h"
#include "lliosocket.h"
#include "llmemory.h"
#include "llsingleton.h"
#include "llthread.h"
+#include <curl/curl.h>
#include <string>
// SOCKS error codes returned from the StartProxy method
diff --git a/indra/llmessage/lltrustedmessageservice.cpp b/indra/llmessage/lltrustedmessageservice.cpp
index 5bd1112cfe..33944f7883 100755
--- a/indra/llmessage/lltrustedmessageservice.cpp
+++ b/indra/llmessage/lltrustedmessageservice.cpp
@@ -30,6 +30,7 @@
#include "llhost.h"
#include "llmessageconfig.h"
#include "message.h"
+#include "llhttpconstants.h"
bool LLTrustedMessageService::validate(const std::string& name, LLSD& context)
diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
index fc391da633..133db620e6 100755
--- a/indra/llmessage/message.h
+++ b/indra/llmessage/message.h
@@ -50,7 +50,6 @@
#include "lltimer.h"
#include "llpacketring.h"
#include "llhost.h"
-#include "llcurl.h"
#include "llhttpnode.h"
//#include "llpacketack.h"
#include "llsingleton.h"