respond to OPTIONS and only allows GET and HEAD on static resources
This commit is contained in:
parent
f3616557b6
commit
7be60474ab
|
@ -1340,6 +1340,13 @@ static void http_static_handler(switch_http_request_t *request, verto_vhost_t *v
|
||||||
uint8_t chunk[4096];
|
uint8_t chunk[4096];
|
||||||
const char *mime_type = "text/html", *new_type;
|
const char *mime_type = "text/html", *new_type;
|
||||||
|
|
||||||
|
if (strncmp(request->method, "GET", 3) && strncmp(request->method, "HEAD", 4)) {
|
||||||
|
char *data = "HTTP/1.1 415 Method Not Allowed\r\n"
|
||||||
|
"Connection: close\r\n\r\n";
|
||||||
|
ws_raw_write(&jsock->ws, data, strlen(data));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch_snprintf(path, sizeof(path), "%s%s", vhost->root, request->uri);
|
switch_snprintf(path, sizeof(path), "%s%s", vhost->root, request->uri);
|
||||||
|
|
||||||
if (switch_directory_exists(path, NULL) == SWITCH_STATUS_SUCCESS) {
|
if (switch_directory_exists(path, NULL) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
@ -1357,7 +1364,9 @@ static void http_static_handler(switch_http_request_t *request, verto_vhost_t *v
|
||||||
|
|
||||||
if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS &&
|
if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS &&
|
||||||
switch_file_open(&fd, path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD, jsock->pool) == SWITCH_STATUS_SUCCESS) {
|
switch_file_open(&fd, path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD, jsock->pool) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
|
||||||
switch_size_t flen = switch_file_get_size(fd);
|
switch_size_t flen = switch_file_get_size(fd);
|
||||||
|
|
||||||
switch_snprintf((char *)chunk, sizeof(chunk),
|
switch_snprintf((char *)chunk, sizeof(chunk),
|
||||||
"HTTP/1.1 200 OK\r\n"
|
"HTTP/1.1 200 OK\r\n"
|
||||||
"Connection: close\r\n"
|
"Connection: close\r\n"
|
||||||
|
@ -1412,6 +1421,21 @@ static void http_run(jsock_t *jsock)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strncmp(request.method, "OPTIONS", 7)) {
|
||||||
|
char data[512];
|
||||||
|
switch_snprintf(data, sizeof(data),
|
||||||
|
"HTTP/1.1 200 OK\r\n"
|
||||||
|
"Connection: close\r\n"
|
||||||
|
"Date: %s\r\n"
|
||||||
|
"Allow: HEAD,GET,POST,PUT,DELETE,PATCH,OPTIONS\r\n"
|
||||||
|
"Server: FreeSWITCH-%s-mod_verto\r\n\r\n",
|
||||||
|
switch_event_get_header(request.headers, "Event-Date-GMT"),
|
||||||
|
switch_version_full());
|
||||||
|
|
||||||
|
ws_raw_write(&jsock->ws, data, strlen(data));
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strncmp(request.method, "POST", 4) && request.content_length &&
|
if (!strncmp(request.method, "POST", 4) && request.content_length &&
|
||||||
!strncmp(request.content_type, "application/x-www-form-urlencoded", 33)) {
|
!strncmp(request.content_type, "application/x-www-form-urlencoded", 33)) {
|
||||||
|
|
||||||
|
@ -1453,8 +1477,6 @@ static void http_run(jsock_t *jsock)
|
||||||
|
|
||||||
// switch_http_dump_request(&request);
|
// switch_http_dump_request(&request);
|
||||||
|
|
||||||
/* TODO: parse virtual hosts here */
|
|
||||||
|
|
||||||
stream.data = &request;
|
stream.data = &request;
|
||||||
stream.read_function = http_stream_read;
|
stream.read_function = http_stream_read;
|
||||||
stream.write_function = http_stream_write;
|
stream.write_function = http_stream_write;
|
||||||
|
|
Loading…
Reference in New Issue