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
4a0cc822
Commit
4a0cc822
authored
9 years ago
by
Deomid Ryabkov
Committed by
rojer
9 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add SSL options to mg_{bind,connect}_opt
PUBLISHED_FROM=7e28eb43742b76c073c9c2c879c64d7b4d3e9a7e
parent
7db10857
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
7 deletions
+65
-7
mongoose.c
mongoose.c
+38
-0
mongoose.h
mongoose.h
+27
-7
No files found.
mongoose.c
View file @
4a0cc822
...
...
@@ -2525,6 +2525,10 @@ const char *mg_set_ssl(struct mg_connection *nc, const char *cert,
const
char
*
result
=
NULL
;
DBG
((
"%p %s %s"
,
nc
,
(
cert
?
cert
:
""
),
(
ca_cert
?
ca_cert
:
""
)));
if
(
nc
->
flags
&
MG_F_UDP
)
{
return
"SSL for UDP is not supported"
;
}
if
(
nc
->
ssl
!=
NULL
)
{
SSL_free
(
nc
->
ssl
);
nc
->
ssl
=
NULL
;
...
...
@@ -2786,6 +2790,30 @@ struct mg_connection *mg_connect_opt(struct mg_mgr *mgr, const char *address,
nc
->
flags
|=
(
proto
==
SOCK_DGRAM
)
?
MG_F_UDP
:
0
;
nc
->
user_data
=
opts
.
user_data
;
#ifdef MG_ENABLE_SSL
if
(
opts
.
ssl_cert
!=
NULL
||
opts
.
ssl_ca_cert
!=
NULL
)
{
const
char
*
err
=
mg_set_ssl
(
nc
,
opts
.
ssl_cert
,
opts
.
ssl_ca_cert
);
if
(
err
!=
NULL
)
{
MG_SET_PTRPTR
(
opts
.
error_string
,
err
);
mg_destroy_conn
(
nc
);
return
NULL
;
}
if
(
opts
.
ssl_ca_cert
!=
NULL
&&
(
opts
.
ssl_server_name
==
NULL
||
strcmp
(
opts
.
ssl_server_name
,
"*"
)
!=
0
))
{
if
(
opts
.
ssl_server_name
==
NULL
)
opts
.
ssl_server_name
=
host
;
#ifdef SSL_KRYPTON
SSL_CTX_kr_set_verify_name
(
nc
->
ssl_ctx
,
opts
.
ssl_server_name
);
#else
/* TODO(rojer): Implement server name verification on OpenSSL. */
MG_SET_PTRPTR
(
opts
.
error_string
,
"Server name verification requested but is not supported"
);
mg_destroy_conn
(
nc
);
return
NULL
;
#endif
/* SSL_KRYPTON */
}
}
#endif
/* MG_ENABLE_SSL */
if
(
rc
==
0
)
{
#ifndef MG_DISABLE_RESOLVER
/*
...
...
@@ -2858,6 +2886,16 @@ struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address,
mg_destroy_conn
(
nc
);
return
NULL
;
}
#ifdef MG_ENABLE_SSL
if
(
opts
.
ssl_cert
!=
NULL
||
opts
.
ssl_ca_cert
!=
NULL
)
{
const
char
*
err
=
mg_set_ssl
(
nc
,
opts
.
ssl_cert
,
opts
.
ssl_ca_cert
);
if
(
err
!=
NULL
)
{
MG_SET_PTRPTR
(
opts
.
error_string
,
err
);
mg_destroy_conn
(
nc
);
return
NULL
;
}
}
#endif
/* MG_ENABLE_SSL */
mg_add_conn
(
nc
->
mgr
,
nc
);
return
nc
;
...
...
This diff is collapsed.
Click to expand it.
mongoose.h
View file @
4a0cc822
...
...
@@ -1191,6 +1191,11 @@ struct mg_bind_opts {
void
*
user_data
;
/* Initial value for connection's user_data */
unsigned
int
flags
;
/* Extra connection flags */
const
char
**
error_string
;
/* Placeholder for the error string */
#ifdef MG_ENABLE_SSL
/* SSL settings. */
const
char
*
ssl_cert
;
/* Server certificate to present to clients */
const
char
*
ssl_ca_cert
;
/* Verify client certificates with this CA bundle */
#endif
};
/*
...
...
@@ -1217,14 +1222,29 @@ struct mg_connection *mg_bind(struct mg_mgr *, const char *,
* Return a new listening connection, or `NULL` on error.
* NOTE: Connection remains owned by the manager, do not free().
*/
struct
mg_connection
*
mg_bind_opt
(
struct
mg_mgr
*
,
const
char
*
,
mg_event_handler_t
,
struct
mg_bind_opts
);
struct
mg_connection
*
mg_bind_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
,
struct
mg_bind_opts
opts
);
/* Optional parameters to mg_connect_opt() */
struct
mg_connect_opts
{
void
*
user_data
;
/* Initial value for connection's user_data */
unsigned
int
flags
;
/* Extra connection flags */
const
char
**
error_string
;
/* Placeholder for the error string */
#ifdef MG_ENABLE_SSL
/* SSL settings. */
const
char
*
ssl_cert
;
/* Client certificate to present to the server */
const
char
*
ssl_ca_cert
;
/* Verify server certificate using this CA bundle */
/*
* Server name verification. If ssl_ca_cert is set and the certificate has
* passed verification, its subject will be verified against this string.
* By default (if ssl_server_name is NULL) hostname part of the address will
* be used. Wildcard matching is supported. A special value of "*" disables
* name verification.
*/
const
char
*
ssl_server_name
;
#endif
};
/*
...
...
@@ -1232,8 +1252,8 @@ struct mg_connect_opts {
*
* See `mg_connect_opt()` for full documentation.
*/
struct
mg_connection
*
mg_connect
(
struct
mg_mgr
*
,
const
char
*
,
mg_event_handler_t
);
struct
mg_connection
*
mg_connect
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
);
/*
* Connect to a remote host.
...
...
@@ -1284,9 +1304,9 @@ struct mg_connection *mg_connect(struct mg_mgr *, const char *,
* mg_connect(mgr, "my_site.com:80", ev_handler);
* ----
*/
struct
mg_connection
*
mg_connect_opt
(
struct
mg_mgr
*
,
const
char
*
,
mg_event_handler_t
,
struct
mg_connect_opts
);
struct
mg_connection
*
mg_connect_opt
(
struct
mg_mgr
*
mgr
,
const
char
*
address
,
mg_event_handler_t
handler
,
struct
mg_connect_opts
opts
);
/*
* Enable SSL for a given connection.
...
...
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