#include <vnet/session/application_interface.h>
#include <vnet/session/session.h>
+#define ECHO_SERVER_DBG (0)
+#define DBG(_fmt, _args...) \
+ if (ECHO_SERVER_DBG) \
+ clib_warning (_fmt, ##_args)
+
typedef struct
{
/*
u8 **rx_buf; /**< Per-thread RX buffer */
u64 byte_index;
u32 **rx_retries;
+ u8 transport_proto;
vlib_main_t *vlib_main;
} echo_server_main_t;
echo_server_main_t echo_server_main;
int
-echo_server_session_accept_callback (session_t * s)
+quic_echo_server_qsession_accept_callback (session_t * s)
+{
+ DBG ("QSession %u accept w/opaque %d", s->session_index, s->opaque);
+ return 0;
+}
+
+int
+quic_echo_server_session_accept_callback (session_t * s)
{
echo_server_main_t *esm = &echo_server_main;
+ if (!(s->flags & SESSION_F_QUIC_STREAM))
+ return quic_echo_server_qsession_accept_callback (s);
+ DBG ("SSESSION %u accept w/opaque %d", s->session_index, s->opaque);
+
+ esm->vpp_queue[s->thread_index] =
+ session_main_get_vpp_event_queue (s->thread_index);
+ s->session_state = SESSION_STATE_READY;
+ esm->byte_index = 0;
+ ASSERT (vec_len (esm->rx_retries) > s->thread_index);
+ vec_validate (esm->rx_retries[s->thread_index], s->session_index);
+ esm->rx_retries[s->thread_index][s->session_index] = 0;
+ return 0;
+}
+int
+echo_server_session_accept_callback (session_t * s)
+{
+ echo_server_main_t *esm = &echo_server_main;
esm->vpp_queue[s->thread_index] =
session_main_get_vpp_event_queue (s->thread_index);
s->session_state = SESSION_STATE_READY;
else
echo_server_session_cb_vft.builtin_app_rx_callback =
echo_server_rx_callback;
+ if (esm->transport_proto == TRANSPORT_PROTO_QUIC)
+ echo_server_session_cb_vft.session_accept_callback =
+ quic_echo_server_session_accept_callback;
if (esm->private_segment_size)
segment_size = esm->private_segment_size;
u64 tmp, appns_flags = 0, appns_secret = 0;
char *default_uri = "tcp://0.0.0.0/1234";
int rv, is_stop = 0;
+ session_endpoint_cfg_t sep = SESSION_ENDPOINT_CFG_NULL;
esm->no_echo = 0;
esm->fifo_size = 64 << 10;
esm->private_segment_count = 0;
esm->private_segment_size = 0;
esm->tls_engine = TLS_ENGINE_OPENSSL;
- esm->is_dgram = 0;
vec_free (esm->server_uri);
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
clib_warning ("No uri provided! Using default: %s", default_uri);
esm->server_uri = (char *) format (0, "%s%c", default_uri, 0);
}
- if (esm->server_uri[0] == 'u' && esm->server_uri[3] != 'c')
- esm->is_dgram = 1;
+
+ if ((rv = parse_uri ((char *) esm->server_uri, &sep)))
+ return clib_error_return (0, "Uri parse error: %d", rv);
+ esm->transport_proto = sep.transport_proto;
+ esm->is_dgram = (sep.transport_proto == TRANSPORT_PROTO_UDP);
rv = echo_server_create (vm, appns_id, appns_flags, appns_secret);
vec_free (appns_id);