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

📄 http.h

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 H
📖 第 1 页 / 共 2 页
字号:
 * no longer block if the queue is empty. */void http_caller_signal_shutdown(HTTPCaller *caller);/* * Start an HTTP request. It will be completed in the background, and * the result will eventually be received by http_receive_result. * http_receive_result will return the id parameter passed to this function, * and the caller can use this to keep track of which request and which * response belong together. If id is NULL, it is changed to a non-null * value (NULL replies from http_receive_result are reserved for cases * when it doesn't return a reply). * * If `body' is NULL, it is a GET request, otherwise as POST request. * If `follow' is true, HTTP redirections are followed, otherwise not. * * 'certkeyfile' defines a filename where openssl looks for a PEM-encoded * certificate and a private key, if openssl is compiled in and an https  * URL is used. It can be NULL, in which case none is used and thus there  * is no ssl authentication, unless you have set a global one with * use_global_certkey_file() from conn.c. */void http_start_request(HTTPCaller *caller, int method, Octstr *url,                         List *headers, Octstr *body, int follow, void *id,     	    	    	Octstr *certkeyfile); /* * Get the result of a GET or a POST request. Returns either the id pointer * (the one passed to http_start request if non-NULL) or NULL if * http_caller_signal_shutdown has been called and there are no queued results. */void *http_receive_result(HTTPCaller *caller, int *status, Octstr **final_url,    	    	    	 List **headers, Octstr **body);/*********************************************************************** * HTTP server interface. *//* * Data structure representing an HTTP client that has connected to * the server we implement. It is used to route responses correctly. */typedef struct HTTPClient HTTPClient;/* * Open an HTTP server at a given port. Return -1 for errors (invalid * port number, etc), 0 for OK. This will also start a background thread * to listen for connections to that port and read the requests from them. * Second boolean variable indicates if the HTTP server should be started  * for SSL-enabled connections. */int http_open_port(int port, int ssl);/* * Same as above, but bind to a specific interface. */int http_open_port_if(int port, int ssl, Octstr *interface);/* * Accept a request from a client to the specified open port. Return NULL * if the port is closed, otherwise a pointer to a client descriptor. * Return the IP number (as a string) and other related information about * the request via arguments if function return value is non-NULL. The * caller is responsible for destroying the values returned via arguments, * the caller descriptor is destroyed by http_send_reply. * * The requests are actually read by a background thread handled by the * HTTP implementation, so it is not necessary by the HTTP user to have * many threads to be fast. The HTTP user should use a single thread, * unless requests can block. */HTTPClient *http_accept_request(int port, Octstr **client_ip,     	    	    	    	Octstr **url, List **headers, Octstr **body,				List **cgivars);/* * Send a reply to a previously accepted request. The caller is responsible * for destroying the headers and body after the call to http_send_reply * finishes. This allows using them in several replies in an efficient way. */void http_send_reply(HTTPClient *client, int status, List *headers,     	    	     Octstr *body);/* * Don't send a reply to a previously accepted request, but only close * the connection to the client. This can be used to reject requests from * clients that are not authorized to access us. */void http_close_client(HTTPClient *client);/* * Close a currently open port and stop corresponding background threads. */void http_close_port(int port);/* * Close all currently open ports and stop background threads. */void http_close_all_ports(void);/* * Destroy a list of HTTPCGIVar objects. */void http_destroy_cgiargs(List *args);/* * Return reference to CGI argument 'name', or NULL if not matching. */Octstr *http_cgi_variable(List *list, char *name);/*********************************************************************** * HTTP header interface. *//* * Functions for manipulating a list of headers. You can use a list of * headers returned by one of the functions above, or create an empty * list with http_create_empty_headers. Use http_destroy_headers to * destroy a list of headers (not just the list, but the headers * themselves). You can also use http_parse_header_string to create a list: * it takes a textual representation of headers as an Octstr and returns * the corresponding List. http_generate_header_string goes the other * way. * * Once you have a list of headers, you can use http_header_add and the * other functions to manipulate it. */List *http_create_empty_headers(void);void http_destroy_headers(List *headers);void http_header_add(List *headers, char *name, char *contents);void http_header_get(List *headers, long i, Octstr **name, Octstr **value);List *http_header_duplicate(List *headers);void http_header_pack(List *headers);void http_append_headers(List *to, List *from);Octstr *http_header_value(List *headers, Octstr *header);/* * Append all headers from new_headers to old_headers.  Headers from * new_headers _replace_ the ones in old_headers if they have the same * name.  For example, if you have: * old_headers *    Accept: text/html *    Accept: text/plain *    Accept: image/jpeg *    Accept-Language: en * new_headers *    Accept: text/html *    Accept: text/plain * then after the operation, old_headers will have *    Accept-Language: en *    Accept: text/html *    Accept: text/plain */void http_header_combine(List *old_headers, List *new_headers);/* * Return the length of the quoted-string (a HTTP field element) * starting at position pos in the header.  Return -1 if there * is no quoted-string at that position. */long http_header_quoted_string_len(Octstr *header, long pos);/* * Take the value part of a header that has a format that allows * multiple comma-separated elements, and split it into a list of * those elements.  Note that the function may have surprising * results for values of headers that are not in this format. */List *http_header_split_value(Octstr *value);/* * The same as http_header_split_value, except that it splits  * headers containing 'credentials' or 'challenge' lists, which * have a slightly different format.  It also normalizes the list * elements, so that parameters are introduced with ';'. */List *http_header_split_auth_value(Octstr *value);/* * Remove all headers with name 'name' from the list.  Return the * number of headers removed. */long http_header_remove_all(List *headers, char *name);/* * Remove the hop-by-hop headers from a header list.  These are the * headers that describe a specific connection, not anything about * the content.  RFC2616 section 13.5.1 defines these. */void http_remove_hop_headers(List *headers);/* * Update the headers to reflect that a transformation has been * applied to the entity body. */void http_header_mark_transformation(List *headers, Octstr *new_body,     	    	    	    	     Octstr *new_type);/* * Find the first header called `name' in `headers'. Returns its contents * as a new Octet string, which the caller must free. Return NULL for * not found. */Octstr *http_header_find_first_real(List *headers, char *name,                                     const char *file, long line, const char *func);#define http_header_find_first(headers, name) \    gw_claim_area(http_header_find_first_real((headers), (name), __FILE__, __LINE__, __func__))List *http_header_find_all(List *headers, char *name);/* * Find the Content-Type header and returns the type and charset. */void http_header_get_content_type(List *headers, Octstr **type, 	Octstr **charset);/* * Check if a specific mime-type can be handled by a client. This is * indicated via 'Accept' headers. Returns 1 if the mime-type is acceptable, * otherwise 0. */int http_type_accepted(List *headers, char *type);/* * Dump the contents of a header list with debug. */void http_header_dump(List *headers);/*  * Ditto with cgi variables. Do not panic, when an empty are found from the  * list. */void http_cgivar_dump(List *cgiargs);/* * Check if the passed charset is in the 'Accept-Charset' header list * alues of the client. Returns 1 if the charset is acceptable, otherwise 0. */int http_charset_accepted(List *headers, char *charset);/* * Add Basic Authentication headers headers. */void http_add_basic_auth(List *headers, Octstr *username, Octstr *password);/*  * Many HTTP field elements can take parameters in a standardized * form: parameters appear after the main value, each is introduced * by a semicolon (;), and consists of a key=value pair or just * a key, where the key is a token and the value is either a token * or a quoted-string. * The main value itself is a series of tokens, separators, and * quoted-strings. * * This function will take such a field element, and look for the  * value of a specific key, which is then returned. If the key * is not found within the header value NULL is returned. *  * BEWARE: value is *only* the header value, not the whole header with * field name. *  * Example: *    * assume to have "Content-Type: application/xml; charset=utf-8"  *    * within List *headers  *   value = http_header_value(headers, octstr_imm("Content-Type")) *   val = http_get_header_parameter(value, octstr_imm("charset")); * will return "utf-8" to lvalue. */Octstr *http_get_header_parameter(Octstr *value, Octstr *parameter);/* * Return the general class of a status code.  For example, all * 2xx codes are HTTP_STATUS_SUCCESSFUL.  See the list at the top * of this file. */int http_status_class(int code);/* * Return the HTTP_METHOD_xxx enum code for a Octstr containing  * the HTTP method name. */int http_name2method(Octstr *method);/* * Return the char containing the HTTP method name. */char *http_method2name(int method);#endif

⌨️ 快捷键说明

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