Skip to content

Commit 31d5187

Browse files
committed
Enhance HTTP handling with X-Forwarded-For support and connection management
- Added "X-Forwarded-For" header to requests to forward the real client IP address. - Updated hop-by-hop headers to include "x-forwarded-for". - Implemented logic to set "Connection: close" in responses when keep-alive is disabled, ensuring proper connection lifecycle management.
1 parent 0a99409 commit 31d5187

3 files changed

Lines changed: 34 additions & 5 deletions

File tree

netutils.csp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Generated by Extended CovScript Compiler
22
# DO NOT MODIFY
3-
# Date: Wed Jul 15 23:03:06 2026
3+
# Date: Thu Jul 16 11:20:16 2026
44
@charset: utf8
55
import ecs as netutils_ecs
66
struct __netutils_ecs_lambda_impl_1__
@@ -44,7 +44,7 @@ struct __netutils_ecs_lambda_impl_3__
4444
if session.args != null && !session.args.empty()
4545
url.append("?" + session.args)
4646
end
47-
var hop_by_hop = netutils_ecs.type_constructor.__hash_map({"host" : 1, "connection" : 1, "content-length" : 1, "transfer-encoding" : 1, "keep-alive" : 1, "proxy-connection" : 1, "proxy-authenticate" : 1, "proxy-authorization" : 1, "te" : 1, "trailer" : 1, "upgrade" : 1})
47+
var hop_by_hop = netutils_ecs.type_constructor.__hash_map({"host" : 1, "connection" : 1, "content-length" : 1, "transfer-encoding" : 1, "keep-alive" : 1, "proxy-connection" : 1, "proxy-authenticate" : 1, "proxy-authorization" : 1, "te" : 1, "trailer" : 1, "upgrade" : 1, "x-forwarded-for" : 1})
4848
var req_headers = new array
4949
if session.request_headers != null
5050
foreach it in session.request_headers
@@ -54,6 +54,7 @@ struct __netutils_ecs_lambda_impl_3__
5454
end
5555
end
5656
end
57+
req_headers.push_back("X-Forwarded-For: " + session.sock.remote_endpoint().address())
5758
var resp = null
5859
try
5960
if session.content_length != null && session.content_length > 0
@@ -107,6 +108,7 @@ constant default_http_thread_count = 4
107108
constant default_http_worker_count = 32
108109
var request_line_reg = regex.build_optimize("^([A-Z]+) ([^ ?]+)(?:\\?([^ ]*))? HTTP/([0-9.]+)$")
109110
var request_header_reg = regex.build_optimize("^([^:]*): ?(.*)$")
111+
var keep_alive_replace_reg = regex.build_optimize("Connection: keep-alive")
110112
namespace state_codes
111113
constant code_200 = "200 OK"
112114
constant code_400 = "400 Bad Request"
@@ -862,6 +864,9 @@ function master_response_worker(self)
862864
while !conn->request_queue.empty()
863865
link session = conn->request_queue.front
864866
if session != null && session.response != null
867+
if !conn->keep_alive
868+
session.response = regex.replace(keep_alive_replace_reg, session.response, "Connection: close")
869+
end
865870
var response_state = async.write(conn->sock, session.response)
866871
if !response_state.wait()
867872
log("Write response error: " + response_state.get_error())

0 commit comments

Comments
 (0)