Skip to content

Commit 5572bb3

Browse files
authored
Add 2 new options: add_header_date and add_header_server (#46)
1 parent 3b09a4e commit 5572bb3

File tree

5 files changed

+44
-8
lines changed

5 files changed

+44
-8
lines changed

fastwsgi.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import _fastwsgi
77
from pkg_resources import get_distribution
88

9+
__version__ = get_distribution("fastwsgi").version
10+
911
LL_DISABLED = 0
1012
LL_FATAL_ERROR = 1
1113
LL_CRIT_ERROR = 2
@@ -21,10 +23,12 @@ def __init__(self):
2123
self.app = None
2224
self.host = "0.0.0.0"
2325
self.port = 5000
24-
self.backlog = 1024
26+
self.backlog = 2048
2527
self.loglevel = LL_ERROR
26-
self.hook_sigint = 2
27-
self.allow_keepalive = 1
28+
self.hook_sigint = 2 # 0 = ignore Ctrl-C; 1 = stop server on Ctrl-C; 2 = halt process on Ctrl-C
29+
self.allow_keepalive = True
30+
self.add_header_date = True
31+
self.add_header_server = "FastWSGI/{}".format(__version__)
2832
self.max_content_length = None # def value: 999999999
2933
self.max_chunk_size = None # def value: 256 KiB
3034
self.read_buffer_size = None # def value: 64 KiB

fastwsgi/common.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@ int64_t get_env_int(const char * name)
4747

4848
int64_t get_obj_attr_int(PyObject * obj, const char * name)
4949
{
50+
int64_t hr = 0;
5051
PyObject * attr = PyObject_GetAttrString(obj, name);
52+
FIN_IF(!attr, LLONG_MIN); // error
53+
FIN_IF(attr == Py_True, 1);
54+
FIN_IF(attr == Py_False, 0);
55+
FIN_IF(!PyLong_CheckExact(attr), LLONG_MIN);
56+
hr = PyLong_AsSsize_t(attr);
57+
fin:
5158
Py_XDECREF(attr);
52-
if (!attr || !PyLong_CheckExact(attr)) {
53-
return LLONG_MIN;
54-
}
55-
return PyLong_AsSsize_t(attr);
59+
return hr;
5660
}
5761

5862
const char * get_obj_attr_str(PyObject * obj, const char * name)

fastwsgi/request.c

+18-1
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ int build_response(client_t * client, int flags, int status, const void * header
708708
PyObject * asgi_dict = NULL;
709709
int64_t body_size = _body_size;
710710
bool resp_date_present = false;
711+
bool resp_server_present = false;
711712

712713
if (flags & RF_HEADERS_WSGI) {
713714
response = (StartResponse *)headers;
@@ -792,8 +793,19 @@ int build_response(client_t * client, int flags, int status, const void * header
792793
if (strcasecmp(key, "Date") == 0)
793794
resp_date_present = true;
794795

796+
bool is_header_server = false;
797+
if (key_len == 6)
798+
if (strcasecmp(key, "Server") == 0) {
799+
is_header_server = true;
800+
resp_server_present = true;
801+
}
802+
795803
xbuf_add(head, key, key_len);
796804
xbuf_add(head, ": ", 2);
805+
if (is_header_server && g_srv.add_header_server > 0) {
806+
xbuf_add(head, g_srv.header_server, g_srv.add_header_server);
807+
xbuf_add(head, " ", 1);
808+
}
797809
xbuf_add(head, val, val_len);
798810
xbuf_add(head, "\r\n", 2);
799811

@@ -807,13 +819,18 @@ int build_response(client_t * client, int flags, int status, const void * header
807819
xbuf_add_str(head, (const char *)headers);
808820
}
809821

810-
if (!resp_date_present) {
822+
if (!resp_date_present && g_srv.add_header_date) {
811823
char * date_str;
812824
int date_len = get_asctime(&date_str);
813825
xbuf_add(head, "Date: ", 6);
814826
xbuf_add(head, date_str, date_len);
815827
xbuf_add(head, "\r\n", 2);
816828
}
829+
if (!resp_server_present && g_srv.add_header_server > 0) {
830+
xbuf_add(head, "Server: ", 8);
831+
xbuf_add(head, g_srv.header_server, g_srv.add_header_server);
832+
xbuf_add(head, "\r\n", 2);
833+
}
817834

818835
if ((flags & RF_SET_KEEP_ALIVE) != 0 && client->srv->allow_keepalive) {
819836
xbuf_add_str(head, "Connection: keep-alive\r\n");

fastwsgi/server.c

+8
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,14 @@ PyObject * init_server(PyObject * Py_UNUSED(self), PyObject * server)
815815
rv = get_obj_attr_int(server, "allow_keepalive");
816816
g_srv.allow_keepalive = (rv == 0) ? 0 : 1;
817817

818+
rv = get_obj_attr_int(server, "add_header_date");
819+
g_srv.add_header_date = (rv == 0) ? 0 : 1;
820+
821+
const char * srvname = get_obj_attr_str(server, "add_header_server");
822+
if (srvname && srvname[0]) {
823+
strncpy(g_srv.header_server, srvname, sizeof(g_srv.header_server) - 1);
824+
g_srv.add_header_server = (int)strlen(g_srv.header_server);
825+
}
818826
rv = get_obj_attr_int(server, "max_content_length");
819827
if (rv == LLONG_MIN) {
820828
rv = get_env_int("FASTWSGI_MAX_CONTENT_LENGTH");

fastwsgi/server.h

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ typedef struct {
4747
int hook_sigint; // 0 - ignore SIGINT, 1 - handle SIGINT, 2 - handle SIGINT with halt prog
4848
uv_signal_t signal;
4949
int allow_keepalive;
50+
int add_header_date;
51+
int add_header_server;
52+
char header_server[80];
5053
size_t read_buffer_size;
5154
uint64_t max_content_length;
5255
size_t max_chunk_size;

0 commit comments

Comments
 (0)