ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
http.c File Reference

Go to the source code of this file.

Macros

#define MCP_SERVER_HTTP_ORIGIN_BUFFER_SIZE   2048
#define MCP_SERVER_HTTP_TYPE_BUFFER_SIZE   128
#define MCP_SERVER_HTTP_ACCEPT_BUFFER_SIZE   512
#define MCP_SERVER_HTTP_VERSION_BUFFER_SIZE   64

Functions

void mcp_http_wake (mcp_server_t *s)
asciichat_error_t mcp_http_run (mcp_server_t *s)

Macro Definition Documentation

◆ MCP_SERVER_HTTP_ACCEPT_BUFFER_SIZE

#define MCP_SERVER_HTTP_ACCEPT_BUFFER_SIZE   512

Definition at line 5 of file http.c.

◆ MCP_SERVER_HTTP_ORIGIN_BUFFER_SIZE

#define MCP_SERVER_HTTP_ORIGIN_BUFFER_SIZE   2048

Definition at line 3 of file http.c.

◆ MCP_SERVER_HTTP_TYPE_BUFFER_SIZE

#define MCP_SERVER_HTTP_TYPE_BUFFER_SIZE   128

Definition at line 4 of file http.c.

◆ MCP_SERVER_HTTP_VERSION_BUFFER_SIZE

#define MCP_SERVER_HTTP_VERSION_BUFFER_SIZE   64

Definition at line 6 of file http.c.

Function Documentation

◆ mcp_http_run()

asciichat_error_t mcp_http_run ( mcp_server_t * s)

Definition at line 233 of file http.c.

233 {
234 http_server_config_t config = {.bind_address = s->policy.address,
235 .bind_address6 = s->policy.address6,
236 .port = (uint16_t)s->policy.port,
237 .enable_http1 = true,
238 .enable_http2 = true,
239 .tls_cert_path = s->policy.tls_cert,
240 .tls_key_path = s->policy.tls_key,
241 .tls_key_password = s->policy.tls_password,
242 .max_connections = s->policy.max_jobs * 4U,
243 .max_request_body_bytes = MCP_MAX_INPUT,
244 .max_response_body_bytes = MCP_MAX_DOWNLOAD,
245 .on_request = shared_http_request,
246 .on_wakeup = shared_http_wakeup,
247 .user_data = s};
248 if (!config.max_connections)
249 config.max_connections = 1;
250 asciichat_error_t result = http_server_init(&s->shared_http, &config);
251 if (result != ASCIICHAT_OK)
252 return result;
253 result = http_server_start(s->shared_http);
254 if (result != ASCIICHAT_OK) {
256 return result;
257 }
258 nat_upnp_context_t *mapping = NULL;
259 if (GET_OPTION(enable_upnp)) {
260 asciichat_error_t err = nat_upnp_open((uint16_t)s->policy.port, "ascii-chat MCP", &mapping);
261 if (err != ASCIICHAT_OK)
262 LOG_ERRNO_IF_SET("MCP port forwarding unavailable");
263 }
264 while (!atomic_load_bool(&s->stopping) && !APP_CALLBACK_BOOL(should_exit)) {
265 uv_sleep(16);
266 mcp_jobs_reap(s, false);
267 if (mapping && time_get_ns() >= mapping->refresh_at_ns) {
268 asciichat_error_t err = nat_upnp_refresh(mapping);
269 if (err != ASCIICHAT_OK)
270 LOG_ERRNO_IF_SET("MCP mapping renewal failed");
271 }
272 }
273 for (unsigned i = 0; i < s->policy.max_jobs; ++i)
274 if (s->jobs[i].renderer_job.started)
278 nat_upnp_close(&mapping);
279 mcp_jobs_reap(s, true);
280 return ASCIICHAT_OK;
281}
#define APP_CALLBACK_BOOL(callback_name)
#define LOG_ERRNO_IF_SET(message)
unsigned short uint16_t
Definition common.h:61
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
@ ASCIICHAT_OK
Definition error_codes.h:46
#define GET_OPTION(field)
Safely get a specific option field (lock-free read).
Definition options.h:1336
void http_renderer_job_cancel(http_renderer_job_t *job)
asciichat_error_t http_server_init(http_server_t **out, const http_server_config_t *cfg)
void http_server_stop(http_server_t *s)
void http_server_destroy(http_server_t **p)
asciichat_error_t http_server_start(http_server_t *s)
bool should_exit(void)
Definition main.c:249
#define MCP_MAX_INPUT
Definition mcp.h:29
#define MCP_MAX_DOWNLOAD
Definition mcp.h:31
void mcp_jobs_reap(mcp_server_t *server, bool all)
http_renderer_job_t renderer_job
Definition mcp.h:67
const char * tls_key
Definition mcp.h:40
const char * tls_password
Definition mcp.h:40
const char * address
Definition mcp.h:38
unsigned max_jobs
Definition mcp.h:41
const char * tls_cert
Definition mcp.h:40
const char * address6
Definition mcp.h:39
int port
Definition mcp.h:43
http_server_t * shared_http
Definition mcp.h:84
atomic_t stopping
Definition mcp.h:85
mcp_job_t * jobs
Definition mcp.h:82
mcp_policy_t policy
Definition mcp.h:81
uint64_t refresh_at_ns
Next renewal or retry deadline.
Definition upnp.h:44
asciichat_error_t nat_upnp_refresh(nat_upnp_context_t *ctx)
Refresh port mapping (e.g., for long-running servers).
Definition upnp.c:316
void nat_upnp_close(nat_upnp_context_t **ctx)
Close port mapping and clean up.
Definition upnp.c:251
asciichat_error_t nat_upnp_open(uint16_t internal_port, const char *description, nat_upnp_context_t **ctx)
Discover and open port via UPnP.
Definition upnp.c:203
struct nat_upnp_context nat_upnp_context_t
Handle to UPnP context.

References mcp_policy_t::address, mcp_policy_t::address6, APP_CALLBACK_BOOL, ASCIICHAT_OK, GET_OPTION, http_renderer_job_cancel(), http_server_destroy(), http_server_init(), http_server_start(), http_server_stop(), mcp_server::jobs, LOG_ERRNO_IF_SET, http_server_config_t::max_connections, mcp_policy_t::max_jobs, mcp_jobs_reap(), MCP_MAX_DOWNLOAD, MCP_MAX_INPUT, nat_upnp_close(), nat_upnp_open(), nat_upnp_refresh(), mcp_server::policy, mcp_policy_t::port, nat_upnp_context::refresh_at_ns, mcp_job::renderer_job, mcp_server::shared_http, should_exit(), http_renderer_job::started, mcp_server::stopping, mcp_policy_t::tls_cert, mcp_policy_t::tls_key, and mcp_policy_t::tls_password.

Referenced by mcp_server_main().

◆ mcp_http_wake()

void mcp_http_wake ( mcp_server_t * s)

Definition at line 30 of file http.c.

30 {
31 if (s && s->shared_http)
33}
asciichat_error_t http_server_wakeup(http_server_t *s)

References http_server_wakeup(), and mcp_server::shared_http.