mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-08-29 20:54:04 +00:00
109 lines
2.8 KiB
C
109 lines
2.8 KiB
C
|
|
#include "../uwsgi.h"
|
|
|
|
extern struct uwsgi_server uwsgi;
|
|
|
|
uint16_t proto_base_add_uwsgi_header(struct wsgi_request *wsgi_req, char *key, uint16_t keylen, char *val, uint16_t vallen) {
|
|
|
|
|
|
int i;
|
|
char *buffer = wsgi_req->buffer + wsgi_req->uh.pktsize;
|
|
char *watermark = wsgi_req->buffer + uwsgi.buffer_size;
|
|
char *ptr = buffer;
|
|
|
|
|
|
for (i = 0; i < keylen; i++) {
|
|
if (key[i] == '-') {
|
|
key[i] = '_';
|
|
}
|
|
else {
|
|
key[i] = toupper((int)key[i]);
|
|
}
|
|
}
|
|
|
|
if (uwsgi_strncmp("CONTENT_TYPE", 12, key, keylen) && uwsgi_strncmp("CONTENT_LENGTH", 14, key, keylen)) {
|
|
if (buffer + keylen + vallen + 2 + 2 + 5 >= watermark) {
|
|
uwsgi_log("[WARNING] unable to add %.*s=%.*s to uwsgi packet, consider increasing buffer size\n", keylen, key, vallen, val);
|
|
return 0;
|
|
}
|
|
*ptr++ = (uint8_t) ((keylen + 5) & 0xff);
|
|
*ptr++ = (uint8_t) (((keylen + 5) >> 8) & 0xff);
|
|
memcpy(ptr, "HTTP_", 5);
|
|
ptr += 5;
|
|
memcpy(ptr, key, keylen);
|
|
ptr += keylen;
|
|
keylen += 5;
|
|
}
|
|
else {
|
|
if (buffer + keylen + vallen + 2 + 2 >= watermark) {
|
|
uwsgi_log("[WARNING] unable to add %.*s=%.*s to uwsgi packet, consider increasing buffer size\n", keylen, key, vallen, val);
|
|
return 0;
|
|
}
|
|
*ptr++ = (uint8_t) (keylen & 0xff);
|
|
*ptr++ = (uint8_t) ((keylen >> 8) & 0xff);
|
|
memcpy(ptr, key, keylen);
|
|
ptr += keylen;
|
|
}
|
|
|
|
*ptr++ = (uint8_t) (vallen & 0xff);
|
|
*ptr++ = (uint8_t) ((vallen >> 8) & 0xff);
|
|
memcpy(ptr, val, vallen);
|
|
|
|
#ifdef UWSGI_DEBUG
|
|
uwsgi_log("add uwsgi var: %.*s = %.*s\n", keylen, key, vallen, val);
|
|
#endif
|
|
|
|
return keylen + vallen + 2 + 2;
|
|
}
|
|
|
|
|
|
|
|
uint16_t proto_base_add_uwsgi_var(struct wsgi_request * wsgi_req, char *key, uint16_t keylen, char *val, uint16_t vallen) {
|
|
|
|
|
|
char *buffer = wsgi_req->buffer + wsgi_req->uh.pktsize;
|
|
char *watermark = wsgi_req->buffer + uwsgi.buffer_size;
|
|
char *ptr = buffer;
|
|
|
|
if (buffer + keylen + vallen + 2 + 2 >= watermark) {
|
|
uwsgi_log("[WARNING] unable to add %.*s=%.*s to uwsgi packet, consider increasing buffer size\n", keylen, key, vallen, val);
|
|
return 0;
|
|
}
|
|
|
|
|
|
*ptr++ = (uint8_t) (keylen & 0xff);
|
|
*ptr++ = (uint8_t) ((keylen >> 8) & 0xff);
|
|
memcpy(ptr, key, keylen);
|
|
ptr += keylen;
|
|
|
|
*ptr++ = (uint8_t) (vallen & 0xff);
|
|
*ptr++ = (uint8_t) ((vallen >> 8) & 0xff);
|
|
memcpy(ptr, val, vallen);
|
|
|
|
#ifdef UWSGI_DEBUG
|
|
uwsgi_log("add uwsgi var: %.*s = %.*s\n", keylen, key, vallen, val);
|
|
#endif
|
|
|
|
return keylen + vallen + 2 + 2;
|
|
}
|
|
|
|
|
|
int uwsgi_proto_base_accept(struct wsgi_request *wsgi_req, int fd) {
|
|
|
|
wsgi_req->c_len = sizeof(struct sockaddr_un);
|
|
return accept(fd, (struct sockaddr *) &wsgi_req->c_addr, (socklen_t *) & wsgi_req->c_len);
|
|
}
|
|
|
|
void uwsgi_proto_base_close(struct wsgi_request *wsgi_req) {
|
|
|
|
if (wsgi_req->async_post) {
|
|
fclose(wsgi_req->async_post);
|
|
if (wsgi_req->body_as_file) {
|
|
close(wsgi_req->poll.fd);
|
|
}
|
|
}
|
|
else {
|
|
close(wsgi_req->poll.fd);
|
|
}
|
|
}
|