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); mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, text, strlen(text)); fprintf(stdout, "Greeting message sent to websocket client\r\n\r\n"); ASSERT(client->conn == conn); ASSERT(client->state == 1); client->state = 2; }
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); ASSERT(client->conn == conn); ASSERT(client->state >= 1); mg_lock_context(ctx); client->state = 0; client->conn = NULL; mg_unlock_context(ctx); fprintf(stdout, "Client droped from the set of webserver connections\r\n\r\n"); }
int WebsocketDataHandler(struct mg_connection *conn, int bits, char *data, size_t len, void *cbdata) { struct t_ws_client *client = mg_get_user_connection_data(conn); ASSERT(client->conn == conn); ASSERT(client->state >= 1); fprintf(stdout, "Websocket got data:\r\n"); fwrite(data, len, 1, stdout); fprintf(stdout, "\r\n\r\n"); return 1; }
int WebsocketDataHandler(struct mg_connection *conn, int bits, char *data, size_t len, void *cbdata) { struct t_ws_client *client = mg_get_user_connection_data(conn); ASSERT(client->conn == conn); ASSERT(client->state >= 1); fprintf(stdout, "Websocket got %lu bytes of ", (unsigned long)len); switch (((unsigned char)bits) & 0x0F) { case WEBSOCKET_OPCODE_CONTINUATION: fprintf(stdout, "continuation"); break; case WEBSOCKET_OPCODE_TEXT: fprintf(stdout, "text"); break; case WEBSOCKET_OPCODE_BINARY: fprintf(stdout, "binary"); break; case WEBSOCKET_OPCODE_CONNECTION_CLOSE: fprintf(stdout, "close"); break; case WEBSOCKET_OPCODE_PING: fprintf(stdout, "ping"); break; case WEBSOCKET_OPCODE_PONG: fprintf(stdout, "pong"); break; default: fprintf(stdout, "unknown(%1xh)", ((unsigned char)bits) & 0x0F); break; } fprintf(stdout, " data:\r\n"); fwrite(data, len, 1, stdout); fprintf(stdout, "\r\n\r\n"); return 1; }
static int request_test_handler(struct mg_connection *conn, void *cbdata) { int i; char chunk_data[32]; const struct mg_request_info *ri; struct mg_context *ctx; void *ud, *cud; ctx = mg_get_context(conn); ud = mg_get_user_data(ctx); ri = mg_get_request_info(conn); ck_assert(ri != NULL); ck_assert(ctx == g_ctx); ck_assert(ud == &g_ctx); mg_set_user_connection_data(conn, (void *)6543); cud = mg_get_user_connection_data(conn); ck_assert_ptr_eq((void *)cud, (void *)6543); ck_assert_ptr_eq((void *)cbdata, (void *)7); strcpy(chunk_data, "123456789A123456789B123456789C"); mg_printf(conn, "HTTP/1.1 200 OK\r\n" "Transfer-Encoding: chunked\r\n" "Content-Type: text/plain\r\n\r\n"); for (i = 1; i <= 10; i++) { mg_printf(conn, "%x\r\n", i); mg_write(conn, chunk_data, (unsigned)i); mg_printf(conn, "\r\n"); } mg_printf(conn, "0\r\n\r\n"); return 1; }