Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
0c95290f
Commit
0c95290f
authored
9 years ago
by
Sergey Lyubka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add extra headers support (allows CORS)
PUBLISHED_FROM=2279e31315bba4d19e2ae568cba94ea5dea3ef6a
parent
8989739d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
10 deletions
+50
-10
mongoose.c
mongoose.c
+28
-10
mongoose.h
mongoose.h
+22
-0
No files found.
mongoose.c
View file @
0c95290f
...
...
@@ -4469,6 +4469,27 @@ void mg_send_websocket_handshake(struct mg_connection *nc, const char *uri,
#endif
/* MG_DISABLE_HTTP_WEBSOCKET */
#ifndef MG_DISABLE_FILESYSTEM
void
mg_send_response_line
(
struct
mg_connection
*
nc
,
int
status_code
,
const
char
*
extra_headers
)
{
const
char
*
status_message
=
"OK"
;
switch
(
status_code
)
{
case
206
:
status_message
=
"Partial Content"
;
break
;
case
416
:
status_message
=
"Requested range not satisfiable"
;
break
;
case
418
:
status_message
=
"I'm a teapot"
;
break
;
}
mg_printf
(
nc
,
"HTTP/1.1 %d %s
\r\n
"
,
status_code
,
status_message
);
if
(
extra_headers
!=
NULL
)
{
mg_printf
(
nc
,
"%s
\r\n
"
,
extra_headers
);
}
}
static
void
send_http_error
(
struct
mg_connection
*
nc
,
int
code
,
const
char
*
reason
)
{
if
(
reason
==
NULL
)
{
...
...
@@ -4643,8 +4664,8 @@ static void handle_ssi_request(struct mg_connection *nc, const char *path,
mg_set_close_on_exec
(
fileno
(
fp
));
mime_type
=
get_mime_type
(
path
,
"text/plain"
,
opts
);
mg_send_response_line
(
nc
,
200
,
opts
->
extra_headers
);
mg_printf
(
nc
,
"HTTP/1.1 200 OK
\r\n
"
"Content-Type: %.*s
\r\n
"
"Connection: close
\r\n\r\n
"
,
(
int
)
mime_type
.
len
,
mime_type
.
p
);
...
...
@@ -4709,7 +4730,6 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path,
int64_t
r1
=
0
,
r2
=
0
,
cl
=
st
->
st_size
;
struct
mg_str
*
range_hdr
=
mg_get_http_header
(
hm
,
"Range"
);
int
n
,
status_code
=
200
;
const
char
*
status_message
=
"OK"
;
/* Handle Range header */
range
[
0
]
=
'\0'
;
...
...
@@ -4722,14 +4742,12 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path,
}
if
(
r1
>
r2
||
r2
>=
cl
)
{
status_code
=
416
;
status_message
=
"Requested range not satisfiable"
;
cl
=
0
;
snprintf
(
range
,
sizeof
(
range
),
"Content-Range: bytes */%"
INT64_FMT
"
\r\n
"
,
(
int64_t
)
st
->
st_size
);
}
else
{
status_code
=
206
;
status_message
=
"Partial Content"
;
cl
=
r2
-
r1
+
1
;
snprintf
(
range
,
sizeof
(
range
),
"Content-Range: bytes %"
INT64_FMT
"-%"
INT64_FMT
"/%"
INT64_FMT
"
\r\n
"
,
...
...
@@ -4749,8 +4767,8 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path,
* position
* TODO(mkm): fix ESP8266 RTOS SDK
*/
mg_send_response_line
(
nc
,
status_code
,
opts
->
extra_headers
);
mg_printf
(
nc
,
"HTTP/1.1 %d %s
\r\n
"
"Date: %s
\r\n
"
"Last-Modified: %s
\r\n
"
"Accept-Ranges: bytes
\r\n
"
...
...
@@ -4761,8 +4779,8 @@ static void mg_send_http_file2(struct mg_connection *nc, const char *path,
"Content-Length: %"
SIZE_T_FMT
"
\r\n
"
"%sEtag: %s
\r\n\r\n
"
,
status_code
,
status_message
,
current_time
,
last_modified
,
(
int
)
mime_type
.
len
,
mime_type
.
p
,
(
size_t
)
cl
,
range
,
etag
);
current_time
,
last_modified
,
(
int
)
mime_type
.
len
,
mime_type
.
p
,
(
size_t
)
cl
,
range
,
etag
);
nc
->
proto_data
=
(
void
*
)
dp
;
dp
->
cl
=
cl
;
...
...
@@ -5219,9 +5237,9 @@ static void send_directory_listing(struct mg_connection *nc, const char *dir,
"document.onclick = function(ev){ "
"var c = ev.target.rel; if (c) srt(tb, c)}; srt(tb, 2); };</script>"
;
mg_
printf
(
nc
,
"%s
\r\n
%s: %s
\r\n
%s: %s
\r\n\r\n
"
,
"HTTP/1.1 200 OK"
,
"Transfer-Encoding"
,
"chunked"
,
"Content-Type
"
,
"text/html; charset=utf-8"
);
mg_
send_response_line
(
nc
,
200
,
opts
->
extra_headers
);
mg_printf
(
nc
,
"%s: %s
\r\n
%s: %s
\r\n\r\n
"
,
"Transfer-Encoding"
,
"chunked
"
,
"
Content-Type"
,
"
text/html; charset=utf-8"
);
mg_printf_http_chunk
(
nc
,
...
...
This diff is collapsed.
Click to expand it.
mongoose.h
View file @
0c95290f
...
...
@@ -1499,6 +1499,22 @@ void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len);
*/
void
mg_printf_http_chunk
(
struct
mg_connection
*
,
const
char
*
,
...);
/*
* Send response status line.
* If `extra_headers` is not NULL, then `extra_headers` are also sent
* after the reponse line, followed by a new line.
* Example:
*
* mg_send_response_line(nc, 200, "Access-Control-Allow-Origin: *");
*
* Will result in:
*
* HTTP/1.1 200 OK\r\n
* Access-Control-Allow-Origin: *\r\n
*/
void
mg_send_response_line
(
struct
mg_connection
*
nc
,
int
status_code
,
const
char
*
extra_headers
);
/*
* Send printf-formatted HTTP chunk, escaping HTML tags.
*/
...
...
@@ -1726,6 +1742,12 @@ struct mg_serve_http_opts {
* ".txt=text/plain; charset=utf-8,.c=text/plain"
*/
const
char
*
custom_mime_types
;
/*
* Extra HTTP headers to add to each server response.
* Example: to enable CORS, set this to "Access-Control-Allow-Origin: *".
*/
const
char
*
extra_headers
;
};
/*
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment