API Modules

HTTP Client

Core HTTP client functionality

QUIC & HTTP/3

QUIC protocol and HTTP/3

Advanced QUIC

Migration and 0-RTT

WebSocket

WebSocket protocol

Circuit Breaker

Resilience patterns

Middleware

Request/response pipeline

Response Cache

HTTP caching layer

Metrics

Observability system

HTTP Client API

High-level HTTP client with automatic protocol negotiation

jvr_client_t* jvr_client_create(void)

Creates a new HTTP client with default configuration.

Returns

Pointer to new client, or NULL on failure

Example

jvr_client_t* client = jvr_client_create();
// Use client...
jvr_client_destroy(client);
jvr_client_t* jvr_client_create_with_config(const jvr_client_config_t* config)

Creates a new HTTP client with custom configuration.

Parameters

NameTypeDescription
configconst jvr_client_config_t*Client configuration

Returns

Pointer to new client, or NULL on failure

void jvr_client_destroy(jvr_client_t* client)

Destroys a client and frees all resources.

Parameters

NameTypeDescription
clientjvr_client_t*Client to destroy
jvr_request_t* jvr_request_create(const char* method, const char* url)

Creates a new HTTP request.

Parameters

NameTypeDescription
methodconst char*HTTP method (GET, POST, etc.)
urlconst char*Target URL

Returns

Pointer to new request, or NULL on failure

jvr_error_t jvr_request_set_header(jvr_request_t* request, const char* name, const char* value)

Sets a custom HTTP header on the request.

Parameters

NameTypeDescription
requestjvr_request_t*Request object
nameconst char*Header name
valueconst char*Header value

Returns

JVR_OK on success, error code otherwise

jvr_error_t jvr_request_set_body(jvr_request_t* request, const void* data, size_t size)

Sets the request body data.

Parameters

NameTypeDescription
requestjvr_request_t*Request object
dataconst void*Body data
sizesize_tData size in bytes
jvr_response_t* jvr_client_send(jvr_client_t* client, jvr_request_t* request)

Sends an HTTP request and waits for response.

Parameters

NameTypeDescription
clientjvr_client_t*HTTP client
requestjvr_request_t*Request to send

Returns

Pointer to response object, or NULL on failure

QUIC & HTTP/3 API

jvr_quic_connection_t* jvr_quic_connection_create(const jvr_quic_config_t* config)

Creates a new QUIC connection.

jvr_error_t jvr_quic_connect(jvr_quic_connection_t* conn)

Establishes QUIC connection to server.

jvr_quic_stream_t* jvr_quic_stream_create(jvr_quic_connection_t* conn, bool bidirectional)

Creates a new QUIC stream.

jvr_error_t jvr_quic_stream_send(jvr_quic_stream_t* stream, const void* data, size_t size, bool fin)

Sends data on a QUIC stream.

Advanced QUIC API

🚀 Features available ONLY in JVR NetStack!

jvr_error_t jvr_quic_enable_migration(jvr_quic_connection_t* conn)

Enables connection migration on a QUIC connection.

Note: This allows seamless network switching (WiFi ↔ cellular).

jvr_error_t jvr_quic_migrate_connection(jvr_quic_connection_t* conn, const char* new_address, uint16_t new_port)

Migrates connection to a new network path.

Parameters

NameTypeDescription
connjvr_quic_connection_t*QUIC connection
new_addressconst char*New IP address
new_portuint16_tNew port
jvr_error_t jvr_quic_enable_0rtt(jvr_quic_connection_t* conn)

Enables 0-RTT for fast reconnections.

jvr_error_t jvr_quic_send_early_data(jvr_quic_connection_t* conn, const void* data, size_t size)

Sends data before handshake completes (0-RTT).

jvr_error_t jvr_quic_save_session(jvr_quic_connection_t* conn, uint8_t** out_ticket, size_t* out_ticket_len)

Saves session ticket for future 0-RTT resumption.

jvr_error_t jvr_quic_restore_session(jvr_quic_connection_t* conn, const uint8_t* ticket, size_t ticket_len)

Restores saved session for 0-RTT.

Metrics & Observability API

📊 Built-in observability - ONLY in JVR NetStack!

jvr_metrics_registry_t* jvr_metrics_get_global(void)

Gets the global metrics registry singleton.

jvr_request_tracker_t* jvr_metrics_track_request(jvr_metrics_registry_t* registry, const char* method, const char* path)

Starts tracking an HTTP request (auto-records latency).

void jvr_metrics_complete_request(jvr_request_tracker_t* tracker, int status_code)

Completes request tracking and records metrics.

jvr_error_t jvr_metrics_export_prometheus(jvr_metrics_registry_t* registry, char** out_text, size_t* out_size)

Exports metrics in Prometheus text format.

void jvr_metrics_print(jvr_metrics_registry_t* registry)

Prints all metrics to stdout.

Key Data Structures

jvr_client_config_t

Client configuration structure

typedef struct {
    bool prefer_http3;           // Prefer HTTP/3 if available
    bool prefer_http2;           // Fallback to HTTP/2
    uint32_t connection_timeout_ms;
    uint32_t max_concurrent_streams;
    bool enable_compression;
    bool follow_redirects;
    uint32_t max_redirects;
} jvr_client_config_t;

jvr_response_t

HTTP response structure

typedef struct {
    int status_code;             // HTTP status code
    char* body;                  // Response body
    size_t body_size;            // Body size in bytes
    jvr_headers_t* headers;      // Response headers
} jvr_response_t;

Error Codes

Constant Value Description
JVR_OK 0 Success
JVR_ERROR_INVALID_ARG -1 Invalid argument
JVR_ERROR_NOMEM -2 Out of memory
JVR_ERROR_TIMEOUT -3 Operation timed out
JVR_ERROR_CONNECTION -4 Connection failed
JVR_ERROR_TLS -5 TLS/SSL error