@@ -162,7 +162,9 @@ typedef void (*xqc_server_refuse_pt)(xqc_engine_t *engine, xqc_connection_t *con
162162 * xqc_engine_packet_process
163163 */
164164typedef ssize_t (* xqc_stateless_reset_pt )(const unsigned char * buf , size_t size ,
165- const struct sockaddr * peer_addr , socklen_t peer_addrlen , void * user_data );
165+ const struct sockaddr * peer_addr , socklen_t peer_addrlen ,
166+ const struct sockaddr * local_addr , socklen_t local_addrlen ,
167+ void * user_data );
166168
167169/**
168170 * @brief connection closing notify callback function. will be triggered when a
@@ -326,6 +328,22 @@ typedef ssize_t (*xqc_send_mmsg_pt)(const struct iovec *msg_iov, unsigned int vl
326328 const struct sockaddr * peer_addr , socklen_t peer_addrlen , void * conn_user_data );
327329
328330
331+ /**
332+ * @brief set data callback mode for a transport connection. this mode differs
333+ * from write_socket, which has a different user_data, once this callback
334+ * function is set, write_socket will be not functional until it is unset.
335+ *
336+ * @param buf packet buffer
337+ * @param size packet size
338+ * @param peer_addr peer address
339+ * @param peer_addrlen peer address length
340+ * @param cb_user_data user_data of xqc_conn_pkt_filter_callback_pt
341+ */
342+ typedef ssize_t (* xqc_conn_pkt_filter_callback_pt )(const unsigned char * buf ,
343+ size_t size , const struct sockaddr * peer_addr , socklen_t peer_addrlen ,
344+ void * cb_user_data );
345+
346+
329347/**
330348 * @brief multi-path ready callback function
331349 *
@@ -826,6 +844,7 @@ typedef struct xqc_conn_settings_s {
826844 int32_t spurious_loss_detect_on ;
827845 uint32_t anti_amplification_limit ; /* limit of anti-amplification, default 3 */
828846 uint64_t keyupdate_pkt_threshold ; /* packet limit of a single 1-rtt key, 0 for unlimited */
847+ size_t max_pkt_out_size ;
829848} xqc_conn_settings_t ;
830849
831850
@@ -976,6 +995,9 @@ void xqc_engine_finish_recv(xqc_engine_t *engine);
976995XQC_EXPORT_PUBLIC_API
977996void xqc_engine_recv_batch (xqc_engine_t * engine , xqc_connection_t * conn );
978997
998+ XQC_EXPORT_PUBLIC_API
999+ xqc_connection_t * xqc_engine_get_conn_by_scid (xqc_engine_t * engine ,
1000+ const xqc_cid_t * cid );
9791001
9801002/*************************************************************
9811003 * QUIC layer APIs
@@ -1013,6 +1035,12 @@ const xqc_cid_t *xqc_connect(xqc_engine_t *engine,
10131035XQC_EXPORT_PUBLIC_API
10141036xqc_int_t xqc_conn_close (xqc_engine_t * engine , const xqc_cid_t * cid );
10151037
1038+ /**
1039+ * @brief close connection with error code
1040+ */
1041+ XQC_EXPORT_PUBLIC_API
1042+ xqc_int_t xqc_conn_close_with_error (xqc_connection_t * conn , uint64_t err_code );
1043+
10161044/**
10171045 * Get errno when conn_close_notify, 0 For no-error
10181046 */
@@ -1065,13 +1093,35 @@ xqc_int_t xqc_conn_send_ping(xqc_engine_t *engine, const xqc_cid_t *cid, void *p
10651093XQC_EXPORT_PUBLIC_API
10661094xqc_bool_t xqc_conn_is_ready_to_send_early_data (xqc_connection_t * conn );
10671095
1096+ /**
1097+ * @brief set the packet filter callback function, and replace write_socket.
1098+ * NOTICE: this function is not conflict with send_mmsg.
1099+ */
1100+ XQC_EXPORT_PUBLIC_API
1101+ void xqc_conn_set_pkt_filter_callback (xqc_connection_t * conn ,
1102+ xqc_conn_pkt_filter_callback_pt pf_cb , void * pf_cb_user_data );
1103+
1104+ /**
1105+ * @brief unset the packet filter callback function, and restore write_socket
1106+ */
1107+ XQC_EXPORT_PUBLIC_API
1108+ void xqc_conn_unset_pkt_filter_callback (xqc_connection_t * conn );
1109+
1110+
10681111/**
10691112 * Create new stream in quic connection.
10701113 * @param user_data user_data for this stream
10711114 */
10721115XQC_EXPORT_PUBLIC_API
10731116xqc_stream_t * xqc_stream_create (xqc_engine_t * engine , const xqc_cid_t * cid , void * user_data );
10741117
1118+ XQC_EXPORT_PUBLIC_API
1119+ xqc_stream_t * xqc_stream_create_with_direction (xqc_connection_t * conn ,
1120+ xqc_stream_direction_t dir , void * user_data );
1121+
1122+ XQC_EXPORT_PUBLIC_API
1123+ xqc_stream_direction_t xqc_stream_get_direction (xqc_stream_t * strm );
1124+
10751125/**
10761126 * Server should set user_data when stream_create_notify callbacks
10771127 */
@@ -1084,6 +1134,13 @@ void xqc_stream_set_user_data(xqc_stream_t *stream, void *user_data);
10841134XQC_EXPORT_PUBLIC_API
10851135void * xqc_get_conn_user_data_by_stream (xqc_stream_t * stream );
10861136
1137+ /**
1138+ * Get connection's app_proto_user_data by stream
1139+ */
1140+ XQC_EXPORT_PUBLIC_API
1141+ void * xqc_get_conn_alp_user_data_by_stream (xqc_stream_t * stream );
1142+
1143+
10871144/**
10881145 * Get stream ID
10891146 */
@@ -1163,6 +1220,9 @@ xqc_int_t xqc_conn_continue_send(xqc_engine_t *engine, const xqc_cid_t *cid);
11631220XQC_EXPORT_PUBLIC_API
11641221xqc_conn_stats_t xqc_conn_get_stats (xqc_engine_t * engine , const xqc_cid_t * cid );
11651222
1223+ XQC_EXPORT_PUBLIC_API
1224+ xqc_conn_type_t xqc_conn_get_type (xqc_connection_t * conn );
1225+
11661226/**
11671227 * @brief load balance cid encryption.
11681228 * According to Draft : https://datatracker.ietf.org/doc/html/draft-ietf-quic-load-balancers-13#section-4.3.2
0 commit comments