mirror of
https://github.com/lammertb/libhttp.git
synced 2025-07-29 21:01:13 +03:00
Apply revised clang-format (#207) to all actively maintained source files
This commit is contained in:
@ -28,7 +28,8 @@
|
||||
int exitNow = 0;
|
||||
|
||||
|
||||
int ExampleHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
ExampleHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
@ -65,7 +66,8 @@ int ExampleHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int ExitHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
ExitHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n");
|
||||
mg_printf(conn, "Server will shut down.\n");
|
||||
@ -75,7 +77,8 @@ int ExitHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int AHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
AHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
@ -85,7 +88,8 @@ int AHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int ABHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
ABHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
@ -95,7 +99,8 @@ int ABHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int BXHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
BXHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
/* Handler may access the request info using mg_get_request_info */
|
||||
const struct mg_request_info *req_info = mg_get_request_info(conn);
|
||||
@ -109,7 +114,8 @@ int BXHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int FooHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
FooHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
/* Handler may access the request info using mg_get_request_info */
|
||||
const struct mg_request_info *req_info = mg_get_request_info(conn);
|
||||
@ -127,7 +133,8 @@ int FooHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int WebSocketStartHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
WebSocketStartHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
|
||||
@ -190,13 +197,15 @@ struct t_ws_client {
|
||||
#define ASSERT(x) \
|
||||
{ \
|
||||
if (!(x)) { \
|
||||
fprintf( \
|
||||
stderr, "Assertion failed in line %u\n", (unsigned)__LINE__); \
|
||||
fprintf(stderr, \
|
||||
"Assertion failed in line %u\n", \
|
||||
(unsigned)__LINE__); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
int WebSocketConnectHandler(const struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
WebSocketConnectHandler(const struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
struct mg_context *ctx = mg_get_context(conn);
|
||||
int reject = 1;
|
||||
@ -221,7 +230,8 @@ int WebSocketConnectHandler(const struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
void WebSocketReadyHandler(struct mg_connection *conn, void *cbdata)
|
||||
void
|
||||
WebSocketReadyHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
const char *text = "Hello from the websocket ready handler";
|
||||
struct t_ws_client *client = mg_get_user_connection_data(conn);
|
||||
@ -235,7 +245,8 @@ void WebSocketReadyHandler(struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
int WebsocketDataHandler(struct mg_connection *conn,
|
||||
int
|
||||
WebsocketDataHandler(struct mg_connection *conn,
|
||||
int bits,
|
||||
char *data,
|
||||
size_t len,
|
||||
@ -253,7 +264,8 @@ int WebsocketDataHandler(struct mg_connection *conn,
|
||||
}
|
||||
|
||||
|
||||
void WebSocketCloseHandler(const struct mg_connection *conn, void *cbdata)
|
||||
void
|
||||
WebSocketCloseHandler(const struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
struct mg_context *ctx = mg_get_context(conn);
|
||||
struct t_ws_client *client = mg_get_user_connection_data(conn);
|
||||
@ -270,7 +282,8 @@ void WebSocketCloseHandler(const struct mg_connection *conn, void *cbdata)
|
||||
}
|
||||
|
||||
|
||||
void InformWebsockets(struct mg_context *ctx)
|
||||
void
|
||||
InformWebsockets(struct mg_context *ctx)
|
||||
{
|
||||
static unsigned long cnt = 0;
|
||||
char text[32];
|
||||
@ -281,8 +294,10 @@ void InformWebsockets(struct mg_context *ctx)
|
||||
mg_lock_context(ctx);
|
||||
for (i = 0; i < MAX_WS_CLIENTS; i++) {
|
||||
if (ws_clients[i].state == 2) {
|
||||
mg_websocket_write(
|
||||
ws_clients[i].conn, WEBSOCKET_OPCODE_TEXT, text, strlen(text));
|
||||
mg_websocket_write(ws_clients[i].conn,
|
||||
WEBSOCKET_OPCODE_TEXT,
|
||||
text,
|
||||
strlen(text));
|
||||
}
|
||||
}
|
||||
mg_unlock_context(ctx);
|
||||
@ -290,7 +305,8 @@ void InformWebsockets(struct mg_context *ctx)
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
const char *options[] = {"document_root",
|
||||
DOCUMENT_ROOT,
|
||||
|
@ -22,15 +22,24 @@ bool exitNow = false;
|
||||
class ExampleHandler : public CivetHandler
|
||||
{
|
||||
public:
|
||||
bool handleGet(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>\r\n");
|
||||
mg_printf(conn, "<h2>This is an example text from a C++ handler</h2>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A handler <a href=\"a\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A handler with a parameter <a href=\"a?param=1\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A/B handler <a href=\"a/b\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the *.foo handler <a href=\"xy.foo\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To exit <a href=\"%s\">click here</a></p>\r\n", EXIT_URI);
|
||||
mg_printf(conn,
|
||||
"<h2>This is an example text from a C++ handler</h2>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A handler <a "
|
||||
"href=\"a\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A handler with a parameter "
|
||||
"<a href=\"a?param=1\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the A/B handler <a "
|
||||
"href=\"a/b\">click here</a></p>\r\n");
|
||||
mg_printf(conn, "<p>To see a page from the *.foo handler <a "
|
||||
"href=\"xy.foo\">click here</a></p>\r\n");
|
||||
mg_printf(conn,
|
||||
"<p>To exit <a href=\"%s\">click here</a></p>\r\n",
|
||||
EXIT_URI);
|
||||
mg_printf(conn, "</body></html>\r\n");
|
||||
return true;
|
||||
}
|
||||
@ -39,7 +48,9 @@ public:
|
||||
class ExitHandler : public CivetHandler
|
||||
{
|
||||
public:
|
||||
bool handleGet(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n");
|
||||
mg_printf(conn, "Bye!\n");
|
||||
exitNow = true;
|
||||
@ -50,7 +61,11 @@ public:
|
||||
class AHandler : public CivetHandler
|
||||
{
|
||||
private:
|
||||
bool handleAll(const char * method, CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleAll(const char *method,
|
||||
CivetServer *server,
|
||||
struct mg_connection *conn)
|
||||
{
|
||||
std::string s = "";
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
@ -63,11 +78,16 @@ private:
|
||||
mg_printf(conn, "</body></html>\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
public:
|
||||
bool handleGet(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
return handleAll("GET", server, conn);
|
||||
}
|
||||
bool handlePost(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handlePost(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
return handleAll("POST", server, conn);
|
||||
}
|
||||
};
|
||||
@ -75,7 +95,9 @@ public:
|
||||
class ABHandler : public CivetHandler
|
||||
{
|
||||
public:
|
||||
bool handleGet(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
mg_printf(conn, "<h2>This is the AB handler!!!</h2>");
|
||||
@ -87,27 +109,32 @@ public:
|
||||
class FooHandler : public CivetHandler
|
||||
{
|
||||
public:
|
||||
bool handleGet(CivetServer *server, struct mg_connection *conn) {
|
||||
bool
|
||||
handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
/* Handler may access the request info using mg_get_request_info */
|
||||
const struct mg_request_info *req_info = mg_get_request_info(conn);
|
||||
|
||||
mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
|
||||
mg_printf(conn, "<html><body>");
|
||||
mg_printf(conn, "<h2>This is the Foo handler!!!</h2>");
|
||||
mg_printf(conn, "<p>The request was:<br><pre>%s %s HTTP/%s</pre></p>",
|
||||
req_info->request_method, req_info->uri, req_info->http_version);
|
||||
mg_printf(conn,
|
||||
"<p>The request was:<br><pre>%s %s HTTP/%s</pre></p>",
|
||||
req_info->request_method,
|
||||
req_info->uri,
|
||||
req_info->http_version);
|
||||
mg_printf(conn, "</body></html>\n");
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
const char * options[] = { "document_root", DOCUMENT_ROOT,
|
||||
"listening_ports", PORT, 0
|
||||
};
|
||||
const char *options[] = {
|
||||
"document_root", DOCUMENT_ROOT, "listening_ports", PORT, 0};
|
||||
|
||||
CivetServer server(options);
|
||||
|
||||
|
@ -19,22 +19,30 @@
|
||||
#endif
|
||||
|
||||
|
||||
static void send_to_all_websockets(struct mg_context *ctx, const char * data, int data_len) {
|
||||
static void
|
||||
send_to_all_websockets(struct mg_context *ctx, const char *data, int data_len)
|
||||
{
|
||||
|
||||
int i;
|
||||
tWebSockContext *ws_ctx = (tWebSockContext *)mg_get_user_data(ctx);
|
||||
|
||||
mg_lock_context(ctx);
|
||||
for (i = 0; i < MAX_NUM_OF_WEBSOCKS; i++) {
|
||||
if (ws_ctx->socketList[i] && (ws_ctx->socketList[i]->webSockState==2)) {
|
||||
mg_websocket_write(ws_ctx->socketList[i]->conn, WEBSOCKET_OPCODE_TEXT, data, data_len);
|
||||
if (ws_ctx->socketList[i]
|
||||
&& (ws_ctx->socketList[i]->webSockState == 2)) {
|
||||
mg_websocket_write(ws_ctx->socketList[i]->conn,
|
||||
WEBSOCKET_OPCODE_TEXT,
|
||||
data,
|
||||
data_len);
|
||||
}
|
||||
}
|
||||
mg_unlock_context(ctx);
|
||||
}
|
||||
|
||||
|
||||
void websocket_ready_handler(struct mg_connection *conn, void *_ignored) {
|
||||
void
|
||||
websocket_ready_handler(struct mg_connection *conn, void *_ignored)
|
||||
{
|
||||
|
||||
int i;
|
||||
const struct mg_request_info *rq = mg_get_request_info(conn);
|
||||
@ -54,12 +62,16 @@ void websocket_ready_handler(struct mg_connection *conn, void *_ignored) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("\nNew websocket attached: %s:%u\n", rq->remote_addr, rq->remote_port);
|
||||
printf("\nNew websocket attached: %s:%u\n",
|
||||
rq->remote_addr,
|
||||
rq->remote_port);
|
||||
mg_unlock_context(ctx);
|
||||
}
|
||||
|
||||
|
||||
static void websocket_done(tWebSockContext *ws_ctx, tWebSockInfo * wsock) {
|
||||
static void
|
||||
websocket_done(tWebSockContext *ws_ctx, tWebSockInfo *wsock)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
@ -71,13 +83,21 @@ static void websocket_done(tWebSockContext *ws_ctx, tWebSockInfo * wsock) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("\nClose websocket attached: %s:%u\n", mg_get_request_info(wsock->conn)->remote_addr, mg_get_request_info(wsock->conn)->remote_port);
|
||||
printf("\nClose websocket attached: %s:%u\n",
|
||||
mg_get_request_info(wsock->conn)->remote_addr,
|
||||
mg_get_request_info(wsock->conn)->remote_port);
|
||||
free(wsock);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int websocket_data_handler(struct mg_connection *conn, int flags, char *data, size_t data_len, void *_ignored) {
|
||||
int
|
||||
websocket_data_handler(struct mg_connection *conn,
|
||||
int flags,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
void *_ignored)
|
||||
{
|
||||
|
||||
const struct mg_request_info *rq = mg_get_request_info(conn);
|
||||
tWebSockInfo *wsock = (tWebSockInfo *)rq->conn_data;
|
||||
@ -93,7 +113,8 @@ int websocket_data_handler(struct mg_connection *conn, int flags, char *data, si
|
||||
mg_unlock_context(ctx);
|
||||
return 1;
|
||||
}
|
||||
if (((data_len>=5) && (data_len<100) && (flags==129)) || (flags==130)) {
|
||||
if (((data_len >= 5) && (data_len < 100) && (flags == 129))
|
||||
|| (flags == 130)) {
|
||||
|
||||
// init command
|
||||
if ((wsock->webSockState == 1) && (!memcmp(data, "init ", 5))) {
|
||||
@ -129,7 +150,9 @@ int websocket_data_handler(struct mg_connection *conn, int flags, char *data, si
|
||||
}
|
||||
|
||||
|
||||
void connection_close_handler(const struct mg_connection *conn, void *_ignored) {
|
||||
void
|
||||
connection_close_handler(const struct mg_connection *conn, void *_ignored)
|
||||
{
|
||||
|
||||
const struct mg_request_info *rq = mg_get_request_info(conn);
|
||||
tWebSockInfo *wsock = (tWebSockInfo *)rq->conn_data;
|
||||
@ -143,7 +166,9 @@ void connection_close_handler(const struct mg_connection *conn, void *_ignored)
|
||||
}
|
||||
|
||||
|
||||
static void * eventMain(void * arg) {
|
||||
static void *
|
||||
eventMain(void *arg)
|
||||
{
|
||||
|
||||
char msg[256];
|
||||
struct mg_context *ctx = (struct mg_context *)arg;
|
||||
@ -163,7 +188,9 @@ static void * eventMain(void * arg) {
|
||||
}
|
||||
|
||||
|
||||
void websock_send_broadcast(struct mg_context *ctx, const char * data, int data_len) {
|
||||
void
|
||||
websock_send_broadcast(struct mg_context *ctx, const char *data, int data_len)
|
||||
{
|
||||
|
||||
char buffer[260];
|
||||
|
||||
@ -176,7 +203,9 @@ void websock_send_broadcast(struct mg_context *ctx, const char * data, int data_
|
||||
}
|
||||
|
||||
|
||||
void websock_init_lib(const struct mg_context *ctx) {
|
||||
void
|
||||
websock_init_lib(const struct mg_context *ctx)
|
||||
{
|
||||
|
||||
tWebSockContext *ws_ctx = (tWebSockContext *)mg_get_user_data(ctx);
|
||||
memset(ws_ctx, 0, sizeof(*ws_ctx));
|
||||
@ -185,7 +214,9 @@ void websock_init_lib(const struct mg_context *ctx) {
|
||||
}
|
||||
|
||||
|
||||
void websock_exit_lib(const struct mg_context *ctx) {
|
||||
void
|
||||
websock_exit_lib(const struct mg_context *ctx)
|
||||
{
|
||||
|
||||
tWebSockContext *ws_ctx = (tWebSockContext *)mg_get_user_data(ctx);
|
||||
ws_ctx->runLoop = 0;
|
||||
|
@ -25,10 +25,15 @@ typedef struct tWebSockContext {
|
||||
void websock_init_lib(const struct mg_context *ctx);
|
||||
void websock_exit_lib(const struct mg_context *ctx);
|
||||
|
||||
void websock_send_broadcast(struct mg_context *ctx, const char * data, int data_len);
|
||||
void
|
||||
websock_send_broadcast(struct mg_context *ctx, const char *data, int data_len);
|
||||
|
||||
void websocket_ready_handler(struct mg_connection *conn, void *_ignored);
|
||||
int websocket_data_handler(struct mg_connection *conn, int flags, char *data, size_t data_len, void *_ignored);
|
||||
int websocket_data_handler(struct mg_connection *conn,
|
||||
int flags,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
void *_ignored);
|
||||
void connection_close_handler(const struct mg_connection *conn, void *_ignored);
|
||||
|
||||
|
||||
|
@ -10,7 +10,8 @@
|
||||
#include "civetweb.h"
|
||||
#include "WebSockCallbacks.h"
|
||||
|
||||
int main(void)
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
struct mg_context *ctx = 0;
|
||||
struct mg_callbacks callback_funcs = {0};
|
||||
@ -19,28 +20,33 @@ int main(void)
|
||||
|
||||
const char *server_options[] = {
|
||||
/* document_root: The path to the test function websock.htm */
|
||||
"document_root", "../../examples/websocket",
|
||||
"document_root",
|
||||
"../../examples/websocket",
|
||||
|
||||
/* port: use http standard to match websocket url in websock.htm: ws://127.0.0.1/MyWebSock */
|
||||
/* if the port is changed here, it needs to be changed in websock.htm as well */
|
||||
"listening_ports", "80",
|
||||
/* port: use http standard to match websocket url in websock.htm:
|
||||
ws://127.0.0.1/MyWebSock */
|
||||
/* if the port is changed here, it needs to be changed in
|
||||
websock.htm as well */
|
||||
"listening_ports",
|
||||
"80",
|
||||
|
||||
NULL
|
||||
};
|
||||
NULL};
|
||||
|
||||
callback_funcs.init_context = websock_init_lib;
|
||||
callback_funcs.exit_context = websock_exit_lib;
|
||||
|
||||
ctx = mg_start(&callback_funcs, &ws_ctx, server_options);
|
||||
|
||||
mg_set_websocket_handler(ctx, "/MyWebSock",
|
||||
mg_set_websocket_handler(ctx,
|
||||
"/MyWebSock",
|
||||
NULL,
|
||||
websocket_ready_handler,
|
||||
websocket_data_handler,
|
||||
connection_close_handler,
|
||||
NULL);
|
||||
|
||||
printf("Connect to localhost:%s/websock.htm\n", mg_get_option(ctx, "listening_ports"));
|
||||
printf("Connect to localhost:%s/websock.htm\n",
|
||||
mg_get_option(ctx, "listening_ports"));
|
||||
|
||||
puts("Enter an (ASCII) character or * to exit:");
|
||||
for (;;) {
|
||||
|
@ -24,7 +24,8 @@
|
||||
const char *websocket_welcome_msg = "websocket welcome\n";
|
||||
const size_t websocket_welcome_msg_len = 18 /* strlen(websocket_welcome_msg) */;
|
||||
const char *websocket_acknowledge_msg = "websocket msg ok\n";
|
||||
const size_t websocket_acknowledge_msg_len = 17 /* strlen(websocket_acknowledge_msg) */ ;
|
||||
const size_t websocket_acknowledge_msg_len =
|
||||
17 /* strlen(websocket_acknowledge_msg) */;
|
||||
const char *websocket_goodbye_msg = "websocket bye\n";
|
||||
const size_t websocket_goodbye_msg_len = 14 /* strlen(websocket_goodbye_msg) */;
|
||||
|
||||
@ -33,9 +34,11 @@ const size_t websocket_goodbye_msg_len = 14 /* strlen(websocket_goodbye_msg) */
|
||||
/* WEBSOCKET SERVER */
|
||||
/*************************************************************************************/
|
||||
#if defined(MG_LEGACY_INTERFACE)
|
||||
int websock_server_connect(const struct mg_connection * conn)
|
||||
int
|
||||
websock_server_connect(const struct mg_connection *conn)
|
||||
#else
|
||||
int websocket_server_connect(const struct mg_connection * conn, void * _ignored)
|
||||
int
|
||||
websocket_server_connect(const struct mg_connection *conn, void *_ignored)
|
||||
#endif
|
||||
{
|
||||
printf("Server: Websocket connected\n");
|
||||
@ -44,24 +47,38 @@ int websocket_server_connect(const struct mg_connection * conn, void * _ignored)
|
||||
|
||||
|
||||
#if defined(MG_LEGACY_INTERFACE)
|
||||
void websocket_server_ready(struct mg_connection * conn)
|
||||
void
|
||||
websocket_server_ready(struct mg_connection *conn)
|
||||
#else
|
||||
void websocket_server_ready(struct mg_connection * conn, void * _ignored)
|
||||
void
|
||||
websocket_server_ready(struct mg_connection *conn, void *_ignored)
|
||||
#endif
|
||||
{
|
||||
printf("Server: Websocket ready\n");
|
||||
|
||||
/* Send websocket welcome message */
|
||||
mg_lock_connection(conn);
|
||||
mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, websocket_welcome_msg, websocket_welcome_msg_len);
|
||||
mg_websocket_write(conn,
|
||||
WEBSOCKET_OPCODE_TEXT,
|
||||
websocket_welcome_msg,
|
||||
websocket_welcome_msg_len);
|
||||
mg_unlock_connection(conn);
|
||||
}
|
||||
|
||||
|
||||
#if defined(MG_LEGACY_INTERFACE)
|
||||
int websocket_server_data(struct mg_connection * conn, int bits, char *data, size_t data_len)
|
||||
int
|
||||
websocket_server_data(struct mg_connection *conn,
|
||||
int bits,
|
||||
char *data,
|
||||
size_t data_len)
|
||||
#else
|
||||
int websocket_server_data(struct mg_connection * conn, int bits, char *data, size_t data_len, void *_ignored)
|
||||
int
|
||||
websocket_server_data(struct mg_connection *conn,
|
||||
int bits,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
void *_ignored)
|
||||
#endif
|
||||
{
|
||||
printf("Server: Got %u bytes from the client\n", data_len);
|
||||
@ -69,12 +86,18 @@ int websocket_server_data(struct mg_connection * conn, int bits, char *data, siz
|
||||
if (data_len < 3 || 0 != memcmp(data, "bye", 3)) {
|
||||
/* Send websocket acknowledge message */
|
||||
mg_lock_connection(conn);
|
||||
mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, websocket_acknowledge_msg, websocket_acknowledge_msg_len);
|
||||
mg_websocket_write(conn,
|
||||
WEBSOCKET_OPCODE_TEXT,
|
||||
websocket_acknowledge_msg,
|
||||
websocket_acknowledge_msg_len);
|
||||
mg_unlock_connection(conn);
|
||||
} else {
|
||||
/* Send websocket acknowledge message */
|
||||
mg_lock_connection(conn);
|
||||
mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, websocket_goodbye_msg, websocket_goodbye_msg_len);
|
||||
mg_websocket_write(conn,
|
||||
WEBSOCKET_OPCODE_TEXT,
|
||||
websocket_goodbye_msg,
|
||||
websocket_goodbye_msg_len);
|
||||
mg_unlock_connection(conn);
|
||||
}
|
||||
|
||||
@ -83,25 +106,33 @@ int websocket_server_data(struct mg_connection * conn, int bits, char *data, siz
|
||||
|
||||
|
||||
#if defined(MG_LEGACY_INTERFACE)
|
||||
void websocket_server_connection_close(const struct mg_connection * conn)
|
||||
void
|
||||
websocket_server_connection_close(const struct mg_connection *conn)
|
||||
#else
|
||||
void websocket_server_connection_close(const struct mg_connection * conn, void *_ignored)
|
||||
void
|
||||
websocket_server_connection_close(const struct mg_connection *conn,
|
||||
void *_ignored)
|
||||
#endif
|
||||
{
|
||||
printf("Server: Close connection\n");
|
||||
|
||||
/* Can not send a websocket goodbye message here - the connection is already closed */
|
||||
/* Can not send a websocket goodbye message here - the connection is already
|
||||
* closed */
|
||||
}
|
||||
|
||||
|
||||
struct mg_context * start_websocket_server()
|
||||
struct mg_context *
|
||||
start_websocket_server()
|
||||
{
|
||||
const char * options[] = { "document_root", DOCUMENT_ROOT,
|
||||
"ssl_certificate", SSL_CERT,
|
||||
"listening_ports", PORT,
|
||||
"request_timeout_ms", "5000",
|
||||
0
|
||||
};
|
||||
const char *options[] = {"document_root",
|
||||
DOCUMENT_ROOT,
|
||||
"ssl_certificate",
|
||||
SSL_CERT,
|
||||
"listening_ports",
|
||||
PORT,
|
||||
"request_timeout_ms",
|
||||
"5000",
|
||||
0};
|
||||
struct mg_callbacks callbacks;
|
||||
struct mg_context *ctx;
|
||||
|
||||
@ -119,7 +150,8 @@ struct mg_context * start_websocket_server()
|
||||
/* New interface: */
|
||||
ctx = mg_start(&callbacks, 0, options);
|
||||
|
||||
mg_set_websocket_handler(ctx, "/websocket",
|
||||
mg_set_websocket_handler(ctx,
|
||||
"/websocket",
|
||||
websocket_server_connect,
|
||||
websocket_server_ready,
|
||||
websocket_server_data,
|
||||
@ -140,10 +172,16 @@ struct tclient_data {
|
||||
int closed;
|
||||
};
|
||||
|
||||
static int websocket_client_data_handler(struct mg_connection *conn, int flags, char *data, size_t data_len, void * user_data)
|
||||
static int
|
||||
websocket_client_data_handler(struct mg_connection *conn,
|
||||
int flags,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
void *user_data)
|
||||
{
|
||||
struct mg_context *ctx = mg_get_context(conn);
|
||||
struct tclient_data *pclient_data = (struct tclient_data *) mg_get_user_data(ctx);
|
||||
struct tclient_data *pclient_data =
|
||||
(struct tclient_data *)mg_get_user_data(ctx);
|
||||
|
||||
printf("Client received data from server: ");
|
||||
fwrite(data, 1, data_len, stdout);
|
||||
@ -157,17 +195,21 @@ static int websocket_client_data_handler(struct mg_connection *conn, int flags,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void websocket_client_close_handler(const struct mg_connection *conn, void * user_data)
|
||||
static void
|
||||
websocket_client_close_handler(const struct mg_connection *conn,
|
||||
void *user_data)
|
||||
{
|
||||
struct mg_context *ctx = mg_get_context(conn);
|
||||
struct tclient_data *pclient_data = (struct tclient_data *) mg_get_user_data(ctx);
|
||||
struct tclient_data *pclient_data =
|
||||
(struct tclient_data *)mg_get_user_data(ctx);
|
||||
|
||||
printf("Client: Close handler\n");
|
||||
pclient_data->closed++;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct mg_context *ctx = NULL;
|
||||
struct tclient_data client1_data = {NULL, 0, 0};
|
||||
@ -186,12 +228,18 @@ int main(int argc, char *argv[])
|
||||
printf("Server init\n\n");
|
||||
|
||||
/* Then connect a first client */
|
||||
newconn1 = mg_connect_websocket_client("localhost", atoi(PORT), 0, ebuf, sizeof(ebuf),
|
||||
"/websocket", NULL, websocket_client_data_handler, websocket_client_close_handler,
|
||||
newconn1 = mg_connect_websocket_client("localhost",
|
||||
atoi(PORT),
|
||||
0,
|
||||
ebuf,
|
||||
sizeof(ebuf),
|
||||
"/websocket",
|
||||
NULL,
|
||||
websocket_client_data_handler,
|
||||
websocket_client_close_handler,
|
||||
&client1_data);
|
||||
|
||||
if (newconn1 == NULL)
|
||||
{
|
||||
if (newconn1 == NULL) {
|
||||
printf("Error: %s", ebuf);
|
||||
return 1;
|
||||
}
|
||||
@ -203,7 +251,9 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
assert(client1_data.data != NULL);
|
||||
assert(client1_data.len == websocket_welcome_msg_len);
|
||||
assert(!memcmp(client1_data.data, websocket_welcome_msg, websocket_welcome_msg_len));
|
||||
assert(!memcmp(client1_data.data,
|
||||
websocket_welcome_msg,
|
||||
websocket_welcome_msg_len));
|
||||
free(client1_data.data);
|
||||
client1_data.data = NULL;
|
||||
client1_data.len = 0;
|
||||
@ -217,18 +267,26 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
assert(client1_data.data != NULL);
|
||||
assert(client1_data.len == websocket_acknowledge_msg_len);
|
||||
assert(!memcmp(client1_data.data, websocket_acknowledge_msg, websocket_acknowledge_msg_len));
|
||||
assert(!memcmp(client1_data.data,
|
||||
websocket_acknowledge_msg,
|
||||
websocket_acknowledge_msg_len));
|
||||
free(client1_data.data);
|
||||
client1_data.data = NULL;
|
||||
client1_data.len = 0;
|
||||
|
||||
/* Now connect a second client */
|
||||
newconn2 = mg_connect_websocket_client("localhost", atoi(PORT), 0, ebuf, sizeof(ebuf),
|
||||
"/websocket", NULL, websocket_client_data_handler, websocket_client_close_handler,
|
||||
newconn2 = mg_connect_websocket_client("localhost",
|
||||
atoi(PORT),
|
||||
0,
|
||||
ebuf,
|
||||
sizeof(ebuf),
|
||||
"/websocket",
|
||||
NULL,
|
||||
websocket_client_data_handler,
|
||||
websocket_client_close_handler,
|
||||
&client2_data);
|
||||
|
||||
if (newconn2 == NULL)
|
||||
{
|
||||
if (newconn2 == NULL) {
|
||||
printf("Error: %s", ebuf);
|
||||
return 1;
|
||||
}
|
||||
@ -240,7 +298,9 @@ int main(int argc, char *argv[])
|
||||
assert(client1_data.len == 0);
|
||||
assert(client2_data.data != NULL);
|
||||
assert(client2_data.len == websocket_welcome_msg_len);
|
||||
assert(!memcmp(client2_data.data, websocket_welcome_msg, websocket_welcome_msg_len));
|
||||
assert(!memcmp(client2_data.data,
|
||||
websocket_welcome_msg,
|
||||
websocket_welcome_msg_len));
|
||||
free(client2_data.data);
|
||||
client2_data.data = NULL;
|
||||
client2_data.len = 0;
|
||||
@ -254,7 +314,9 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
assert(client1_data.data != NULL);
|
||||
assert(client1_data.len == websocket_acknowledge_msg_len);
|
||||
assert(!memcmp(client1_data.data, websocket_acknowledge_msg, websocket_acknowledge_msg_len));
|
||||
assert(!memcmp(client1_data.data,
|
||||
websocket_acknowledge_msg,
|
||||
websocket_acknowledge_msg_len));
|
||||
free(client1_data.data);
|
||||
client1_data.data = NULL;
|
||||
client1_data.len = 0;
|
||||
@ -268,7 +330,9 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
assert(client1_data.data != NULL);
|
||||
assert(client1_data.len == websocket_goodbye_msg_len);
|
||||
assert(!memcmp(client1_data.data, websocket_goodbye_msg, websocket_goodbye_msg_len));
|
||||
assert(!memcmp(client1_data.data,
|
||||
websocket_goodbye_msg,
|
||||
websocket_goodbye_msg_len));
|
||||
free(client1_data.data);
|
||||
client1_data.data = NULL;
|
||||
client1_data.len = 0;
|
||||
@ -292,7 +356,9 @@ int main(int argc, char *argv[])
|
||||
assert(client1_data.len == 0);
|
||||
assert(client2_data.data != NULL);
|
||||
assert(client2_data.len == websocket_goodbye_msg_len);
|
||||
assert(!memcmp(client2_data.data, websocket_goodbye_msg, websocket_goodbye_msg_len));
|
||||
assert(!memcmp(client2_data.data,
|
||||
websocket_goodbye_msg,
|
||||
websocket_goodbye_msg_len));
|
||||
free(client2_data.data);
|
||||
client2_data.data = NULL;
|
||||
client2_data.len = 0;
|
||||
@ -308,8 +374,15 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
|
||||
/* Connect client 3 */
|
||||
newconn3 = mg_connect_websocket_client("localhost", atoi(PORT), 0, ebuf, sizeof(ebuf),
|
||||
"/websocket", NULL, websocket_client_data_handler, websocket_client_close_handler,
|
||||
newconn3 = mg_connect_websocket_client("localhost",
|
||||
atoi(PORT),
|
||||
0,
|
||||
ebuf,
|
||||
sizeof(ebuf),
|
||||
"/websocket",
|
||||
NULL,
|
||||
websocket_client_data_handler,
|
||||
websocket_client_close_handler,
|
||||
&client3_data);
|
||||
|
||||
sleep(1); /* Client 3 should get the websocket welcome message */
|
||||
@ -322,7 +395,9 @@ int main(int argc, char *argv[])
|
||||
assert(client2_data.len == 0);
|
||||
assert(client3_data.data != NULL);
|
||||
assert(client3_data.len == websocket_welcome_msg_len);
|
||||
assert(!memcmp(client3_data.data, websocket_welcome_msg, websocket_welcome_msg_len));
|
||||
assert(!memcmp(client3_data.data,
|
||||
websocket_welcome_msg,
|
||||
websocket_welcome_msg_len));
|
||||
free(client3_data.data);
|
||||
client3_data.data = NULL;
|
||||
client3_data.len = 0;
|
||||
|
@ -127,7 +127,8 @@ class CIVETWEB_API CivetServer
|
||||
*
|
||||
* @return the context or 0 if not running.
|
||||
*/
|
||||
const struct mg_context *getContext() const
|
||||
const struct mg_context *
|
||||
getContext() const
|
||||
{
|
||||
return context;
|
||||
}
|
||||
@ -145,7 +146,8 @@ class CIVETWEB_API CivetServer
|
||||
*/
|
||||
void addHandler(const std::string &uri, CivetHandler *handler);
|
||||
|
||||
void addHandler(const std::string &uri, CivetHandler &handler)
|
||||
void
|
||||
addHandler(const std::string &uri, CivetHandler &handler)
|
||||
{
|
||||
addHandler(uri, &handler);
|
||||
}
|
||||
@ -236,7 +238,8 @@ class CIVETWEB_API CivetServer
|
||||
*based).
|
||||
* @return true if key was found
|
||||
*/
|
||||
static bool getParam(const std::string &data,
|
||||
static bool
|
||||
getParam(const std::string &data,
|
||||
const char *name,
|
||||
std::string &dst,
|
||||
size_t occurrence = 0)
|
||||
@ -275,7 +278,8 @@ class CIVETWEB_API CivetServer
|
||||
* uses '+' as character for space, see RFC 1866 section 8.2.1
|
||||
* http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
|
||||
*/
|
||||
static void urlDecode(const std::string &src,
|
||||
static void
|
||||
urlDecode(const std::string &src,
|
||||
std::string &dst,
|
||||
bool is_form_url_encoded = true)
|
||||
{
|
||||
|
@ -388,7 +388,6 @@ enum {
|
||||
The array is terminated by a NULL name option. */
|
||||
CIVETWEB_API const struct mg_option *mg_get_valid_options(void);
|
||||
|
||||
|
||||
struct mg_server_ports {
|
||||
int protocol; /* 1 = IPv4, 2 = IPv6, 3 = both */
|
||||
int port; /* port number */
|
||||
@ -409,12 +408,10 @@ CIVETWEB_API int mg_get_server_ports(const struct mg_context *ctx,
|
||||
int size,
|
||||
struct mg_server_ports *ports);
|
||||
|
||||
|
||||
/* Deprecated. Use mg_get_server_ports instead. */
|
||||
CIVETWEB_API size_t
|
||||
mg_get_ports(const struct mg_context *ctx, size_t size, int *ports, int *ssl);
|
||||
|
||||
|
||||
/* Add, edit or delete the entry in the passwords file.
|
||||
|
||||
This function allows an application to manipulate .htpasswd files on the
|
||||
@ -755,7 +752,6 @@ CIVETWEB_API int mg_get_response(struct mg_connection *conn,
|
||||
size_t ebuf_len,
|
||||
int timeout);
|
||||
|
||||
|
||||
/* Check which features where set when civetweb has been compiled.
|
||||
Parameters:
|
||||
feature: specifies which feature should be checked
|
||||
@ -774,7 +770,6 @@ CIVETWEB_API int mg_get_response(struct mg_connection *conn,
|
||||
*/
|
||||
CIVETWEB_API unsigned mg_check_feature(unsigned feature);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
@ -15,43 +15,48 @@
|
||||
#define UNUSED_PARAMETER(x) (void)(x)
|
||||
#endif
|
||||
|
||||
bool CivetHandler::handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
bool
|
||||
CivetHandler::handleGet(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
UNUSED_PARAMETER(server);
|
||||
UNUSED_PARAMETER(conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CivetHandler::handlePost(CivetServer *server, struct mg_connection *conn)
|
||||
bool
|
||||
CivetHandler::handlePost(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
UNUSED_PARAMETER(server);
|
||||
UNUSED_PARAMETER(conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CivetHandler::handlePut(CivetServer *server, struct mg_connection *conn)
|
||||
bool
|
||||
CivetHandler::handlePut(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
UNUSED_PARAMETER(server);
|
||||
UNUSED_PARAMETER(conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CivetHandler::handleDelete(CivetServer *server, struct mg_connection *conn)
|
||||
bool
|
||||
CivetHandler::handleDelete(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
UNUSED_PARAMETER(server);
|
||||
UNUSED_PARAMETER(conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CivetHandler::handleOptions(CivetServer *server,
|
||||
struct mg_connection *conn)
|
||||
bool
|
||||
CivetHandler::handleOptions(CivetServer *server, struct mg_connection *conn)
|
||||
{
|
||||
UNUSED_PARAMETER(server);
|
||||
UNUSED_PARAMETER(conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
int CivetServer::requestHandler(struct mg_connection *conn, void *cbdata)
|
||||
int
|
||||
CivetServer::requestHandler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
const struct mg_request_info *request_info = mg_get_request_info(conn);
|
||||
assert(request_info != NULL);
|
||||
@ -110,7 +115,8 @@ CivetServer::~CivetServer()
|
||||
close();
|
||||
}
|
||||
|
||||
void CivetServer::closeHandler(const struct mg_connection *conn)
|
||||
void
|
||||
CivetServer::closeHandler(const struct mg_connection *conn)
|
||||
{
|
||||
const struct mg_request_info *request_info = mg_get_request_info(conn);
|
||||
assert(request_info != NULL);
|
||||
@ -128,17 +134,20 @@ void CivetServer::closeHandler(const struct mg_connection *conn)
|
||||
mg_unlock_context(me->context);
|
||||
}
|
||||
|
||||
void CivetServer::addHandler(const std::string &uri, CivetHandler *handler)
|
||||
void
|
||||
CivetServer::addHandler(const std::string &uri, CivetHandler *handler)
|
||||
{
|
||||
mg_set_request_handler(context, uri.c_str(), requestHandler, handler);
|
||||
}
|
||||
|
||||
void CivetServer::removeHandler(const std::string &uri)
|
||||
void
|
||||
CivetServer::removeHandler(const std::string &uri)
|
||||
{
|
||||
mg_set_request_handler(context, uri.c_str(), NULL, NULL);
|
||||
}
|
||||
|
||||
void CivetServer::close()
|
||||
void
|
||||
CivetServer::close()
|
||||
{
|
||||
if (context) {
|
||||
mg_stop(context);
|
||||
@ -146,7 +155,8 @@ void CivetServer::close()
|
||||
}
|
||||
}
|
||||
|
||||
int CivetServer::getCookie(struct mg_connection *conn,
|
||||
int
|
||||
CivetServer::getCookie(struct mg_connection *conn,
|
||||
const std::string &cookieName,
|
||||
std::string &cookieValue)
|
||||
{
|
||||
@ -154,27 +164,32 @@ int CivetServer::getCookie(struct mg_connection *conn,
|
||||
// http://msdn.microsoft.com/en-us/library/ms178194.aspx
|
||||
char _cookieValue[4096];
|
||||
const char *cookie = mg_get_header(conn, "Cookie");
|
||||
int lRead = mg_get_cookie(
|
||||
cookie, cookieName.c_str(), _cookieValue, sizeof(_cookieValue));
|
||||
int lRead = mg_get_cookie(cookie,
|
||||
cookieName.c_str(),
|
||||
_cookieValue,
|
||||
sizeof(_cookieValue));
|
||||
cookieValue.clear();
|
||||
cookieValue.append(_cookieValue);
|
||||
return lRead;
|
||||
}
|
||||
|
||||
const char *CivetServer::getHeader(struct mg_connection *conn,
|
||||
const char *
|
||||
CivetServer::getHeader(struct mg_connection *conn,
|
||||
const std::string &headerName)
|
||||
{
|
||||
return mg_get_header(conn, headerName.c_str());
|
||||
}
|
||||
|
||||
void CivetServer::urlDecode(const char *src,
|
||||
void
|
||||
CivetServer::urlDecode(const char *src,
|
||||
std::string &dst,
|
||||
bool is_form_url_encoded)
|
||||
{
|
||||
urlDecode(src, strlen(src), dst, is_form_url_encoded);
|
||||
}
|
||||
|
||||
void CivetServer::urlDecode(const char *src,
|
||||
void
|
||||
CivetServer::urlDecode(const char *src,
|
||||
size_t src_len,
|
||||
std::string &dst,
|
||||
bool is_form_url_encoded)
|
||||
@ -184,9 +199,9 @@ void CivetServer::urlDecode(const char *src,
|
||||
|
||||
dst.clear();
|
||||
for (i = j = 0; i < (int)src_len; i++, j++) {
|
||||
if (i < (int)src_len - 2 && src[i] == '%' &&
|
||||
isxdigit(*(const unsigned char *)(src + i + 1)) &&
|
||||
isxdigit(*(const unsigned char *)(src + i + 2))) {
|
||||
if (i < (int)src_len - 2 && src[i] == '%'
|
||||
&& isxdigit(*(const unsigned char *)(src + i + 1))
|
||||
&& isxdigit(*(const unsigned char *)(src + i + 2))) {
|
||||
a = tolower(*(const unsigned char *)(src + i + 1));
|
||||
b = tolower(*(const unsigned char *)(src + i + 2));
|
||||
dst.push_back((char)((HEXTOI(a) << 4) | HEXTOI(b)));
|
||||
@ -199,7 +214,8 @@ void CivetServer::urlDecode(const char *src,
|
||||
}
|
||||
}
|
||||
|
||||
bool CivetServer::getParam(struct mg_connection *conn,
|
||||
bool
|
||||
CivetServer::getParam(struct mg_connection *conn,
|
||||
const char *name,
|
||||
std::string &dst,
|
||||
size_t occurrence)
|
||||
@ -250,7 +266,8 @@ bool CivetServer::getParam(struct mg_connection *conn,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CivetServer::getParam(const char *data,
|
||||
bool
|
||||
CivetServer::getParam(const char *data,
|
||||
size_t data_len,
|
||||
const char *name,
|
||||
std::string &dst,
|
||||
@ -268,8 +285,8 @@ bool CivetServer::getParam(const char *data,
|
||||
|
||||
// data is "var1=val1&var2=val2...". Find variable first
|
||||
for (p = data; p + name_len < e; p++) {
|
||||
if ((p == data || p[-1] == '&') && p[name_len] == '=' &&
|
||||
!mg_strncasecmp(name, p, name_len) && 0 == occurrence--) {
|
||||
if ((p == data || p[-1] == '&') && p[name_len] == '='
|
||||
&& !mg_strncasecmp(name, p, name_len) && 0 == occurrence--) {
|
||||
|
||||
// Point p to variable value
|
||||
p += name_len + 1;
|
||||
@ -289,12 +306,14 @@ bool CivetServer::getParam(const char *data,
|
||||
return false;
|
||||
}
|
||||
|
||||
void CivetServer::urlEncode(const char *src, std::string &dst, bool append)
|
||||
void
|
||||
CivetServer::urlEncode(const char *src, std::string &dst, bool append)
|
||||
{
|
||||
urlEncode(src, strlen(src), dst, append);
|
||||
}
|
||||
|
||||
void CivetServer::urlEncode(const char *src,
|
||||
void
|
||||
CivetServer::urlEncode(const char *src,
|
||||
size_t src_len,
|
||||
std::string &dst,
|
||||
bool append)
|
||||
@ -306,8 +325,8 @@ void CivetServer::urlEncode(const char *src,
|
||||
dst.clear();
|
||||
|
||||
for (; src_len > 0; src++, src_len--) {
|
||||
if (isalnum(*(const unsigned char *)src) ||
|
||||
strchr(dont_escape, *(const unsigned char *)src) != NULL) {
|
||||
if (isalnum(*(const unsigned char *)src)
|
||||
|| strchr(dont_escape, *(const unsigned char *)src) != NULL) {
|
||||
dst.push_back(*src);
|
||||
} else {
|
||||
dst.push_back('%');
|
||||
@ -317,7 +336,8 @@ void CivetServer::urlEncode(const char *src,
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<int> CivetServer::getListeningPorts()
|
||||
std::vector<int>
|
||||
CivetServer::getListeningPorts()
|
||||
{
|
||||
std::vector<int> ports(10);
|
||||
std::vector<int> ssl(10);
|
||||
|
1546
src/civetweb.c
1546
src/civetweb.c
File diff suppressed because it is too large
Load Diff
264
src/main.c
264
src/main.c
@ -71,8 +71,8 @@
|
||||
#define printf \
|
||||
DO_NOT_USE_THIS_FUNCTION__USE_fprintf /* Required for unit testing */
|
||||
|
||||
#if defined(_WIN32) && \
|
||||
!defined(__SYMBIAN32__) /* WINDOWS / UNIX include block */
|
||||
#if defined(_WIN32) \
|
||||
&& !defined(__SYMBIAN32__) /* WINDOWS / UNIX include block */
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0501 /* for tdm-gcc so we can use getconsolewindow */
|
||||
#endif
|
||||
@ -157,12 +157,14 @@ static struct mg_option main_config_options[] = {
|
||||
{"icon", CONFIG_TYPE_STRING, NULL},
|
||||
{NULL, CONFIG_TYPE_UNKNOWN, NULL}};
|
||||
|
||||
static void WINCDECL signal_handler(int sig_num)
|
||||
static void WINCDECL
|
||||
signal_handler(int sig_num)
|
||||
{
|
||||
g_exit_flag = sig_num;
|
||||
}
|
||||
|
||||
static NO_RETURN void die(const char *fmt, ...)
|
||||
static NO_RETURN void
|
||||
die(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char msg[200] = "";
|
||||
@ -185,7 +187,8 @@ static NO_RETURN void die(const char *fmt, ...)
|
||||
static int MakeConsole(void);
|
||||
#endif
|
||||
|
||||
static void show_server_name(void)
|
||||
static void
|
||||
show_server_name(void)
|
||||
{
|
||||
#ifdef WIN32
|
||||
(void)MakeConsole();
|
||||
@ -194,7 +197,8 @@ static void show_server_name(void)
|
||||
fprintf(stderr, "CivetWeb v%s, built on %s\n", mg_version(), __DATE__);
|
||||
}
|
||||
|
||||
static NO_RETURN void show_usage_and_exit(const char *exeName)
|
||||
static NO_RETURN void
|
||||
show_usage_and_exit(const char *exeName)
|
||||
{
|
||||
const struct mg_option *options;
|
||||
int i;
|
||||
@ -212,8 +216,9 @@ static NO_RETURN void show_usage_and_exit(const char *exeName)
|
||||
fprintf(stderr, " Show system information:\n");
|
||||
fprintf(stderr, " %s -I\n", exeName);
|
||||
fprintf(stderr, " Add user/change password:\n");
|
||||
fprintf(
|
||||
stderr, " %s -A <htpasswd_file> <realm> <user> <passwd>\n", exeName);
|
||||
fprintf(stderr,
|
||||
" %s -A <htpasswd_file> <realm> <user> <passwd>\n",
|
||||
exeName);
|
||||
fprintf(stderr, " Remove user:\n");
|
||||
fprintf(stderr, " %s -R <htpasswd_file> <realm> <user>\n", exeName);
|
||||
fprintf(stderr, "\nOPTIONS:\n");
|
||||
@ -250,14 +255,15 @@ static const char *config_file_top_comment =
|
||||
"# To make a change, remove leading '#', modify option's value,\n"
|
||||
"# save this file and then restart Civetweb.\n\n";
|
||||
|
||||
static const char *get_url_to_first_open_port(const struct mg_context *ctx)
|
||||
static const char *
|
||||
get_url_to_first_open_port(const struct mg_context *ctx)
|
||||
{
|
||||
static char url[100];
|
||||
const char *open_ports = mg_get_option(ctx, "listening_ports");
|
||||
int a, b, c, d, port, n;
|
||||
|
||||
if (sscanf(open_ports, "%d.%d.%d.%d:%d%n", &a, &b, &c, &d, &port, &n) ==
|
||||
5) {
|
||||
if (sscanf(open_ports, "%d.%d.%d.%d:%d%n", &a, &b, &c, &d, &port, &n)
|
||||
== 5) {
|
||||
snprintf(url,
|
||||
sizeof(url),
|
||||
"%s://%d.%d.%d.%d:%d",
|
||||
@ -281,7 +287,8 @@ static const char *get_url_to_first_open_port(const struct mg_context *ctx)
|
||||
}
|
||||
|
||||
#ifdef ENABLE_CREATE_CONFIG_FILE
|
||||
static void create_config_file(const struct mg_context *ctx, const char *path)
|
||||
static void
|
||||
create_config_file(const struct mg_context *ctx, const char *path)
|
||||
{
|
||||
const struct mg_option *options;
|
||||
const char *value;
|
||||
@ -296,8 +303,10 @@ static void create_config_file(const struct mg_context *ctx, const char *path)
|
||||
options = mg_get_valid_options();
|
||||
for (i = 0; options[i].name != NULL; i++) {
|
||||
value = mg_get_option(ctx, options[i].name);
|
||||
fprintf(
|
||||
fp, "# %s %s\n", options[i].name, value ? value : "<value>");
|
||||
fprintf(fp,
|
||||
"# %s %s\n",
|
||||
options[i].name,
|
||||
value ? value : "<value>");
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
@ -305,7 +314,8 @@ static void create_config_file(const struct mg_context *ctx, const char *path)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static char *sdup(const char *str)
|
||||
static char *
|
||||
sdup(const char *str)
|
||||
{
|
||||
size_t len;
|
||||
char *p;
|
||||
@ -317,7 +327,8 @@ static char *sdup(const char *str)
|
||||
return p;
|
||||
}
|
||||
|
||||
static const char *get_option(char **options, const char *option_name)
|
||||
static const char *
|
||||
get_option(char **options, const char *option_name)
|
||||
{
|
||||
int i = 0;
|
||||
const char *opt_value = NULL;
|
||||
@ -339,7 +350,8 @@ static const char *get_option(char **options, const char *option_name)
|
||||
return opt_value;
|
||||
}
|
||||
|
||||
static int set_option(char **options, const char *name, const char *value)
|
||||
static int
|
||||
set_option(char **options, const char *name, const char *value)
|
||||
{
|
||||
int i, type;
|
||||
const struct mg_option *default_options = mg_get_valid_options();
|
||||
@ -416,7 +428,8 @@ static int set_option(char **options, const char *name, const char *value)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void read_config_file(const char *config_file, char **options)
|
||||
static void
|
||||
read_config_file(const char *config_file, char **options)
|
||||
{
|
||||
char line[MAX_CONF_FILE_LINE_SIZE], *p;
|
||||
FILE *fp = NULL;
|
||||
@ -452,8 +465,9 @@ static void read_config_file(const char *config_file, char **options)
|
||||
}
|
||||
|
||||
/* Skip spaces, \r and \n at the end of the line */
|
||||
for (j = strlen(line) - 1; isspace(*(unsigned char *)&line[j]) ||
|
||||
iscntrl(*(unsigned char *)&line[j]);)
|
||||
for (j = strlen(line) - 1;
|
||||
isspace(*(unsigned char *)&line[j])
|
||||
|| iscntrl(*(unsigned char *)&line[j]);)
|
||||
line[j--] = 0;
|
||||
|
||||
/* Find the space character between option name and value */
|
||||
@ -484,7 +498,8 @@ static void read_config_file(const char *config_file, char **options)
|
||||
}
|
||||
}
|
||||
|
||||
static void process_command_line_arguments(char *argv[], char **options)
|
||||
static void
|
||||
process_command_line_arguments(char *argv[], char **options)
|
||||
{
|
||||
char *p;
|
||||
size_t i, cmd_line_opts_start = 1;
|
||||
@ -549,11 +564,12 @@ static void process_command_line_arguments(char *argv[], char **options)
|
||||
}
|
||||
}
|
||||
|
||||
static void init_server_name(int argc, const char *argv[])
|
||||
static void
|
||||
init_server_name(int argc, const char *argv[])
|
||||
{
|
||||
int i;
|
||||
assert(sizeof(main_config_options) / sizeof(main_config_options[0]) ==
|
||||
NUM_MAIN_OPTIONS + 1);
|
||||
assert(sizeof(main_config_options) / sizeof(main_config_options[0])
|
||||
== NUM_MAIN_OPTIONS + 1);
|
||||
assert((strlen(mg_version()) + 12) < sizeof(g_server_base_name));
|
||||
snprintf(g_server_base_name,
|
||||
sizeof(g_server_base_name),
|
||||
@ -562,22 +578,24 @@ static void init_server_name(int argc, const char *argv[])
|
||||
|
||||
g_server_name = g_server_base_name;
|
||||
for (i = 0; i < argc - 1; i++) {
|
||||
if ((argv[i][0] == '-') &&
|
||||
(0 ==
|
||||
strcmp(argv[i] + 1, main_config_options[OPTION_TITLE].name))) {
|
||||
if ((argv[i][0] == '-')
|
||||
&& (0 == strcmp(argv[i] + 1,
|
||||
main_config_options[OPTION_TITLE].name))) {
|
||||
g_server_name = (char *)(argv[i + 1]);
|
||||
}
|
||||
}
|
||||
g_icon_name = NULL;
|
||||
for (i = 0; i < argc - 1; i++) {
|
||||
if ((argv[i][0] == '-') &&
|
||||
(0 == strcmp(argv[i] + 1, main_config_options[OPTION_ICON].name))) {
|
||||
if ((argv[i][0] == '-')
|
||||
&& (0 == strcmp(argv[i] + 1,
|
||||
main_config_options[OPTION_ICON].name))) {
|
||||
g_icon_name = (char *)(argv[i + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int log_message(const struct mg_connection *conn, const char *message)
|
||||
static int
|
||||
log_message(const struct mg_connection *conn, const char *message)
|
||||
{
|
||||
const struct mg_context *ctx = mg_get_context(conn);
|
||||
struct tuser_data *ud = (struct tuser_data *)mg_get_user_data(ctx);
|
||||
@ -591,14 +609,15 @@ static int log_message(const struct mg_connection *conn, const char *message)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int is_path_absolute(const char *path)
|
||||
static int
|
||||
is_path_absolute(const char *path)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return path != NULL &&
|
||||
((path[0] == '\\' && path[1] == '\\') || /* UNC path, e.g.
|
||||
return path != NULL
|
||||
&& ((path[0] == '\\' && path[1] == '\\') || /* UNC path, e.g.
|
||||
\\server\dir */
|
||||
(isalpha(path[0]) && path[1] == ':' &&
|
||||
path[2] == '\\')); /* E.g. X:\dir */
|
||||
(isalpha(path[0]) && path[1] == ':'
|
||||
&& path[2] == '\\')); /* E.g. X:\dir */
|
||||
#else
|
||||
return path != NULL && path[0] == '/';
|
||||
#endif
|
||||
@ -630,8 +649,8 @@ verify_existence(char **options, const char *option_name, int must_be_dir)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (path != NULL && (stat(path, &st) != 0 ||
|
||||
((S_ISDIR(st.st_mode) ? 1 : 0) != must_be_dir))) {
|
||||
if (path != NULL && (stat(path, &st) != 0
|
||||
|| ((S_ISDIR(st.st_mode) ? 1 : 0) != must_be_dir))) {
|
||||
die("Invalid path for %s: [%s]: (%s). Make sure that path is either "
|
||||
"absolute, or it is relative to civetweb executable.",
|
||||
option_name,
|
||||
@ -640,7 +659,8 @@ verify_existence(char **options, const char *option_name, int must_be_dir)
|
||||
}
|
||||
}
|
||||
|
||||
static void set_absolute_path(char *options[],
|
||||
static void
|
||||
set_absolute_path(char *options[],
|
||||
const char *option_name,
|
||||
const char *path_to_civetweb_exe)
|
||||
{
|
||||
@ -682,7 +702,8 @@ static void set_absolute_path(char *options[],
|
||||
#include "civetweb_lua.h"
|
||||
#include "civetweb_private_lua.h"
|
||||
|
||||
static int run_lua(const char *file_name)
|
||||
static int
|
||||
run_lua(const char *file_name)
|
||||
{
|
||||
struct lua_State *L;
|
||||
int lua_ret;
|
||||
@ -715,8 +736,10 @@ static int run_lua(const char *file_name)
|
||||
if (lua_ret != LUA_OK) {
|
||||
/* Error when executing the script */
|
||||
lua_err_txt = lua_tostring(L, -1);
|
||||
fprintf(
|
||||
stderr, "Error running file %s: %s\n", file_name, lua_err_txt);
|
||||
fprintf(stderr,
|
||||
"Error running file %s: %s\n",
|
||||
file_name,
|
||||
lua_err_txt);
|
||||
} else {
|
||||
/* Script executed */
|
||||
if (lua_type(L, -1) == LUA_TNUMBER) {
|
||||
@ -732,12 +755,12 @@ static int run_lua(const char *file_name)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_DUKTAPE
|
||||
|
||||
#include "duktape.h"
|
||||
|
||||
static int run_duktape(const char *file_name)
|
||||
static int
|
||||
run_duktape(const char *file_name)
|
||||
{
|
||||
duk_context *ctx = NULL;
|
||||
|
||||
@ -764,14 +787,13 @@ finished:
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__MINGW32__) || defined(__MINGW64__)
|
||||
/* For __MINGW32/64_MAJOR/MINOR_VERSION define */
|
||||
#include <_mingw.h>
|
||||
#endif
|
||||
|
||||
|
||||
static void start_civetweb(int argc, char *argv[])
|
||||
static void
|
||||
start_civetweb(int argc, char *argv[])
|
||||
{
|
||||
struct mg_callbacks callbacks;
|
||||
char *options[2 * MAX_OPTIONS + 1];
|
||||
@ -966,8 +988,8 @@ static void start_civetweb(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Show usage if -h or --help options are specified */
|
||||
if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "-H") ||
|
||||
!strcmp(argv[1], "--help"))) {
|
||||
if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "-H")
|
||||
|| !strcmp(argv[1], "--help"))) {
|
||||
show_usage_and_exit(argv[0]);
|
||||
}
|
||||
|
||||
@ -1019,7 +1041,8 @@ static void start_civetweb(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
static void stop_civetweb(void)
|
||||
static void
|
||||
stop_civetweb(void)
|
||||
{
|
||||
mg_stop(g_ctx);
|
||||
free(g_user_data.first_message);
|
||||
@ -1063,7 +1086,8 @@ static SERVICE_STATUS_HANDLE hStatus;
|
||||
static const char *service_magic_argument = "--";
|
||||
static NOTIFYICONDATA TrayIcon;
|
||||
|
||||
static void WINAPI ControlHandler(DWORD code)
|
||||
static void WINAPI
|
||||
ControlHandler(DWORD code)
|
||||
{
|
||||
if (code == SERVICE_CONTROL_STOP || code == SERVICE_CONTROL_SHUTDOWN) {
|
||||
ss.dwWin32ExitCode = 0;
|
||||
@ -1072,7 +1096,8 @@ static void WINAPI ControlHandler(DWORD code)
|
||||
SetServiceStatus(hStatus, &ss);
|
||||
}
|
||||
|
||||
static void WINAPI ServiceMain(void)
|
||||
static void WINAPI
|
||||
ServiceMain(void)
|
||||
{
|
||||
ss.dwServiceType = SERVICE_WIN32;
|
||||
ss.dwCurrentState = SERVICE_RUNNING;
|
||||
@ -1091,7 +1116,8 @@ static void WINAPI ServiceMain(void)
|
||||
SetServiceStatus(hStatus, &ss);
|
||||
}
|
||||
|
||||
static void show_error(void)
|
||||
static void
|
||||
show_error(void)
|
||||
{
|
||||
char buf[256];
|
||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
@ -1104,7 +1130,8 @@ static void show_error(void)
|
||||
MessageBox(NULL, buf, "Error", MB_OK);
|
||||
}
|
||||
|
||||
static void *align(void *ptr, DWORD alig)
|
||||
static void *
|
||||
align(void *ptr, DWORD alig)
|
||||
{
|
||||
uintptr_t ul = (uintptr_t)ptr;
|
||||
ul += alig;
|
||||
@ -1112,7 +1139,8 @@ static void *align(void *ptr, DWORD alig)
|
||||
return ((void *)ul);
|
||||
}
|
||||
|
||||
static void save_config(HWND hDlg, FILE *fp)
|
||||
static void
|
||||
save_config(HWND hDlg, FILE *fp)
|
||||
{
|
||||
char value[2000] = "";
|
||||
const char *default_value;
|
||||
@ -1226,8 +1254,9 @@ SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
!strcmp(value, "yes") ? BST_CHECKED
|
||||
: BST_UNCHECKED);
|
||||
} else {
|
||||
SetDlgItemText(
|
||||
hDlg, ID_CONTROLS + i, value == NULL ? "" : value);
|
||||
SetDlgItemText(hDlg,
|
||||
ID_CONTROLS + i,
|
||||
value == NULL ? "" : value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1235,9 +1264,9 @@ SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
for (i = 0; default_options[i].name != NULL; i++) {
|
||||
name = default_options[i].name;
|
||||
if (((default_options[i].type == CONFIG_TYPE_FILE) ||
|
||||
(default_options[i].type == CONFIG_TYPE_DIRECTORY)) &&
|
||||
LOWORD(wParam) == ID_CONTROLS + i + ID_FILE_BUTTONS_DELTA) {
|
||||
if (((default_options[i].type == CONFIG_TYPE_FILE)
|
||||
|| (default_options[i].type == CONFIG_TYPE_DIRECTORY))
|
||||
&& LOWORD(wParam) == ID_CONTROLS + i + ID_FILE_BUTTONS_DELTA) {
|
||||
OPENFILENAME of;
|
||||
BROWSEINFO bi;
|
||||
char path[PATH_MAX] = "";
|
||||
@ -1346,7 +1375,8 @@ InputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void suggest_passwd(char *passwd)
|
||||
static void
|
||||
suggest_passwd(char *passwd)
|
||||
{
|
||||
unsigned u;
|
||||
char *p;
|
||||
@ -1379,7 +1409,8 @@ static void add_control(unsigned char **mem,
|
||||
short cy,
|
||||
const char *caption);
|
||||
|
||||
static int get_password(const char *user,
|
||||
static int
|
||||
get_password(const char *user,
|
||||
const char *realm,
|
||||
char *passwd,
|
||||
unsigned passwd_len)
|
||||
@ -1400,8 +1431,8 @@ static int get_password(const char *user,
|
||||
wchar_t caption[1];
|
||||
WORD fontsiz;
|
||||
wchar_t fontface[7];
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE |
|
||||
DS_SETFONT | WS_DLGFRAME,
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
|
||||
| DS_SETFONT | WS_DLGFRAME,
|
||||
WS_EX_TOOLWINDOW,
|
||||
0,
|
||||
200,
|
||||
@ -1449,8 +1480,8 @@ static int get_password(const char *user,
|
||||
dia,
|
||||
0x81,
|
||||
ID_CONTROLS + 1,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_DISABLED,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_DISABLED,
|
||||
15 + LABEL_WIDTH,
|
||||
y,
|
||||
WIDTH - LABEL_WIDTH - 25,
|
||||
@ -1472,8 +1503,8 @@ static int get_password(const char *user,
|
||||
dia,
|
||||
0x81,
|
||||
ID_CONTROLS + 2,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_DISABLED,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_DISABLED,
|
||||
15 + LABEL_WIDTH,
|
||||
y,
|
||||
WIDTH - LABEL_WIDTH - 25,
|
||||
@ -1557,16 +1588,18 @@ PasswordDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP)
|
||||
ctrlId = LOWORD(wParam);
|
||||
if (ctrlId == ID_ADD_USER) {
|
||||
/* Add user */
|
||||
GetWindowText(
|
||||
GetDlgItem(hDlg, ID_ADD_USER_NAME), user, sizeof(user));
|
||||
GetWindowText(
|
||||
GetDlgItem(hDlg, ID_ADD_USER_REALM), domain, sizeof(domain));
|
||||
GetWindowText(GetDlgItem(hDlg, ID_ADD_USER_NAME),
|
||||
user,
|
||||
sizeof(user));
|
||||
GetWindowText(GetDlgItem(hDlg, ID_ADD_USER_REALM),
|
||||
domain,
|
||||
sizeof(domain));
|
||||
if (get_password(user, domain, password, sizeof(password))) {
|
||||
mg_modify_passwords_file(passfile, domain, user, password);
|
||||
EndDialog(hDlg, IDOK);
|
||||
}
|
||||
} else if ((ctrlId >= (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 3)) &&
|
||||
(ctrlId < (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 4))) {
|
||||
} else if ((ctrlId >= (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 3))
|
||||
&& (ctrlId < (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 4))) {
|
||||
/* Modify password */
|
||||
GetWindowText(GetDlgItem(hDlg, ctrlId - ID_FILE_BUTTONS_DELTA * 3),
|
||||
user,
|
||||
@ -1578,8 +1611,8 @@ PasswordDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP)
|
||||
mg_modify_passwords_file(passfile, domain, user, password);
|
||||
EndDialog(hDlg, IDOK);
|
||||
}
|
||||
} else if ((ctrlId >= (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 2)) &&
|
||||
(ctrlId < (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 3))) {
|
||||
} else if ((ctrlId >= (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 2))
|
||||
&& (ctrlId < (ID_CONTROLS + ID_FILE_BUTTONS_DELTA * 3))) {
|
||||
/* Remove user */
|
||||
GetWindowText(GetDlgItem(hDlg, ctrlId - ID_FILE_BUTTONS_DELTA * 2),
|
||||
user,
|
||||
@ -1607,7 +1640,8 @@ PasswordDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void add_control(unsigned char **mem,
|
||||
static void
|
||||
add_control(unsigned char **mem,
|
||||
DLGTEMPLATE *dia,
|
||||
WORD type,
|
||||
WORD id,
|
||||
@ -1648,7 +1682,8 @@ static void add_control(unsigned char **mem,
|
||||
*mem = (unsigned char *)p;
|
||||
}
|
||||
|
||||
static void show_settings_dialog()
|
||||
static void
|
||||
show_settings_dialog()
|
||||
{
|
||||
#define HEIGHT (15)
|
||||
#define WIDTH (460)
|
||||
@ -1667,8 +1702,8 @@ static void show_settings_dialog()
|
||||
wchar_t caption[1];
|
||||
WORD fontsiz;
|
||||
wchar_t fontface[7];
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE |
|
||||
DS_SETFONT | WS_DLGFRAME,
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
|
||||
| DS_SETFONT | WS_DLGFRAME,
|
||||
WS_EX_TOOLWINDOW,
|
||||
0,
|
||||
200,
|
||||
@ -1704,8 +1739,8 @@ static void show_settings_dialog()
|
||||
} else if (options[i].type == CONFIG_TYPE_BOOLEAN) {
|
||||
cl = 0x80;
|
||||
style |= BS_AUTOCHECKBOX;
|
||||
} else if ((options[i].type == CONFIG_TYPE_FILE) ||
|
||||
(options[i].type == CONFIG_TYPE_DIRECTORY)) {
|
||||
} else if ((options[i].type == CONFIG_TYPE_FILE)
|
||||
|| (options[i].type == CONFIG_TYPE_DIRECTORY)) {
|
||||
style |= WS_BORDER | ES_AUTOHSCROLL;
|
||||
width -= 20;
|
||||
cl = 0x81;
|
||||
@ -1822,7 +1857,8 @@ static void show_settings_dialog()
|
||||
#undef LABEL_WIDTH
|
||||
}
|
||||
|
||||
static void change_password_file()
|
||||
static void
|
||||
change_password_file()
|
||||
{
|
||||
#define HEIGHT (15)
|
||||
#define WIDTH (320)
|
||||
@ -1844,8 +1880,8 @@ static void change_password_file()
|
||||
wchar_t caption[1];
|
||||
WORD fontsiz;
|
||||
wchar_t fontface[7];
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE |
|
||||
DS_SETFONT | WS_DLGFRAME,
|
||||
} dialog_header = {{WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
|
||||
| DS_SETFONT | WS_DLGFRAME,
|
||||
WS_EX_TOOLWINDOW,
|
||||
0,
|
||||
200,
|
||||
@ -1930,8 +1966,8 @@ static void change_password_file()
|
||||
dia,
|
||||
0x81,
|
||||
ID_CONTROLS + nelems + ID_FILE_BUTTONS_DELTA,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_DISABLED,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_DISABLED,
|
||||
245,
|
||||
y,
|
||||
60,
|
||||
@ -1941,8 +1977,8 @@ static void change_password_file()
|
||||
dia,
|
||||
0x81,
|
||||
ID_CONTROLS + nelems,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_DISABLED,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_DISABLED,
|
||||
140,
|
||||
y,
|
||||
100,
|
||||
@ -1969,8 +2005,8 @@ static void change_password_file()
|
||||
dia,
|
||||
0x81,
|
||||
ID_ADD_USER_NAME,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_TABSTOP,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_TABSTOP,
|
||||
140,
|
||||
y,
|
||||
100,
|
||||
@ -1980,8 +2016,8 @@ static void change_password_file()
|
||||
dia,
|
||||
0x81,
|
||||
ID_ADD_USER_REALM,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
|
||||
WS_TABSTOP,
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
|
||||
| WS_TABSTOP,
|
||||
245,
|
||||
y,
|
||||
60,
|
||||
@ -2016,8 +2052,8 @@ static void change_password_file()
|
||||
|
||||
dia->cy = y + 20;
|
||||
} while ((IDOK == DialogBoxIndirectParam(
|
||||
NULL, dia, NULL, PasswordDlgProc, (LPARAM)path)) &&
|
||||
(!g_exit_flag));
|
||||
NULL, dia, NULL, PasswordDlgProc, (LPARAM)path))
|
||||
&& (!g_exit_flag));
|
||||
|
||||
guard--;
|
||||
|
||||
@ -2026,7 +2062,8 @@ static void change_password_file()
|
||||
#undef LABEL_WIDTH
|
||||
}
|
||||
|
||||
static int manage_service(int action)
|
||||
static int
|
||||
manage_service(int action)
|
||||
{
|
||||
static const char *service_name =
|
||||
"Civetweb"; /* TODO (mid): check using server_name instead of
|
||||
@ -2041,8 +2078,8 @@ static int manage_service(int action)
|
||||
if ((hSCM = OpenSCManager(NULL,
|
||||
NULL,
|
||||
action == ID_INSTALL_SERVICE ? GENERIC_WRITE
|
||||
: GENERIC_READ)) ==
|
||||
NULL) {
|
||||
: GENERIC_READ))
|
||||
== NULL) {
|
||||
success = 0;
|
||||
show_error();
|
||||
} else if (action == ID_INSTALL_SERVICE) {
|
||||
@ -2069,12 +2106,13 @@ static int manage_service(int action)
|
||||
show_error();
|
||||
}
|
||||
} else if (action == ID_REMOVE_SERVICE) {
|
||||
if ((hService = OpenService(hSCM, service_name, DELETE)) == NULL ||
|
||||
!DeleteService(hService)) {
|
||||
if ((hService = OpenService(hSCM, service_name, DELETE)) == NULL
|
||||
|| !DeleteService(hService)) {
|
||||
show_error();
|
||||
}
|
||||
} else if ((hService = OpenService(
|
||||
hSCM, service_name, SERVICE_QUERY_STATUS)) == NULL) {
|
||||
} else if ((hService =
|
||||
OpenService(hSCM, service_name, SERVICE_QUERY_STATUS))
|
||||
== NULL) {
|
||||
success = 0;
|
||||
}
|
||||
|
||||
@ -2149,8 +2187,10 @@ WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case WM_LBUTTONUP:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
hMenu = CreatePopupMenu();
|
||||
AppendMenu(
|
||||
hMenu, MF_STRING | MF_GRAYED, ID_SEPARATOR, g_server_name);
|
||||
AppendMenu(hMenu,
|
||||
MF_STRING | MF_GRAYED,
|
||||
ID_SEPARATOR,
|
||||
g_server_name);
|
||||
AppendMenu(hMenu, MF_SEPARATOR, ID_SEPARATOR, "");
|
||||
service_installed = manage_service(0);
|
||||
snprintf(buf,
|
||||
@ -2195,7 +2235,8 @@ WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static int MakeConsole(void)
|
||||
static int
|
||||
MakeConsole(void)
|
||||
{
|
||||
DWORD err;
|
||||
int ok = (GetConsoleWindow() != NULL);
|
||||
@ -2229,7 +2270,8 @@ static int MakeConsole(void)
|
||||
return ok;
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdline, int show)
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdline, int show)
|
||||
{
|
||||
WNDCLASS cls;
|
||||
HWND hWnd;
|
||||
@ -2290,8 +2332,8 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdline, int show)
|
||||
return (int)msg.wParam;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
@ -2299,7 +2341,6 @@ int main(int argc, char *argv[])
|
||||
return WinMain(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
#elif defined(USE_COCOA)
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@ -2329,8 +2370,8 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
init_server_name(argc, (const char **)argv);
|
||||
start_civetweb(argc, argv);
|
||||
@ -2396,7 +2437,8 @@ int main(int argc, char *argv[])
|
||||
|
||||
#else
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
init_server_name(argc, (const char **)argv);
|
||||
start_civetweb(argc, argv);
|
||||
|
23
src/md5.inl
23
src/md5.inl
@ -207,7 +207,8 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
|
||||
#define T63 (0x2ad7d2bb)
|
||||
#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
|
||||
|
||||
static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
||||
static void
|
||||
md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
||||
{
|
||||
md5_word_t a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2],
|
||||
d = pms->abcd[3];
|
||||
@ -270,8 +271,9 @@ static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
||||
#define xbuf X /* (static only) */
|
||||
#endif
|
||||
for (i = 0; i < 16; ++i, xp += 4)
|
||||
xbuf[i] = (md5_word_t)(xp[0]) + (md5_word_t)(xp[1] << 8) +
|
||||
(md5_word_t)(xp[2] << 16) + (md5_word_t)(xp[3] << 24);
|
||||
xbuf[i] = (md5_word_t)(xp[0]) + (md5_word_t)(xp[1] << 8)
|
||||
+ (md5_word_t)(xp[2] << 16)
|
||||
+ (md5_word_t)(xp[3] << 24);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -395,7 +397,8 @@ static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
||||
pms->abcd[3] += d;
|
||||
}
|
||||
|
||||
MD5_STATIC void md5_init(md5_state_t *pms)
|
||||
MD5_STATIC void
|
||||
md5_init(md5_state_t *pms)
|
||||
{
|
||||
pms->count[0] = pms->count[1] = 0;
|
||||
pms->abcd[0] = 0x67452301;
|
||||
@ -442,12 +445,14 @@ md5_append(md5_state_t *pms, const md5_byte_t *data, size_t nbytes)
|
||||
memcpy(pms->buf, p, left);
|
||||
}
|
||||
|
||||
MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16])
|
||||
MD5_STATIC void
|
||||
md5_finish(md5_state_t *pms, md5_byte_t digest[16])
|
||||
{
|
||||
static const md5_byte_t pad[64] = {
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
static const md5_byte_t pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
md5_byte_t data[8];
|
||||
int i;
|
||||
|
||||
|
@ -13,29 +13,27 @@
|
||||
|
||||
/* Note: This is only experimental support, so any API may still change. */
|
||||
|
||||
|
||||
static const char *civetweb_conn_id = "\xFF"
|
||||
"civetweb_conn";
|
||||
|
||||
|
||||
static void *mg_duk_mem_alloc(void *udata, duk_size_t size)
|
||||
static void *
|
||||
mg_duk_mem_alloc(void *udata, duk_size_t size)
|
||||
{
|
||||
return mg_malloc(size);
|
||||
}
|
||||
|
||||
|
||||
static void *mg_duk_mem_realloc(void *udata, void *ptr, duk_size_t newsize)
|
||||
static void *
|
||||
mg_duk_mem_realloc(void *udata, void *ptr, duk_size_t newsize)
|
||||
{
|
||||
return mg_realloc(ptr, newsize);
|
||||
}
|
||||
|
||||
|
||||
static void mg_duk_mem_free(void *udata, void *ptr)
|
||||
static void
|
||||
mg_duk_mem_free(void *udata, void *ptr)
|
||||
{
|
||||
mg_free(ptr);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
mg_duk_fatal_handler(duk_context *ctx, duk_errcode_t code, const char *msg)
|
||||
{
|
||||
@ -51,8 +49,8 @@ mg_duk_fatal_handler(duk_context *ctx, duk_errcode_t code, const char *msg)
|
||||
mg_cry(conn, "%s", msg);
|
||||
}
|
||||
|
||||
|
||||
static duk_ret_t duk_itf_write(duk_context *ctx)
|
||||
static duk_ret_t
|
||||
duk_itf_write(duk_context *ctx)
|
||||
{
|
||||
struct mg_connection *conn;
|
||||
duk_double_t ret;
|
||||
@ -82,8 +80,8 @@ static duk_ret_t duk_itf_write(duk_context *ctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static duk_ret_t duk_itf_read(duk_context *ctx)
|
||||
static duk_ret_t
|
||||
duk_itf_read(duk_context *ctx)
|
||||
{
|
||||
struct mg_connection *conn;
|
||||
char buf[1024];
|
||||
@ -107,8 +105,8 @@ static duk_ret_t duk_itf_read(duk_context *ctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static void mg_exec_duktape_script(struct mg_connection *conn, const char *path)
|
||||
static void
|
||||
mg_exec_duktape_script(struct mg_connection *conn, const char *path)
|
||||
{
|
||||
duk_context *ctx = NULL;
|
||||
|
||||
|
186
src/mod_lua.inl
186
src/mod_lua.inl
@ -25,7 +25,8 @@ mmap(void *addr, int64_t len, int prot, int flags, int fd, int offset)
|
||||
return p;
|
||||
}
|
||||
|
||||
static void munmap(void *addr, int64_t length)
|
||||
static void
|
||||
munmap(void *addr, int64_t length)
|
||||
{
|
||||
/* unused parameters */
|
||||
(void)length;
|
||||
@ -51,7 +52,8 @@ static int handle_lsp_request(struct mg_connection *,
|
||||
struct file *,
|
||||
struct lua_State *);
|
||||
|
||||
static void reg_string(struct lua_State *L, const char *name, const char *val)
|
||||
static void
|
||||
reg_string(struct lua_State *L, const char *name, const char *val)
|
||||
{
|
||||
if (name != NULL && val != NULL) {
|
||||
lua_pushstring(L, name);
|
||||
@ -60,7 +62,8 @@ static void reg_string(struct lua_State *L, const char *name, const char *val)
|
||||
}
|
||||
}
|
||||
|
||||
static void reg_int(struct lua_State *L, const char *name, int val)
|
||||
static void
|
||||
reg_int(struct lua_State *L, const char *name, int val)
|
||||
{
|
||||
if (name != NULL) {
|
||||
lua_pushstring(L, name);
|
||||
@ -69,7 +72,8 @@ static void reg_int(struct lua_State *L, const char *name, int val)
|
||||
}
|
||||
}
|
||||
|
||||
static void reg_boolean(struct lua_State *L, const char *name, int val)
|
||||
static void
|
||||
reg_boolean(struct lua_State *L, const char *name, int val)
|
||||
{
|
||||
if (name != NULL) {
|
||||
lua_pushstring(L, name);
|
||||
@ -78,7 +82,8 @@ static void reg_boolean(struct lua_State *L, const char *name, int val)
|
||||
}
|
||||
}
|
||||
|
||||
static void reg_conn_function(struct lua_State *L,
|
||||
static void
|
||||
reg_conn_function(struct lua_State *L,
|
||||
const char *name,
|
||||
lua_CFunction func,
|
||||
struct mg_connection *conn)
|
||||
@ -101,7 +106,8 @@ reg_function(struct lua_State *L, const char *name, lua_CFunction func)
|
||||
}
|
||||
}
|
||||
|
||||
static void lua_cry(struct mg_connection *conn,
|
||||
static void
|
||||
lua_cry(struct mg_connection *conn,
|
||||
int err,
|
||||
lua_State *L,
|
||||
const char *lua_title,
|
||||
@ -147,7 +153,8 @@ static void lua_cry(struct mg_connection *conn,
|
||||
}
|
||||
}
|
||||
|
||||
static int lsp_sock_close(lua_State *L)
|
||||
static int
|
||||
lsp_sock_close(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
if ((num_args == 1) && lua_istable(L, -1)) {
|
||||
@ -159,7 +166,8 @@ static int lsp_sock_close(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lsp_sock_recv(lua_State *L)
|
||||
static int
|
||||
lsp_sock_recv(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
char buf[2000];
|
||||
@ -179,7 +187,8 @@ static int lsp_sock_recv(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lsp_sock_send(lua_State *L)
|
||||
static int
|
||||
lsp_sock_send(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *buf;
|
||||
@ -208,7 +217,8 @@ static const struct luaL_Reg luasocket_methods[] = {{"close", lsp_sock_close},
|
||||
{"recv", lsp_sock_recv},
|
||||
{NULL, NULL}};
|
||||
|
||||
static int lsp_connect(lua_State *L)
|
||||
static int
|
||||
lsp_connect(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
char ebuf[100];
|
||||
@ -216,8 +226,8 @@ static int lsp_connect(lua_State *L)
|
||||
union usa sa;
|
||||
int ok;
|
||||
|
||||
if ((num_args == 3) && lua_isstring(L, -3) && lua_isnumber(L, -2) &&
|
||||
lua_isnumber(L, -1)) {
|
||||
if ((num_args == 3) && lua_isstring(L, -3) && lua_isnumber(L, -2)
|
||||
&& lua_isnumber(L, -1)) {
|
||||
ok = connect_socket(NULL,
|
||||
lua_tostring(L, -3),
|
||||
(int)lua_tonumber(L, -2),
|
||||
@ -244,7 +254,8 @@ static int lsp_connect(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lsp_error(lua_State *L)
|
||||
static int
|
||||
lsp_error(lua_State *L)
|
||||
{
|
||||
lua_getglobal(L, "mg");
|
||||
lua_getfield(L, -1, "onerror");
|
||||
@ -254,7 +265,8 @@ static int lsp_error(lua_State *L)
|
||||
}
|
||||
|
||||
/* Silently stop processing chunks. */
|
||||
static void lsp_abort(lua_State *L)
|
||||
static void
|
||||
lsp_abort(lua_State *L)
|
||||
{
|
||||
int top = lua_gettop(L);
|
||||
lua_getglobal(L, "mg");
|
||||
@ -271,7 +283,8 @@ struct lsp_var_reader_data {
|
||||
unsigned state;
|
||||
};
|
||||
|
||||
static const char *lsp_var_reader(lua_State *L, void *ud, size_t *sz)
|
||||
static const char *
|
||||
lsp_var_reader(lua_State *L, void *ud, size_t *sz)
|
||||
{
|
||||
struct lsp_var_reader_data *reader = (struct lsp_var_reader_data *)ud;
|
||||
const char *ret;
|
||||
@ -299,7 +312,8 @@ static const char *lsp_var_reader(lua_State *L, void *ud, size_t *sz)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int lsp(struct mg_connection *conn,
|
||||
static int
|
||||
lsp(struct mg_connection *conn,
|
||||
const char *path,
|
||||
const char *p,
|
||||
int64_t len,
|
||||
@ -346,8 +360,10 @@ static int lsp(struct mg_connection *conn,
|
||||
lua_ok = mg_lua_load(
|
||||
L, lsp_var_reader, &data, chunkname, NULL);
|
||||
} else {
|
||||
lua_ok = luaL_loadbuffer(
|
||||
L, p + (i + 2), j - (i + 2), chunkname);
|
||||
lua_ok = luaL_loadbuffer(L,
|
||||
p + (i + 2),
|
||||
j - (i + 2),
|
||||
chunkname);
|
||||
}
|
||||
|
||||
if (lua_ok) {
|
||||
@ -381,7 +397,8 @@ static int lsp(struct mg_connection *conn,
|
||||
}
|
||||
|
||||
/* mg.write: Send data to the client */
|
||||
static int lsp_write(lua_State *L)
|
||||
static int
|
||||
lsp_write(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -401,7 +418,8 @@ static int lsp_write(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.read: Read data from the client (e.g., from a POST request) */
|
||||
static int lsp_read(lua_State *L)
|
||||
static int
|
||||
lsp_read(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -416,7 +434,8 @@ static int lsp_read(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.keep_alive: Allow Lua pages to use the http keep-alive mechanism */
|
||||
static int lsp_keep_alive(lua_State *L)
|
||||
static int
|
||||
lsp_keep_alive(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -439,7 +458,8 @@ static int lsp_keep_alive(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.include: Include another .lp file */
|
||||
static int lsp_include(lua_State *L)
|
||||
static int
|
||||
lsp_include(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -463,7 +483,8 @@ static int lsp_include(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.cry: Log an error. Default value for mg.onerror. */
|
||||
static int lsp_cry(lua_State *L)
|
||||
static int
|
||||
lsp_cry(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -480,7 +501,8 @@ static int lsp_cry(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.redirect: Redirect the request (internally). */
|
||||
static int lsp_redirect(lua_State *L)
|
||||
static int
|
||||
lsp_redirect(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -499,7 +521,8 @@ static int lsp_redirect(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.send_file */
|
||||
static int lsp_send_file(lua_State *L)
|
||||
static int
|
||||
lsp_send_file(lua_State *L)
|
||||
{
|
||||
struct mg_connection *conn =
|
||||
(struct mg_connection *)lua_touserdata(L, lua_upvalueindex(1));
|
||||
@ -516,7 +539,8 @@ static int lsp_send_file(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.get_time */
|
||||
static int lsp_get_time(lua_State *L)
|
||||
static int
|
||||
lsp_get_time(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
int monotonic = (num_args > 0) ? lua_toboolean(L, 1) : 0;
|
||||
@ -530,7 +554,8 @@ static int lsp_get_time(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.get_var */
|
||||
static int lsp_get_var(lua_State *L)
|
||||
static int
|
||||
lsp_get_var(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *data, *var_name;
|
||||
@ -560,7 +585,8 @@ static int lsp_get_var(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.get_mime_type */
|
||||
static int lsp_get_mime_type(lua_State *L)
|
||||
static int
|
||||
lsp_get_mime_type(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
struct vec mime_type = {0, 0};
|
||||
@ -593,7 +619,8 @@ static int lsp_get_mime_type(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.get_cookie */
|
||||
static int lsp_get_cookie(lua_State *L)
|
||||
static int
|
||||
lsp_get_cookie(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *cookie;
|
||||
@ -623,7 +650,8 @@ static int lsp_get_cookie(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.md5 */
|
||||
static int lsp_md5(lua_State *L)
|
||||
static int
|
||||
lsp_md5(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *text;
|
||||
@ -651,7 +679,8 @@ static int lsp_md5(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.url_encode */
|
||||
static int lsp_url_encode(lua_State *L)
|
||||
static int
|
||||
lsp_url_encode(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *text;
|
||||
@ -674,7 +703,8 @@ static int lsp_url_encode(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.url_decode */
|
||||
static int lsp_url_decode(lua_State *L)
|
||||
static int
|
||||
lsp_url_decode(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *text;
|
||||
@ -699,7 +729,8 @@ static int lsp_url_decode(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.base64_encode */
|
||||
static int lsp_base64_encode(lua_State *L)
|
||||
static int
|
||||
lsp_base64_encode(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *text;
|
||||
@ -728,7 +759,8 @@ static int lsp_base64_encode(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.base64_encode */
|
||||
static int lsp_base64_decode(lua_State *L)
|
||||
static int
|
||||
lsp_base64_decode(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
const char *text;
|
||||
@ -741,8 +773,10 @@ static int lsp_base64_decode(lua_State *L)
|
||||
if (text) {
|
||||
dst = (char *)mg_malloc(text_len);
|
||||
if (dst) {
|
||||
ret = base64_decode(
|
||||
(const unsigned char *)text, text_len, dst, &dst_len);
|
||||
ret = base64_decode((const unsigned char *)text,
|
||||
text_len,
|
||||
dst,
|
||||
&dst_len);
|
||||
if (ret != -1) {
|
||||
mg_free(dst);
|
||||
return luaL_error(
|
||||
@ -766,7 +800,8 @@ static int lsp_base64_decode(lua_State *L)
|
||||
}
|
||||
|
||||
/* mg.get_response_code_text */
|
||||
static int lsp_get_response_code_text(lua_State *L)
|
||||
static int
|
||||
lsp_get_response_code_text(lua_State *L)
|
||||
{
|
||||
int num_args = lua_gettop(L);
|
||||
int type1;
|
||||
@ -801,7 +836,8 @@ struct lua_websock_data {
|
||||
#endif
|
||||
|
||||
/* mg.write for websockets */
|
||||
static int lwebsock_write(lua_State *L)
|
||||
static int
|
||||
lwebsock_write(lua_State *L)
|
||||
{
|
||||
#ifdef USE_WEBSOCKET
|
||||
int num_args = lua_gettop(L);
|
||||
@ -905,7 +941,8 @@ struct laction_arg {
|
||||
char txt[1];
|
||||
};
|
||||
|
||||
static int lua_action(struct laction_arg *arg)
|
||||
static int
|
||||
lua_action(struct laction_arg *arg)
|
||||
{
|
||||
int err, ok;
|
||||
struct mg_context *ctx;
|
||||
@ -947,7 +984,8 @@ static int lua_action(struct laction_arg *arg)
|
||||
return ok;
|
||||
}
|
||||
|
||||
static int lua_action_free(struct laction_arg *arg)
|
||||
static int
|
||||
lua_action_free(struct laction_arg *arg)
|
||||
{
|
||||
if (lua_action(arg)) {
|
||||
mg_free(arg);
|
||||
@ -955,7 +993,8 @@ static int lua_action_free(struct laction_arg *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lwebsocket_set_timer(lua_State *L, int is_periodic)
|
||||
static int
|
||||
lwebsocket_set_timer(lua_State *L, int is_periodic)
|
||||
{
|
||||
#if defined(USE_TIMERS) && defined(USE_WEBSOCKET)
|
||||
int num_args = lua_gettop(L);
|
||||
@ -987,8 +1026,8 @@ static int lwebsocket_set_timer(lua_State *L, int is_periodic)
|
||||
timediff = (double)lua_tonumber(L, 2);
|
||||
txt = lua_tostring(L, 1);
|
||||
txt_len = strlen(txt);
|
||||
arg = (struct laction_arg *)mg_malloc(sizeof(struct laction_arg) +
|
||||
txt_len + 10);
|
||||
arg = (struct laction_arg *)mg_malloc(sizeof(struct laction_arg)
|
||||
+ txt_len + 10);
|
||||
arg->state = L;
|
||||
arg->script = ws->script;
|
||||
arg->pmutex = &(ws->ws_mutex);
|
||||
@ -996,8 +1035,9 @@ static int lwebsocket_set_timer(lua_State *L, int is_periodic)
|
||||
memcpy(arg->txt + 7, txt, txt_len);
|
||||
arg->txt[txt_len + 7] = ')';
|
||||
arg->txt[txt_len + 8] = 0;
|
||||
ok = (0 ==
|
||||
timer_add(ctx,
|
||||
ok =
|
||||
(0
|
||||
== timer_add(ctx,
|
||||
timediff,
|
||||
is_periodic,
|
||||
1,
|
||||
@ -1021,13 +1061,15 @@ static int lwebsocket_set_timer(lua_State *L, int is_periodic)
|
||||
}
|
||||
|
||||
/* mg.set_timeout for websockets */
|
||||
static int lwebsocket_set_timeout(lua_State *L)
|
||||
static int
|
||||
lwebsocket_set_timeout(lua_State *L)
|
||||
{
|
||||
return lwebsocket_set_timer(L, 0);
|
||||
}
|
||||
|
||||
/* mg.set_interval for websockets */
|
||||
static int lwebsocket_set_interval(lua_State *L)
|
||||
static int
|
||||
lwebsocket_set_interval(lua_State *L)
|
||||
{
|
||||
return lwebsocket_set_timer(L, 1);
|
||||
}
|
||||
@ -1038,7 +1080,8 @@ enum {
|
||||
LUA_ENV_TYPE_LUA_WEBSOCKET = 2,
|
||||
};
|
||||
|
||||
static void prepare_lua_request_info(struct mg_connection *conn, lua_State *L)
|
||||
static void
|
||||
prepare_lua_request_info(struct mg_connection *conn, lua_State *L)
|
||||
{
|
||||
const char *s;
|
||||
int i;
|
||||
@ -1100,7 +1143,8 @@ static void prepare_lua_request_info(struct mg_connection *conn, lua_State *L)
|
||||
lua_rawset(L, -3);
|
||||
}
|
||||
|
||||
void civetweb_open_lua_libs(lua_State *L)
|
||||
void
|
||||
civetweb_open_lua_libs(lua_State *L)
|
||||
{
|
||||
{
|
||||
extern void luaL_openlibs(lua_State *);
|
||||
@ -1137,7 +1181,8 @@ void civetweb_open_lua_libs(lua_State *L)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void prepare_lua_environment(struct mg_context *ctx,
|
||||
static void
|
||||
prepare_lua_environment(struct mg_context *ctx,
|
||||
struct mg_connection *conn,
|
||||
struct lua_websock_data *ws_conn_list,
|
||||
lua_State *L,
|
||||
@ -1186,8 +1231,8 @@ static void prepare_lua_environment(struct mg_context *ctx,
|
||||
break;
|
||||
}
|
||||
|
||||
if (lua_env_type == LUA_ENV_TYPE_LUA_SERVER_PAGE ||
|
||||
lua_env_type == LUA_ENV_TYPE_PLAIN_LUA_PAGE) {
|
||||
if (lua_env_type == LUA_ENV_TYPE_LUA_SERVER_PAGE
|
||||
|| lua_env_type == LUA_ENV_TYPE_PLAIN_LUA_PAGE) {
|
||||
reg_conn_function(L, "cry", lsp_cry, conn);
|
||||
reg_conn_function(L, "read", lsp_read, conn);
|
||||
reg_conn_function(L, "write", lsp_write, conn);
|
||||
@ -1231,7 +1276,6 @@ static void prepare_lua_environment(struct mg_context *ctx,
|
||||
reg_string(L, "websocket_root", ctx->config[WEBSOCKET_ROOT]);
|
||||
#endif
|
||||
|
||||
|
||||
if (ctx->systemName != NULL) {
|
||||
reg_string(L, "system", ctx->systemName);
|
||||
}
|
||||
@ -1262,7 +1306,8 @@ static void prepare_lua_environment(struct mg_context *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
static int lua_error_handler(lua_State *L)
|
||||
static int
|
||||
lua_error_handler(lua_State *L)
|
||||
{
|
||||
const char *error_msg = lua_isstring(L, -1) ? lua_tostring(L, -1) : "?\n";
|
||||
|
||||
@ -1284,7 +1329,8 @@ static int lua_error_handler(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *lua_allocator(void *ud, void *ptr, size_t osize, size_t nsize)
|
||||
static void *
|
||||
lua_allocator(void *ud, void *ptr, size_t osize, size_t nsize)
|
||||
{
|
||||
|
||||
(void)ud;
|
||||
@ -1297,7 +1343,8 @@ static void *lua_allocator(void *ud, void *ptr, size_t osize, size_t nsize)
|
||||
return mg_realloc(ptr, nsize);
|
||||
}
|
||||
|
||||
static void mg_exec_lua_script(struct mg_connection *conn,
|
||||
static void
|
||||
mg_exec_lua_script(struct mg_connection *conn,
|
||||
const char *path,
|
||||
const void **exports)
|
||||
{
|
||||
@ -1342,7 +1389,8 @@ static void mg_exec_lua_script(struct mg_connection *conn,
|
||||
}
|
||||
}
|
||||
|
||||
static int handle_lsp_request(struct mg_connection *conn,
|
||||
static int
|
||||
handle_lsp_request(struct mg_connection *conn,
|
||||
const char *path,
|
||||
struct file *filep,
|
||||
struct lua_State *ls)
|
||||
@ -1367,8 +1415,8 @@ static int handle_lsp_request(struct mg_connection *conn,
|
||||
} else {
|
||||
luaL_error(ls, "File [%s] not found", path);
|
||||
}
|
||||
} else if (filep->membuf == NULL &&
|
||||
(p = mmap(NULL,
|
||||
} else if (filep->membuf == NULL
|
||||
&& (p = mmap(NULL,
|
||||
(size_t)filep->size,
|
||||
PROT_READ,
|
||||
MAP_PRIVATE,
|
||||
@ -1389,8 +1437,8 @@ static int handle_lsp_request(struct mg_connection *conn,
|
||||
fileno(filep->fp),
|
||||
strerror(errno));
|
||||
}
|
||||
} else if ((L = (ls != NULL ? ls : lua_newstate(lua_allocator, NULL))) ==
|
||||
NULL) {
|
||||
} else if ((L = (ls != NULL ? ls : lua_newstate(lua_allocator, NULL)))
|
||||
== NULL) {
|
||||
send_http_error(conn,
|
||||
500,
|
||||
"%s",
|
||||
@ -1423,7 +1471,8 @@ struct mg_shared_lua_websocket_list {
|
||||
struct mg_shared_lua_websocket_list *next;
|
||||
};
|
||||
|
||||
static void *lua_websocket_new(const char *script, struct mg_connection *conn)
|
||||
static void *
|
||||
lua_websocket_new(const char *script, struct mg_connection *conn)
|
||||
{
|
||||
struct mg_shared_lua_websocket_list **shared_websock_list =
|
||||
&(conn->ctx->shared_lua_websockets);
|
||||
@ -1443,8 +1492,8 @@ static void *lua_websocket_new(const char *script, struct mg_connection *conn)
|
||||
}
|
||||
if (*shared_websock_list == NULL) {
|
||||
/* add ws to list */
|
||||
*shared_websock_list = (struct mg_shared_lua_websocket_list *)mg_calloc(
|
||||
sizeof(struct mg_shared_lua_websocket_list), 1);
|
||||
*shared_websock_list = (struct mg_shared_lua_websocket_list *)
|
||||
mg_calloc(sizeof(struct mg_shared_lua_websocket_list), 1);
|
||||
if (*shared_websock_list == NULL) {
|
||||
mg_unlock_context(conn->ctx);
|
||||
mg_cry(conn, "Cannot create shared websocket struct, OOM");
|
||||
@ -1505,7 +1554,8 @@ static void *lua_websocket_new(const char *script, struct mg_connection *conn)
|
||||
return ok ? (void *)ws : NULL;
|
||||
}
|
||||
|
||||
static int lua_websocket_data(struct mg_connection *conn,
|
||||
static int
|
||||
lua_websocket_data(struct mg_connection *conn,
|
||||
int bits,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
@ -1548,7 +1598,8 @@ static int lua_websocket_data(struct mg_connection *conn,
|
||||
return ok;
|
||||
}
|
||||
|
||||
static int lua_websocket_ready(struct mg_connection *conn, void *ws_arg)
|
||||
static int
|
||||
lua_websocket_ready(struct mg_connection *conn, void *ws_arg)
|
||||
{
|
||||
struct lua_websock_data *ws = (struct lua_websock_data *)(ws_arg);
|
||||
int err, ok = 0;
|
||||
@ -1579,7 +1630,8 @@ static int lua_websocket_ready(struct mg_connection *conn, void *ws_arg)
|
||||
return ok;
|
||||
}
|
||||
|
||||
static void lua_websocket_close(struct mg_connection *conn, void *ws_arg)
|
||||
static void
|
||||
lua_websocket_close(struct mg_connection *conn, void *ws_arg)
|
||||
{
|
||||
struct lua_websock_data *ws = (struct lua_websock_data *)(ws_arg);
|
||||
struct mg_shared_lua_websocket_list **shared_websock_list =
|
||||
|
@ -19,7 +19,8 @@ struct ttimers {
|
||||
unsigned timer_count; /* Current size of timer list */
|
||||
};
|
||||
|
||||
static int timer_add(struct mg_context *ctx,
|
||||
static int
|
||||
timer_add(struct mg_context *ctx,
|
||||
double next_time,
|
||||
double period,
|
||||
int is_relative,
|
||||
@ -62,7 +63,8 @@ static int timer_add(struct mg_context *ctx,
|
||||
return error;
|
||||
}
|
||||
|
||||
static void timer_thread_run(void *thread_func_param)
|
||||
static void
|
||||
timer_thread_run(void *thread_func_param)
|
||||
{
|
||||
struct mg_context *ctx = (struct mg_context *)thread_func_param;
|
||||
struct timespec now;
|
||||
@ -73,9 +75,8 @@ static void timer_thread_run(void *thread_func_param)
|
||||
|
||||
#if defined(HAVE_CLOCK_NANOSLEEP) /* Linux with librt */
|
||||
/* TODO */
|
||||
while (
|
||||
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &request, &request) ==
|
||||
EINTR) { /*nop*/
|
||||
while (clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &request, &request)
|
||||
== EINTR) { /*nop*/
|
||||
;
|
||||
}
|
||||
#else
|
||||
@ -112,14 +113,16 @@ static unsigned __stdcall timer_thread(void *thread_func_param)
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static void *timer_thread(void *thread_func_param)
|
||||
static void *
|
||||
timer_thread(void *thread_func_param)
|
||||
{
|
||||
timer_thread_run(thread_func_param);
|
||||
return NULL;
|
||||
}
|
||||
#endif /* _WIN32 */
|
||||
|
||||
static int timers_init(struct mg_context *ctx)
|
||||
static int
|
||||
timers_init(struct mg_context *ctx)
|
||||
{
|
||||
ctx->timers = (struct ttimers *)mg_calloc(sizeof(struct ttimers), 1);
|
||||
(void)pthread_mutex_init(&ctx->timers->mutex, NULL);
|
||||
@ -130,7 +133,8 @@ static int timers_init(struct mg_context *ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void timers_exit(struct mg_context *ctx)
|
||||
static void
|
||||
timers_exit(struct mg_context *ctx)
|
||||
{
|
||||
if (ctx->timers) {
|
||||
(void)pthread_mutex_destroy(&ctx->timers->mutex);
|
||||
|
16
test/main.c
16
test/main.c
@ -30,13 +30,13 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
/* This unit test file uses the excellent Check unit testing library.
|
||||
* The API documentation is available here:
|
||||
* http://check.sourceforge.net/doc/check_html/index.html
|
||||
*/
|
||||
|
||||
int main(const int argc, char *argv[])
|
||||
int
|
||||
main(const int argc, char *argv[])
|
||||
{
|
||||
// Determine what tests to run
|
||||
const char *suite = NULL;
|
||||
@ -48,14 +48,14 @@ int main(const int argc, char *argv[])
|
||||
const char *const test_dir_arg = "--test-dir=";
|
||||
const size_t test_dir_arg_size = strlen(test_dir_arg);
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
if (0 == strncmp(suite_arg, argv[i], suite_arg_size) &&
|
||||
(strlen(argv[i]) > suite_arg_size)) {
|
||||
if (0 == strncmp(suite_arg, argv[i], suite_arg_size)
|
||||
&& (strlen(argv[i]) > suite_arg_size)) {
|
||||
suite = &argv[i][suite_arg_size];
|
||||
} else if (0 == strncmp(test_case_arg, argv[i], test_case_arg_size) &&
|
||||
(strlen(argv[i]) > test_case_arg_size)) {
|
||||
} else if (0 == strncmp(test_case_arg, argv[i], test_case_arg_size)
|
||||
&& (strlen(argv[i]) > test_case_arg_size)) {
|
||||
test_case = &argv[i][test_case_arg_size];
|
||||
} else if (0 == strncmp(test_dir_arg, argv[i], test_dir_arg_size) &&
|
||||
(strlen(argv[i]) > test_dir_arg_size)) {
|
||||
} else if (0 == strncmp(test_dir_arg, argv[i], test_dir_arg_size)
|
||||
&& (strlen(argv[i]) > test_dir_arg_size)) {
|
||||
set_test_directory(&argv[i][test_dir_arg_size]);
|
||||
} else if (0 == strcmp("--help", argv[i])) {
|
||||
printf(
|
||||
|
@ -91,7 +91,6 @@ START_TEST(test_parse_http_message)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_should_keep_alive)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -139,7 +138,6 @@ START_TEST(test_should_keep_alive)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_match_prefix)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -176,7 +174,6 @@ START_TEST(test_match_prefix)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_remove_double_dots_and_double_slashes)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -205,7 +202,6 @@ START_TEST(test_remove_double_dots_and_double_slashes)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_is_valid_uri)
|
||||
{
|
||||
/* is_valid_uri is superseeded by get_uri_type */
|
||||
@ -223,7 +219,6 @@ START_TEST(test_is_valid_uri)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_next_option)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -236,14 +231,14 @@ START_TEST(test_next_option)
|
||||
ck_assert(next_option(NULL, &a, &b) == NULL);
|
||||
for (i = 0, p = list; (p = next_option(p, &a, &b)) != NULL; i++) {
|
||||
ck_assert(i != 0 || (a.ptr == list && a.len == 3 && b.len == 0));
|
||||
ck_assert(i != 1 || (a.ptr == list + 4 && a.len == 4 &&
|
||||
b.ptr == list + 9 && b.len == 4));
|
||||
ck_assert(i != 1
|
||||
|| (a.ptr == list + 4 && a.len == 4 && b.ptr == list + 9
|
||||
&& b.len == 4));
|
||||
ck_assert(i != 2 || (a.ptr == list + 14 && a.len == 1 && b.len == 0));
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_skip_quoted)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -266,8 +261,8 @@ START_TEST(test_skip_quoted)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
static int alloc_printf(char **buf, size_t size, const char *fmt, ...)
|
||||
static int
|
||||
alloc_printf(char **buf, size_t size, const char *fmt, ...)
|
||||
{
|
||||
/* Test helper function - adapted from unit_test.c */
|
||||
/* Copyright (c) 2013-2015 the Civetweb developers */
|
||||
@ -280,7 +275,6 @@ static int alloc_printf(char **buf, size_t size, const char *fmt, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
START_TEST(test_alloc_vprintf)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -300,7 +294,6 @@ START_TEST(test_alloc_vprintf)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_strcasestr)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
@ -315,14 +308,13 @@ START_TEST(test_mg_strcasestr)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_parse_port_string)
|
||||
{
|
||||
/* Adapted from unit_test.c */
|
||||
/* Copyright (c) 2013-2015 the Civetweb developers */
|
||||
/* Copyright (c) 2004-2013 Sergey Lyubka */
|
||||
static const char *valid[] = {
|
||||
"0",
|
||||
static const char *valid[] =
|
||||
{ "0",
|
||||
"1",
|
||||
"1s",
|
||||
"1r",
|
||||
@ -334,8 +326,7 @@ START_TEST(test_parse_port_string)
|
||||
"[::]:80",
|
||||
"[3ffe:2a00:100:7031::1]:900",
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
NULL };
|
||||
static const char *invalid[] = {
|
||||
"99999", "1k", "1.2.3", "1.2.3.4:", "1.2.3.4:2p", NULL};
|
||||
struct socket so;
|
||||
@ -356,7 +347,6 @@ START_TEST(test_parse_port_string)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_encode_decode)
|
||||
{
|
||||
char buf[128];
|
||||
@ -414,8 +404,10 @@ START_TEST(test_encode_decode)
|
||||
#if defined(USE_LUA)
|
||||
memset(buf, 77, sizeof(buf));
|
||||
len = 9999;
|
||||
ret = base64_decode(
|
||||
(unsigned char *)alpha_b64_enc, (int)strlen(alpha_b64_enc), buf, &len);
|
||||
ret = base64_decode((unsigned char *)alpha_b64_enc,
|
||||
(int)strlen(alpha_b64_enc),
|
||||
buf,
|
||||
&len);
|
||||
ck_assert_int_eq(ret, -1);
|
||||
ck_assert_uint_eq((unsigned int)len, (unsigned int)strlen(alpha));
|
||||
ck_assert_str_eq(buf, alpha);
|
||||
@ -464,8 +456,8 @@ START_TEST(test_encode_decode)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
Suite *make_private_suite(void)
|
||||
Suite *
|
||||
make_private_suite(void)
|
||||
{
|
||||
Suite *const suite = suite_create("Private");
|
||||
|
||||
|
@ -62,8 +62,8 @@ START_TEST(test_helper_funcs)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
Suite *make_private_exe_suite(void)
|
||||
Suite *
|
||||
make_private_exe_suite(void)
|
||||
{
|
||||
Suite *const suite = suite_create("EXE");
|
||||
|
||||
|
@ -28,5 +28,4 @@ Suite *make_private_exe_suite(void);
|
||||
/* This is a redefine for "main" in main.c */
|
||||
int exe_main(int argc, char *argv[]);
|
||||
|
||||
|
||||
#endif /* TEST_PRIVATE_H_ */
|
||||
|
@ -34,7 +34,6 @@
|
||||
* http://check.sourceforge.net/doc/check_html/index.html
|
||||
*/
|
||||
|
||||
|
||||
START_TEST(test_mg_version)
|
||||
{
|
||||
const char *ver = mg_version();
|
||||
@ -89,7 +88,6 @@ START_TEST(test_mg_version)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_get_valid_options)
|
||||
{
|
||||
int i;
|
||||
@ -107,7 +105,6 @@ START_TEST(test_mg_get_valid_options)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_get_builtin_mime_type)
|
||||
{
|
||||
ck_assert_str_eq(mg_get_builtin_mime_type("x.txt"), "text/plain");
|
||||
@ -120,7 +117,6 @@ START_TEST(test_mg_get_builtin_mime_type)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_strncasecmp)
|
||||
{
|
||||
ck_assert(mg_strncasecmp("abc", "abc", 3) == 0);
|
||||
@ -148,7 +144,6 @@ START_TEST(test_mg_strncasecmp)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_get_cookie)
|
||||
{
|
||||
char buf[32];
|
||||
@ -215,7 +210,6 @@ START_TEST(test_mg_get_cookie)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_get_var)
|
||||
{
|
||||
char buf[32];
|
||||
@ -318,7 +312,6 @@ START_TEST(test_mg_get_var)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_md5)
|
||||
{
|
||||
char buf[33];
|
||||
@ -373,7 +366,6 @@ START_TEST(test_mg_md5)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_url_encode)
|
||||
{
|
||||
char buf[20];
|
||||
@ -396,7 +388,6 @@ START_TEST(test_mg_url_encode)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_url_decode)
|
||||
{
|
||||
char buf[20];
|
||||
@ -424,8 +415,8 @@ START_TEST(test_mg_url_decode)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
Suite *make_public_func_suite(void)
|
||||
Suite *
|
||||
make_public_func_suite(void)
|
||||
{
|
||||
Suite *const suite = suite_create("PublicFunc");
|
||||
|
||||
|
@ -46,8 +46,8 @@
|
||||
* http://check.sourceforge.net/doc/check_html/index.html
|
||||
*/
|
||||
|
||||
|
||||
static const char *locate_ssl_cert(void)
|
||||
static const char *
|
||||
locate_ssl_cert(void)
|
||||
{
|
||||
return
|
||||
#ifdef _WIN32
|
||||
@ -70,8 +70,8 @@ static const char *locate_ssl_cert(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static int wait_not_null(void *volatile *data)
|
||||
static int
|
||||
wait_not_null(void *volatile *data)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 100; i++) {
|
||||
@ -83,7 +83,6 @@ static int wait_not_null(void *volatile *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
START_TEST(test_the_test_environment)
|
||||
{
|
||||
char wd[300];
|
||||
@ -96,7 +95,6 @@ START_TEST(test_the_test_environment)
|
||||
memset(wd, 0, sizeof(wd));
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
|
||||
/* Get the current working directory */
|
||||
#ifdef _WIN32
|
||||
(void)GetCurrentDirectoryA(sizeof(wd), wd);
|
||||
@ -143,10 +141,10 @@ START_TEST(test_the_test_environment)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
static void *threading_data;
|
||||
|
||||
static void *test_thread_func_t(void *param)
|
||||
static void *
|
||||
test_thread_func_t(void *param)
|
||||
{
|
||||
ck_assert_ptr_eq(param, &threading_data);
|
||||
ck_assert_ptr_eq(threading_data, NULL);
|
||||
@ -154,7 +152,6 @@ static void *test_thread_func_t(void *param)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
START_TEST(test_threading)
|
||||
{
|
||||
int ok;
|
||||
@ -169,8 +166,8 @@ START_TEST(test_threading)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
static int log_msg_func(const struct mg_connection *conn, const char *message)
|
||||
static int
|
||||
log_msg_func(const struct mg_connection *conn, const char *message)
|
||||
{
|
||||
struct mg_context *ctx;
|
||||
char *ud;
|
||||
@ -185,7 +182,6 @@ static int log_msg_func(const struct mg_connection *conn, const char *message)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
START_TEST(test_mg_start_stop_http_server)
|
||||
{
|
||||
struct mg_context *ctx;
|
||||
@ -228,7 +224,6 @@ START_TEST(test_mg_start_stop_http_server)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
START_TEST(test_mg_start_stop_https_server)
|
||||
{
|
||||
#ifndef NO_SSL
|
||||
@ -260,7 +255,6 @@ START_TEST(test_mg_start_stop_https_server)
|
||||
ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 1] == NULL);
|
||||
ck_assert(OPTIONS[sizeof(OPTIONS) / sizeof(OPTIONS[0]) - 2] == NULL);
|
||||
|
||||
|
||||
memset(ports, 0, sizeof(ports));
|
||||
memset(ssl, 0, sizeof(ssl));
|
||||
memset(&callbacks, 0, sizeof(callbacks));
|
||||
@ -288,10 +282,10 @@ START_TEST(test_mg_start_stop_https_server)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
static struct mg_context *g_ctx;
|
||||
|
||||
static int request_test_handler(struct mg_connection *conn, void *cbdata)
|
||||
static int
|
||||
request_test_handler(struct mg_connection *conn, void *cbdata)
|
||||
{
|
||||
int i;
|
||||
char chunk_data[32];
|
||||
@ -330,7 +324,6 @@ static int request_test_handler(struct mg_connection *conn, void *cbdata)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_WEBSOCKET
|
||||
/****************************************************************************/
|
||||
/* WEBSOCKET SERVER */
|
||||
@ -345,8 +338,8 @@ static const char *websocket_goodbye_msg = "websocket bye\n";
|
||||
static const size_t websocket_goodbye_msg_len =
|
||||
14 /* strlen(websocket_goodbye_msg) */;
|
||||
|
||||
|
||||
static int websock_server_connect(const struct mg_connection *conn, void *udata)
|
||||
static int
|
||||
websock_server_connect(const struct mg_connection *conn, void *udata)
|
||||
{
|
||||
(void)conn;
|
||||
|
||||
@ -356,8 +349,8 @@ static int websock_server_connect(const struct mg_connection *conn, void *udata)
|
||||
return 0; /* return 0 to accept every connection */
|
||||
}
|
||||
|
||||
|
||||
static void websock_server_ready(struct mg_connection *conn, void *udata)
|
||||
static void
|
||||
websock_server_ready(struct mg_connection *conn, void *udata)
|
||||
{
|
||||
ck_assert_ptr_eq((void *)udata, (void *)7531);
|
||||
printf("Server: Websocket ready\n");
|
||||
@ -373,7 +366,8 @@ static void websock_server_ready(struct mg_connection *conn, void *udata)
|
||||
printf("Server: Websocket ready X\n");
|
||||
}
|
||||
|
||||
static int websock_server_data(struct mg_connection *conn,
|
||||
static int
|
||||
websock_server_data(struct mg_connection *conn,
|
||||
int bits,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
@ -405,7 +399,8 @@ static int websock_server_data(struct mg_connection *conn,
|
||||
return 1; /* return 1 to keep the connetion open */
|
||||
}
|
||||
|
||||
static void websock_server_close(const struct mg_connection *conn, void *udata)
|
||||
static void
|
||||
websock_server_close(const struct mg_connection *conn, void *udata)
|
||||
{
|
||||
(void)conn;
|
||||
|
||||
@ -416,7 +411,6 @@ static void websock_server_close(const struct mg_connection *conn, void *udata)
|
||||
* closed */
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
/* WEBSOCKET CLIENT */
|
||||
/****************************************************************************/
|
||||
@ -426,8 +420,8 @@ struct tclient_data {
|
||||
int closed;
|
||||
};
|
||||
|
||||
|
||||
static int websocket_client_data_handler(struct mg_connection *conn,
|
||||
static int
|
||||
websocket_client_data_handler(struct mg_connection *conn,
|
||||
int flags,
|
||||
char *data,
|
||||
size_t data_len,
|
||||
@ -454,8 +448,8 @@ static int websocket_client_data_handler(struct mg_connection *conn,
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static void websocket_client_close_handler(const struct mg_connection *conn,
|
||||
static void
|
||||
websocket_client_close_handler(const struct mg_connection *conn,
|
||||
void *user_data)
|
||||
{
|
||||
struct mg_context *ctx = mg_get_context(conn);
|
||||
@ -471,7 +465,6 @@ static void websocket_client_close_handler(const struct mg_connection *conn,
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
START_TEST(test_request_handlers)
|
||||
{
|
||||
char ebuf[100];
|
||||
@ -526,7 +519,6 @@ START_TEST(test_request_handlers)
|
||||
struct mg_connection *ws_client3_conn = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
memset((void *)OPTIONS, 0, sizeof(OPTIONS));
|
||||
OPTIONS[opt_idx++] = "listening_ports";
|
||||
OPTIONS[opt_idx++] = HTTP_PORT;
|
||||
@ -572,11 +564,12 @@ START_TEST(test_request_handlers)
|
||||
}
|
||||
for (i = 5; i < 9; i++) {
|
||||
sprintf(uri, "/U%u", i);
|
||||
mg_set_request_handler(
|
||||
ctx, uri, request_test_handler, (void *)(ptrdiff_t)i);
|
||||
mg_set_request_handler(ctx,
|
||||
uri,
|
||||
request_test_handler,
|
||||
(void *)(ptrdiff_t)i);
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_WEBSOCKET
|
||||
mg_set_websocket_handler(ctx,
|
||||
"/websocket",
|
||||
@ -587,7 +580,6 @@ START_TEST(test_request_handlers)
|
||||
(void *)7531);
|
||||
#endif
|
||||
|
||||
|
||||
/* Try to load non existing file */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -603,7 +595,6 @@ START_TEST(test_request_handlers)
|
||||
ck_assert_str_eq(ri->uri, "404");
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* Get data from callback */
|
||||
client_conn = mg_download(
|
||||
"localhost", ipv4_port, 0, ebuf, sizeof(ebuf), "%s", request);
|
||||
@ -618,7 +609,6 @@ START_TEST(test_request_handlers)
|
||||
ck_assert_str_eq(buf, expected);
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* Get data from callback using http://127.0.0.1 */
|
||||
client_conn = mg_download(
|
||||
"127.0.0.1", ipv4_port, 0, ebuf, sizeof(ebuf), "%s", request);
|
||||
@ -633,7 +623,6 @@ START_TEST(test_request_handlers)
|
||||
ck_assert_str_eq(buf, expected);
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
#if defined(USE_IPV6)
|
||||
/* Get data from callback using http://[::1] */
|
||||
client_conn =
|
||||
@ -650,7 +639,6 @@ START_TEST(test_request_handlers)
|
||||
mg_close_connection(client_conn);
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(NO_SSL)
|
||||
/* Get data from callback using https://127.0.0.1 */
|
||||
client_conn = mg_download(
|
||||
@ -679,7 +667,6 @@ START_TEST(test_request_handlers)
|
||||
mg_close_connection(client_conn);
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(USE_IPV6) && !defined(NO_SSL)
|
||||
/* Get data from callback using https://[::1] */
|
||||
client_conn =
|
||||
@ -734,7 +721,6 @@ START_TEST(test_request_handlers)
|
||||
fwrite(encoded_file_content, 1, 52, f);
|
||||
fclose(f);
|
||||
|
||||
|
||||
/* Get static data */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -761,7 +747,6 @@ START_TEST(test_request_handlers)
|
||||
#endif
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* Get zipped static data - will not work if Accept-Encoding is not set */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -806,7 +791,6 @@ START_TEST(test_request_handlers)
|
||||
#endif
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* Get directory listing */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -830,7 +814,6 @@ START_TEST(test_request_handlers)
|
||||
#endif
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* POST to static file (will not work) */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -854,7 +837,6 @@ START_TEST(test_request_handlers)
|
||||
#endif
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* PUT to static file (will not work) */
|
||||
client_conn = mg_download("localhost",
|
||||
ipv4_port,
|
||||
@ -874,7 +856,6 @@ START_TEST(test_request_handlers)
|
||||
#endif
|
||||
mg_close_connection(client_conn);
|
||||
|
||||
|
||||
/* Websocket test */
|
||||
#ifdef USE_WEBSOCKET
|
||||
/* Then connect a first client */
|
||||
@ -1097,8 +1078,8 @@ START_TEST(test_request_handlers)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
Suite *make_public_server_suite(void)
|
||||
Suite *
|
||||
make_public_server_suite(void)
|
||||
{
|
||||
Suite *const suite = suite_create("PublicServer");
|
||||
|
||||
@ -1108,7 +1089,6 @@ Suite *make_public_server_suite(void)
|
||||
TCase *const startstophttps = tcase_create("Start Stop HTTPS Server");
|
||||
TCase *const serverrequests = tcase_create("Server Requests");
|
||||
|
||||
|
||||
tcase_add_test(checktestenv, test_the_test_environment);
|
||||
tcase_set_timeout(checktestenv, civetweb_min_test_timeout);
|
||||
suite_add_tcase(suite, checktestenv);
|
||||
@ -1132,14 +1112,14 @@ Suite *make_public_server_suite(void)
|
||||
return suite;
|
||||
}
|
||||
|
||||
|
||||
#ifdef REPLACE_CHECK_FOR_LOCAL_DEBUGGING
|
||||
/* Used to debug test cases without using the check framework */
|
||||
|
||||
static int chk_ok = 0;
|
||||
static int chk_failed = 0;
|
||||
|
||||
void main(void)
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
test_the_test_environment(0);
|
||||
test_threading(0);
|
||||
@ -1150,7 +1130,8 @@ void main(void)
|
||||
printf("\nok: %i\nfailed: %i\n\n", chk_ok, chk_failed);
|
||||
}
|
||||
|
||||
void _ck_assert_failed(const char *file, int line, const char *expr, ...)
|
||||
void
|
||||
_ck_assert_failed(const char *file, int line, const char *expr, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, expr);
|
||||
@ -1161,7 +1142,8 @@ void _ck_assert_failed(const char *file, int line, const char *expr, ...)
|
||||
chk_failed++;
|
||||
}
|
||||
|
||||
void _ck_assert_msg(int cond, const char *file, int line, const char *expr, ...)
|
||||
void
|
||||
_ck_assert_msg(int cond, const char *file, int line, const char *expr, ...)
|
||||
{
|
||||
va_list va;
|
||||
|
||||
@ -1178,12 +1160,14 @@ void _ck_assert_msg(int cond, const char *file, int line, const char *expr, ...)
|
||||
chk_failed++;
|
||||
}
|
||||
|
||||
void _mark_point(const char *file, int line)
|
||||
void
|
||||
_mark_point(const char *file, int line)
|
||||
{
|
||||
chk_ok++;
|
||||
}
|
||||
|
||||
void tcase_fn_start(const char *fname, const char *file, int line)
|
||||
void
|
||||
tcase_fn_start(const char *fname, const char *file, int line)
|
||||
{
|
||||
}
|
||||
void suite_add_tcase(Suite *s, TCase *tc){};
|
||||
@ -1194,11 +1178,13 @@ void _tcase_add_test(TCase *tc,
|
||||
int allowed_exit_value,
|
||||
int start,
|
||||
int end){};
|
||||
TCase *tcase_create(const char *name)
|
||||
TCase *
|
||||
tcase_create(const char *name)
|
||||
{
|
||||
return NULL;
|
||||
};
|
||||
Suite *suite_create(const char *name)
|
||||
Suite *
|
||||
suite_create(const char *name)
|
||||
{
|
||||
return NULL;
|
||||
};
|
||||
|
@ -19,7 +19,6 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(_CRT_SECURE_NO_WARNINGS)
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#endif
|
||||
@ -27,18 +26,19 @@
|
||||
#define _CRT_SECURE_NO_DEPRECATE
|
||||
#endif
|
||||
|
||||
|
||||
#include "shared.h"
|
||||
#include <string.h>
|
||||
|
||||
static char s_test_directory[1024] = {'\0'};
|
||||
|
||||
const char *get_test_directory(void)
|
||||
const char *
|
||||
get_test_directory(void)
|
||||
{
|
||||
return s_test_directory;
|
||||
}
|
||||
|
||||
void set_test_directory(const char *const path)
|
||||
void
|
||||
set_test_directory(const char *const path)
|
||||
{
|
||||
strncpy(s_test_directory,
|
||||
path,
|
||||
|
@ -21,9 +21,7 @@
|
||||
#ifndef TEST_SHARED_H_
|
||||
#define TEST_SHARED_H_
|
||||
|
||||
|
||||
const char *get_test_directory(void);
|
||||
void set_test_directory(const char *const path);
|
||||
|
||||
|
||||
#endif /* TEST_SHARED_H_ */
|
||||
|
Reference in New Issue
Block a user