Support set a callback for connection closed
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>main^2
parent
6cf45fb0a2
commit
afeee7ec2f
|
@ -31,6 +31,10 @@
|
||||||
|
|
||||||
#include "handler.h"
|
#include "handler.h"
|
||||||
|
|
||||||
|
static void conn_closed_cb(struct uh_connection *conn)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static void signal_cb(struct ev_loop *loop, ev_signal *w, int revents)
|
static void signal_cb(struct ev_loop *loop, ev_signal *w, int revents)
|
||||||
{
|
{
|
||||||
if (w->signum == SIGINT) {
|
if (w->signum == SIGINT) {
|
||||||
|
@ -113,6 +117,7 @@ int main(int argc, char **argv)
|
||||||
srv->set_docroot(srv, docroot);
|
srv->set_docroot(srv, docroot);
|
||||||
srv->set_index_page(srv, index_page);
|
srv->set_index_page(srv, index_page);
|
||||||
|
|
||||||
|
srv->set_conn_closed_cb(srv, conn_closed_cb);
|
||||||
srv->set_default_handler(srv, default_handler);
|
srv->set_default_handler(srv, default_handler);
|
||||||
srv->add_path_handler(srv, "/echo", echo_handler);
|
srv->add_path_handler(srv, "/echo", echo_handler);
|
||||||
srv->add_path_handler(srv, "/upload", upload_handler);
|
srv->add_path_handler(srv, "/upload", upload_handler);
|
||||||
|
|
|
@ -514,6 +514,9 @@ void conn_free(struct uh_connection_internal *conn)
|
||||||
uh_ssl_free(conn->ssl);
|
uh_ssl_free(conn->ssl);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (conn->srv->conn_closed_cb)
|
||||||
|
conn->srv->conn_closed_cb(&conn->com);
|
||||||
|
|
||||||
if (conn->sock > 0)
|
if (conn->sock > 0)
|
||||||
close(conn->sock);
|
close(conn->sock);
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,13 @@ static int uh_add_path_handler(struct uh_server *srv, const char *path, uh_path_
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void uh_set_conn_abort_cb(struct uh_server *srv, uh_con_closed_cb_prototype cb)
|
||||||
|
{
|
||||||
|
struct uh_server_internal *srvi = (struct uh_server_internal *)srv;
|
||||||
|
|
||||||
|
srvi->conn_closed_cb = cb;
|
||||||
|
}
|
||||||
|
|
||||||
static void uh_set_default_handler(struct uh_server *srv, uh_path_handler_prototype handler)
|
static void uh_set_default_handler(struct uh_server *srv, uh_path_handler_prototype handler)
|
||||||
{
|
{
|
||||||
struct uh_server_internal *srvi = (struct uh_server_internal *)srv;
|
struct uh_server_internal *srvi = (struct uh_server_internal *)srv;
|
||||||
|
@ -365,6 +372,7 @@ int uh_server_init(struct uh_server *srv, struct ev_loop *loop, const char *host
|
||||||
|
|
||||||
srv->load_plugin = uh_load_plugin;
|
srv->load_plugin = uh_load_plugin;
|
||||||
|
|
||||||
|
srv->set_conn_closed_cb = uh_set_conn_abort_cb;
|
||||||
srv->set_default_handler = uh_set_default_handler;
|
srv->set_default_handler = uh_set_default_handler;
|
||||||
srv->add_path_handler = uh_add_path_handler;
|
srv->add_path_handler = uh_add_path_handler;
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,7 @@ struct uh_connection {
|
||||||
void *userdata;
|
void *userdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef void (*uh_con_closed_cb_prototype)(struct uh_connection *conn);
|
||||||
typedef void (*uh_path_handler_prototype)(struct uh_connection *conn, int event);
|
typedef void (*uh_path_handler_prototype)(struct uh_connection *conn, int event);
|
||||||
|
|
||||||
struct uh_server {
|
struct uh_server {
|
||||||
|
@ -90,6 +91,7 @@ struct uh_server {
|
||||||
int (*ssl_init)(struct uh_server *srv, const char *cert, const char *key);
|
int (*ssl_init)(struct uh_server *srv, const char *cert, const char *key);
|
||||||
#endif
|
#endif
|
||||||
int (*load_plugin)(struct uh_server *srv, const char *path);
|
int (*load_plugin)(struct uh_server *srv, const char *path);
|
||||||
|
void (*set_conn_closed_cb)(struct uh_server *srv, uh_con_closed_cb_prototype cb);
|
||||||
void (*set_default_handler)(struct uh_server *srv, uh_path_handler_prototype handler);
|
void (*set_default_handler)(struct uh_server *srv, uh_path_handler_prototype handler);
|
||||||
int (*add_path_handler)(struct uh_server *srv, const char *path, uh_path_handler_prototype handler);
|
int (*add_path_handler)(struct uh_server *srv, const char *path, uh_path_handler_prototype handler);
|
||||||
int (*set_docroot)(struct uh_server *srv, const char *path);
|
int (*set_docroot)(struct uh_server *srv, const char *path);
|
||||||
|
|
|
@ -39,6 +39,7 @@ struct uh_server_internal {
|
||||||
struct ev_loop *loop;
|
struct ev_loop *loop;
|
||||||
struct ev_io ior;
|
struct ev_io ior;
|
||||||
struct uh_connection_internal *conns;
|
struct uh_connection_internal *conns;
|
||||||
|
void (*conn_closed_cb)(struct uh_connection *conn);
|
||||||
void (*default_handler)(struct uh_connection *conn, int event);
|
void (*default_handler)(struct uh_connection *conn, int event);
|
||||||
#if UHTTPD_SSL_SUPPORT
|
#if UHTTPD_SSL_SUPPORT
|
||||||
void *ssl_ctx;
|
void *ssl_ctx;
|
||||||
|
|
Loading…
Reference in New Issue