From 10e2894eef56b5bcd4840f624cc954e6ab2ef3bf Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Fri, 15 Nov 2019 21:45:05 -0500 Subject: [PATCH] Minor cleanup --- README.md | 14 +------------- src/lsquic.cr | 23 +++++------------------ src/lsquic/liblsquic.cr | 2 +- src/lsquic/patch.cr | 8 +------- 4 files changed, 8 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 5128364..cbe2446 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lsquic -TODO: Write a description here +Crystal bindings to the excellent [LSQUIC](https://github.com/litespeedtech/lsquic) library. ## Installation @@ -14,18 +14,6 @@ TODO: Write a description here 2. Run `shards install` -## Usage - -```crystal -require "lsquic.cr" -``` - -TODO: Write usage instructions here - -## Development - -TODO: Write development instructions here - ## Contributing 1. Fork it () diff --git a/src/lsquic.cr b/src/lsquic.cr index 2678513..1827031 100644 --- a/src/lsquic.cr +++ b/src/lsquic.cr @@ -1,8 +1,8 @@ -require "./lsquic/*" -require "http" +require "./lsquic/patch" +require "./lsquic/liblsquic" +require "http/headers" require "socket" -# TODO: Move into StreamCtx as HTTP::Client::Request PATH = "/watch?v=QmyhcjpsF6E" METHOD = "GET" HEADERS = HTTP::Headers{ @@ -10,23 +10,14 @@ HEADERS = HTTP::Headers{ ":scheme" => "https", ":path" => PATH, ":authority" => "www.youtube.com", - "user-agent" => "lsquic/2.6.1", - # TODO: Send if payload + "user-agent" => "Chrome/78.0.3904.97 Linux x86_64", # "content-type" => "application/octet-stream" # "content-length" => "0", } -pp HTTP::Client.get("https://www.youtube.com#{PATH}").status_code - -# logger_if = LibLsquic::LoggerIf.new -# logger_if.log_buf = ->(logger_ctx : Void*, msg_buf : LibC::Char*, msg_size : LibC::SizeT) { puts String.new(msg_buf); 0 } -# LibLsquic.logger_init(pointerof(logger_if), nil, LibLsquic::LoggerTimestampStyle::LltsHhmmssms) -# LibLsquic.set_log_level("debug") -# LibLsquic.logger_lopt("conn=debug") - engine_flags = LibLsquic::LSENG_HTTP LibLsquic.engine_init_settings(out engine_settings, engine_flags) -engine_settings.es_ua = "lsquic/2.6.1" +engine_settings.es_ua = "Chrome/78.0.3904.97 Linux x86_64" engine_settings.es_ecn = 0 LibLsquic.global_init(engine_flags & LibLsquic::LSENG_SERVER ? LibLsquic::GLOBAL_SERVER : LibLsquic::GLOBAL_CLIENT) @@ -37,7 +28,6 @@ raise String.new(err_buf) if err_code != 0 stream_if = LibLsquic::StreamIf.new stream_if.on_new_conn = ->(stream_if_ctx : Void*, c : LibLsquic::ConnT) { LibLsquic.conn_make_stream(c); stream_if_ctx } -# stream_if.on_goaway_received = ->(c : LibLsquic::ConnT) { Box.box(nil) } stream_if.on_conn_closed = ->(c : LibLsquic::ConnT) { Box.box(nil) } stream_if.on_new_stream = ->(stream_if_ctx : Void*, s : LibLsquic::StreamT) do @@ -58,8 +48,6 @@ stream_if.on_read = ->(s : LibLsquic::StreamT, stream_if_ctx : Void*) do print String.new(buffer[0, bytes_read]) elsif bytes_read == 0 LibLsquic.stream_shutdown(s, 0) - # LibLsquic.stream_wantread(s, 0) - # LibLsquic.stream_close(s) elsif LibLsquic.stream_is_rejected(s) LibLsquic.stream_close(s) else @@ -113,7 +101,6 @@ engine_api = LibLsquic::EngineApi.new engine_api.ea_settings = pointerof(engine_settings) engine_api.ea_stream_if = pointerof(stream_if) engine_api.ea_stream_if_ctx = Box.box(IO::Memory.new) # TODO -# engine_api.ea_get_ssl_ctx = ->(peer_ctx : Void*) {} engine_api.ea_packets_out = ->(peer_ctx : Void*, specs : LibLsquic::OutSpec*, count : LibC::UInt) do count.times do |i| diff --git a/src/lsquic/liblsquic.cr b/src/lsquic/liblsquic.cr index efd5e55..6ce1b75 100644 --- a/src/lsquic/liblsquic.cr +++ b/src/lsquic/liblsquic.cr @@ -1,4 +1,4 @@ -@[Link(ldflags: "#{__DIR__}/ext/liblsquic.a")] +@[Link(ldflags: "#{__DIR__}/ext/liblsquic.a -lz")] lib LibLsquic MAX_CID_LEN = 20 QQUIC_CID_LEN = 8 diff --git a/src/lsquic/patch.cr b/src/lsquic/patch.cr index 4e4628c..12e5b09 100644 --- a/src/lsquic/patch.cr +++ b/src/lsquic/patch.cr @@ -1,6 +1,4 @@ -require "openssl/lib_ssl" -require "openssl/lib_crypto" -require "openssl/bio" +require "openssl" @[Link(ldflags: "#{__DIR__}/ext/liblsquic.a #{__DIR__}/ext/libcrypto.a")] lib LibCrypto @@ -20,8 +18,6 @@ lib LibSSL fun ssl_ctx_clear_mode = SSL_CTX_clear_mode(ctx : SSLContext, mode : ULong) : ULong end -require "openssl/ssl/context" - abstract class OpenSSL::SSL::Context def set_tmp_ecdh_key(curve = LibCrypto::NID_X9_62_prime256v1) key = LibCrypto.ec_key_new_by_curve_name(curve) @@ -145,8 +141,6 @@ struct OpenSSL::BIO end end -require "openssl/ssl/socket" - abstract class OpenSSL::SSL::Socket < IO class Client < Socket def initialize(io, context : Context::Client = Context::Client.new, sync_close : Bool = false, hostname : String? = nil)