Add client_ctx_t
This commit is contained in:
		| @@ -53,8 +53,7 @@ char *fastcgi_add_param(char *buf, const char *key, const char *value) { | ||||
|     return ptr; | ||||
| } | ||||
|  | ||||
| int fastcgi_init(fastcgi_conn *conn, int mode, unsigned int client_num, unsigned int req_num, const sock *client, | ||||
|                  const http_req *req, const http_uri *uri) { | ||||
| int fastcgi_init(fastcgi_conn *conn, int mode, unsigned int client_num, unsigned int req_num, const sock *client, const http_req *req, const http_uri *uri) { | ||||
|     unsigned short req_id = (client_num & 0xFFF) << 4; | ||||
|     if (client_num == 0) { | ||||
|         req_id |= (req_num + 1) & 0xF; | ||||
| @@ -133,8 +132,8 @@ int fastcgi_init(fastcgi_conn *conn, int mode, unsigned int client_num, unsigned | ||||
|     addr = (struct sockaddr_in6 *) &addr_storage; | ||||
|     sprintf(buf0, "%i", addr->sin6_port); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "REMOTE_PORT", buf0); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "REMOTE_ADDR", client_addr_str); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "REMOTE_HOST", client_host_str != NULL ? client_host_str : client_addr_str); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "REMOTE_ADDR", conn->ctx->addr); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "REMOTE_HOST", conn->ctx->host[0] != 0 ? conn->ctx->host : conn->ctx->addr); | ||||
|     //param_ptr = fastcgi_add_param(param_ptr, "REMOTE_IDENT", ""); | ||||
|     //param_ptr = fastcgi_add_param(param_ptr, "REMOTE_USER", ""); | ||||
|  | ||||
| @@ -157,8 +156,8 @@ int fastcgi_init(fastcgi_conn *conn, int mode, unsigned int client_num, unsigned | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "CONTENT_LENGTH", content_length != NULL ? content_length : ""); | ||||
|     const char *content_type = http_get_header_field(&req->hdr, "Content-Type"); | ||||
|     param_ptr = fastcgi_add_param(param_ptr, "CONTENT_TYPE", content_type != NULL ? content_type : ""); | ||||
|     if (client_geoip != NULL) { | ||||
|         param_ptr = fastcgi_add_param(param_ptr, "REMOTE_INFO", client_geoip); | ||||
|     if (conn->ctx->geoip[0] != 0) { | ||||
|         param_ptr = fastcgi_add_param(param_ptr, "REMOTE_INFO", conn->ctx->geoip); | ||||
|     } | ||||
|  | ||||
|     for (int i = 0; i < req->hdr.field_num; i++) { | ||||
|   | ||||
| @@ -12,6 +12,7 @@ | ||||
| #include "include/fastcgi.h" | ||||
| #include "http.h" | ||||
| #include "uri.h" | ||||
| #include "../client.h" | ||||
|  | ||||
| #define FASTCGI_CHUNKED 1 | ||||
| #define FASTCGI_COMPRESS_GZ 2 | ||||
| @@ -36,6 +37,7 @@ typedef struct { | ||||
|     const char *webroot; | ||||
|     unsigned short out_len; | ||||
|     unsigned short out_off; | ||||
|     client_ctx_t *ctx; | ||||
| } fastcgi_conn; | ||||
|  | ||||
| char *fastcgi_add_param(char *buf, const char *key, const char *value); | ||||
|   | ||||
| @@ -30,7 +30,7 @@ int rev_proxy_preload(void) { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int rev_proxy_request_header(http_req *req, int enc) { | ||||
| int rev_proxy_request_header(http_req *req, int enc, client_ctx_t *ctx) { | ||||
|     char buf1[256], buf2[256]; | ||||
|     int p_len; | ||||
|  | ||||
| @@ -50,12 +50,12 @@ int rev_proxy_request_header(http_req *req, int enc) { | ||||
|  | ||||
|     const char *host = http_get_header_field(&req->hdr, "Host"); | ||||
|     const char *forwarded = http_get_header_field(&req->hdr, "Forwarded"); | ||||
|     int client_ipv6 = strchr(client_addr_str, ':') != NULL; | ||||
|     int server_ipv6 = strchr(server_addr_str, ':') != NULL; | ||||
|     int client_ipv6 = strchr(ctx->addr, ':') != NULL; | ||||
|     int server_ipv6 = strchr(ctx->s_addr, ':') != NULL; | ||||
|  | ||||
|     p_len = snprintf(buf1, sizeof(buf1), "by=%s%s%s;for=%s%s%s;host=%s;proto=%s", | ||||
|                      server_ipv6 ? "\"[" : "", server_addr_str, server_ipv6 ? "]\"" : "", | ||||
|                      client_ipv6 ? "\"[" : "", client_addr_str, client_ipv6 ? "]\"" : "", | ||||
|                      server_ipv6 ? "\"[" : "", ctx->s_addr, server_ipv6 ? "]\"" : "", | ||||
|                      client_ipv6 ? "\"[" : "", ctx->addr, client_ipv6 ? "]\"" : "", | ||||
|                      host, enc ? "https" : "http"); | ||||
|     if (p_len < 0 || p_len >= sizeof(buf1)) { | ||||
|         error("Appended part of header field 'Forwarded' too long"); | ||||
| @@ -76,9 +76,9 @@ int rev_proxy_request_header(http_req *req, int enc) { | ||||
|  | ||||
|     const char *xff = http_get_header_field(&req->hdr, "X-Forwarded-For"); | ||||
|     if (xff == NULL) { | ||||
|         http_add_header_field(&req->hdr, "X-Forwarded-For", client_addr_str); | ||||
|         http_add_header_field(&req->hdr, "X-Forwarded-For", ctx->addr); | ||||
|     } else { | ||||
|         sprintf(buf1, "%s, %s", xff, client_addr_str); | ||||
|         sprintf(buf1, "%s, %s", xff, ctx->addr); | ||||
|         http_remove_header_field(&req->hdr, "X-Forwarded-For", HTTP_REMOVE_ALL); | ||||
|         http_add_header_field(&req->hdr, "X-Forwarded-For", buf1); | ||||
|     } | ||||
| @@ -180,7 +180,7 @@ int rev_proxy_response_header(http_req *req, http_res *res, host_config *conf) { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int rev_proxy_init(http_req *req, http_res *res, http_status_ctx *ctx, host_config *conf, sock *client, http_status *custom_status, char *err_msg) { | ||||
| int rev_proxy_init(http_req *req, http_res *res, http_status_ctx *ctx, host_config *conf, sock *client, client_ctx_t *cctx, http_status *custom_status, char *err_msg) { | ||||
|     char buffer[CHUNK_SIZE]; | ||||
|     const char *connection, *upgrade, *ws_version; | ||||
|     long ret; | ||||
| @@ -304,7 +304,7 @@ int rev_proxy_init(http_req *req, http_res *res, http_status_ctx *ctx, host_conf | ||||
|         http_add_header_field(&req->hdr, "Connection", "keep-alive"); | ||||
|     } | ||||
|  | ||||
|     ret = rev_proxy_request_header(req, (int) client->enc); | ||||
|     ret = rev_proxy_request_header(req, (int) client->enc, cctx); | ||||
|     if (ret != 0) { | ||||
|         res->status = http_get_status(500); | ||||
|         ctx->origin = INTERNAL; | ||||
|   | ||||
| @@ -20,17 +20,17 @@ | ||||
|  | ||||
| #include "http.h" | ||||
| #include "config.h" | ||||
| #include "../client.h" | ||||
|  | ||||
| extern sock rev_proxy; | ||||
|  | ||||
| int rev_proxy_preload(void); | ||||
|  | ||||
| int rev_proxy_request_header(http_req *req, int enc); | ||||
| int rev_proxy_request_header(http_req *req, int enc, client_ctx_t *ctx); | ||||
|  | ||||
| int rev_proxy_response_header(http_req *req, http_res *res, host_config *conf); | ||||
|  | ||||
| int rev_proxy_init(http_req *req, http_res *res, http_status_ctx *ctx, host_config *conf, sock *client, | ||||
|                    http_status *custom_status, char *err_msg); | ||||
| int rev_proxy_init(http_req *req, http_res *res, http_status_ctx *ctx, host_config *conf, sock *client, client_ctx_t *cctx, http_status *custom_status, char *err_msg); | ||||
|  | ||||
| int rev_proxy_send(sock *client, unsigned long len_to_send, int flags); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user