diff options
Diffstat (limited to 'indra/llmessage/lliopipe.h')
-rw-r--r-- | indra/llmessage/lliopipe.h | 360 |
1 files changed, 180 insertions, 180 deletions
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h index e6ac8ebfc2..a58ee045c2 100644 --- a/indra/llmessage/lliopipe.h +++ b/indra/llmessage/lliopipe.h @@ -1,4 +1,4 @@ -/** +/** * @file lliopipe.h * @author Phoenix * @date 2004-11-18 @@ -7,21 +7,21 @@ * $LicenseInfo:firstyear=2004&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$ */ @@ -59,7 +59,7 @@ void pump_debug(const char *file, S32 line); void intrusive_ptr_add_ref(LLIOPipe* p); void intrusive_ptr_release(LLIOPipe* p); -/** +/** * @class LLIOPipe * @brief This class is an abstract base class for data processing units * @see LLPumpIO @@ -78,191 +78,191 @@ void intrusive_ptr_release(LLIOPipe* p); class LLIOPipe { public: - /** - * @brief I have decided that IO objects should have a reference - * count. In general, you can pass bald LLIOPipe pointers around - * as you need, but if you need to maintain a reference to one, - * you need to hold a ptr_t. - */ - typedef boost::intrusive_ptr<LLIOPipe> ptr_t; - - /** - * @brief Scattered memory container. - */ - typedef std::shared_ptr<LLBufferArray> buffer_ptr_t; - - /** - * @brief Enumeration for IO return codes - * - * A status code a positive integer value is considered a success, - * but may indicate special handling for future calls, for - * example, issuing a STATUS_STOP to an LLIOSocketReader instance - * will tell the instance to stop reading the socket. A status - * code with a negative value means that a problem has been - * encountered which will require further action on the caller or - * a developer to correct. Some mechanisms, such as the LLPumpIO - * may depend on this definition of success and failure. - */ - enum EStatus - { - // Processing occurred normally, future calls will be accepted. - STATUS_OK = 0, - - // Processing occured normally, but stop unsolicited calls to - // process. - STATUS_STOP = 1, - - // This pipe is done with the processing. Future calls to - // process will be accepted as long as new data is available. - STATUS_DONE = 2, - - // This pipe is requesting that it become the head in a process. - STATUS_BREAK = 3, - - // This pipe is requesting that it become the head in a process. - STATUS_NEED_PROCESS = 4, - - // Keep track of the highest number of success codes here. - STATUS_SUCCESS_COUNT = 5, - - // A generic error code. - STATUS_ERROR = -1, - - // This method has not yet been implemented. This usually - // indicates the programmer working on the pipe is not yet - // done. - STATUS_NOT_IMPLEMENTED = -2, - - // This indicates that a pipe precondition was not met. For - // example, many pipes require an element to appear after them - // in a chain (ie, mNext is not null) and will return this in - // response to method calls. To recover from this, it will - // require the caller to adjust the pipe state or may require - // a dev to adjust the code to satisfy the preconditions. - STATUS_PRECONDITION_NOT_MET = -3, - - // This means we could not connect to a remote host. - STATUS_NO_CONNECTION = -4, - - // The connection was lost. - STATUS_LOST_CONNECTION = -5, - - // The totoal process time has exceeded the timeout. - STATUS_EXPIRED = -6, - - // Keep track of the count of codes here. - STATUS_ERROR_COUNT = 6, - }; - - /** - * @brief Helper function to check status. - * - * When writing code to check status codes, if you do not - * specifically check a particular value, use this method for - * checking an error condition. - * @param status The status to check. - * @return Returns true if the code indicates an error occurred. - */ - inline static bool isError(EStatus status) - { - return ((S32)status < 0); - } - - /** - * @brief Helper function to check status. - * - * When writing code to check status codes, if you do not - * specifically check a particular value, use this method for - * checking an error condition. - * @param status The status to check. - * @return Returns true if the code indicates no error was generated. - */ - inline static bool isSuccess(EStatus status) - { - return ((S32)status >= 0); - } - - /** - * @brief Helper function to turn status into a string. - * - * @param status The status to check. - * @return Returns the name of the status code or empty string on failure. - */ - static std::string lookupStatusString(EStatus status); - - /** - * @brief Process the data in buffer. - * - * @param data The data processed - * @param eos True if this function call is the last because end of stream. - * @param pump The pump which is calling process. May be NULL. - * @param context Shared meta-data for the process. - * @return Returns a status code from the operation. - */ - EStatus process( - const LLChannelDescriptors& channels, - buffer_ptr_t& buffer, - bool& eos, - LLSD& context, - LLPumpIO* pump); - - /** - * @brief Give this pipe a chance to handle a generated error - * - * If this pipe is in a chain being processed by a pump, and one - * of the pipes generates an error, the pump will rewind through - * the chain to see if any of the links can handle the error. For - * example, if a connection is refused in a socket connection, the - * socket client can try to find a new destination host. Return an - * error code if this pipe does not handle the error passed in. - * @param status The status code for the error - * @param pump The pump which was calling process before the error - * was generated. - * @return Returns a status code from the operation. Returns an - * error code if the error passed in was not handled. Returns - * STATUS_OK to indicate the error has been handled. - */ - virtual EStatus handleError(EStatus status, LLPumpIO* pump); - - /** - * @brief Base Destructor - do not call <code>delete</code> directly. - */ - virtual ~LLIOPipe(); - - virtual bool isValid() ; + /** + * @brief I have decided that IO objects should have a reference + * count. In general, you can pass bald LLIOPipe pointers around + * as you need, but if you need to maintain a reference to one, + * you need to hold a ptr_t. + */ + typedef boost::intrusive_ptr<LLIOPipe> ptr_t; + + /** + * @brief Scattered memory container. + */ + typedef std::shared_ptr<LLBufferArray> buffer_ptr_t; + + /** + * @brief Enumeration for IO return codes + * + * A status code a positive integer value is considered a success, + * but may indicate special handling for future calls, for + * example, issuing a STATUS_STOP to an LLIOSocketReader instance + * will tell the instance to stop reading the socket. A status + * code with a negative value means that a problem has been + * encountered which will require further action on the caller or + * a developer to correct. Some mechanisms, such as the LLPumpIO + * may depend on this definition of success and failure. + */ + enum EStatus + { + // Processing occurred normally, future calls will be accepted. + STATUS_OK = 0, + + // Processing occured normally, but stop unsolicited calls to + // process. + STATUS_STOP = 1, + + // This pipe is done with the processing. Future calls to + // process will be accepted as long as new data is available. + STATUS_DONE = 2, + + // This pipe is requesting that it become the head in a process. + STATUS_BREAK = 3, + + // This pipe is requesting that it become the head in a process. + STATUS_NEED_PROCESS = 4, + + // Keep track of the highest number of success codes here. + STATUS_SUCCESS_COUNT = 5, + + // A generic error code. + STATUS_ERROR = -1, + + // This method has not yet been implemented. This usually + // indicates the programmer working on the pipe is not yet + // done. + STATUS_NOT_IMPLEMENTED = -2, + + // This indicates that a pipe precondition was not met. For + // example, many pipes require an element to appear after them + // in a chain (ie, mNext is not null) and will return this in + // response to method calls. To recover from this, it will + // require the caller to adjust the pipe state or may require + // a dev to adjust the code to satisfy the preconditions. + STATUS_PRECONDITION_NOT_MET = -3, + + // This means we could not connect to a remote host. + STATUS_NO_CONNECTION = -4, + + // The connection was lost. + STATUS_LOST_CONNECTION = -5, + + // The totoal process time has exceeded the timeout. + STATUS_EXPIRED = -6, + + // Keep track of the count of codes here. + STATUS_ERROR_COUNT = 6, + }; + + /** + * @brief Helper function to check status. + * + * When writing code to check status codes, if you do not + * specifically check a particular value, use this method for + * checking an error condition. + * @param status The status to check. + * @return Returns true if the code indicates an error occurred. + */ + inline static bool isError(EStatus status) + { + return ((S32)status < 0); + } + + /** + * @brief Helper function to check status. + * + * When writing code to check status codes, if you do not + * specifically check a particular value, use this method for + * checking an error condition. + * @param status The status to check. + * @return Returns true if the code indicates no error was generated. + */ + inline static bool isSuccess(EStatus status) + { + return ((S32)status >= 0); + } + + /** + * @brief Helper function to turn status into a string. + * + * @param status The status to check. + * @return Returns the name of the status code or empty string on failure. + */ + static std::string lookupStatusString(EStatus status); + + /** + * @brief Process the data in buffer. + * + * @param data The data processed + * @param eos True if this function call is the last because end of stream. + * @param pump The pump which is calling process. May be NULL. + * @param context Shared meta-data for the process. + * @return Returns a status code from the operation. + */ + EStatus process( + const LLChannelDescriptors& channels, + buffer_ptr_t& buffer, + bool& eos, + LLSD& context, + LLPumpIO* pump); + + /** + * @brief Give this pipe a chance to handle a generated error + * + * If this pipe is in a chain being processed by a pump, and one + * of the pipes generates an error, the pump will rewind through + * the chain to see if any of the links can handle the error. For + * example, if a connection is refused in a socket connection, the + * socket client can try to find a new destination host. Return an + * error code if this pipe does not handle the error passed in. + * @param status The status code for the error + * @param pump The pump which was calling process before the error + * was generated. + * @return Returns a status code from the operation. Returns an + * error code if the error passed in was not handled. Returns + * STATUS_OK to indicate the error has been handled. + */ + virtual EStatus handleError(EStatus status, LLPumpIO* pump); + + /** + * @brief Base Destructor - do not call <code>delete</code> directly. + */ + virtual ~LLIOPipe(); + + virtual bool isValid() ; protected: - /** - * @brief Base Constructor. - */ - LLIOPipe(); - - /** - * @brief Process the data in buffer - */ - virtual EStatus process_impl( - const LLChannelDescriptors& channels, - buffer_ptr_t& buffer, - bool& eos, - LLSD& context, - LLPumpIO* pump) = 0; + /** + * @brief Base Constructor. + */ + LLIOPipe(); + + /** + * @brief Process the data in buffer + */ + virtual EStatus process_impl( + const LLChannelDescriptors& channels, + buffer_ptr_t& buffer, + bool& eos, + LLSD& context, + LLPumpIO* pump) = 0; private: - friend void intrusive_ptr_add_ref(LLIOPipe* p); - friend void intrusive_ptr_release(LLIOPipe* p); - U32 mReferenceCount; + friend void intrusive_ptr_add_ref(LLIOPipe* p); + friend void intrusive_ptr_release(LLIOPipe* p); + U32 mReferenceCount; }; inline void intrusive_ptr_add_ref(LLIOPipe* p) { - ++p->mReferenceCount; + ++p->mReferenceCount; } inline void intrusive_ptr_release(LLIOPipe* p) { - if(p && 0 == --p->mReferenceCount) - { - delete p; - } + if(p && 0 == --p->mReferenceCount) + { + delete p; + } } #endif // LL_LLIOPIPE_H |