Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
mongoose
Commits
05b2a042
Commit
05b2a042
authored
Sep 17, 2012
by
Sergey Lyubka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moved status_code, user_data, log_message out of struct mg_request_info
parent
4408083b
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
52 additions
and
40 deletions
+52
-40
main.c
main.c
+1
-1
mongoose.c
mongoose.c
+40
-29
mongoose.h
mongoose.h
+5
-5
embed.c
test/embed.c
+3
-2
unit_test.c
test/unit_test.c
+3
-3
No files found.
main.c
View file @
05b2a042
...
@@ -219,7 +219,7 @@ static void init_server_name(void) {
...
@@ -219,7 +219,7 @@ static void init_server_name(void) {
static
void
*
mongoose_callback
(
enum
mg_event
ev
,
struct
mg_connection
*
conn
)
{
static
void
*
mongoose_callback
(
enum
mg_event
ev
,
struct
mg_connection
*
conn
)
{
if
(
ev
==
MG_EVENT_LOG
)
{
if
(
ev
==
MG_EVENT_LOG
)
{
printf
(
"%s
\n
"
,
mg_get_
request_info
(
conn
)
->
log_message
);
printf
(
"%s
\n
"
,
mg_get_
log_message
(
conn
)
);
}
}
return
NULL
;
return
NULL
;
...
...
mongoose.c
View file @
05b2a042
...
@@ -497,10 +497,12 @@ struct mg_connection {
...
@@ -497,10 +497,12 @@ struct mg_connection {
char
*
path_info
;
// PATH_INFO part of the URL
char
*
path_info
;
// PATH_INFO part of the URL
char
*
body
;
// Pointer to not-read yet buffered body data
char
*
body
;
// Pointer to not-read yet buffered body data
char
*
next_request
;
// Pointer to the buffered next request
char
*
next_request
;
// Pointer to the buffered next request
char
*
log_message
;
// Placeholder for the mongoose error log message
int
must_close
;
// 1 if connection must be closed
int
must_close
;
// 1 if connection must be closed
int
buf_size
;
// Buffer size
int
buf_size
;
// Buffer size
int
request_len
;
// Size of the request + headers in a buffer
int
request_len
;
// Size of the request + headers in a buffer
int
data_len
;
// Total size of data in a buffer
int
data_len
;
// Total size of data in a buffer
int
status_code
;
// HTTP reply status code, e.g. 200
};
};
const
char
**
mg_get_valid_option_names
(
void
)
{
const
char
**
mg_get_valid_option_names
(
void
)
{
...
@@ -508,9 +510,20 @@ const char **mg_get_valid_option_names(void) {
...
@@ -508,9 +510,20 @@ const char **mg_get_valid_option_names(void) {
}
}
static
void
*
call_user
(
struct
mg_connection
*
conn
,
enum
mg_event
event
)
{
static
void
*
call_user
(
struct
mg_connection
*
conn
,
enum
mg_event
event
)
{
conn
->
request_info
.
user_data
=
conn
->
ctx
->
user_data
;
return
conn
==
NULL
||
conn
->
ctx
==
NULL
||
conn
->
ctx
->
user_callback
==
NULL
?
return
conn
->
ctx
->
user_callback
==
NULL
?
NULL
:
NULL
:
conn
->
ctx
->
user_callback
(
event
,
conn
);
conn
->
ctx
->
user_callback
(
event
,
conn
);
}
void
*
mg_get_user_data
(
struct
mg_connection
*
conn
)
{
return
conn
!=
NULL
&&
conn
->
ctx
!=
NULL
?
conn
->
ctx
->
user_data
:
NULL
;
}
const
char
*
mg_get_log_message
(
const
struct
mg_connection
*
conn
)
{
return
conn
==
NULL
?
NULL
:
conn
->
log_message
;
}
int
mg_get_reply_status_code
(
const
struct
mg_connection
*
conn
)
{
return
conn
==
NULL
?
-
1
:
conn
->
status_code
;
}
}
static
int
get_option_index
(
const
char
*
name
)
{
static
int
get_option_index
(
const
char
*
name
)
{
...
@@ -565,7 +578,7 @@ static void cry(struct mg_connection *conn, const char *fmt, ...) {
...
@@ -565,7 +578,7 @@ static void cry(struct mg_connection *conn, const char *fmt, ...) {
// Do not lock when getting the callback value, here and below.
// Do not lock when getting the callback value, here and below.
// I suppose this is fine, since function cannot disappear in the
// I suppose this is fine, since function cannot disappear in the
// same way string option can.
// same way string option can.
conn
->
request_info
.
log_message
=
buf
;
conn
->
log_message
=
buf
;
if
(
call_user
(
conn
,
MG_EVENT_LOG
)
==
NULL
)
{
if
(
call_user
(
conn
,
MG_EVENT_LOG
)
==
NULL
)
{
fp
=
conn
->
ctx
->
config
[
ERROR_LOG_FILE
]
==
NULL
?
NULL
:
fp
=
conn
->
ctx
->
config
[
ERROR_LOG_FILE
]
==
NULL
?
NULL
:
mg_fopen
(
conn
->
ctx
->
config
[
ERROR_LOG_FILE
],
"a+"
);
mg_fopen
(
conn
->
ctx
->
config
[
ERROR_LOG_FILE
],
"a+"
);
...
@@ -591,7 +604,7 @@ static void cry(struct mg_connection *conn, const char *fmt, ...) {
...
@@ -591,7 +604,7 @@ static void cry(struct mg_connection *conn, const char *fmt, ...) {
}
}
}
}
}
}
conn
->
request_info
.
log_message
=
NULL
;
conn
->
log_message
=
NULL
;
}
}
// Return fake connection structure. Used for logging, if connection
// Return fake connection structure. Used for logging, if connection
...
@@ -849,7 +862,7 @@ static int should_keep_alive(const struct mg_connection *conn) {
...
@@ -849,7 +862,7 @@ static int should_keep_alive(const struct mg_connection *conn) {
const
char
*
http_version
=
conn
->
request_info
.
http_version
;
const
char
*
http_version
=
conn
->
request_info
.
http_version
;
const
char
*
header
=
mg_get_header
(
conn
,
"Connection"
);
const
char
*
header
=
mg_get_header
(
conn
,
"Connection"
);
if
(
conn
->
must_close
||
if
(
conn
->
must_close
||
conn
->
request_info
.
status_code
==
401
||
conn
->
status_code
==
401
||
mg_strcasecmp
(
conn
->
ctx
->
config
[
ENABLE_KEEP_ALIVE
],
"yes"
)
!=
0
||
mg_strcasecmp
(
conn
->
ctx
->
config
[
ENABLE_KEEP_ALIVE
],
"yes"
)
!=
0
||
(
header
!=
NULL
&&
mg_strcasecmp
(
header
,
"keep-alive"
)
!=
0
)
||
(
header
!=
NULL
&&
mg_strcasecmp
(
header
,
"keep-alive"
)
!=
0
)
||
(
header
==
NULL
&&
http_version
&&
strcmp
(
http_version
,
"1.1"
)))
{
(
header
==
NULL
&&
http_version
&&
strcmp
(
http_version
,
"1.1"
)))
{
...
@@ -873,7 +886,7 @@ static void send_http_error(struct mg_connection *conn, int status,
...
@@ -873,7 +886,7 @@ static void send_http_error(struct mg_connection *conn, int status,
va_list
ap
;
va_list
ap
;
int
len
;
int
len
;
conn
->
request_info
.
status_code
=
status
;
conn
->
status_code
=
status
;
if
(
call_user
(
conn
,
MG_HTTP_ERROR
)
==
NULL
)
{
if
(
call_user
(
conn
,
MG_HTTP_ERROR
)
==
NULL
)
{
buf
[
0
]
=
'\0'
;
buf
[
0
]
=
'\0'
;
...
@@ -2289,7 +2302,7 @@ static int check_authorization(struct mg_connection *conn, const char *path) {
...
@@ -2289,7 +2302,7 @@ static int check_authorization(struct mg_connection *conn, const char *path) {
}
}
static
void
send_authorization_request
(
struct
mg_connection
*
conn
)
{
static
void
send_authorization_request
(
struct
mg_connection
*
conn
)
{
conn
->
request_info
.
status_code
=
401
;
conn
->
status_code
=
401
;
(
void
)
mg_printf
(
conn
,
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 401 Unauthorized
\r\n
"
"HTTP/1.1 401 Unauthorized
\r\n
"
"Content-Length: 0
\r\n
"
"Content-Length: 0
\r\n
"
...
@@ -2582,7 +2595,7 @@ static void handle_directory_request(struct mg_connection *conn,
...
@@ -2582,7 +2595,7 @@ static void handle_directory_request(struct mg_connection *conn,
free
(
data
.
entries
);
free
(
data
.
entries
);
conn
->
num_bytes_sent
+=
mg_printf
(
conn
,
"%s"
,
"</table></body></html>"
);
conn
->
num_bytes_sent
+=
mg_printf
(
conn
,
"%s"
,
"</table></body></html>"
);
conn
->
request_info
.
status_code
=
200
;
conn
->
status_code
=
200
;
}
}
// Send len bytes from the opened file to the client.
// Send len bytes from the opened file to the client.
...
@@ -2639,7 +2652,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
...
@@ -2639,7 +2652,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
get_mime_type
(
conn
->
ctx
,
path
,
&
mime_vec
);
get_mime_type
(
conn
->
ctx
,
path
,
&
mime_vec
);
cl
=
stp
->
size
;
cl
=
stp
->
size
;
conn
->
request_info
.
status_code
=
200
;
conn
->
status_code
=
200
;
range
[
0
]
=
'\0'
;
range
[
0
]
=
'\0'
;
if
((
fp
=
mg_fopen
(
path
,
"rb"
))
==
NULL
)
{
if
((
fp
=
mg_fopen
(
path
,
"rb"
))
==
NULL
)
{
...
@@ -2653,7 +2666,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
...
@@ -2653,7 +2666,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
r1
=
r2
=
0
;
r1
=
r2
=
0
;
hdr
=
mg_get_header
(
conn
,
"Range"
);
hdr
=
mg_get_header
(
conn
,
"Range"
);
if
(
hdr
!=
NULL
&&
(
n
=
parse_range_header
(
hdr
,
&
r1
,
&
r2
))
>
0
)
{
if
(
hdr
!=
NULL
&&
(
n
=
parse_range_header
(
hdr
,
&
r1
,
&
r2
))
>
0
)
{
conn
->
request_info
.
status_code
=
206
;
conn
->
status_code
=
206
;
(
void
)
fseeko
(
fp
,
r1
,
SEEK_SET
);
(
void
)
fseeko
(
fp
,
r1
,
SEEK_SET
);
cl
=
n
==
2
?
r2
-
r1
+
1
:
cl
-
r1
;
cl
=
n
==
2
?
r2
-
r1
+
1
:
cl
-
r1
;
(
void
)
mg_snprintf
(
conn
,
range
,
sizeof
(
range
),
(
void
)
mg_snprintf
(
conn
,
range
,
sizeof
(
range
),
...
@@ -2680,7 +2693,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
...
@@ -2680,7 +2693,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
"Connection: %s
\r\n
"
"Connection: %s
\r\n
"
"Accept-Ranges: bytes
\r\n
"
"Accept-Ranges: bytes
\r\n
"
"%s
\r\n
"
,
"%s
\r\n
"
,
conn
->
request_info
.
status_code
,
msg
,
date
,
lm
,
etag
,
(
int
)
mime_vec
.
len
,
conn
->
status_code
,
msg
,
date
,
lm
,
etag
,
(
int
)
mime_vec
.
len
,
mime_vec
.
ptr
,
cl
,
suggest_connection_header
(
conn
),
range
);
mime_vec
.
ptr
,
cl
,
suggest_connection_header
(
conn
),
range
);
if
(
strcmp
(
conn
->
request_info
.
request_method
,
"HEAD"
)
!=
0
)
{
if
(
strcmp
(
conn
->
request_info
.
request_method
,
"HEAD"
)
!=
0
)
{
...
@@ -2729,7 +2742,6 @@ static int parse_http_message(char *buf, int len, struct mg_request_info *ri) {
...
@@ -2729,7 +2742,6 @@ static int parse_http_message(char *buf, int len, struct mg_request_info *ri) {
// Reset attributes. DO NOT TOUCH is_ssl, remote_ip, remote_port
// Reset attributes. DO NOT TOUCH is_ssl, remote_ip, remote_port
ri
->
remote_user
=
ri
->
request_method
=
ri
->
uri
=
ri
->
http_version
=
NULL
;
ri
->
remote_user
=
ri
->
request_method
=
ri
->
uri
=
ri
->
http_version
=
NULL
;
ri
->
num_headers
=
0
;
ri
->
num_headers
=
0
;
ri
->
status_code
=
-
1
;
buf
[
request_length
-
1
]
=
'\0'
;
buf
[
request_length
-
1
]
=
'\0'
;
...
@@ -3144,21 +3156,21 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
...
@@ -3144,21 +3156,21 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog) {
// Make up and send the status line
// Make up and send the status line
status_text
=
"OK"
;
status_text
=
"OK"
;
if
((
status
=
get_header
(
&
ri
,
"Status"
))
!=
NULL
)
{
if
((
status
=
get_header
(
&
ri
,
"Status"
))
!=
NULL
)
{
conn
->
request_info
.
status_code
=
atoi
(
status
);
conn
->
status_code
=
atoi
(
status
);
status_text
=
status
;
status_text
=
status
;
while
(
isdigit
(
*
(
unsigned
char
*
)
status_text
)
||
*
status_text
==
' '
)
{
while
(
isdigit
(
*
(
unsigned
char
*
)
status_text
)
||
*
status_text
==
' '
)
{
status_text
++
;
status_text
++
;
}
}
}
else
if
(
get_header
(
&
ri
,
"Location"
)
!=
NULL
)
{
}
else
if
(
get_header
(
&
ri
,
"Location"
)
!=
NULL
)
{
conn
->
request_info
.
status_code
=
302
;
conn
->
status_code
=
302
;
}
else
{
}
else
{
conn
->
request_info
.
status_code
=
200
;
conn
->
status_code
=
200
;
}
}
if
(
get_header
(
&
ri
,
"Connection"
)
!=
NULL
&&
if
(
get_header
(
&
ri
,
"Connection"
)
!=
NULL
&&
!
mg_strcasecmp
(
get_header
(
&
ri
,
"Connection"
),
"keep-alive"
))
{
!
mg_strcasecmp
(
get_header
(
&
ri
,
"Connection"
),
"keep-alive"
))
{
conn
->
must_close
=
1
;
conn
->
must_close
=
1
;
}
}
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 %d %s
\r\n
"
,
conn
->
request_info
.
status_code
,
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 %d %s
\r\n
"
,
conn
->
status_code
,
status_text
);
status_text
);
// Send headers
// Send headers
...
@@ -3241,10 +3253,10 @@ static void put_file(struct mg_connection *conn, const char *path) {
...
@@ -3241,10 +3253,10 @@ static void put_file(struct mg_connection *conn, const char *path) {
FILE
*
fp
;
FILE
*
fp
;
int
rc
;
int
rc
;
conn
->
request_info
.
status_code
=
mg_stat
(
path
,
&
st
)
==
0
?
200
:
201
;
conn
->
status_code
=
mg_stat
(
path
,
&
st
)
==
0
?
200
:
201
;
if
((
rc
=
put_dir
(
path
))
==
0
)
{
if
((
rc
=
put_dir
(
path
))
==
0
)
{
mg_printf
(
conn
,
"HTTP/1.1 %d OK
\r\n\r\n
"
,
conn
->
request_info
.
status_code
);
mg_printf
(
conn
,
"HTTP/1.1 %d OK
\r\n\r\n
"
,
conn
->
status_code
);
}
else
if
(
rc
==
-
1
)
{
}
else
if
(
rc
==
-
1
)
{
send_http_error
(
conn
,
500
,
http_500_error
,
send_http_error
(
conn
,
500
,
http_500_error
,
"put_dir(%s): %s"
,
path
,
strerror
(
ERRNO
));
"put_dir(%s): %s"
,
path
,
strerror
(
ERRNO
));
...
@@ -3256,13 +3268,13 @@ static void put_file(struct mg_connection *conn, const char *path) {
...
@@ -3256,13 +3268,13 @@ static void put_file(struct mg_connection *conn, const char *path) {
range
=
mg_get_header
(
conn
,
"Content-Range"
);
range
=
mg_get_header
(
conn
,
"Content-Range"
);
r1
=
r2
=
0
;
r1
=
r2
=
0
;
if
(
range
!=
NULL
&&
parse_range_header
(
range
,
&
r1
,
&
r2
)
>
0
)
{
if
(
range
!=
NULL
&&
parse_range_header
(
range
,
&
r1
,
&
r2
)
>
0
)
{
conn
->
request_info
.
status_code
=
206
;
conn
->
status_code
=
206
;
// TODO(lsm): handle seek error
// TODO(lsm): handle seek error
(
void
)
fseeko
(
fp
,
r1
,
SEEK_SET
);
(
void
)
fseeko
(
fp
,
r1
,
SEEK_SET
);
}
}
if
(
forward_body_data
(
conn
,
fp
,
INVALID_SOCKET
,
NULL
))
if
(
forward_body_data
(
conn
,
fp
,
INVALID_SOCKET
,
NULL
))
{
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 %d OK
\r\n\r\n
"
,
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 %d OK
\r\n\r\n
"
,
conn
->
status_code
);
conn
->
request_info
.
status_code
);
}
(
void
)
fclose
(
fp
);
(
void
)
fclose
(
fp
);
}
}
}
}
...
@@ -3412,7 +3424,7 @@ static void handle_ssi_file_request(struct mg_connection *conn,
...
@@ -3412,7 +3424,7 @@ static void handle_ssi_file_request(struct mg_connection *conn,
}
}
static
void
send_options
(
struct
mg_connection
*
conn
)
{
static
void
send_options
(
struct
mg_connection
*
conn
)
{
conn
->
request_info
.
status_code
=
200
;
conn
->
status_code
=
200
;
(
void
)
mg_printf
(
conn
,
(
void
)
mg_printf
(
conn
,
"HTTP/1.1 200 OK
\r\n
"
"HTTP/1.1 200 OK
\r\n
"
...
@@ -3456,7 +3468,7 @@ static void handle_propfind(struct mg_connection *conn, const char* path,
...
@@ -3456,7 +3468,7 @@ static void handle_propfind(struct mg_connection *conn, const char* path,
const
char
*
depth
=
mg_get_header
(
conn
,
"Depth"
);
const
char
*
depth
=
mg_get_header
(
conn
,
"Depth"
);
conn
->
must_close
=
1
;
conn
->
must_close
=
1
;
conn
->
request_info
.
status_code
=
207
;
conn
->
status_code
=
207
;
mg_printf
(
conn
,
"HTTP/1.1 207 Multi-Status
\r\n
"
mg_printf
(
conn
,
"HTTP/1.1 207 Multi-Status
\r\n
"
"Connection: close
\r\n
"
"Connection: close
\r\n
"
"Content-Type: text/xml; charset=utf-8
\r\n\r\n
"
);
"Content-Type: text/xml; charset=utf-8
\r\n\r\n
"
);
...
@@ -3694,7 +3706,7 @@ static void log_access(const struct mg_connection *conn) {
...
@@ -3694,7 +3706,7 @@ static void log_access(const struct mg_connection *conn) {
src_addr
,
ri
->
remote_user
==
NULL
?
"-"
:
ri
->
remote_user
,
date
,
src_addr
,
ri
->
remote_user
==
NULL
?
"-"
:
ri
->
remote_user
,
date
,
ri
->
request_method
?
ri
->
request_method
:
"-"
,
ri
->
request_method
?
ri
->
request_method
:
"-"
,
ri
->
uri
?
ri
->
uri
:
"-"
,
ri
->
http_version
,
ri
->
uri
?
ri
->
uri
:
"-"
,
ri
->
http_version
,
conn
->
request_info
.
status_code
,
conn
->
num_bytes_sent
);
conn
->
status_code
,
conn
->
num_bytes_sent
);
log_header
(
conn
,
"Referer"
,
fp
);
log_header
(
conn
,
"Referer"
,
fp
);
log_header
(
conn
,
"User-Agent"
,
fp
);
log_header
(
conn
,
"User-Agent"
,
fp
);
fputc
(
'\n'
,
fp
);
fputc
(
'\n'
,
fp
);
...
@@ -3848,7 +3860,6 @@ static int load_dll(struct mg_context *ctx, const char *dll_name,
...
@@ -3848,7 +3860,6 @@ static int load_dll(struct mg_context *ctx, const char *dll_name,
// Dynamically load SSL library. Set up ctx->ssl_ctx pointer.
// Dynamically load SSL library. Set up ctx->ssl_ctx pointer.
static
int
set_ssl_option
(
struct
mg_context
*
ctx
)
{
static
int
set_ssl_option
(
struct
mg_context
*
ctx
)
{
static
struct
mg_request_info
fake_request_info
;
int
i
,
size
;
int
i
,
size
;
const
char
*
pem
=
ctx
->
config
[
SSL_CERTIFICATE
];
const
char
*
pem
=
ctx
->
config
[
SSL_CERTIFICATE
];
...
@@ -3873,7 +3884,6 @@ static int set_ssl_option(struct mg_context *ctx) {
...
@@ -3873,7 +3884,6 @@ static int set_ssl_option(struct mg_context *ctx) {
}
}
if
(
ctx
->
user_callback
!=
NULL
)
{
if
(
ctx
->
user_callback
!=
NULL
)
{
fake_request_info
.
user_data
=
ctx
->
user_data
;
ctx
->
user_callback
(
MG_INIT_SSL
,
(
struct
mg_connection
*
)
ctx
->
ssl_ctx
);
ctx
->
user_callback
(
MG_INIT_SSL
,
(
struct
mg_connection
*
)
ctx
->
ssl_ctx
);
}
}
...
@@ -3928,11 +3938,12 @@ static int set_acl_option(struct mg_context *ctx) {
...
@@ -3928,11 +3938,12 @@ static int set_acl_option(struct mg_context *ctx) {
}
}
static
void
reset_per_request_attributes
(
struct
mg_connection
*
conn
)
{
static
void
reset_per_request_attributes
(
struct
mg_connection
*
conn
)
{
conn
->
path_info
=
conn
->
body
=
conn
->
next_request
=
NULL
;
conn
->
path_info
=
conn
->
body
=
conn
->
next_request
=
conn
->
log_message
=
NULL
;
conn
->
num_bytes_sent
=
conn
->
consumed_content
=
0
;
conn
->
num_bytes_sent
=
conn
->
consumed_content
=
0
;
conn
->
content_len
=
-
1
;
conn
->
content_len
=
-
1
;
conn
->
request_len
=
conn
->
data_len
=
0
;
conn
->
request_len
=
conn
->
data_len
=
0
;
conn
->
must_close
=
0
;
conn
->
must_close
=
0
;
conn
->
status_code
=
-
1
;
}
}
static
void
close_socket_gracefully
(
struct
mg_connection
*
conn
)
{
static
void
close_socket_gracefully
(
struct
mg_connection
*
conn
)
{
...
...
mongoose.h
View file @
05b2a042
...
@@ -34,16 +34,13 @@ struct mg_connection; // Handle for the individual connection
...
@@ -34,16 +34,13 @@ struct mg_connection; // Handle for the individual connection
// This structure contains information about the HTTP request.
// This structure contains information about the HTTP request.
struct
mg_request_info
{
struct
mg_request_info
{
void
*
user_data
;
// User-defined pointer passed to mg_start()
char
*
request_method
;
// "GET", "POST", etc
char
*
request_method
;
// "GET", "POST", etc
char
*
uri
;
// URL-decoded URI
char
*
uri
;
// URL-decoded URI
char
*
http_version
;
// E.g. "1.0", "1.1"
char
*
http_version
;
// E.g. "1.0", "1.1"
char
*
query_string
;
// URL part after '?' (not including '?') or NULL
char
*
query_string
;
// URL part after '?' (not including '?') or NULL
char
*
remote_user
;
// Authenticated user, or NULL if no auth used
char
*
remote_user
;
// Authenticated user, or NULL if no auth used
char
*
log_message
;
// Mongoose error log message, MG_EVENT_LOG only
long
remote_ip
;
// Client's IP address
long
remote_ip
;
// Client's IP address
int
remote_port
;
// Client's port
int
remote_port
;
// Client's port
int
status_code
;
// HTTP reply status code, e.g. 200
int
is_ssl
;
// 1 if SSL-ed, 0 if not
int
is_ssl
;
// 1 if SSL-ed, 0 if not
int
num_headers
;
// Number of headers
int
num_headers
;
// Number of headers
struct
mg_header
{
struct
mg_header
{
...
@@ -151,9 +148,12 @@ int mg_modify_passwords_file(const char *passwords_file_name,
...
@@ -151,9 +148,12 @@ int mg_modify_passwords_file(const char *passwords_file_name,
const
char
*
password
);
const
char
*
password
);
// Return
mg_request_info structure
associated with the request.
// Return
information
associated with the request.
//
Always succeeds
.
//
These functions always succeed
.
const
struct
mg_request_info
*
mg_get_request_info
(
const
struct
mg_connection
*
);
const
struct
mg_request_info
*
mg_get_request_info
(
const
struct
mg_connection
*
);
void
*
mg_get_user_data
(
struct
mg_connection
*
);
const
char
*
mg_get_log_message
(
const
struct
mg_connection
*
);
int
mg_get_reply_status_code
(
const
struct
mg_connection
*
);
// Send data to the client.
// Send data to the client.
...
...
test/embed.c
View file @
05b2a042
...
@@ -119,9 +119,10 @@ static void test_get_request_info(struct mg_connection *conn,
...
@@ -119,9 +119,10 @@ static void test_get_request_info(struct mg_connection *conn,
static
void
test_error
(
struct
mg_connection
*
conn
,
static
void
test_error
(
struct
mg_connection
*
conn
,
const
struct
mg_request_info
*
ri
)
{
const
struct
mg_request_info
*
ri
)
{
(
void
)
ri
;
mg_printf
(
conn
,
"HTTP/1.1 %d XX
\r\n
"
mg_printf
(
conn
,
"HTTP/1.1 %d XX
\r\n
"
"Conntection: close
\r\n\r\n
"
,
ri
->
status_code
);
"Conntection: close
\r\n\r\n
"
,
mg_get_reply_status_code
(
conn
)
);
mg_printf
(
conn
,
"Error: [%d]"
,
ri
->
status_code
);
mg_printf
(
conn
,
"Error: [%d]"
,
mg_get_reply_status_code
(
conn
)
);
}
}
static
void
test_post
(
struct
mg_connection
*
conn
,
static
void
test_post
(
struct
mg_connection
*
conn
,
...
...
test/unit_test.c
View file @
05b2a042
...
@@ -64,10 +64,10 @@ static void test_should_keep_alive(void) {
...
@@ -64,10 +64,10 @@ static void test_should_keep_alive(void) {
parse_http_request
(
req4
,
sizeof
(
req4
),
&
conn
.
request_info
);
parse_http_request
(
req4
,
sizeof
(
req4
),
&
conn
.
request_info
);
ASSERT
(
should_keep_alive
(
&
conn
)
==
1
);
ASSERT
(
should_keep_alive
(
&
conn
)
==
1
);
conn
.
request_info
.
status_code
=
401
;
conn
.
status_code
=
401
;
ASSERT
(
should_keep_alive
(
&
conn
)
==
0
);
ASSERT
(
should_keep_alive
(
&
conn
)
==
0
);
conn
.
request_info
.
status_code
=
200
;
conn
.
status_code
=
200
;
conn
.
must_close
=
1
;
conn
.
must_close
=
1
;
ASSERT
(
should_keep_alive
(
&
conn
)
==
0
);
ASSERT
(
should_keep_alive
(
&
conn
)
==
0
);
}
}
...
@@ -138,7 +138,7 @@ static void *event_handler(enum mg_event event,
...
@@ -138,7 +138,7 @@ static void *event_handler(enum mg_event event,
"%s"
,
(
int
)
strlen
(
fetch_data
),
fetch_data
);
"%s"
,
(
int
)
strlen
(
fetch_data
),
fetch_data
);
return
""
;
return
""
;
}
else
if
(
event
==
MG_EVENT_LOG
)
{
}
else
if
(
event
==
MG_EVENT_LOG
)
{
printf
(
"%s
\n
"
,
request_info
->
log_message
);
printf
(
"%s
\n
"
,
mg_get_log_message
(
conn
)
);
}
}
return
NULL
;
return
NULL
;
...
...
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