#ifdef LIBUS_USE_QUIC
#define _GNU_SOURCE
#include <unistd.h>
#include <stdlib.h>
#include <libusockets.h>
#include "quic.h"
us_quic_socket_context_t *context;
#include <stdio.h>
void on_wakeup(struct us_loop_t *loop) {}
void on_pre(struct us_loop_t *loop) {}
void on_post(struct us_loop_t *loop) {}
void print_current_headers() {
for (int i = 0, more = 1; more; i++) {
char *name, *value;
int name_length, value_length;
if (more = us_quic_socket_context_get_header(context, i, &name, &name_length, &value, &value_length)) {
printf("header %.*s = %.*s\n", name_length, name, value_length, value);
}
}
}
void on_stream_headers(us_quic_stream_t *s) {
us_quic_socket_context_set_header(context, 0, ":status", 7, "200", 3);
us_quic_socket_context_send_headers(context, s, 1, 1);
us_quic_stream_write(s, "Hello quic!", 11);
us_quic_stream_shutdown(s);
}
void on_stream_data(us_quic_stream_t *s, char *data, int length) {
printf("Body length is: %d\n", length);
}
void on_stream_writable(us_quic_stream_t *s) {
}
void on_stream_close(us_quic_stream_t *s) {
}
void on_open(us_quic_socket_t *s, int is_client) {
printf("Connection established!\n");
}
void on_stream_open(us_quic_stream_t *s, int is_client) {
}
void on_close(us_quic_socket_t *s) {
printf("Disconnected!\n");
}
int main() {
struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0);
us_quic_socket_context_options_t options = {
.cert_file_name = "",
.key_file_name = ""
};
context = us_create_quic_socket_context(loop, options);
us_quic_socket_context_on_stream_data(context, on_stream_data);
us_quic_socket_context_on_stream_open(context, on_stream_open);
us_quic_socket_context_on_stream_close(context, on_stream_close);
us_quic_socket_context_on_stream_writable(context, on_stream_writable);
us_quic_socket_context_on_stream_headers(context, on_stream_headers);
us_quic_socket_context_on_open(context, on_open);
us_quic_socket_context_on_close(context, on_close);
us_quic_listen_socket_t *listen_socket = us_quic_socket_context_listen(context, "::1", 9004);
us_loop_run(loop);
printf("Falling through!\n");
}
#else
#include <stdio.h>
int main() {
printf("Compile with WITH_QUIC=1 make examples in order to build this example\n");
}
#endif