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

📄 http_client.h

📁 原来由英特尔制定的UPnP SDK的
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * 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. // * Neither name of Intel Corporation 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 COPYRIGHT HOLDERS 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 INTEL 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./////////////////////////////////////////////////////////////////////////////#ifndef _http_client_h_#define _http_client_h_#ifdef __cplusplus#define EXTERN_C extern "C"#else#define EXTERN_C#endif#include "genlib/closesocket/upnpclosesocket.h"#include <fcntl.h>#include <string.h>#include <sys/types.h>//#include <malloc.h>#include <time.h>#include <errno.h>#include <ctype.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <netdb.h>#include <sys/time.h>#include "tools/config.h"#include "upnp.h"//#include "upnp_debug.h"#define HTTP_DATE_LENGTH 37 // length for HTTP DATE:                             //"DATE: Sun, 01 Jul 2000 08:15:23 GMT<cr><lf>"#define SEPARATORS "()<>@,;:\\\"/[]?={} \t"#define MARK "-_.!~*'()"#define RESERVED ";/?:@&=+$,"#define HTTP_SUCCESS 1#define HTTP_E_BAD_URL UPNP_E_INVALID_URL#define HTTP_E_READ_SOCKET  UPNP_E_SOCKET_READ#define HTTP_E_BIND_SOCKET  UPNP_E_SOCKET_BIND#define HTTP_E_WRITE_SOCKET  UPNP_E_SOCKET_WRITE#define HTTP_E_CONNECT_SOCKET  UPNP_E_SOCKET_CONNECT#define HTTP_E_SOCKET    UPNP_E_OUTOF_SOCKET#define HTTP_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE#define HTTP_E_BAD_REQUEST UPNP_E_BAD_REQUEST#define HTTP_E_BAD_IP_ADDRESS UPNP_E_INVALID_URL#define FALSE 0#define TAB 9#define CR 13#define LF 10#define RESPONSE_TIMEOUT 30#define SOCKET_BUFFER_SIZE 5000enum hostType { HOSTNAME, IPv4address };enum pathType { ABS_PATH, REL_PATH, OPAQUE_PART };enum uriType  { ABSOLUTE, RELATIVE };//Buffer used to store data read from //a socket during an http transfer//in function read_bytes.typedef struct SOCKET_BUFFER{  char buff[SOCKET_BUFFER_SIZE];  int size;  struct SOCKET_BUFFER *next;} socket_buffer;//Buffer used in parsing//http messages, urls, etc.//generally this simply//holds a pointer into a larger arraytypedef struct TOKEN {   char * buff;  size_t size;} token;//Represents a host port://e.g. :"127.127.0.1:80"//text is a token pointing to //the full string representationtypedef struct HOSTPORT {  token text; //full host port  struct sockaddr_in IPv4address; //Network Byte Order  } hostport_type;//Represents a URI//used in parse_uri and elsewheretypedef struct URI{  enum uriType type;  token scheme;  enum pathType path_type;  token pathquery;  token fragment;  hostport_type hostport;} uri_type;//Represents a list of URLs as in //the "callback" header of SUBSCRIBE//message in GENA//char * URLs holds dynamic memorytypedef struct URL_LIST {  int size;  char * URLs; //all the urls, delimited by <>  uri_type *parsedURLs;} URL_list;typedef struct HTTP_HEADER {  token header;  token value;  struct HTTP_HEADER * next;} http_header;typedef struct HTTP_STATUS_LINE{  token http_version;  token status_code;  token reason_phrase;} http_status;typedef struct HTTP_REQUEST_LINE {  token http_version;  uri_type request_uri;  token method;} http_request;//Represents a parsed HTTP_MESSAGE//head_list is dynamically allocatedtypedef struct HTTP_MESSAGE {  http_status status;  http_request request;  http_header * header_list;  token content;} http_message;EXTERN_C int transferHTTP( char * request,  char * toSend, 			  int toSendSize, char **out,  char * Url);EXTERN_C int transferHTTPRaw( char * toSend, int toSendSize, 			     char **out,  char *URL);//helper functionEXTERN_C int transferHTTPparsedURL( char * request, 				    char * toSend, int toSendSize, 				   char **out, uri_type *URL);//assumes that char * out has enough space ( 38 characters)//outputs the current time in the following null terminated string:// "DATE: Sun, Jul 06 2000 08:53:01 GMT\r\n"EXTERN_C void currentTmToHttpDate(char *out);//returns dynamic memory or NULL on errorEXTERN_C char * resolve_rel_url( char * base_url,  char * rel_url);EXTERN_C int parse_uri(  char * in, int max, uri_type * out);EXTERN_C int token_cmp( token *in1,  token *in2);EXTERN_C int token_string_casecmp( token * in1,  char * in2);EXTERN_C int token_string_cmp( token * in1,  char * in2);EXTERN_C int parse_http_response(  char * in, http_message * out, 				  int max_len);EXTERN_C int parse_http_request( char * in, http_message *out, 				int max_len);EXTERN_C int search_for_header( http_message * in, 			        char * header, token *out_value);EXTERN_C int parse_hostport(  char* in, int max, hostport_type *out );EXTERN_C size_t write_bytes(int fd,   char * bytes, size_t n, 			    int timeout);EXTERN_C void free_http_message(http_message * message);EXTERN_C int copy_URL_list( URL_list *in, URL_list *out);EXTERN_C void free_URL_list(URL_list * list);EXTERN_C int parse_port(int max,   char * port, unsigned short int * out);EXTERN_C int parse_http_line(  char * in, int max_size);EXTERN_C int parse_not_LWS(  char *in, token *out, int max_size);EXTERN_C int parse_LWS( char * in, int max_size);EXTERN_C int parse_token( char * in, token * out, int max_size);EXTERN_C ssize_t readLine(int fd, char *out, int max, int *timeout);EXTERN_C int remove_dots(char * in, int size);#ifdef DEBUGEXTERN_C void print_http_request(	http_message *message,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_http_request(	http_message *message,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#ifdef DEBUGEXTERN_C void print_http_response(	http_message *message,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_http_response(	http_message *message,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#ifdef DEBUGEXTERN_C void print_token(	token *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_token(	token *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#ifdef DEBUGEXTERN_C void print_status_line(	http_status *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_status_line(	http_status *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#ifdef DEBUGEXTERN_C void print_request_line(	http_request *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_request_line(	http_request *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#ifdef DEBUGEXTERN_C void print_uri(	uri_type *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo);#elsestatic inline void print_uri(	uri_type *in,	Upnp_LogLevel DLevel,	Dbg_Module Module,	char *DbgFileName,	int DbgLineNo) {}#endif#endif

⌨️ 快捷键说明

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