Fix crossdomain.xml

master
Nicolas Favre-Felix 14 years ago
parent 9ffc5197fb
commit 38a0edc7cc

@ -44,10 +44,6 @@ http_client_read(int fd, short event, void *ctx) {
return;
}
c->buffer = realloc(c->buffer, c->sz + ret);
memcpy(c->buffer + c->sz, buffer, ret);
c->sz += ret;
/* TODO: http parse. */
nparsed = http_parser_execute(&c->parser, &c->settings, buffer, ret);
if(c->parser.upgrade) {
@ -92,10 +88,6 @@ http_client_cleanup(struct http_client *c) {
free(c->qs_jsonp.s);
memset(&c->qs_jsonp, 0, sizeof(str_t));
free(c->buffer);
c->buffer = NULL;
c->sz = 0;
memset(&c->verb, 0, sizeof(c->verb));
c->executing = 0;
@ -118,7 +110,9 @@ http_client_keep_alive(struct http_client *c) {
/* check disconnection */
int disconnect = 0;
if(c->parser.http_major == 1 && c->parser.http_minor == 0) {
if(c->parser.http_major == 0) {
disconnect = 1; /* No version given. */
} else if(c->parser.http_major == 1 && c->parser.http_minor == 0) {
disconnect = 1; /* HTTP 1.0: disconnect by default */
}
if(c->header_connection.s) {
@ -192,7 +186,7 @@ http_crossdomain(struct http_client *c) {
"<allow-access-from domain=\"*\" />\n"
"</cross-domain-policy>\n";
http_response_init(&resp, 200, "OK");
http_response_init(c, &resp, 200, "OK");
http_response_set_header(&resp, "Content-Type", "application/xml");
sprintf(content_length, "%zd", sizeof(out)-1);
@ -212,7 +206,7 @@ http_options(struct http_client *c) {
struct http_response resp;
http_response_init(&resp, 200, "OK");
http_response_init(c, &resp, 200, "OK");
http_response_set_header(&resp, "Content-Type", "text/html");
http_response_set_header(&resp, "Allow", "GET,POST,OPTIONS");
@ -288,13 +282,7 @@ http_send_reply(struct http_client *c, short code, const char *msg,
}
/* respond */
http_response_init(&resp, code, msg);
if(!http_client_keep_alive(c)) {
http_response_set_header(&resp, "Connection", "Close");
} else if(code == 200) {
http_response_set_header(&resp, "Connection", "Keep-Alive");
}
http_response_init(c, &resp, code, msg);
sprintf(content_length, "%zd", body_len);
http_response_set_header(&resp, "Content-Length", content_length);
@ -416,13 +404,19 @@ http_on_query_string(http_parser *parser, const char *at, size_t length) {
/* HTTP Response */
void
http_response_init(struct http_response *r, int code, const char *msg) {
http_response_init(struct http_client *c, struct http_response *r, int code, const char *msg) {
memset(r, 0, sizeof(struct http_response));
r->code = code;
r->msg = msg;
http_response_set_header(r, "Server", "Webdis");
if(!http_client_keep_alive(c)) {
http_response_set_header(r, "Connection", "Close");
} else if(code == 200) {
http_response_set_header(r, "Connection", "Keep-Alive");
}
}
void

@ -19,10 +19,6 @@ struct http_client {
struct server *s;
int executing;
/* input buffer */
char *buffer;
size_t sz;
/* http parser */
http_parser_settings settings;
http_parser parser;
@ -100,7 +96,7 @@ http_send_error(struct http_client *c, short code, const char *msg);
/* HTTP response */
void
http_response_init(struct http_response *r, int code, const char *msg);
http_response_init(struct http_client *c, struct http_response *r, int code, const char *msg);
void
http_response_set_header(struct http_response *r, const char *k, const char *v);

Loading…
Cancel
Save