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
e41df3cf
Commit
e41df3cf
authored
Mar 03, 2014
by
Sergey Lyubka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MG_REQ_BEGIN -> MG_REQUEST, killed MG_REQ_END, add MG_REPLY. Restored server test
parent
65f48429
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
60 additions
and
59 deletions
+60
-59
Makefile
examples/Makefile
+1
-1
hello.c
examples/hello.c
+1
-1
multi_threaded.c
examples/multi_threaded.c
+1
-1
post.c
examples/post.c
+1
-1
unit_test.c
examples/unit_test.c
+38
-34
upload.c
examples/upload.c
+1
-1
websocket.c
examples/websocket.c
+1
-1
mongoose.c
mongoose.c
+12
-15
mongoose.h
mongoose.h
+4
-4
No files found.
examples/Makefile
View file @
e41df3cf
...
...
@@ -52,7 +52,7 @@ websocket_html.c: websocket.html
perl mkdata.pl
$<
>
$@
u
:
g++ unit_test.c
-Wall
-W
-pedantic
-lssl
-g
-O0
&&
./a.out
g++ unit_test.c
-Wall
-W
-pedantic
-lssl
-g
-O0
$(CFLAGS_EXTRA)
&&
./a.out
clean
:
-
@
$(RM)
hello upload post websocket auth server multi_threaded websocket_html.c
*
.exe
*
.dSYM
*
.obj .
*
o
examples/hello.c
View file @
e41df3cf
...
...
@@ -5,7 +5,7 @@
static
int
ev_handler
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
int
result
=
MG_FALSE
;
if
(
ev
==
MG_REQ
_BEGIN
)
{
if
(
ev
==
MG_REQ
UEST
)
{
mg_printf_data
(
conn
,
"Hello! Requested URI is [%s]"
,
conn
->
uri
);
result
=
MG_TRUE
;
}
else
if
(
ev
==
MG_AUTH
)
{
...
...
examples/multi_threaded.c
View file @
e41df3cf
...
...
@@ -3,7 +3,7 @@
// Start a browser and hit refresh couple of times. The replies will
// come from both server instances.
static
int
ev_handler
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
if
(
ev
==
MG_REQ
_BEGIN
)
{
if
(
ev
==
MG_REQ
UEST
)
{
mg_send_header
(
conn
,
"Content-Type"
,
"text/plain"
);
mg_printf_data
(
conn
,
"This is a reply from server instance # %s"
,
(
char
*
)
conn
->
server_param
);
...
...
examples/post.c
View file @
e41df3cf
...
...
@@ -36,7 +36,7 @@ static void send_reply(struct mg_connection *conn) {
}
static
int
ev_handler
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
if
(
ev
==
MG_REQ
_BEGIN
)
{
if
(
ev
==
MG_REQ
UEST
)
{
send_reply
(
conn
);
return
MG_TRUE
;
}
else
if
(
ev
==
MG_AUTH
)
{
...
...
examples/unit_test.c
View file @
e41df3cf
...
...
@@ -340,42 +340,44 @@ static const char *test_next_option(void) {
}
static
int
evh1
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
if
(
ev
==
MG_HTTP_ERROR
)
{
mg_printf
(
conn
,
"HTTP/1.0 404 NF
\r\n\r\n
ERR: %d"
,
conn
->
status_code
);
return
MG_TRUE
;
}
else
if
(
ev
==
MG_REQ_BEGIN
&&
!
strcmp
(
conn
->
uri
,
"/cb1"
))
{
mg_printf
(
conn
,
"%s %s %s"
,
conn
->
server_param
==
NULL
?
"?"
:
(
char
*
)
conn
->
server_param
,
conn
->
connection_param
==
NULL
?
"?"
:
"!"
,
conn
->
remote_ip
);
return
MG_TRUE
;
}
return
MG_FALSE
;
}
static
int
ts1
(
struct
mg_connection
*
conn
)
{
if
(
conn
->
status_code
==
MG_CONNECT_SUCCESS
)
{
mg_printf
(
conn
,
"%s"
,
"GET /cb1 HTTP/1.0
\r\n\r\n
"
);
return
MG_CLIENT_CONTINUE
;
}
else
if
(
conn
->
status_code
==
MG_DOWNLOAD_SUCCESS
)
{
sprintf
((
char
*
)
conn
->
connection_param
,
"%.*s"
,
(
int
)
conn
->
content_len
,
conn
->
content
);
char
*
buf
=
(
char
*
)
conn
->
connection_param
;
int
result
=
MG_FALSE
;
switch
(
ev
)
{
case
MG_CONNECT
:
mg_printf
(
conn
,
"GET %s HTTP/1.0
\r\n\r\n
"
,
buf
[
0
]
==
'1'
?
"/cb1"
:
"/non_exist"
);
result
=
MG_TRUE
;
break
;
case
MG_HTTP_ERROR
:
mg_printf
(
conn
,
"HTTP/1.0 404 NF
\r\n\r\n
ERR: %d"
,
conn
->
status_code
);
result
=
MG_TRUE
;
break
;
case
MG_REQUEST
:
if
(
!
strcmp
(
conn
->
uri
,
"/cb1"
))
{
mg_printf
(
conn
,
"HTTP/1.0 200 OK
\r\n\r\n
%s %s %s"
,
(
char
*
)
conn
->
server_param
,
buf
==
NULL
?
"?"
:
"!"
,
conn
->
remote_ip
);
result
=
MG_TRUE
;
}
break
;
case
MG_REPLY
:
if
(
buf
!=
NULL
)
{
sprintf
(
buf
+
1
,
"%.*s"
,
(
int
)
conn
->
content_len
,
conn
->
content
);
}
break
;
case
MG_AUTH
:
result
=
MG_TRUE
;
break
;
default:
break
;
}
return
MG_CLIENT_CLOSE
;
}
static
int
ts2
(
struct
mg_connection
*
conn
)
{
if
(
conn
->
status_code
==
MG_CONNECT_SUCCESS
)
{
mg_printf
(
conn
,
"%s"
,
"GET /non_exist HTTP/1.0
\r\n\r\n
"
);
return
MG_CLIENT_CONTINUE
;
}
else
if
(
conn
->
status_code
==
MG_DOWNLOAD_SUCCESS
)
{
sprintf
((
char
*
)
conn
->
connection_param
,
"%s %.*s"
,
conn
->
uri
,
(
int
)
conn
->
content_len
,
conn
->
content
);
}
return
MG_CLIENT_CLOSE
;
return
result
;
}
static
const
char
*
test_server
(
void
)
{
char
buf1
[
100
]
=
"
"
,
buf2
[
100
]
=
"
"
;
char
buf1
[
100
]
=
"
1"
,
buf2
[
100
]
=
"2
"
;
struct
mg_server
*
server
=
mg_create_server
((
void
*
)
"foo"
,
evh1
);
struct
mg_connection
*
conn
;
...
...
@@ -384,11 +386,13 @@ static const char *test_server(void) {
ASSERT
(
mg_set_option
(
server
,
"document_root"
,
"."
)
==
NULL
);
ASSERT
((
conn
=
mg_connect
(
server
,
"127.0.0.1"
,
atoi
(
HTTP_PORT
),
0
))
!=
NULL
);
conn
->
connection_param
=
buf1
;
ASSERT
((
conn
=
mg_connect
(
server
,
"127.0.0.1"
,
atoi
(
HTTP_PORT
),
0
))
!=
NULL
);
conn
->
connection_param
=
buf2
;
{
int
i
;
for
(
i
=
0
;
i
<
50
;
i
++
)
mg_poll_server
(
server
,
1
);
}
ASSERT
(
strcmp
(
buf1
,
"foo ? 127.0.0.1"
)
==
0
);
ASSERT
(
strcmp
(
buf2
,
"
404
ERR: 404"
)
==
0
);
ASSERT
(
strcmp
(
buf1
,
"
1
foo ? 127.0.0.1"
)
==
0
);
ASSERT
(
strcmp
(
buf2
,
"
2
ERR: 404"
)
==
0
);
ASSERT
(
strcmp
(
static_config_options
[
URL_REWRITES
*
2
],
"url_rewrites"
)
==
0
);
mg_destroy_server
(
&
server
);
...
...
@@ -596,7 +600,7 @@ static const char *run_all_tests(void) {
RUN_TEST
(
test_next_option
);
RUN_TEST
(
test_parse_multipart
);
RUN_TEST
(
test_mg_set_option
);
//
RUN_TEST(test_server);
RUN_TEST
(
test_server
);
//RUN_TEST(test_mg_connect);
//RUN_TEST(test_rewrites);
#ifdef MONGOOSE_USE_SSL
...
...
examples/upload.c
View file @
e41df3cf
...
...
@@ -32,7 +32,7 @@ static void send_index_page(struct mg_connection *conn) {
}
static
int
ev_handler
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
if
(
ev
==
MG_REQ
_BEGIN
)
{
if
(
ev
==
MG_REQ
UEST
)
{
send_index_page
(
conn
);
return
MG_TRUE
;
}
else
if
(
ev
==
MG_AUTH
)
{
...
...
examples/websocket.c
View file @
e41df3cf
...
...
@@ -37,7 +37,7 @@ static int send_reply(struct mg_connection *conn) {
}
static
int
ev_handler
(
struct
mg_connection
*
conn
,
enum
mg_event
ev
)
{
if
(
ev
==
MG_REQ
_BEGIN
)
{
if
(
ev
==
MG_REQ
UEST
)
{
return
send_reply
(
conn
);
}
else
if
(
ev
==
MG_AUTH
)
{
return
MG_TRUE
;
...
...
mongoose.c
View file @
e41df3cf
...
...
@@ -650,7 +650,6 @@ static void ns_read_from_socket(struct ns_connection *conn) {
int
ok
=
1
,
ret
;
socklen_t
len
=
sizeof
(
ok
);
conn
->
flags
&=
~
NSF_CONNECTING
;
ret
=
getsockopt
(
conn
->
sock
,
SOL_SOCKET
,
SO_ERROR
,
(
char
*
)
&
ok
,
&
len
);
(
void
)
ret
;
#ifdef NS_ENABLE_SSL
...
...
@@ -659,15 +658,15 @@ static void ns_read_from_socket(struct ns_connection *conn) {
int
ssl_err
=
SSL_get_error
(
conn
->
ssl
,
res
);
DBG
((
"%p res %d %d"
,
conn
,
res
,
ssl_err
));
if
(
res
==
1
)
{
conn
->
flags
=
NSF_SSL_HANDSHAKE_DONE
;
conn
->
flags
|
=
NSF_SSL_HANDSHAKE_DONE
;
}
else
if
(
res
==
0
||
ssl_err
==
2
||
ssl_err
==
3
)
{
conn
->
flags
|=
NSF_CONNECTING
;
return
;
// Call us again
}
else
{
ok
=
1
;
}
}
#endif
conn
->
flags
&=
~
NSF_CONNECTING
;
DBG
((
"%p ok=%d"
,
conn
,
ok
));
if
(
ok
!=
0
)
{
conn
->
flags
|=
NSF_CLOSE_IMMEDIATELY
;
...
...
@@ -2528,7 +2527,7 @@ static int deliver_websocket_frame(struct connection *conn) {
}
// Call the handler and remove frame from the iobuf
if
(
call_user
(
conn
,
MG_REQ
_BEGIN
)
==
MG_FALSE
)
{
if
(
call_user
(
conn
,
MG_REQ
UEST
)
==
MG_FALSE
)
{
conn
->
ns_conn
->
flags
|=
NSF_FINISHED_SENDING_DATA
;
}
iobuf_remove
(
&
conn
->
ns_conn
->
recv_iobuf
,
frame_len
);
...
...
@@ -2604,7 +2603,7 @@ static void write_terminating_chunk(struct connection *conn) {
static
int
call_request_handler
(
struct
connection
*
conn
)
{
int
result
;
conn
->
mg_conn
.
content
=
conn
->
ns_conn
->
recv_iobuf
.
buf
;
if
((
result
=
call_user
(
conn
,
MG_REQ
_BEGIN
))
==
MG_TRUE
)
{
if
((
result
=
call_user
(
conn
,
MG_REQ
UEST
))
==
MG_TRUE
)
{
if
(
conn
->
ns_conn
->
flags
&
MG_HEADERS_SENT
)
{
write_terminating_chunk
(
conn
);
}
...
...
@@ -4301,15 +4300,14 @@ static void process_request(struct connection *conn) {
#endif
}
static
void
call_http_client_handler
(
struct
connection
*
conn
,
int
code
)
{
conn
->
mg_conn
.
status_code
=
code
;
static
void
call_http_client_handler
(
struct
connection
*
conn
)
{
//
conn->mg_conn.status_code = code;
// For responses without Content-Lengh, use the whole buffer
if
(
conn
->
cl
==
0
&&
code
==
MG_DOWNLOAD_SUCCESS
)
{
if
(
conn
->
cl
==
0
)
{
conn
->
mg_conn
.
content_len
=
conn
->
ns_conn
->
recv_iobuf
.
len
;
}
conn
->
mg_conn
.
content
=
conn
->
ns_conn
->
recv_iobuf
.
buf
;
if
(
call_user
(
conn
,
MG_CONNECT
)
||
code
==
MG_CONNECT_FAILURE
||
code
==
MG_DOWNLOAD_FAILURE
)
{
if
(
call_user
(
conn
,
MG_REPLY
)
==
MG_FALSE
)
{
conn
->
ns_conn
->
flags
|=
NSF_CLOSE_IMMEDIATELY
;
}
iobuf_remove
(
&
conn
->
ns_conn
->
recv_iobuf
,
conn
->
mg_conn
.
content_len
);
...
...
@@ -4327,10 +4325,9 @@ static void process_response(struct connection *conn) {
io
->
len
>
40
?
40
:
io
->
len
,
io
->
buf
));
if
(
conn
->
request_len
<
0
||
(
conn
->
request_len
==
0
&&
io
->
len
>
MAX_REQUEST_SIZE
))
{
call_http_client_handler
(
conn
,
MG_DOWNLOAD_FAILURE
);
}
if
(
io
->
len
>=
conn
->
cl
)
{
call_http_client_handler
(
conn
,
MG_DOWNLOAD_SUCCESS
);
call_http_client_handler
(
conn
);
}
else
if
(
io
->
len
>=
conn
->
cl
)
{
call_http_client_handler
(
conn
);
}
}
...
...
@@ -4755,7 +4752,7 @@ static void mg_ev_handler(struct ns_connection *nc, enum ns_event ev, void *p) {
DBG
((
"%p %d closing"
,
conn
,
conn
->
endpoint_type
));
if
(
conn
->
endpoint_type
==
EP_CLIENT
&&
nc
->
recv_iobuf
.
len
>
0
)
{
call_http_client_handler
(
conn
,
MG_DOWNLOAD_SUCCESS
);
// call_http_client_handler(conn
);
}
call_user
(
conn
,
MG_CLOSE
);
...
...
mongoose.h
View file @
e41df3cf
...
...
@@ -60,12 +60,12 @@ struct mg_connection {
struct
mg_server
;
// Opaque structure describing server instance
enum
mg_result
{
MG_FALSE
,
MG_TRUE
};
enum
mg_event
{
MG_POLL
,
// Callback return value is ignored
MG_POLL
=
100
,
// Callback return value is ignored
MG_CONNECT
,
// If callback returns MG_FALSE, connect fails
MG_AUTH
,
// If callback returns MG_FALSE, authentication fails
MG_REQ
_BEGIN
,
// If callback returns MG_FALSE, Mongoose continues with req
MG_RE
Q_END
,
// Callback return value is ignored
MG_REQ
UEST
,
// If callback returns MG_FALSE, Mongoose continues with req
MG_RE
PLY
,
// If callback returns MG_FALSE, Mongoose closes connection
MG_CLOSE
,
// Connection is closed
MG_CONNECT
,
// If callback returns MG_FALSE, connect fails
MG_HTTP_ERROR
// If callback returns MG_FALSE, Mongoose continues with err
};
typedef
int
(
*
mg_handler_t
)(
struct
mg_connection
*
,
enum
mg_event
);
...
...
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