⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream.h

📁 这是国外的resip协议栈
💻 H
字号:
/* * Copyright (C) 2001-2003 Peter J Jones (pjones@pmade.org) * All Rights Reserved *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *  * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. Neither the name of the Author nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//** @file * This file contains the definition of the Netxx::TLS::Stream class.**/#ifndef _Netxx_TLS_Stream_h_#define _Netxx_TLS_Stream_h_// Netxx includes#include <Netxx/Types.h>#include <Netxx/StreamBase.h>#include <Netxx/TLS/Context.h>namespace Netxx {    // forward declarations    class ProbeInfo;    namespace TLS {    // forward declaration    class Certificate;    struct tls_pimpl;	/** * The Netxx::TLS::Stream class is used to send and receive data on a * connected TLS socket. It has two constructors, one that connects to the * given address and another that uses an already connected socket. * * When using the constructor that can take a socket descriptor you must * specifiy whether the TLS::Stream should operate in server or client mode. * This is due to the TLS protocol being a little different for a client * than it is for a server.**/class Stream : public Netxx::StreamBase {public:    /**     * The connection mode for the Netxx::TLS::Stream     */    enum Mode {	mode_client, ///< This Netxx::TLS::Stream should act as a TLS client.	mode_server  ///< This Netxx::TLS::Stream shoudl act as a TLS server.    };    //####################################################################    /**      * Construct a new Netxx::TLS::Stream object. This constructor will     * connect to the peer given in the Netxx::Address class.     *     * @param context The context to use for this stream.     * @param address The address to connect to.     * @param timeout The timeout to use for the connect and stream operations.     * @author Peter Jones    **/    //####################################################################    explicit Stream (Context &context, const Address &address, const Timeout &timeout=Timeout());    //####################################################################    /**      * Construct a new Netxx::TLS::Stream object. This constructor will     * connect to the given address. The given address string is passed to a     * Netxx::Address class.     *     * @param context The contect to use for this stream.     * @param addr The address to connect to.     * @param default_port The port to connect to if one is not given in addr.     * @param timeout The timeout to use for the connect and stream operations.     * @author Peter Jones    **/    //####################################################################    Stream (Context &context, const char *addr, port_type default_port, const Timeout &timeout=Timeout());    //####################################################################    /**      * Construct a new Netxx::TLS::Stream object and start TLS on the given     * socket file descriptor. This object will then own the socket file     * descriptor and will close it when it is done with it.     *     * A mode is needed so that the Netxx::TLS::Stream will know what parts     * of the TLS protocol to use, client or server. Default is client.     *     * @param context The TLS::Context to use for this stream.     * @param socketfd The socket file descriptor to use.     * @param mode Is this a TLS server or client?     * @param timeout The Timeout to use for stream operations.     * @author Peter Jones    **/    //####################################################################    Stream (Context &context, socket_type socketfd, Mode mode=mode_client, const Timeout &timeout=Timeout());    //####################################################################    /**      * Netxx::TLS::Stream destructor. Shutdown the TLS connection if     * necessary and clean things up.     *     * @author Peter Jones    **/    //####################################################################    ~Stream (void);    //####################################################################    /**      * Read data from the TLS connection and place it into the given buffer.     * If an error occures this function will throw an exception.     *     * @param buffer The buffer to store the read data into.     * @param length The size of the given buffer.     * @return Greater than 0: The number of bytes stored in the buffer.     * @return 0: The connected peer closed the connection.     * @return -1: A timeout occured.     * @author Peter Jones    **/    //####################################################################    signed_size_type read  (void *buffer, size_type length);    //####################################################################    /**      * Write data from the given buffer to the TLS conection. If an error     * occures this function will throw an exception.     *     * @param buffer The buffer to write to the connection.     * @param length The number of bytes to use from the buffer.     * @return Greater than 0: The number of bytes written to the connection.     * @return 0: The connected peer closed the connection.     * @return -1: A timeout occured.     * @author Peter Jones    **/    //####################################################################    signed_size_type write (const void *buffer, size_type length);    //####################################################################    /**      * Close the connection. Once you do this you can't call read or write     * anymore. This is normally done by the destructor.     *     * @author Peter Jones    **/    //####################################################################    void close (void);    //####################################################################    /**      * Get the connected peer's certificate.     *     * @return A valid certificate if the peer gave one to you     * @return An invalid certificate if the peer does not have one     * @author Alex Mitrofanov    **/    //####################################################################    const Certificate& get_peer_cert (void) const;        //####################################################################    /**      * Get the certificate for the issuer of the connected peer's     * certificate.     *     * @return A valid certificate if the peer gave one and it was signed by an issuer     * @return An invalid certificate if there was no peer cert or no issuer     * @author Alex Mitrofanov    **/    //####################################################################    const Certificate& get_issuer_cert (void) const;    //####################################################################    /**      * Return the current socket file descriptor in use.     *     * @author Alex Mitrofanov    **/    //####################################################################    socket_type get_socketfd (void) const;    //####################################################################    /**      * Get information about how this TLS::Stream should be probed from the     * Netxx::Probe class.     *     * @return A Netxx::ProbeInfo object.     * @author Peter Jones    **/    //####################################################################    const ProbeInfo* get_probe_info (void) const;private:    tls_pimpl *pimpl_;    Stream (const Stream&);    Stream& operator= (const Stream&);}; // end Netxx::TLS::Stream class}} // end Netxx and TLS namespaces#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -