ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
websocket.c
Go to the documentation of this file.
1
7
10#include <libwebsockets.h>
11#include <string.h>
12
16static void websocket_server_lws_log_callback(int level, const char *line) {
17 if (!line) {
18 return;
19 }
20
21 // Strip leading timestamp (format: "[timestamp] message")
22 const char *msg = line;
23 if (line[0] == '[') {
24 // Find the closing bracket
25 const char *bracket = strchr(line, ']');
26 if (bracket && bracket[1] == ' ') {
27 msg = bracket + 2; // Skip "] "
28 }
29 }
30
31 // Strip trailing newlines
32 size_t len = strlen(msg);
33 while (len > 0 && (msg[len - 1] == '\n' || msg[len - 1] == '\r')) {
34 len--;
35 }
36
37 if (level & LLL_ERR) {
38 log_error("[LWS:server] %.*s", (int)len, msg);
39 } else if (level & LLL_WARN) {
40 log_warn("[LWS:server] %.*s", (int)len, msg);
41 } else if (level & LLL_NOTICE) {
42 log_info("[LWS:server] %.*s", (int)len, msg);
43 } else if (level & LLL_INFO) {
44 log_dev("[LWS:server] %.*s", (int)len, msg);
45 } else if (level & LLL_DEBUG) {
46 log_debug("[LWS:server] %.*s", (int)len, msg);
47 }
48}
49
53static void websocket_client_lws_log_callback(int level, const char *line) {
54 if (!line) {
55 return;
56 }
57
58 // Strip leading timestamp (format: "[timestamp] message")
59 const char *msg = line;
60 if (line[0] == '[') {
61 // Find the closing bracket
62 const char *bracket = strchr(line, ']');
63 if (bracket && bracket[1] == ' ') {
64 msg = bracket + 2; // Skip "] "
65 }
66 }
67
68 // Strip trailing newlines
69 size_t len = strlen(msg);
70 while (len > 0 && (msg[len - 1] == '\n' || msg[len - 1] == '\r')) {
71 len--;
72 }
73
74 if (level & LLL_ERR) {
75 log_error("[LWS:client] %.*s", (int)len, msg);
76 } else if (level & LLL_WARN) {
77 log_warn("[LWS:client] %.*s", (int)len, msg);
78 } else if (level & LLL_NOTICE) {
79 log_info("[LWS:client] %.*s", (int)len, msg);
80 } else if (level & LLL_INFO) {
81 log_dev("[LWS:client] %.*s", (int)len, msg);
82 } else if (level & LLL_DEBUG) {
83 log_debug("[LWS:client] %.*s", (int)len, msg);
84 }
85}
86
88 // Enable libwebsockets logging with our custom callback
89 // Keep libwebsockets protocol chatter out of normal logs. NOTICE still
90 // reports lifecycle events; detailed traces remain available in dev builds.
91#ifdef CMAKE_BUILD_TYPE_DEBUG
92 int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_DEBUG;
93#else
94 int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE;
95#endif
96 lws_set_log_level(log_level, websocket_server_lws_log_callback);
97}
98
100 // Enable libwebsockets logging with our custom callback
101 // Keep libwebsockets protocol chatter out of normal logs. NOTICE still
102 // reports lifecycle events; detailed traces remain available in dev builds.
103#ifdef CMAKE_BUILD_TYPE_DEBUG
104 int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_DEBUG;
105#else
106 int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE;
107#endif
108 lws_set_log_level(log_level, websocket_client_lws_log_callback);
109}
#define log_warn(...)
Log a WARN message.
Definition log/log.h:621
#define log_dev(...)
Log a DEV message (most verbose, development only).
Definition log/log.h:581
#define log_error(...)
Log an ERROR message.
Definition log/log.h:634
#define log_info(...)
Log an INFO message.
Definition log/log.h:608
#define log_debug(...)
Log a DEBUG message.
Definition log/log.h:595
📝 Logging API with multiple log levels and terminal output control
🔤 String Manipulation and Shell Escaping Utilities
void lws_log_init_server(void)
Initialize libwebsockets logging for server mode.
Definition websocket.c:87
void lws_log_init_client(void)
Initialize libwebsockets logging for client mode.
Definition websocket.c:99
Libwebsockets logging integration.