一 ngtcp2编译:github有步骤
openssl-OpenSSL_1_1_1m-quic、nghttp3、ngtcp2。
编译example,需要libev库--用了里面的函数。
二 Client
步骤:
1 auto callbacks = ngtcp2_callbacks{
ngtcp2_recv_crypto_data recv_crypto_data; //必须的,回调给ngtcp2库自己处理
ngtcp2_handshake_completed handshake_completed; //握手完成
ngtcp2_encrypt encrypt;
ngtcp2_decrypt decrypt; //quic数据包的加密解密,必须的
ngtcp2_hp_mask hp_mask; //用于获取解密、解密包头的掩码,必须的
ngtcp2_recv_stream_data recv_stream_data; //获取Stream包的数据,解密后的,重要回调函数
ngtcp2_acked_stream_data_offset acked_stream_data_offset; //应用程序可以为数据释放内存
ngtcp2_stream_open stream_open;
... };
ngtcp2_settings_default(&settings);
ngtcp2_transport_params_default(¶ms);
2 ngtcp2_conn_client_new(&conn_, &dcid, &scid, &path, version, &callbacks,
&settings, ¶ms, nullptr, this);
3 if (tls_session_.init(early_data_, tls_ctx, addr_, this, version,
AppProtocol::H3) != 0) {
ngtcp2_conn_set_tls_native_handle(conn_, tls_session_.get_native_handle());
定义的包类型:PKT_VERSION_NEGOTIATION、PKT_INITIAL、PKT_0RTT、PKT_HANDSHAKE、PKT_SHORT。
回调函数:ngtcp2_handshake_completed:Negotiated ALPN is h3。
ngtcp2_recv_crypto_data、
ngtcp2_recv_stream_data:在这处理接收的音视频数据,需要解密的。
写数据:ngtcp2_conn_writev_stream。
如果用http,调用setup_httpconn()。
待修改...