mirror of
				https://git.haproxy.org/git/haproxy.git/
				synced 2025-10-31 16:41:01 +01:00 
			
		
		
		
	The new HC_F_HTTPPROXY flag allows to use an absolute URI within a request that won't be modified in order to use an http proxy.
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _HAPROXY_HTTPCLIENT_T_H
 | |
| #define _HAPROXY_HTTPCLIENT_T_H
 | |
| 
 | |
| #include <haproxy/http-t.h>
 | |
| 
 | |
| struct httpclient {
 | |
| 	struct {
 | |
| 		struct ist url;                /* URL of the request */
 | |
| 		enum http_meth_t meth;       /* method of the request */
 | |
| 		struct buffer buf;             /* output buffer, HTX */
 | |
| 	} req;
 | |
| 	struct {
 | |
| 		struct ist vsn;
 | |
| 		uint16_t status;
 | |
| 		struct ist reason;
 | |
| 		struct http_hdr *hdrs;         /* headers */
 | |
| 		struct buffer buf;             /* input buffer, raw HTTP */
 | |
| 	} res;
 | |
| 	struct {
 | |
|                /* callbacks used to send the request, */
 | |
| 		void (*req_payload)(struct httpclient *hc);          /* send a payload */
 | |
| 
 | |
| 		/* callbacks used to receive the response, if not set, the IO
 | |
| 		 * handler will consume the data without doing anything */
 | |
| 		void (*res_stline)(struct httpclient *hc);          /* start line received */
 | |
| 		void (*res_headers)(struct httpclient *hc);         /* headers received */
 | |
| 		void (*res_payload)(struct httpclient *hc);         /* payload received */
 | |
| 		void (*res_end)(struct httpclient *hc);             /* end of the response */
 | |
| 	} ops;
 | |
| 	struct sockaddr_storage *dst;         /* destination address */
 | |
| 	struct appctx *appctx;                /* HTTPclient appctx */
 | |
| 	int timeout_server;                   /* server timeout in ms */
 | |
| 	void *caller;                         /* ptr of the caller */
 | |
| 	unsigned int flags;                   /* other flags */
 | |
| 	struct proxy *px;                     /* proxy for special cases */
 | |
| 	struct server *srv_raw;               /* server for clear connections */
 | |
| #ifdef USE_OPENSSL
 | |
| 	struct server *srv_ssl;               /* server for SSL connections */
 | |
| #endif
 | |
| };
 | |
| 
 | |
| /* Action (FA) to do */
 | |
| #define    HTTPCLIENT_FA_STOP         0x00000001   /* stops the httpclient at the next IO handler call */
 | |
| #define    HTTPCLIENT_FA_AUTOKILL     0x00000002   /* sets the applet to destroy the httpclient struct itself */
 | |
| 
 | |
| /* status (FS) */
 | |
| #define    HTTPCLIENT_FS_STARTED      0x00010000 /* the httpclient was started */
 | |
| #define    HTTPCLIENT_FS_ENDED        0x00020000 /* the httpclient is stopped */
 | |
| 
 | |
| /* States of the HTTP Client Appctx */
 | |
| enum {
 | |
| 	HTTPCLIENT_S_REQ = 0,
 | |
| 	HTTPCLIENT_S_REQ_BODY,
 | |
| 	HTTPCLIENT_S_RES_STLINE,
 | |
| 	HTTPCLIENT_S_RES_HDR,
 | |
| 	HTTPCLIENT_S_RES_BODY,
 | |
| 	HTTPCLIENT_S_RES_END,
 | |
| };
 | |
| 
 | |
| #define HTTPCLIENT_USERAGENT "HAProxy"
 | |
| 
 | |
| /* What kind of data we need to read */
 | |
| #define HC_F_RES_STLINE     0x01
 | |
| #define HC_F_RES_HDR        0x02
 | |
| #define HC_F_RES_BODY       0x04
 | |
| #define HC_F_RES_END        0x08
 | |
| #define HC_F_HTTPPROXY      0x10
 | |
| 
 | |
| 
 | |
| #endif /* ! _HAPROXY_HTTCLIENT__T_H */
 |