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

📄 url.h

📁 GNU Common C++ is a very portable and highly optimized class framework for writing C++ applications
💻 H
字号:
// Copyright (C) 2001-2005 Open Source Telecom Corporation.//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// // This program 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 General Public License for more details.// // You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.// // As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however    // invalidate any other reasons why the executable file might be covered by// the GNU General Public License.    //// This exception applies only to the code released under the name GNU// Common C++.  If you copy code from other releases into a copy of GNU// Common C++, as the General Public License permits, the exception does// not apply to the code that you add in this way.  To avoid misleading// anyone as to the status of such modified files, you must delete// this exception notice from them.//// If you write modifications of your own for GNU Common C++, it is your choice// whether to permit this exception to apply to your modifications.// If you do not wish that, delete this exception notice.///** * @file url.h * @short URL streams abstraction. **/#ifndef	CCXX_URL_H_#define	CCXX_URL_H_#ifndef CCXX_CONFIG_H_#include <cc++/config.h>#endif#ifndef CCXX_SOCKET_H_#include <cc++/socket.h>#endif#ifndef	CCXX_MIME_H_#include <cc++/mime.h>#endif#ifdef	CCXX_NAMESPACESnamespace ost {#endif/** * A URL processing version of TCPStream. * * @author David Sugar <dyfet@ostel.com> * @short C++ url processing stream class. */class __EXPORT URLStream : public TCPStream{public:	/**	 * Return error for url fetch	 */ 	typedef enum	{		errSuccess = 0,		errUnreachable,		errMissing,		errDenied,		errInvalid,		errForbidden,		errUnauthorized,		errRelocated,		errFailure,		errTimeout,		errInterface	} Error;	/**	 * Type of authentication	 */	typedef enum	{		authAnonymous = 0,		authBasic	} Authentication;	/**	 * Encoding used in transfer	 */	typedef enum	{		encodingBinary = 0,		encodingChunked	} Encoding;	/**	 * Type of fetch	 */	typedef	enum	{		methodHttpGet,		methodHttpPut,		methodHttpPost,		methodHttpPostMultipart,		methodFtpGet,		methodFtpPut,		methodFileGet,		methodFilePut	} Method;	/**	 * http protocol version	 */	typedef	enum	{		protocolHttp1_0,		protocolHttp1_1	} Protocol;private:	const char *agent, *referer, *cookie, *pragma, *user, *password;	const char *proxyUser, *proxyPasswd;	const char *localif;	IPV4Host proxyHost;#ifdef	CCXX_IPV6	IPV6Host v6proxyHost;#endif	tpport_t proxyPort;	Method urlmethod;	Encoding encoding;	Protocol protocol;	Authentication auth;	Authentication proxyAuth;	timeout_t timeout;	bool persistent;	bool follow;	unsigned chunk;	Error getHTTPHeaders();	URLStream(const URLStream& rhs);protected:	ost::String m_host, m_address;        /**         * Send http header to server.         *         * @param url base to send header to         * @param vars to post or use in get method         * @param bufsize of stream buffering to use         * @return success or class error         */	Error sendHTTPHeader(const char *url, const char **vars, size_t bufsize);        /**         * Called if stream buffer needs refilling.         *         * @return number of bytes refilled or error if < 0         */	int underflow(void);        /**         * Derived method for async or timed I/O function on url stream.         *         * @return number of bytes read or < 0 for error.         * @param buffer to read stream data into.         * @param len of bytes to read from stream.         * @param timer to wait for data in milliseconds.         */	virtual int aRead(char *buffer, size_t len, timeout_t timer);        /**         * Derived method for async or timed I/O function on url stream.         *         * @return number of bytes written or < 0 for error.         * @param buffer to write stream data from.         * @param len of bytes to write to stream.         * @param timer to wait for data in milliseconds.         */	virtual int aWrite(char *buffer, size_t len, timeout_t timer);	/**	 * Derived method to receive and parse http "headers".	 *	 * @param header keyword.	 * @param value header keyword value.	 */	virtual void httpHeader(const char *header, const char *value);	/**	 * A virtual to insert additional header info into the request.	 *	 * @return array of header attributes to add.	 */	virtual char **extraHeader(void);public:	/**	 * Construct an instance of URL stream.	 *	 * @param family protocol to use.	 * @param timer for default timeout on I/O operations.	 */	URLStream(Family family = IPV4, timeout_t timer = 0);	/**	 * Line parsing with conversion.	 *	 * @return URLStream object reference.	 * @param buffer to store.	 * @param len maximum buffer size.	 */	URLStream &getline(char *buffer, size_t len);	/**	 * Get URL data from a named stream of a known buffer size.	 *	 * @return url error code.	 * @param url name of resource.	 * @param buffer size of buffer.	 */	Error get(const char *url, size_t buffer = 512);	/**	* Get URL data from a named stream of a known buffer size.	* Requesting URL defined in previous calls of setAddress() and 	* setHost() functions.	*	* @return url error code.	* @param buffer size of buffer.	*/	Error get(size_t buffer = 512);			/**	 * Submit URL with vars passed as argument array.  This submit	 * assumes "GET" method.  Use "post" member to perform post.	 *	 * @return url error code.	 * @param url name of resource.	 * @param vars to set.	 * @param buffer size of buffer.	 */	Error submit(const char *url, const char **vars, size_t buffer = 512);	/**	 * Post URL vars with post method.	 *	 * @return success or error code.	 * @param url name of resource being posted.	 * @param vars to set in post.	 * @param buffer size of buffer.	 */	Error post(const char *url, const char **vars, size_t buffer = 512);	/**	 * Post URL with MIME multipart form.	 *	 * @return success or error code.	 * @param url name of resource being posted.	 * @param form multi-part resource.	 * @param buffer size to use.	 */	Error post(const char *url, MIMEMultipartForm &form, size_t buffer = 512);	/**	 * Used to fetch header information for a resource.	 *	 * @return url error code.	 * @param url name of resource.	 * @param buffer size of buffer.	 */	Error head(const char *url, size_t buffer = 512);	/**	 * Close the URL stream for a new connection.	 */	void close();	/**	 * Set the referer url.	 *	 * @param str referer string.	 */	void setReferer(const char *str);	/**	* Set the host for the url	*	* @param str host address.	*/	inline void setHost(const char *str)		{m_host = str;};	/**	* Set the address for the url	*	* @param str address in the URL.	*/	inline void setAddress(const char *str)		{m_address = str;};	/**	 * Set the cookie to pass.	 *	 * @param str cookie string.	 */	inline void setCookie(const char *str)		{cookie = str;};	/**	 * Set user id for the url.	 *	 * @param str user id.	 */	inline void setUser(const char *str)		{user = str;};	/**	 * Set password for the url.	 *	 * @param str password.	 */	inline void setPassword(const char *str)		{password = str;};	/**	 * Set authentication type for the url.	 *	 * @param a authentication.	 * @param str string.	 */	void setAuthentication(Authentication a, const char *str = NULL); 	/** 	 * Set proxy user id for the url. 	 * 	 * @param str user id. 	 */ 	inline void setProxyUser(const char *str)	 	{proxyUser = str;};  	/** 	 * Set proxy password for the url. 	 * 	 * @param str password. 	 */ 	inline void setProxyPassword(const char *str) 		{proxyPasswd = str;};  	/** 	 * Set proxy authentication type for the url. 	 * 	 * @param a authentication. 	 * @param str string. 	 */ 	void setProxyAuthentication(Authentication a, const char *str = NULL);	/**	 * Set the pragmas.	 *	 * @param str pragma setting.	 */	inline void setPragma(const char *str)		{pragma = str;};	/**	 * Set the proxy server used.	 *	 * @param host proxy host.	 * @param port proxy port.	 */	void setProxy(const char *host, tpport_t port);	/**	 * Set the agent.	 *	 * @param str agent value.	 */	inline void setAgent(const char *str)		{agent = str;};	/**	 * Get url method (and protocol) employed.	 *	 * @return url method in effect.	 */	inline Method getMethod(void)		{return urlmethod;};	/**	 * Set socket timeout characteristics for processing URL	 * requests.  Set to 0 for no default timeouts.	 *	 * @param to timeout to set.	 */	inline void setTimeout(timeout_t to)		{timeout = to;};	/**	 * Specify url following.  Set to false to disable following	 * of relocation requests.	 *	 * @param enable true to enable following.	 */	inline void setFollow(bool enable)		{follow = enable;};	/**	 * Specify http protocol level being used.	 *	 * @param pro protocol level.	 */	inline void setProtocol(Protocol pro)		{protocol = pro;};	/**	 * Specify local interface to use	 *	 * @param intf Local interface name	 */	inline void setLocalInterface(const char *intf) 	{localif=intf;} };/** @relates URLStream * Decode an url parameter (ie "\%20" -> " ") * @param source string * @param dest destination buffer. If NULL source is used */__EXPORT char* urlDecode(char *source, char *dest = NULL);/** @relates URLStream * Encode an url parameter (ie " " -> "+") * @param source string * @param dest destination buffer. Do not overlap with source * @param size destination buffer size. */__EXPORT char* urlEncode(const char *source, char *dest, size_t size);/** @relates URLStream * Decode a string using base64 coding. * Destination size should be at least strlen(src)+1. * Destination will be a string, so is always terminated . * This function is deprecated, base64 can use binary source, not only string * use overloaded b64Decode. * @return string coded * @param src  source buffer * @param dest destination buffer. If NULL src is used */__EXPORT char* b64Decode(char *src, char *dest = NULL);/** @relates URLStream * Encode a string using base64 coding. * Destination size should be at least strlen(src)/4*3+1. * Destination is string terminated. * This function is deprecated, coded stream can contain terminator character * use overloaded b64Encode instead. * @return destination buffer * @param source source string * @param dest   destination octet buffer * @param size   destination buffer size */__EXPORT char* b64Encode(const char *source, char *dest, size_t size);/** @relates URLStream * Encode a octet stream using base64 coding. * Destination size should be at least (srcsize+2)/3*4+1. * Destination will be a string, so is always terminated  * (unless you pass dstsize == 0). * @return size of string written not counting terminator * @param src     source buffer * @param srcsize source buffer size * @param dst     destination buffer * @param dstsize destination buffer size */__EXPORT size_t b64Encode(const unsigned char *src, size_t srcsize,	       char *dst, size_t dstsize);/** @relates URLStream * Decode a string using base64 coding. * Destination size should be at least strlen(src)/4*3. * Destination are not string terminated (It's just a octet stream). * @return number of octets written into destination buffer * @param src     source string * @param dst     destination octet buffer * @param dstsize destination buffer size */__EXPORT size_t b64Decode(const char *src,		unsigned char *dst, size_t dstsize);/** @relates URLStream * Encode a STL string using base64 coding into a STL string * @return base 64 encoded string * @param src source string */__EXPORT String b64Encode(const String& src);/** @relates URLStream * Decode a STL string using base64 coding into an STL String. * Destination size should be at least strlen(src)/4*3. * Destination are not string terminated (It's just a octet stream). * @return decoded string * @param src     source string */__EXPORT String b64Decode(const String& src);/** @relates URLStream * Encode a octet stream using base64 coding into a STL string * @return base 64 encoded string * @param src     source buffer * @param srcsize source buffer size */__EXPORT String b64Encode(const unsigned char *src, size_t srcsize);/** @relates URLStream * Decode a string using base64 coding. * Destination size should be at least strlen(src)/4*3. * Destination are not string terminated (It's just a octet stream). * @return number of octets written into destination buffer * @param src     source string * @param dst     destination octet buffer * @param dstsize destination buffer size */__EXPORT size_t b64Decode(const String& src,		unsigned char *dst, size_t dstsize);#ifdef	CCXX_NAMESPACES}#endif#endif/** EMACS ** * Local variables: * mode: c++ * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

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