protocol-quic 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +4 -2
- data/ext/ruby-protocol-quic-lock.yml +2 -2
- data/ext/source/Ruby/Protocol/QUIC/Address.cpp +122 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Address.hpp +5 -5
- data/ext/source/Ruby/Protocol/QUIC/Client.cpp +161 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Client.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/Configuration.cpp +74 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Configuration.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/Connection.cpp +50 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Connection.hpp +4 -4
- data/ext/source/Ruby/Protocol/QUIC/Dispatcher.cpp +194 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Dispatcher.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/PacketHeader.cpp +59 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/PacketHeader.hpp +4 -4
- data/ext/source/Ruby/Protocol/QUIC/Reference.hpp +35 -0
- data/ext/source/Ruby/Protocol/QUIC/Server.cpp +169 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Server.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/Socket.cpp +118 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Socket.hpp +4 -4
- data/ext/source/Ruby/Protocol/QUIC/Stream.cpp +100 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/Stream.hpp +4 -4
- data/ext/source/Ruby/Protocol/QUIC/TLS/ClientContext.cpp +61 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/TLS/ClientContext.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/TLS/Context.cpp +116 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/TLS/Context.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC/TLS/ServerContext.cpp +61 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC/TLS/ServerContext.hpp +3 -3
- data/ext/source/Ruby/Protocol/QUIC.cpp +36 -0
- data/ext/source/{Protocol → Ruby/Protocol}/QUIC.hpp +1 -1
- data/ext/teapot.rb +1 -1
- data/lib/protocol/quic/version.rb +1 -1
- data/lib/protocol/quic.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +28 -28
- metadata.gz.sig +0 -0
- data/ext/source/Protocol/QUIC/Address.cpp +0 -122
- data/ext/source/Protocol/QUIC/Client.cpp +0 -157
- data/ext/source/Protocol/QUIC/Configuration.cpp +0 -74
- data/ext/source/Protocol/QUIC/Connection.cpp +0 -50
- data/ext/source/Protocol/QUIC/Dispatcher.cpp +0 -190
- data/ext/source/Protocol/QUIC/PacketHeader.cpp +0 -59
- data/ext/source/Protocol/QUIC/Reference.hpp +0 -31
- data/ext/source/Protocol/QUIC/Server.cpp +0 -165
- data/ext/source/Protocol/QUIC/Socket.cpp +0 -103
- data/ext/source/Protocol/QUIC/Stream.cpp +0 -96
- data/ext/source/Protocol/QUIC/TLS/ClientContext.cpp +0 -61
- data/ext/source/Protocol/QUIC/TLS/Context.cpp +0 -116
- data/ext/source/Protocol/QUIC/TLS/ServerContext.cpp +0 -61
- data/ext/source/Protocol/QUIC.cpp +0 -36
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Stream.cpp
|
|
3
|
+
// This file is part of the "Protocol::QUIC" project and released under the MIT License.
|
|
4
|
+
//
|
|
5
|
+
// Created by Samuel Williams on 27/4/2023.
|
|
6
|
+
// Copyright, 2023, by Samuel Williams. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "Stream.hpp"
|
|
10
|
+
#include "Connection.hpp"
|
|
11
|
+
#include <Protocol/QUIC/BufferedStream.hpp>
|
|
12
|
+
|
|
13
|
+
VALUE Ruby_Protocol_QUIC_Stream = Qnil;
|
|
14
|
+
|
|
15
|
+
namespace Ruby::Protocol::QUIC {
|
|
16
|
+
|
|
17
|
+
class Stream : public ::Protocol::QUIC::BufferedStream {
|
|
18
|
+
public:
|
|
19
|
+
VALUE self;
|
|
20
|
+
|
|
21
|
+
private:
|
|
22
|
+
VALUE _connection;
|
|
23
|
+
public:
|
|
24
|
+
Stream(VALUE self, VALUE connection, VALUE stream_id) : ::Protocol::QUIC::BufferedStream(*Ruby_Protocol_QUIC_Connection_get(connection), RB_NUM2LL(stream_id)), self(self), _connection(connection) {}
|
|
25
|
+
|
|
26
|
+
virtual ~Stream() {}
|
|
27
|
+
|
|
28
|
+
void mark() {
|
|
29
|
+
rb_gc_mark_movable(self);
|
|
30
|
+
rb_gc_mark_movable(_connection);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void compact() {
|
|
34
|
+
self = rb_gc_location(self);
|
|
35
|
+
_connection = rb_gc_location(_connection);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static void Ruby_Protocol_QUIC_Stream_mark(void *data) {
|
|
42
|
+
if (data) {
|
|
43
|
+
reinterpret_cast<Ruby::Protocol::QUIC::Stream *>(data)->mark();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static void Ruby_Protocol_QUIC_Stream_compact(void *data) {
|
|
48
|
+
if (data) {
|
|
49
|
+
reinterpret_cast<Ruby::Protocol::QUIC::Stream *>(data)->compact();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static void Ruby_Protocol_QUIC_Stream_free(void *data) {
|
|
54
|
+
if (data) {
|
|
55
|
+
delete reinterpret_cast<Ruby::Protocol::QUIC::Stream *>(data);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static size_t Ruby_Protocol_QUIC_Stream_size(const void *data) {
|
|
60
|
+
return sizeof(Ruby::Protocol::QUIC::Stream);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const rb_data_type_t Ruby_Protocol_QUIC_Stream_type = {
|
|
64
|
+
.wrap_struct_name = "Protocol::QUIC::Stream",
|
|
65
|
+
.function = {
|
|
66
|
+
.dmark = Ruby_Protocol_QUIC_Stream_mark,
|
|
67
|
+
.dfree = Ruby_Protocol_QUIC_Stream_free,
|
|
68
|
+
.dsize = Ruby_Protocol_QUIC_Stream_size,
|
|
69
|
+
.dcompact = Ruby_Protocol_QUIC_Stream_compact,
|
|
70
|
+
},
|
|
71
|
+
.data = NULL,
|
|
72
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
::Protocol::QUIC::Stream * Ruby_Protocol_QUIC_Stream_get(VALUE self)
|
|
76
|
+
{
|
|
77
|
+
::Protocol::QUIC::Stream *address;
|
|
78
|
+
|
|
79
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::Stream, &Ruby_Protocol_QUIC_Stream_type, address);
|
|
80
|
+
|
|
81
|
+
return address;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
VALUE Ruby_Protocol_QUIC_Stream_allocate(VALUE klass) {
|
|
85
|
+
return TypedData_Wrap_Struct(klass, &Ruby_Protocol_QUIC_Stream_type, NULL);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
static VALUE Ruby_Protocol_QUIC_Stream_initialize(VALUE self, VALUE connection, VALUE stream_id) {
|
|
89
|
+
DATA_PTR(self) = new Ruby::Protocol::QUIC::Stream(self, connection, stream_id);
|
|
90
|
+
|
|
91
|
+
return self;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void Init_Ruby_Protocol_QUIC_Stream(VALUE Protocol_QUIC) {
|
|
95
|
+
Ruby_Protocol_QUIC_Stream =
|
|
96
|
+
rb_define_class_under(Protocol_QUIC, "Stream", rb_cObject);
|
|
97
|
+
|
|
98
|
+
rb_define_alloc_func(Ruby_Protocol_QUIC_Stream, Ruby_Protocol_QUIC_Stream_allocate);
|
|
99
|
+
rb_define_method(Ruby_Protocol_QUIC_Stream, "initialize", Ruby_Protocol_QUIC_Stream_initialize, 2);
|
|
100
|
+
}
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
extern "C" {
|
|
17
17
|
#endif
|
|
18
18
|
|
|
19
|
-
extern VALUE
|
|
19
|
+
extern VALUE Ruby_Protocol_QUIC_Stream;
|
|
20
20
|
|
|
21
|
-
void
|
|
21
|
+
void Init_Ruby_Protocol_QUIC_Stream(VALUE Protocol_QUIC);
|
|
22
22
|
|
|
23
|
-
Protocol::QUIC::Stream *
|
|
23
|
+
::Protocol::QUIC::Stream * Ruby_Protocol_QUIC_Stream_get(VALUE self);
|
|
24
24
|
|
|
25
|
-
VALUE
|
|
25
|
+
VALUE Ruby_Protocol_QUIC_Stream_allocate(VALUE klass);
|
|
26
26
|
|
|
27
27
|
#ifdef __cplusplus
|
|
28
28
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ClientContext.cpp
|
|
3
|
+
// This file is part of the "Protocol::QUIC" project and released under the MIT License.
|
|
4
|
+
//
|
|
5
|
+
// Created by Samuel Williams on 27/4/2023.
|
|
6
|
+
// Copyright, 2023, by Samuel Williams. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "ClientContext.hpp"
|
|
10
|
+
#include "Context.hpp"
|
|
11
|
+
|
|
12
|
+
VALUE Ruby_Protocol_QUIC_TLS_ClientContext = Qnil;
|
|
13
|
+
|
|
14
|
+
static void Ruby_Protocol_QUIC_TLS_ClientContext_free(void *data) {
|
|
15
|
+
if (data) {
|
|
16
|
+
delete reinterpret_cast<::Protocol::QUIC::TLS::ClientContext *>(data);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static size_t Ruby_Protocol_QUIC_TLS_ClientContext_size(const void *data) {
|
|
21
|
+
return sizeof(::Protocol::QUIC::TLS::ClientContext);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static const rb_data_type_t Ruby_Protocol_QUIC_TLS_ClientContext_type = {
|
|
25
|
+
.wrap_struct_name = "Protocol::QUIC::TLS::ClientContext",
|
|
26
|
+
.function = {
|
|
27
|
+
.dmark = NULL,
|
|
28
|
+
.dfree = Ruby_Protocol_QUIC_TLS_ClientContext_free,
|
|
29
|
+
.dsize = Ruby_Protocol_QUIC_TLS_ClientContext_size,
|
|
30
|
+
},
|
|
31
|
+
.parent = &Ruby_Protocol_QUIC_TLS_Context_type,
|
|
32
|
+
.data = NULL,
|
|
33
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
::Protocol::QUIC::TLS::ClientContext * Ruby_Protocol_QUIC_TLS_ClientContext_get(VALUE self)
|
|
37
|
+
{
|
|
38
|
+
::Protocol::QUIC::TLS::ClientContext *data;
|
|
39
|
+
|
|
40
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::TLS::ClientContext, &Ruby_Protocol_QUIC_TLS_ClientContext_type, data);
|
|
41
|
+
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static VALUE Ruby_Protocol_QUIC_TLS_ClientContext_allocate(VALUE klass) {
|
|
46
|
+
return TypedData_Wrap_Struct(klass, &Ruby_Protocol_QUIC_TLS_ClientContext_type, NULL);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static VALUE Ruby_Protocol_QUIC_TLS_ClientContext_initialize(VALUE self) {
|
|
50
|
+
DATA_PTR(self) = new ::Protocol::QUIC::TLS::ClientContext();
|
|
51
|
+
|
|
52
|
+
return self;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void Init_Ruby_Protocol_QUIC_TLS_ClientContext(VALUE Protocol_QUIC_TLS) {
|
|
56
|
+
Ruby_Protocol_QUIC_TLS_ClientContext =
|
|
57
|
+
rb_define_class_under(Protocol_QUIC_TLS, "ClientContext", Ruby_Protocol_QUIC_TLS_Context);
|
|
58
|
+
|
|
59
|
+
rb_define_alloc_func(Ruby_Protocol_QUIC_TLS_ClientContext, Ruby_Protocol_QUIC_TLS_ClientContext_allocate);
|
|
60
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_ClientContext, "initialize", Ruby_Protocol_QUIC_TLS_ClientContext_initialize, 0);
|
|
61
|
+
}
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
extern "C" {
|
|
17
17
|
#endif
|
|
18
18
|
|
|
19
|
-
extern VALUE
|
|
19
|
+
extern VALUE Ruby_Protocol_QUIC_TLS_ClientContext;
|
|
20
20
|
|
|
21
|
-
void
|
|
21
|
+
void Init_Ruby_Protocol_QUIC_TLS_ClientContext(VALUE Protocol_QUIC_TLS);
|
|
22
22
|
|
|
23
|
-
Protocol::QUIC::TLS::ClientContext *
|
|
23
|
+
::Protocol::QUIC::TLS::ClientContext * Ruby_Protocol_QUIC_TLS_ClientContext_get(VALUE self);
|
|
24
24
|
|
|
25
25
|
#ifdef __cplusplus
|
|
26
26
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Context.cpp
|
|
3
|
+
// This file is part of the "Protocol::QUIC" project and released under the MIT License.
|
|
4
|
+
//
|
|
5
|
+
// Created by Samuel Williams on 27/4/2023.
|
|
6
|
+
// Copyright, 2023, by Samuel Williams. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "Context.hpp"
|
|
10
|
+
|
|
11
|
+
#include "ClientContext.hpp"
|
|
12
|
+
#include "ServerContext.hpp"
|
|
13
|
+
|
|
14
|
+
VALUE Ruby_Protocol_QUIC_TLS_Context = Qnil;
|
|
15
|
+
|
|
16
|
+
static void Ruby_Protocol_QUIC_TLS_Context_free(void *data) {
|
|
17
|
+
if (data) {
|
|
18
|
+
delete reinterpret_cast<::Protocol::QUIC::TLS::Context *>(data);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static size_t Ruby_Protocol_QUIC_TLS_Context_size(const void *data) {
|
|
23
|
+
return sizeof(::Protocol::QUIC::TLS::Context);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const rb_data_type_t Ruby_Protocol_QUIC_TLS_Context_type = {
|
|
27
|
+
.wrap_struct_name = "Protocol::QUIC::TLS::Context",
|
|
28
|
+
.function = {
|
|
29
|
+
.dmark = NULL,
|
|
30
|
+
.dfree = Ruby_Protocol_QUIC_TLS_Context_free,
|
|
31
|
+
.dsize = Ruby_Protocol_QUIC_TLS_Context_size,
|
|
32
|
+
},
|
|
33
|
+
.data = NULL,
|
|
34
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
::Protocol::QUIC::TLS::Context * Ruby_Protocol_QUIC_TLS_Context_get(VALUE self)
|
|
38
|
+
{
|
|
39
|
+
::Protocol::QUIC::TLS::Context *tls_context;
|
|
40
|
+
|
|
41
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::TLS::Context, &Ruby_Protocol_QUIC_TLS_Context_type, tls_context);
|
|
42
|
+
|
|
43
|
+
return tls_context;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_allocate(VALUE klass) {
|
|
47
|
+
return TypedData_Wrap_Struct(klass, &Ruby_Protocol_QUIC_TLS_Context_type, NULL);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_initialize(VALUE self) {
|
|
51
|
+
DATA_PTR(self) = new ::Protocol::QUIC::TLS::Context();
|
|
52
|
+
|
|
53
|
+
return self;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_add_protocol(VALUE self, VALUE name) {
|
|
57
|
+
StringValue(name);
|
|
58
|
+
|
|
59
|
+
::Protocol::QUIC::TLS::Context *tls_context;
|
|
60
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::TLS::Context, &Ruby_Protocol_QUIC_TLS_Context_type, tls_context);
|
|
61
|
+
|
|
62
|
+
tls_context->add_protocol(
|
|
63
|
+
std::string(RSTRING_PTR(name), RSTRING_LEN(name))
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
return self;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_load_certificate_file(VALUE self, VALUE path) {
|
|
70
|
+
StringValue(path);
|
|
71
|
+
|
|
72
|
+
auto tls_context = Ruby_Protocol_QUIC_TLS_Context_get(self);
|
|
73
|
+
tls_context->load_certificate_file(RSTRING_PTR(path));
|
|
74
|
+
|
|
75
|
+
return self;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_load_private_key_file(VALUE self, VALUE path) {
|
|
79
|
+
StringValue(path);
|
|
80
|
+
|
|
81
|
+
auto tls_context = Ruby_Protocol_QUIC_TLS_Context_get(self);
|
|
82
|
+
tls_context->load_private_key_file(RSTRING_PTR(path));
|
|
83
|
+
|
|
84
|
+
return self;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static VALUE Ruby_Protocol_QUIC_TLS_Context_protocols(VALUE self) {
|
|
88
|
+
::Protocol::QUIC::TLS::Context *tls_context;
|
|
89
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::TLS::Context, &Ruby_Protocol_QUIC_TLS_Context_type, tls_context);
|
|
90
|
+
|
|
91
|
+
VALUE protocols = rb_ary_new();
|
|
92
|
+
|
|
93
|
+
for (auto & protocol : tls_context->protocols()) {
|
|
94
|
+
rb_ary_push(protocols, rb_str_new(protocol.data(), protocol.size()));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return protocols;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void Init_Ruby_Protocol_QUIC_TLS_Context(VALUE Protocol_QUIC) {
|
|
101
|
+
VALUE Protocol_QUIC_TLS = rb_define_module_under(Protocol_QUIC, "TLS");
|
|
102
|
+
|
|
103
|
+
Ruby_Protocol_QUIC_TLS_Context =
|
|
104
|
+
rb_define_class_under(Protocol_QUIC_TLS, "Context", rb_cObject);
|
|
105
|
+
|
|
106
|
+
rb_define_alloc_func(Ruby_Protocol_QUIC_TLS_Context, Ruby_Protocol_QUIC_TLS_Context_allocate);
|
|
107
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_Context, "initialize", Ruby_Protocol_QUIC_TLS_Context_initialize, 0);
|
|
108
|
+
|
|
109
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_Context, "add_protocol", Ruby_Protocol_QUIC_TLS_Context_add_protocol, 1);
|
|
110
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_Context, "load_certificate_file", Ruby_Protocol_QUIC_TLS_Context_load_certificate_file, 1);
|
|
111
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_Context, "load_private_key_file", Ruby_Protocol_QUIC_TLS_Context_load_private_key_file, 1);
|
|
112
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_Context, "protocols", Ruby_Protocol_QUIC_TLS_Context_protocols, 0);
|
|
113
|
+
|
|
114
|
+
Init_Ruby_Protocol_QUIC_TLS_ClientContext(Protocol_QUIC_TLS);
|
|
115
|
+
Init_Ruby_Protocol_QUIC_TLS_ServerContext(Protocol_QUIC_TLS);
|
|
116
|
+
}
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
extern "C" {
|
|
17
17
|
#endif
|
|
18
18
|
|
|
19
|
-
extern VALUE
|
|
19
|
+
extern VALUE Ruby_Protocol_QUIC_TLS_Context;
|
|
20
20
|
|
|
21
|
-
extern const rb_data_type_t
|
|
21
|
+
extern const rb_data_type_t Ruby_Protocol_QUIC_TLS_Context_type;
|
|
22
22
|
|
|
23
|
-
void
|
|
23
|
+
void Init_Ruby_Protocol_QUIC_TLS_Context(VALUE Protocol_QUIC);
|
|
24
24
|
|
|
25
25
|
#ifdef __cplusplus
|
|
26
26
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ServerContext.cpp
|
|
3
|
+
// This file is part of the "Protocol::QUIC" project and released under the MIT License.
|
|
4
|
+
//
|
|
5
|
+
// Created by Samuel Williams on 27/4/2023.
|
|
6
|
+
// Copyright, 2023, by Samuel Williams. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "ServerContext.hpp"
|
|
10
|
+
#include "Context.hpp"
|
|
11
|
+
|
|
12
|
+
VALUE Ruby_Protocol_QUIC_TLS_ServerContext = Qnil;
|
|
13
|
+
|
|
14
|
+
static void Ruby_Protocol_QUIC_TLS_ServerContext_free(void *data) {
|
|
15
|
+
if (data) {
|
|
16
|
+
delete reinterpret_cast<::Protocol::QUIC::TLS::ServerContext *>(data);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static size_t Ruby_Protocol_QUIC_TLS_ServerContext_size(const void *data) {
|
|
21
|
+
return sizeof(::Protocol::QUIC::TLS::ServerContext);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static const rb_data_type_t Ruby_Protocol_QUIC_TLS_ServerContext_type = {
|
|
25
|
+
.wrap_struct_name = "Protocol::QUIC::TLS::ServerContext",
|
|
26
|
+
.function = {
|
|
27
|
+
.dmark = NULL,
|
|
28
|
+
.dfree = Ruby_Protocol_QUIC_TLS_ServerContext_free,
|
|
29
|
+
.dsize = Ruby_Protocol_QUIC_TLS_ServerContext_size,
|
|
30
|
+
},
|
|
31
|
+
.parent = &Ruby_Protocol_QUIC_TLS_Context_type,
|
|
32
|
+
.data = NULL,
|
|
33
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
::Protocol::QUIC::TLS::ServerContext * Ruby_Protocol_QUIC_TLS_ServerContext_get(VALUE self)
|
|
37
|
+
{
|
|
38
|
+
::Protocol::QUIC::TLS::ServerContext *data;
|
|
39
|
+
|
|
40
|
+
TypedData_Get_Struct(self, ::Protocol::QUIC::TLS::ServerContext, &Ruby_Protocol_QUIC_TLS_ServerContext_type, data);
|
|
41
|
+
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static VALUE Ruby_Protocol_QUIC_TLS_ServerContext_allocate(VALUE klass) {
|
|
46
|
+
return TypedData_Wrap_Struct(klass, &Ruby_Protocol_QUIC_TLS_ServerContext_type, NULL);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static VALUE Ruby_Protocol_QUIC_TLS_ServerContext_initialize(VALUE self) {
|
|
50
|
+
DATA_PTR(self) = new ::Protocol::QUIC::TLS::ServerContext();
|
|
51
|
+
|
|
52
|
+
return self;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void Init_Ruby_Protocol_QUIC_TLS_ServerContext(VALUE Protocol_QUIC_TLS) {
|
|
56
|
+
Ruby_Protocol_QUIC_TLS_ServerContext =
|
|
57
|
+
rb_define_class_under(Protocol_QUIC_TLS, "ServerContext", Ruby_Protocol_QUIC_TLS_Context);
|
|
58
|
+
|
|
59
|
+
rb_define_alloc_func(Ruby_Protocol_QUIC_TLS_ServerContext, Ruby_Protocol_QUIC_TLS_ServerContext_allocate);
|
|
60
|
+
rb_define_method(Ruby_Protocol_QUIC_TLS_ServerContext, "initialize", Ruby_Protocol_QUIC_TLS_ServerContext_initialize, 0);
|
|
61
|
+
}
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
extern "C" {
|
|
17
17
|
#endif
|
|
18
18
|
|
|
19
|
-
extern VALUE
|
|
19
|
+
extern VALUE Ruby_Protocol_QUIC_TLS_ServerContext;
|
|
20
20
|
|
|
21
|
-
void
|
|
21
|
+
void Init_Ruby_Protocol_QUIC_TLS_ServerContext(VALUE Protocol_QUIC_TLS);
|
|
22
22
|
|
|
23
|
-
Protocol::QUIC::TLS::ServerContext *
|
|
23
|
+
::Protocol::QUIC::TLS::ServerContext * Ruby_Protocol_QUIC_TLS_ServerContext_get(VALUE self);
|
|
24
24
|
|
|
25
25
|
#ifdef __cplusplus
|
|
26
26
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include "QUIC.hpp"
|
|
2
|
+
|
|
3
|
+
#include "QUIC/Connection.hpp"
|
|
4
|
+
#include "QUIC/TLS/Context.hpp"
|
|
5
|
+
|
|
6
|
+
#include "QUIC/Address.hpp"
|
|
7
|
+
#include "QUIC/Dispatcher.hpp"
|
|
8
|
+
#include "QUIC/Configuration.hpp"
|
|
9
|
+
#include "QUIC/PacketHeader.hpp"
|
|
10
|
+
#include "QUIC/Socket.hpp"
|
|
11
|
+
|
|
12
|
+
#include "QUIC/Server.hpp"
|
|
13
|
+
#include "QUIC/Client.hpp"
|
|
14
|
+
#include "QUIC/Stream.hpp"
|
|
15
|
+
|
|
16
|
+
VALUE Protocol_QUIC = Qnil;
|
|
17
|
+
|
|
18
|
+
void Init_Ruby_Protocol_QUIC(void)
|
|
19
|
+
{
|
|
20
|
+
VALUE Protocol = rb_define_module("Protocol");
|
|
21
|
+
Protocol_QUIC = rb_define_module_under(Protocol, "QUIC");
|
|
22
|
+
|
|
23
|
+
Init_Ruby_Protocol_QUIC_TLS_Context(Protocol_QUIC);
|
|
24
|
+
|
|
25
|
+
Init_Ruby_Protocol_QUIC_Address(Protocol_QUIC);
|
|
26
|
+
Init_Ruby_Protocol_QUIC_Dispatcher(Protocol_QUIC);
|
|
27
|
+
Init_Ruby_Protocol_QUIC_Configuration(Protocol_QUIC);
|
|
28
|
+
Init_Ruby_Protocol_QUIC_PacketHeader(Protocol_QUIC);
|
|
29
|
+
Init_Ruby_Protocol_QUIC_Socket(Protocol_QUIC);
|
|
30
|
+
|
|
31
|
+
Init_Ruby_Protocol_QUIC_Connection(Protocol_QUIC);
|
|
32
|
+
Init_Ruby_Protocol_QUIC_Server(Protocol_QUIC);
|
|
33
|
+
Init_Ruby_Protocol_QUIC_Client(Protocol_QUIC);
|
|
34
|
+
|
|
35
|
+
Init_Ruby_Protocol_QUIC_Stream(Protocol_QUIC);
|
|
36
|
+
}
|
data/ext/teapot.rb
CHANGED
|
@@ -22,7 +22,7 @@ define_target "ruby-protocol-quic" do |target|
|
|
|
22
22
|
target.provides "Ruby/Protocol/QUIC" do
|
|
23
23
|
source_root = target.package.path + "source"
|
|
24
24
|
|
|
25
|
-
library_path = build dynamic_library: "
|
|
25
|
+
library_path = build dynamic_library: "Ruby_Protocol_QUIC", source_files: source_root.glob("**/*.{c,cpp}")
|
|
26
26
|
|
|
27
27
|
copy source: [library_path], prefix: environment[:ruby_install_path]
|
|
28
28
|
|
data/lib/protocol/quic.rb
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: protocol-quic
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samuel Williams
|
|
@@ -73,33 +73,33 @@ extra_rdoc_files: []
|
|
|
73
73
|
files:
|
|
74
74
|
- ext/rakefile.rb
|
|
75
75
|
- ext/ruby-protocol-quic-lock.yml
|
|
76
|
-
- ext/source/Protocol/QUIC.cpp
|
|
77
|
-
- ext/source/Protocol/QUIC.hpp
|
|
78
|
-
- ext/source/Protocol/QUIC/Address.cpp
|
|
79
|
-
- ext/source/Protocol/QUIC/Address.hpp
|
|
80
|
-
- ext/source/Protocol/QUIC/Client.cpp
|
|
81
|
-
- ext/source/Protocol/QUIC/Client.hpp
|
|
82
|
-
- ext/source/Protocol/QUIC/Configuration.cpp
|
|
83
|
-
- ext/source/Protocol/QUIC/Configuration.hpp
|
|
84
|
-
- ext/source/Protocol/QUIC/Connection.cpp
|
|
85
|
-
- ext/source/Protocol/QUIC/Connection.hpp
|
|
86
|
-
- ext/source/Protocol/QUIC/Dispatcher.cpp
|
|
87
|
-
- ext/source/Protocol/QUIC/Dispatcher.hpp
|
|
88
|
-
- ext/source/Protocol/QUIC/PacketHeader.cpp
|
|
89
|
-
- ext/source/Protocol/QUIC/PacketHeader.hpp
|
|
90
|
-
- ext/source/Protocol/QUIC/Reference.hpp
|
|
91
|
-
- ext/source/Protocol/QUIC/Server.cpp
|
|
92
|
-
- ext/source/Protocol/QUIC/Server.hpp
|
|
93
|
-
- ext/source/Protocol/QUIC/Socket.cpp
|
|
94
|
-
- ext/source/Protocol/QUIC/Socket.hpp
|
|
95
|
-
- ext/source/Protocol/QUIC/Stream.cpp
|
|
96
|
-
- ext/source/Protocol/QUIC/Stream.hpp
|
|
97
|
-
- ext/source/Protocol/QUIC/TLS/ClientContext.cpp
|
|
98
|
-
- ext/source/Protocol/QUIC/TLS/ClientContext.hpp
|
|
99
|
-
- ext/source/Protocol/QUIC/TLS/Context.cpp
|
|
100
|
-
- ext/source/Protocol/QUIC/TLS/Context.hpp
|
|
101
|
-
- ext/source/Protocol/QUIC/TLS/ServerContext.cpp
|
|
102
|
-
- ext/source/Protocol/QUIC/TLS/ServerContext.hpp
|
|
76
|
+
- ext/source/Ruby/Protocol/QUIC.cpp
|
|
77
|
+
- ext/source/Ruby/Protocol/QUIC.hpp
|
|
78
|
+
- ext/source/Ruby/Protocol/QUIC/Address.cpp
|
|
79
|
+
- ext/source/Ruby/Protocol/QUIC/Address.hpp
|
|
80
|
+
- ext/source/Ruby/Protocol/QUIC/Client.cpp
|
|
81
|
+
- ext/source/Ruby/Protocol/QUIC/Client.hpp
|
|
82
|
+
- ext/source/Ruby/Protocol/QUIC/Configuration.cpp
|
|
83
|
+
- ext/source/Ruby/Protocol/QUIC/Configuration.hpp
|
|
84
|
+
- ext/source/Ruby/Protocol/QUIC/Connection.cpp
|
|
85
|
+
- ext/source/Ruby/Protocol/QUIC/Connection.hpp
|
|
86
|
+
- ext/source/Ruby/Protocol/QUIC/Dispatcher.cpp
|
|
87
|
+
- ext/source/Ruby/Protocol/QUIC/Dispatcher.hpp
|
|
88
|
+
- ext/source/Ruby/Protocol/QUIC/PacketHeader.cpp
|
|
89
|
+
- ext/source/Ruby/Protocol/QUIC/PacketHeader.hpp
|
|
90
|
+
- ext/source/Ruby/Protocol/QUIC/Reference.hpp
|
|
91
|
+
- ext/source/Ruby/Protocol/QUIC/Server.cpp
|
|
92
|
+
- ext/source/Ruby/Protocol/QUIC/Server.hpp
|
|
93
|
+
- ext/source/Ruby/Protocol/QUIC/Socket.cpp
|
|
94
|
+
- ext/source/Ruby/Protocol/QUIC/Socket.hpp
|
|
95
|
+
- ext/source/Ruby/Protocol/QUIC/Stream.cpp
|
|
96
|
+
- ext/source/Ruby/Protocol/QUIC/Stream.hpp
|
|
97
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/ClientContext.cpp
|
|
98
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/ClientContext.hpp
|
|
99
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/Context.cpp
|
|
100
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/Context.hpp
|
|
101
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/ServerContext.cpp
|
|
102
|
+
- ext/source/Ruby/Protocol/QUIC/TLS/ServerContext.hpp
|
|
103
103
|
- ext/teapot.rb
|
|
104
104
|
- lib/protocol/quic.rb
|
|
105
105
|
- lib/protocol/quic/version.rb
|
metadata.gz.sig
CHANGED
|
Binary file
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Address.cpp
|
|
3
|
-
// This file is part of the "Protocol::QUIC" project and released under the MIT License.
|
|
4
|
-
//
|
|
5
|
-
// Created by Samuel Williams on 27/4/2023.
|
|
6
|
-
// Copyright, 2023, by Samuel Williams. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
#include "Address.hpp"
|
|
10
|
-
#include "ruby/backward/cxxanyargs.hpp"
|
|
11
|
-
#include "ruby/internal/intern/object.h"
|
|
12
|
-
|
|
13
|
-
VALUE Protocol_QUIC_Address = Qnil;
|
|
14
|
-
|
|
15
|
-
static void Protocol_QUIC_Address_free(void *data) {
|
|
16
|
-
if (data) {
|
|
17
|
-
delete reinterpret_cast<Protocol::QUIC::Address *>(data);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
static size_t Protocol_QUIC_Address_size(const void *data) {
|
|
22
|
-
return sizeof(Protocol::QUIC::Address);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const rb_data_type_t Protocol_QUIC_Address_type = {
|
|
26
|
-
.wrap_struct_name = "Protocol::QUIC::Address",
|
|
27
|
-
.function = {
|
|
28
|
-
.dmark = NULL,
|
|
29
|
-
.dfree = Protocol_QUIC_Address_free,
|
|
30
|
-
.dsize = Protocol_QUIC_Address_size,
|
|
31
|
-
},
|
|
32
|
-
.data = NULL,
|
|
33
|
-
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
Protocol::QUIC::Address * Protocol_QUIC_Address_get(VALUE self)
|
|
37
|
-
{
|
|
38
|
-
Protocol::QUIC::Address *address;
|
|
39
|
-
|
|
40
|
-
TypedData_Get_Struct(self, Protocol::QUIC::Address, &Protocol_QUIC_Address_type, address);
|
|
41
|
-
|
|
42
|
-
return address;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
VALUE Protocol_QUIC_Address_allocate(VALUE klass) {
|
|
46
|
-
return TypedData_Wrap_Struct(klass, &Protocol_QUIC_Address_type, NULL);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static VALUE Protocol_QUIC_Address_initialize(VALUE self) {
|
|
50
|
-
DATA_PTR(self) = new Protocol::QUIC::Address();
|
|
51
|
-
|
|
52
|
-
return self;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
static VALUE Protocol_QUIC_Address_inspect(VALUE self) {
|
|
56
|
-
auto address = Protocol_QUIC_Address_get(self);
|
|
57
|
-
auto string = address->to_string();
|
|
58
|
-
|
|
59
|
-
VALUE class_name = rb_inspect(rb_class_of(self));
|
|
60
|
-
|
|
61
|
-
return rb_sprintf("<%" PRIsVALUE ":%p '%s'>", class_name, (void*)self, string.c_str());
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
static VALUE Protocol_QUIC_Address_family(VALUE self) {
|
|
65
|
-
Protocol::QUIC::Address *address = Protocol_QUIC_Address_get(self);
|
|
66
|
-
|
|
67
|
-
return RB_INT2NUM(address->family());
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static VALUE Protocol_QUIC_Address_data(VALUE self) {
|
|
71
|
-
Protocol::QUIC::Address *address = Protocol_QUIC_Address_get(self);
|
|
72
|
-
|
|
73
|
-
return rb_str_new((const char *)&address->data.sa, address->length);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
VALUE Protocol_QUIC_Address_wrap(VALUE klass, const Protocol::QUIC::Address & address)
|
|
77
|
-
{
|
|
78
|
-
VALUE self = Protocol_QUIC_Address_allocate(klass);
|
|
79
|
-
Protocol_QUIC_Address_initialize(self);
|
|
80
|
-
|
|
81
|
-
Protocol::QUIC::Address *data = Protocol_QUIC_Address_get(self);
|
|
82
|
-
|
|
83
|
-
*data = address;
|
|
84
|
-
|
|
85
|
-
return self;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
VALUE Protocol_QUIC_Address_s_resolve(VALUE klass, VALUE host, VALUE service, VALUE family, VALUE type, VALUE flags)
|
|
89
|
-
{
|
|
90
|
-
StringValue(host);
|
|
91
|
-
StringValue(service);
|
|
92
|
-
|
|
93
|
-
auto addresses = Protocol::QUIC::Address::resolve(
|
|
94
|
-
std::string_view(RSTRING_PTR(host), RSTRING_LEN(host)),
|
|
95
|
-
std::string_view(RSTRING_PTR(service), RSTRING_LEN(service)),
|
|
96
|
-
RB_NUM2INT(family),
|
|
97
|
-
RB_NUM2INT(type),
|
|
98
|
-
RB_NUM2INT(flags)
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
VALUE result = rb_ary_new_capa(addresses.size());
|
|
102
|
-
|
|
103
|
-
for (auto & address : addresses) {
|
|
104
|
-
rb_ary_push(result, Protocol_QUIC_Address_wrap(klass, address));
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
void Init_Protocol_QUIC_Address(VALUE Protocol_QUIC) {
|
|
111
|
-
Protocol_QUIC_Address =
|
|
112
|
-
rb_define_class_under(Protocol_QUIC, "Address", rb_cObject);
|
|
113
|
-
|
|
114
|
-
rb_define_singleton_method(Protocol_QUIC_Address, "resolve", Protocol_QUIC_Address_s_resolve, 5);
|
|
115
|
-
|
|
116
|
-
rb_define_alloc_func(Protocol_QUIC_Address, Protocol_QUIC_Address_allocate);
|
|
117
|
-
rb_define_method(Protocol_QUIC_Address, "initialize", Protocol_QUIC_Address_initialize, 0);
|
|
118
|
-
rb_define_method(Protocol_QUIC_Address, "inspect", Protocol_QUIC_Address_inspect, 0);
|
|
119
|
-
|
|
120
|
-
rb_define_method(Protocol_QUIC_Address, "family", Protocol_QUIC_Address_family, 0);
|
|
121
|
-
rb_define_method(Protocol_QUIC_Address, "data", Protocol_QUIC_Address_data, 0);
|
|
122
|
-
}
|