summaryrefslogtreecommitdiff
path: root/indra/llcorehttp/httprequest.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcorehttp/httprequest.h')
-rw-r--r--indra/llcorehttp/httprequest.h1004
1 files changed, 502 insertions, 502 deletions
diff --git a/indra/llcorehttp/httprequest.h b/indra/llcorehttp/httprequest.h
index 857a034a7b..e6e051410e 100644
--- a/indra/llcorehttp/httprequest.h
+++ b/indra/llcorehttp/httprequest.h
@@ -24,8 +24,8 @@
* $/LicenseInfo$
*/
-#ifndef _LLCORE_HTTP_REQUEST_H_
-#define _LLCORE_HTTP_REQUEST_H_
+#ifndef _LLCORE_HTTP_REQUEST_H_
+#define _LLCORE_HTTP_REQUEST_H_
#include "httpcommon.h"
@@ -86,398 +86,398 @@ class BufferArray;
class HttpRequest
{
public:
- HttpRequest();
- virtual ~HttpRequest();
+ HttpRequest();
+ virtual ~HttpRequest();
private:
- HttpRequest(const HttpRequest &); // Disallowed
- void operator=(const HttpRequest &); // Disallowed
+ HttpRequest(const HttpRequest &); // Disallowed
+ void operator=(const HttpRequest &); // Disallowed
public:
- typedef unsigned int policy_t;
-
- typedef std::shared_ptr<HttpRequest> ptr_t;
+ typedef unsigned int policy_t;
+
+ typedef std::shared_ptr<HttpRequest> ptr_t;
typedef std::weak_ptr<HttpRequest> wptr_t;
public:
- /// @name PolicyMethods
- /// @{
-
- /// Represents a default, catch-all policy class that guarantees
- /// eventual service for any HTTP request.
- static const policy_t DEFAULT_POLICY_ID = 0;
- static const policy_t INVALID_POLICY_ID = 0xFFFFFFFFU;
- static const policy_t GLOBAL_POLICY_ID = 0xFFFFFFFEU;
-
- /// Create a new policy class into which requests can be made.
- ///
- /// All class creation must occur before threads are started and
- /// transport begins. Policy classes are limited to a small value.
- /// Currently that limit is the default class + 1.
- ///
- /// @return If positive, the policy_id used to reference
- /// the class in other methods. If 0, requests
- /// for classes have exceeded internal limits
- /// or caller has tried to create a class after
- /// threads have been started. Caller must fallback
- /// and recover.
- ///
- static policy_t createPolicyClass();
-
- enum EPolicyOption
- {
- /// Maximum number of connections the library will use to
- /// perform operations. This is somewhat soft as the underlying
- /// transport will cache some connections (up to 5).
-
- /// A long value setting the maximum number of connections
- /// allowed over all policy classes. Note that this will be
- /// a somewhat soft value. There may be an additional five
- /// connections per policy class depending upon runtime
- /// behavior.
- ///
- /// Both global and per-class
- PO_CONNECTION_LIMIT,
-
- /// Limits the number of connections used for a single
- /// literal address/port pair within the class.
- ///
- /// Per-class only
- PO_PER_HOST_CONNECTION_LIMIT,
-
- /// String containing a system-appropriate directory name
- /// where SSL certs are stored.
- ///
- /// Global only
- PO_CA_PATH,
-
- /// String giving a full path to a file containing SSL certs.
- ///
- /// Global only
- PO_CA_FILE,
-
- /// String of host/port to use as simple HTTP proxy. This is
- /// going to change in the future into something more elaborate
- /// that may support richer schemes.
- ///
- /// Global only
- PO_HTTP_PROXY,
-
- /// Long value that if non-zero enables the use of the
- /// traditional LLProxy code for http/socks5 support. If
- /// enabled, has priority over GP_HTTP_PROXY.
- ///
- /// Global only
- PO_LLPROXY,
-
- /// Long value setting the logging trace level for the
- /// library. Possible values are:
- /// 0 - No tracing (default)
- /// 1 - Basic tracing of request start, stop and major events.
- /// 2 - Connection, header and payload size information from
- /// HTTP transactions.
- /// 3 - Partial logging of payload itself.
- ///
- /// These values are also used in the trace modes for
- /// individual requests in HttpOptions. Also be aware that
- /// tracing tends to impact performance of the viewer.
- ///
- /// Global only
- PO_TRACE,
-
- /// If greater than 1, suitable requests are allowed to
- /// pipeline on their connections when they ask for it.
- /// Value gives the maximum number of outstanding requests
- /// on a connection.
- ///
- /// There is some interaction between PO_CONNECTION_LIMIT,
- /// PO_PER_HOST_CONNECTION_LIMIT, and PO_PIPELINING_DEPTH.
- /// When PIPELINING_DEPTH is 0 or 1 (no pipelining), this
- /// library manages connection lifecycle and honors the
- /// PO_CONNECTION_LIMIT setting as the maximum in-flight
- /// request limit. Libcurl itself may be caching additional
- /// connections under its connection cache policy.
- ///
- /// When PIPELINING_DEPTH is 2 or more, libcurl performs
- /// connection management and both PO_CONNECTION_LIMIT and
- /// PO_PER_HOST_CONNECTION_LIMIT should be set and non-zero.
- /// In this case (as of libcurl 7.37.0), libcurl will
- /// open new connections in preference to pipelining, up
- /// to the above limits at which time pipelining begins.
- /// And as usual, an additional cache of open but inactive
- /// connections may still be maintained within libcurl.
- /// For SL, a good rule-of-thumb is to set
- /// PO_PER_HOST_CONNECTION_LIMIT to the user-visible
- /// concurrency value and PO_CONNECTION_LIMIT to twice
- /// that for baked texture loads and region crossings where
- /// additional connection load will be tolerated. If
- /// either limit is 0, libcurl will prefer pipelining
- /// over connection creation, which is still interesting,
- /// but won't be pursued at this time.
- ///
- /// Per-class only
- PO_PIPELINING_DEPTH,
-
- /// Controls whether client-side throttling should be
- /// performed on this policy class. Positive values
- /// enable throttling and specify the request rate
- /// (requests per second) that should be targeted.
- /// A value of zero, the default, specifies no throttling.
- ///
- /// Per-class only
- PO_THROTTLE_RATE,
-
- /// Controls the callback function used to control SSL CTX
- /// certificate verification.
- ///
- /// Global only
- PO_SSL_VERIFY_CALLBACK,
-
- PO_LAST // Always at end
- };
-
- /// Prototype for policy based callbacks. The callback methods will be executed
- /// on the worker thread so no modifications should be made to the HttpHandler object.
+ /// @name PolicyMethods
+ /// @{
+
+ /// Represents a default, catch-all policy class that guarantees
+ /// eventual service for any HTTP request.
+ static const policy_t DEFAULT_POLICY_ID = 0;
+ static const policy_t INVALID_POLICY_ID = 0xFFFFFFFFU;
+ static const policy_t GLOBAL_POLICY_ID = 0xFFFFFFFEU;
+
+ /// Create a new policy class into which requests can be made.
+ ///
+ /// All class creation must occur before threads are started and
+ /// transport begins. Policy classes are limited to a small value.
+ /// Currently that limit is the default class + 1.
+ ///
+ /// @return If positive, the policy_id used to reference
+ /// the class in other methods. If 0, requests
+ /// for classes have exceeded internal limits
+ /// or caller has tried to create a class after
+ /// threads have been started. Caller must fallback
+ /// and recover.
+ ///
+ static policy_t createPolicyClass();
+
+ enum EPolicyOption
+ {
+ /// Maximum number of connections the library will use to
+ /// perform operations. This is somewhat soft as the underlying
+ /// transport will cache some connections (up to 5).
+
+ /// A long value setting the maximum number of connections
+ /// allowed over all policy classes. Note that this will be
+ /// a somewhat soft value. There may be an additional five
+ /// connections per policy class depending upon runtime
+ /// behavior.
+ ///
+ /// Both global and per-class
+ PO_CONNECTION_LIMIT,
+
+ /// Limits the number of connections used for a single
+ /// literal address/port pair within the class.
+ ///
+ /// Per-class only
+ PO_PER_HOST_CONNECTION_LIMIT,
+
+ /// String containing a system-appropriate directory name
+ /// where SSL certs are stored.
+ ///
+ /// Global only
+ PO_CA_PATH,
+
+ /// String giving a full path to a file containing SSL certs.
+ ///
+ /// Global only
+ PO_CA_FILE,
+
+ /// String of host/port to use as simple HTTP proxy. This is
+ /// going to change in the future into something more elaborate
+ /// that may support richer schemes.
+ ///
+ /// Global only
+ PO_HTTP_PROXY,
+
+ /// Long value that if non-zero enables the use of the
+ /// traditional LLProxy code for http/socks5 support. If
+ /// enabled, has priority over GP_HTTP_PROXY.
+ ///
+ /// Global only
+ PO_LLPROXY,
+
+ /// Long value setting the logging trace level for the
+ /// library. Possible values are:
+ /// 0 - No tracing (default)
+ /// 1 - Basic tracing of request start, stop and major events.
+ /// 2 - Connection, header and payload size information from
+ /// HTTP transactions.
+ /// 3 - Partial logging of payload itself.
+ ///
+ /// These values are also used in the trace modes for
+ /// individual requests in HttpOptions. Also be aware that
+ /// tracing tends to impact performance of the viewer.
+ ///
+ /// Global only
+ PO_TRACE,
+
+ /// If greater than 1, suitable requests are allowed to
+ /// pipeline on their connections when they ask for it.
+ /// Value gives the maximum number of outstanding requests
+ /// on a connection.
+ ///
+ /// There is some interaction between PO_CONNECTION_LIMIT,
+ /// PO_PER_HOST_CONNECTION_LIMIT, and PO_PIPELINING_DEPTH.
+ /// When PIPELINING_DEPTH is 0 or 1 (no pipelining), this
+ /// library manages connection lifecycle and honors the
+ /// PO_CONNECTION_LIMIT setting as the maximum in-flight
+ /// request limit. Libcurl itself may be caching additional
+ /// connections under its connection cache policy.
+ ///
+ /// When PIPELINING_DEPTH is 2 or more, libcurl performs
+ /// connection management and both PO_CONNECTION_LIMIT and
+ /// PO_PER_HOST_CONNECTION_LIMIT should be set and non-zero.
+ /// In this case (as of libcurl 7.37.0), libcurl will
+ /// open new connections in preference to pipelining, up
+ /// to the above limits at which time pipelining begins.
+ /// And as usual, an additional cache of open but inactive
+ /// connections may still be maintained within libcurl.
+ /// For SL, a good rule-of-thumb is to set
+ /// PO_PER_HOST_CONNECTION_LIMIT to the user-visible
+ /// concurrency value and PO_CONNECTION_LIMIT to twice
+ /// that for baked texture loads and region crossings where
+ /// additional connection load will be tolerated. If
+ /// either limit is 0, libcurl will prefer pipelining
+ /// over connection creation, which is still interesting,
+ /// but won't be pursued at this time.
+ ///
+ /// Per-class only
+ PO_PIPELINING_DEPTH,
+
+ /// Controls whether client-side throttling should be
+ /// performed on this policy class. Positive values
+ /// enable throttling and specify the request rate
+ /// (requests per second) that should be targeted.
+ /// A value of zero, the default, specifies no throttling.
+ ///
+ /// Per-class only
+ PO_THROTTLE_RATE,
+
+ /// Controls the callback function used to control SSL CTX
+ /// certificate verification.
+ ///
+ /// Global only
+ PO_SSL_VERIFY_CALLBACK,
+
+ PO_LAST // Always at end
+ };
+
+ /// Prototype for policy based callbacks. The callback methods will be executed
+ /// on the worker thread so no modifications should be made to the HttpHandler object.
typedef boost::function<HttpStatus(const std::string &, const HttpHandler::ptr_t &, void *)> policyCallback_t;
- /// Set a policy option for a global or class parameter at
- /// startup time (prior to thread start).
- ///
- /// @param opt Enum of option to be set.
- /// @param pclass For class-based options, the policy class ID to
- /// be changed. For globals, specify GLOBAL_POLICY_ID.
- /// @param value Desired value of option.
- /// @param ret_value Pointer to receive effective set value
- /// if successful. May be NULL if effective
- /// value not wanted.
- /// @return Standard status code.
- static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
- long value, long * ret_value);
- static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
- const std::string & value, std::string * ret_value);
- static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
- policyCallback_t value, policyCallback_t * ret_value);;
-
- /// Set a parameter on a class-based policy option. Calls
- /// made after the start of the servicing thread are
- /// not honored and return an error status.
- ///
- /// @param opt Enum of option to be set.
- /// @param pclass For class-based options, the policy class ID to
- /// be changed. Ignored for globals but recommend
- /// using INVALID_POLICY_ID in this case.
- /// @param value Desired value of option.
- /// @return Handle of dynamic request. Use @see getStatus() if
- /// the returned handle is invalid.
- HttpHandle setPolicyOption(EPolicyOption opt, policy_t pclass, long value,
- HttpHandler::ptr_t handler);
- HttpHandle setPolicyOption(EPolicyOption opt, policy_t pclass, const std::string & value,
- HttpHandler::ptr_t handler);
-
- /// @}
-
- /// @name RequestMethods
- ///
- /// @{
-
- /// Some calls expect to succeed as the normal part of operation and so
- /// return a useful value rather than a status. When they do fail, the
- /// status is saved and can be fetched with this method.
- ///
- /// @return Status of the failing method invocation. If the
- /// preceding call succeeded or other HttpStatus
- /// returning calls immediately preceded this method,
- /// the returned value may not be reliable.
- ///
- HttpStatus getStatus() const;
-
- /// Queue a full HTTP GET request to be issued for entire entity.
- /// The request is queued and serviced by the working thread and
- /// notification of completion delivered to the optional HttpHandler
- /// argument during @see update() calls.
- ///
- /// With a valid handle returned, it can be used to reference the
- /// request in other requests (like cancellation) and will be an
- /// argument when any HttpHandler object is invoked.
- ///
- /// Headers supplied by default:
- /// - Connection: keep-alive
- /// - Accept: */*
- /// - Accept-Encoding: deflate, gzip
- /// - Keep-alive: 300
- /// - Host: <stuff>
- ///
- /// Some headers excluded by default:
- /// - Pragma:
- /// - Cache-control:
- /// - Range:
- /// - Transfer-Encoding:
- /// - Referer:
- ///
- /// @param policy_id Default or user-defined policy class under
- /// which this request is to be serviced.
- /// @param url URL with any encoded query parameters to
- /// be accessed.
- /// @param options Optional instance of an HttpOptions object
- /// to provide additional controls over the request
- /// function for this request only. Any such
- /// object then becomes shared-read across threads
- /// and no code should modify the HttpOptions
- /// instance.
- /// @param headers Optional instance of an HttpHeaders object
- /// to provide additional and/or overridden
- /// headers for the request. As with options,
- /// the instance becomes shared-read across threads
- /// and no code should modify the HttpHeaders
- /// instance.
- /// @param handler Optional pointer to an HttpHandler instance
- /// whose onCompleted() method will be invoked
- /// during calls to update(). This is a non-
- /// reference-counted object which would be a
- /// problem for shutdown and other edge cases but
- /// the pointer is only dereferenced during
- /// calls to update().
- ///
- /// @return The handle of the request if successfully
- /// queued or LLCORE_HTTP_HANDLE_INVALID if the
- /// request could not be queued. In the latter
- /// case, @see getStatus() will return more info.
- ///
- HttpHandle requestGet(policy_t policy_id,
- const std::string & url,
+ /// Set a policy option for a global or class parameter at
+ /// startup time (prior to thread start).
+ ///
+ /// @param opt Enum of option to be set.
+ /// @param pclass For class-based options, the policy class ID to
+ /// be changed. For globals, specify GLOBAL_POLICY_ID.
+ /// @param value Desired value of option.
+ /// @param ret_value Pointer to receive effective set value
+ /// if successful. May be NULL if effective
+ /// value not wanted.
+ /// @return Standard status code.
+ static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
+ long value, long * ret_value);
+ static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
+ const std::string & value, std::string * ret_value);
+ static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,
+ policyCallback_t value, policyCallback_t * ret_value);;
+
+ /// Set a parameter on a class-based policy option. Calls
+ /// made after the start of the servicing thread are
+ /// not honored and return an error status.
+ ///
+ /// @param opt Enum of option to be set.
+ /// @param pclass For class-based options, the policy class ID to
+ /// be changed. Ignored for globals but recommend
+ /// using INVALID_POLICY_ID in this case.
+ /// @param value Desired value of option.
+ /// @return Handle of dynamic request. Use @see getStatus() if
+ /// the returned handle is invalid.
+ HttpHandle setPolicyOption(EPolicyOption opt, policy_t pclass, long value,
+ HttpHandler::ptr_t handler);
+ HttpHandle setPolicyOption(EPolicyOption opt, policy_t pclass, const std::string & value,
+ HttpHandler::ptr_t handler);
+
+ /// @}
+
+ /// @name RequestMethods
+ ///
+ /// @{
+
+ /// Some calls expect to succeed as the normal part of operation and so
+ /// return a useful value rather than a status. When they do fail, the
+ /// status is saved and can be fetched with this method.
+ ///
+ /// @return Status of the failing method invocation. If the
+ /// preceding call succeeded or other HttpStatus
+ /// returning calls immediately preceded this method,
+ /// the returned value may not be reliable.
+ ///
+ HttpStatus getStatus() const;
+
+ /// Queue a full HTTP GET request to be issued for entire entity.
+ /// The request is queued and serviced by the working thread and
+ /// notification of completion delivered to the optional HttpHandler
+ /// argument during @see update() calls.
+ ///
+ /// With a valid handle returned, it can be used to reference the
+ /// request in other requests (like cancellation) and will be an
+ /// argument when any HttpHandler object is invoked.
+ ///
+ /// Headers supplied by default:
+ /// - Connection: keep-alive
+ /// - Accept: */*
+ /// - Accept-Encoding: deflate, gzip
+ /// - Keep-alive: 300
+ /// - Host: <stuff>
+ ///
+ /// Some headers excluded by default:
+ /// - Pragma:
+ /// - Cache-control:
+ /// - Range:
+ /// - Transfer-Encoding:
+ /// - Referer:
+ ///
+ /// @param policy_id Default or user-defined policy class under
+ /// which this request is to be serviced.
+ /// @param url URL with any encoded query parameters to
+ /// be accessed.
+ /// @param options Optional instance of an HttpOptions object
+ /// to provide additional controls over the request
+ /// function for this request only. Any such
+ /// object then becomes shared-read across threads
+ /// and no code should modify the HttpOptions
+ /// instance.
+ /// @param headers Optional instance of an HttpHeaders object
+ /// to provide additional and/or overridden
+ /// headers for the request. As with options,
+ /// the instance becomes shared-read across threads
+ /// and no code should modify the HttpHeaders
+ /// instance.
+ /// @param handler Optional pointer to an HttpHandler instance
+ /// whose onCompleted() method will be invoked
+ /// during calls to update(). This is a non-
+ /// reference-counted object which would be a
+ /// problem for shutdown and other edge cases but
+ /// the pointer is only dereferenced during
+ /// calls to update().
+ ///
+ /// @return The handle of the request if successfully
+ /// queued or LLCORE_HTTP_HANDLE_INVALID if the
+ /// request could not be queued. In the latter
+ /// case, @see getStatus() will return more info.
+ ///
+ HttpHandle requestGet(policy_t policy_id,
+ const std::string & url,
const HttpOptions::ptr_t & options,
- const HttpHeaders::ptr_t & headers,
- HttpHandler::ptr_t handler);
-
-
- /// Queue a full HTTP GET request to be issued with a 'Range' header.
- /// The request is queued and serviced by the working thread and
- /// notification of completion delivered to the optional HttpHandler
- /// argument during @see update() calls.
- ///
- /// With a valid handle returned, it can be used to reference the
- /// request in other requests (like cancellation) and will be an
- /// argument when any HttpHandler object is invoked.
- ///
- /// Headers supplied by default:
- /// - Connection: keep-alive
- /// - Accept: */*
- /// - Accept-Encoding: deflate, gzip
- /// - Keep-alive: 300
- /// - Host: <stuff>
- /// - Range: <stuff> (will be omitted if offset == 0 and len == 0)
- ///
- /// Some headers excluded by default:
- /// - Pragma:
- /// - Cache-control:
- /// - Transfer-Encoding:
- /// - Referer:
- ///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param offset Offset of first byte into resource to be returned.
- /// @param len Count of bytes to be returned
- /// @param options @see requestGet()
- /// @param headers "
- /// @param handler "
- /// @return "
- ///
- HttpHandle requestGetByteRange(policy_t policy_id,
- const std::string & url,
- size_t offset,
- size_t len,
+ const HttpHeaders::ptr_t & headers,
+ HttpHandler::ptr_t handler);
+
+
+ /// Queue a full HTTP GET request to be issued with a 'Range' header.
+ /// The request is queued and serviced by the working thread and
+ /// notification of completion delivered to the optional HttpHandler
+ /// argument during @see update() calls.
+ ///
+ /// With a valid handle returned, it can be used to reference the
+ /// request in other requests (like cancellation) and will be an
+ /// argument when any HttpHandler object is invoked.
+ ///
+ /// Headers supplied by default:
+ /// - Connection: keep-alive
+ /// - Accept: */*
+ /// - Accept-Encoding: deflate, gzip
+ /// - Keep-alive: 300
+ /// - Host: <stuff>
+ /// - Range: <stuff> (will be omitted if offset == 0 and len == 0)
+ ///
+ /// Some headers excluded by default:
+ /// - Pragma:
+ /// - Cache-control:
+ /// - Transfer-Encoding:
+ /// - Referer:
+ ///
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param offset Offset of first byte into resource to be returned.
+ /// @param len Count of bytes to be returned
+ /// @param options @see requestGet()
+ /// @param headers "
+ /// @param handler "
+ /// @return "
+ ///
+ HttpHandle requestGetByteRange(policy_t policy_id,
+ const std::string & url,
+ size_t offset,
+ size_t len,
const HttpOptions::ptr_t & options,
- const HttpHeaders::ptr_t & headers,
- HttpHandler::ptr_t handler);
-
-
- /// Queue a full HTTP POST. Query arguments and body may
- /// be provided. Caller is responsible for escaping and
- /// encoding and communicating the content types.
- ///
- /// Headers supplied by default:
- /// - Connection: keep-alive
- /// - Accept: */*
- /// - Accept-Encoding: deflate, gzip
- /// - Keep-Alive: 300
- /// - Host: <stuff>
- /// - Content-Length: <digits>
- /// - Content-Type: application/x-www-form-urlencoded
- ///
- /// Some headers excluded by default:
- /// - Pragma:
- /// - Cache-Control:
- /// - Transfer-Encoding: ... chunked ...
- /// - Referer:
- /// - Content-Encoding:
- /// - Expect:
- ///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param body Byte stream to be sent as the body. No
- /// further encoding or escaping will be done
- /// to the content.
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
- ///
- HttpHandle requestPost(policy_t policy_id,
- const std::string & url,
- BufferArray * body,
+ const HttpHeaders::ptr_t & headers,
+ HttpHandler::ptr_t handler);
+
+
+ /// Queue a full HTTP POST. Query arguments and body may
+ /// be provided. Caller is responsible for escaping and
+ /// encoding and communicating the content types.
+ ///
+ /// Headers supplied by default:
+ /// - Connection: keep-alive
+ /// - Accept: */*
+ /// - Accept-Encoding: deflate, gzip
+ /// - Keep-Alive: 300
+ /// - Host: <stuff>
+ /// - Content-Length: <digits>
+ /// - Content-Type: application/x-www-form-urlencoded
+ ///
+ /// Some headers excluded by default:
+ /// - Pragma:
+ /// - Cache-Control:
+ /// - Transfer-Encoding: ... chunked ...
+ /// - Referer:
+ /// - Content-Encoding:
+ /// - Expect:
+ ///
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param body Byte stream to be sent as the body. No
+ /// further encoding or escaping will be done
+ /// to the content.
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
+ ///
+ HttpHandle requestPost(policy_t policy_id,
+ const std::string & url,
+ BufferArray * body,
const HttpOptions::ptr_t & options,
- const HttpHeaders::ptr_t & headers,
- HttpHandler::ptr_t handler);
-
-
- /// Queue a full HTTP PUT. Query arguments and body may
- /// be provided. Caller is responsible for escaping and
- /// encoding and communicating the content types.
- ///
- /// Headers supplied by default:
- /// - Connection: keep-alive
- /// - Accept: */*
- /// - Accept-Encoding: deflate, gzip
- /// - Keep-Alive: 300
- /// - Host: <stuff>
- /// - Content-Length: <digits>
- ///
- /// Some headers excluded by default:
- /// - Pragma:
- /// - Cache-Control:
- /// - Transfer-Encoding: ... chunked ...
- /// - Referer:
- /// - Content-Encoding:
- /// - Expect:
- /// - Content-Type:
- ///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param body Byte stream to be sent as the body. No
- /// further encoding or escaping will be done
- /// to the content.
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
- ///
- HttpHandle requestPut(policy_t policy_id,
- const std::string & url,
- BufferArray * body,
+ const HttpHeaders::ptr_t & headers,
+ HttpHandler::ptr_t handler);
+
+
+ /// Queue a full HTTP PUT. Query arguments and body may
+ /// be provided. Caller is responsible for escaping and
+ /// encoding and communicating the content types.
+ ///
+ /// Headers supplied by default:
+ /// - Connection: keep-alive
+ /// - Accept: */*
+ /// - Accept-Encoding: deflate, gzip
+ /// - Keep-Alive: 300
+ /// - Host: <stuff>
+ /// - Content-Length: <digits>
+ ///
+ /// Some headers excluded by default:
+ /// - Pragma:
+ /// - Cache-Control:
+ /// - Transfer-Encoding: ... chunked ...
+ /// - Referer:
+ /// - Content-Encoding:
+ /// - Expect:
+ /// - Content-Type:
+ ///
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param body Byte stream to be sent as the body. No
+ /// further encoding or escaping will be done
+ /// to the content.
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
+ ///
+ HttpHandle requestPut(policy_t policy_id,
+ const std::string & url,
+ BufferArray * body,
const HttpOptions::ptr_t & options,
- const HttpHeaders::ptr_t & headers,
- HttpHandler::ptr_t handler);
+ const HttpHeaders::ptr_t & headers,
+ HttpHandler::ptr_t handler);
/// Queue a full HTTP DELETE. Query arguments and body may
/// be provided. Caller is responsible for escaping and
/// encoding and communicating the content types.
///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
///
HttpHandle requestDelete(policy_t policy_id,
const std::string & url,
@@ -489,15 +489,15 @@ public:
/// be provided. Caller is responsible for escaping and
/// encoding and communicating the content types.
///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param body Byte stream to be sent as the body. No
- /// further encoding or escaping will be done
- /// to the content.
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param body Byte stream to be sent as the body. No
+ /// further encoding or escaping will be done
+ /// to the content.
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
///
HttpHandle requestPatch(policy_t policy_id,
const std::string & url,
@@ -510,12 +510,12 @@ public:
/// be provided. Caller is responsible for escaping and
/// encoding and communicating the content types.
///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
///
HttpHandle requestCopy(policy_t policy_id,
const std::string & url,
@@ -527,12 +527,12 @@ public:
/// be provided. Caller is responsible for escaping and
/// encoding and communicating the content types.
///
- /// @param policy_id @see requestGet()
- /// @param url "
- /// @param options @see requestGet()K(optional)
- /// @param headers "
- /// @param handler "
- /// @return "
+ /// @param policy_id @see requestGet()
+ /// @param url "
+ /// @param options @see requestGet()K(optional)
+ /// @param headers "
+ /// @param handler "
+ /// @return "
///
HttpHandle requestMove(policy_t policy_id,
const std::string & url,
@@ -541,115 +541,115 @@ public:
HttpHandler::ptr_t user_handler);
/// Queue a NoOp request.
- /// The request is queued and serviced by the working thread which
- /// immediately processes it and returns the request to the reply
- /// queue.
- ///
- /// @param handler @see requestGet()
- /// @return "
- ///
- HttpHandle requestNoOp(HttpHandler::ptr_t handler);
-
- /// While all the heavy work is done by the worker thread, notifications
- /// must be performed in the context of the application thread. These
- /// are done synchronously during calls to this method which gives the
- /// library control so notification can be performed. Application handlers
- /// are expected to return 'quickly' and do any significant processing
- /// outside of the notification callback to onCompleted().
- ///
- /// @param usecs Maximum number of wallclock microseconds to
- /// spend in the call. As hinted at above, this
- /// is partly a function of application code so it's
- /// a soft limit. A '0' value will run without
- /// time limit until everything queued has been
- /// delivered.
- ///
- /// @return Standard status code.
- HttpStatus update(long usecs);
-
- /// @}
-
- /// @name RequestMgmtMethods
- ///
- /// @{
-
- HttpHandle requestCancel(HttpHandle request, HttpHandler::ptr_t);
-
- /// @}
-
- /// @name UtilityMethods
- ///
- /// @{
-
- /// Initialization method that needs to be called before queueing any
- /// requests. Doesn't start the worker thread and may be called befoer
- /// or after policy setup.
- static HttpStatus createService();
-
- /// Mostly clean shutdown of services prior to exit. Caller is expected
- /// to have stopped a running worker thread before calling this.
- static HttpStatus destroyService();
-
- /// Called once after @see createService() to start the worker thread.
- /// Stopping the thread is achieved by requesting it via @see requestStopThread().
- /// May be called before or after requests are issued.
- static HttpStatus startThread();
-
- /// Queues a request to the worker thread to have it stop processing
- /// and exit (without exiting the program). When the operation is
- /// picked up by the worker thread, it immediately processes it and
- /// begins detaching from refcounted resources like request and
- /// reply queues and then returns to the host OS. It *does* queue a
- /// reply to give the calling application thread a notification that
- /// the operation has been performed.
- ///
- /// @param handler (optional)
- /// @return The handle of the request if successfully
- /// queued or LLCORE_HTTP_HANDLE_INVALID if the
- /// request could not be queued. In the latter
- /// case, @see getStatus() will return more info.
- /// As the request cannot be cancelled, the handle
- /// is generally not useful.
- ///
- HttpHandle requestStopThread(HttpHandler::ptr_t handler);
-
- /// Queue a Spin request.
- /// DEBUG/TESTING ONLY. This puts the worker into a CPU spin for
- /// test purposes.
- ///
- /// @param mode 0 for hard spin, 1 for soft spin
- /// @return Standard handle return cases.
- ///
- HttpHandle requestSpin(int mode);
-
- /// @}
-
+ /// The request is queued and serviced by the working thread which
+ /// immediately processes it and returns the request to the reply
+ /// queue.
+ ///
+ /// @param handler @see requestGet()
+ /// @return "
+ ///
+ HttpHandle requestNoOp(HttpHandler::ptr_t handler);
+
+ /// While all the heavy work is done by the worker thread, notifications
+ /// must be performed in the context of the application thread. These
+ /// are done synchronously during calls to this method which gives the
+ /// library control so notification can be performed. Application handlers
+ /// are expected to return 'quickly' and do any significant processing
+ /// outside of the notification callback to onCompleted().
+ ///
+ /// @param usecs Maximum number of wallclock microseconds to
+ /// spend in the call. As hinted at above, this
+ /// is partly a function of application code so it's
+ /// a soft limit. A '0' value will run without
+ /// time limit until everything queued has been
+ /// delivered.
+ ///
+ /// @return Standard status code.
+ HttpStatus update(long usecs);
+
+ /// @}
+
+ /// @name RequestMgmtMethods
+ ///
+ /// @{
+
+ HttpHandle requestCancel(HttpHandle request, HttpHandler::ptr_t);
+
+ /// @}
+
+ /// @name UtilityMethods
+ ///
+ /// @{
+
+ /// Initialization method that needs to be called before queueing any
+ /// requests. Doesn't start the worker thread and may be called befoer
+ /// or after policy setup.
+ static HttpStatus createService();
+
+ /// Mostly clean shutdown of services prior to exit. Caller is expected
+ /// to have stopped a running worker thread before calling this.
+ static HttpStatus destroyService();
+
+ /// Called once after @see createService() to start the worker thread.
+ /// Stopping the thread is achieved by requesting it via @see requestStopThread().
+ /// May be called before or after requests are issued.
+ static HttpStatus startThread();
+
+ /// Queues a request to the worker thread to have it stop processing
+ /// and exit (without exiting the program). When the operation is
+ /// picked up by the worker thread, it immediately processes it and
+ /// begins detaching from refcounted resources like request and
+ /// reply queues and then returns to the host OS. It *does* queue a
+ /// reply to give the calling application thread a notification that
+ /// the operation has been performed.
+ ///
+ /// @param handler (optional)
+ /// @return The handle of the request if successfully
+ /// queued or LLCORE_HTTP_HANDLE_INVALID if the
+ /// request could not be queued. In the latter
+ /// case, @see getStatus() will return more info.
+ /// As the request cannot be cancelled, the handle
+ /// is generally not useful.
+ ///
+ HttpHandle requestStopThread(HttpHandler::ptr_t handler);
+
+ /// Queue a Spin request.
+ /// DEBUG/TESTING ONLY. This puts the worker into a CPU spin for
+ /// test purposes.
+ ///
+ /// @param mode 0 for hard spin, 1 for soft spin
+ /// @return Standard handle return cases.
+ ///
+ HttpHandle requestSpin(int mode);
+
+ /// @}
+
protected:
private:
typedef std::shared_ptr<HttpReplyQueue> HttpReplyQueuePtr_t;
- /// @name InstanceData
- ///
- /// @{
- HttpStatus mLastReqStatus;
- HttpReplyQueuePtr_t mReplyQueue;
- HttpRequestQueue * mRequestQueue;
-
- /// @}
-
- // ====================================
- /// @name GlobalState
- ///
- /// @{
- ///
- /// Must be established before any threading is allowed to
- /// start.
- ///
-
- /// @}
- // End Global State
- // ====================================
+ /// @name InstanceData
+ ///
+ /// @{
+ HttpStatus mLastReqStatus;
+ HttpReplyQueuePtr_t mReplyQueue;
+ HttpRequestQueue * mRequestQueue;
+
+ /// @}
+
+ // ====================================
+ /// @name GlobalState
+ ///
+ /// @{
+ ///
+ /// Must be established before any threading is allowed to
+ /// start.
+ ///
+
+ /// @}
+ // End Global State
+ // ====================================
}; // end class HttpRequest
@@ -658,4 +658,4 @@ private:
-#endif // _LLCORE_HTTP_REQUEST_H_
+#endif // _LLCORE_HTTP_REQUEST_H_