sctp-socket 0.0.7 → 0.1.0
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 +0 -0
- data/CHANGES.md +7 -0
- data/ext/sctp/socket.c +129 -12
- data/sctp-socket.gemspec +5 -5
- data.tar.gz.sig +0 -0
- metadata +18 -18
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a483264dd5712655f641ade00e03177756f25340c2fd398bed3ad453bc6a9cdb
|
4
|
+
data.tar.gz: 719857e2ce3a5db341aa317f23ec0bf2fa674dd9b427b502f99e3515cb786dac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dd98e9076f37396a55339fa20f1097ab5c582a418d885d8599b320b5cf722acb3c296b8afb798faadbee67519ee9368e87596c60d8658ef35a23a01d76c0d82
|
7
|
+
data.tar.gz: 4c7adf403e6075eb53129e9f4b92a97e3887518afa15458bf8b74fa7765478c54001d5f5f6cd997c2a4e44e1cba8783ee329ff9c3125f62fb9ae87e53c7e06b7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 0.1.0 - 31-May-2024
|
2
|
+
* Added support for sender dry events.
|
3
|
+
* Added the get_peer_address_params method.
|
4
|
+
* Comments were added to methods that were missing them.
|
5
|
+
* Remove version locking for dev dependencies, doesn't matter to me.
|
6
|
+
* Bumped version to 0.1.0, I guess I'll declare it stable.
|
7
|
+
|
1
8
|
## 0.0.7 - 28-May-2024
|
2
9
|
* Added the recvv method.
|
3
10
|
* The getlocalnames and getpeernames methods now accept optional fileno and
|
data/ext/sctp/socket.c
CHANGED
@@ -23,6 +23,8 @@ VALUE v_sctp_associnfo_struct;
|
|
23
23
|
VALUE v_sctp_default_send_params_struct;
|
24
24
|
VALUE v_sctp_event_subscribe_struct;
|
25
25
|
VALUE v_sctp_receive_info_struct;
|
26
|
+
VALUE v_sctp_peer_addr_params_struct;
|
27
|
+
VALUE v_sender_dry_event_struct;
|
26
28
|
|
27
29
|
#if !defined(IOV_MAX)
|
28
30
|
#if defined(_SC_IOV_MAX)
|
@@ -180,6 +182,7 @@ static VALUE rsctp_bindx(int argc, VALUE* argv, VALUE self){
|
|
180
182
|
if(port == 0){
|
181
183
|
struct sockaddr_in sin;
|
182
184
|
socklen_t len = sizeof(sin);
|
185
|
+
bzero(&sin, len);
|
183
186
|
|
184
187
|
if(getsockname(fileno, (struct sockaddr *)&sin, &len) == -1)
|
185
188
|
rb_raise(rb_eSystemCallError, "getsockname: %s", strerror(errno));
|
@@ -913,6 +916,7 @@ static VALUE rsctp_recvmsg(int argc, VALUE* argv, VALUE self){
|
|
913
916
|
|
914
917
|
v_notification = rb_struct_new(v_remote_error_struct,
|
915
918
|
UINT2NUM(snp->sn_remote_error.sre_type),
|
919
|
+
UINT2NUM(snp->sn_remote_error.sre_flags),
|
916
920
|
UINT2NUM(snp->sn_remote_error.sre_length),
|
917
921
|
UINT2NUM(snp->sn_remote_error.sre_error),
|
918
922
|
UINT2NUM(snp->sn_remote_error.sre_assoc_id),
|
@@ -994,6 +998,14 @@ static VALUE rsctp_recvmsg(int argc, VALUE* argv, VALUE self){
|
|
994
998
|
UINT2NUM(snp->sn_authkey_event.auth_assoc_id)
|
995
999
|
);
|
996
1000
|
break;
|
1001
|
+
case SCTP_SENDER_DRY_EVENT:
|
1002
|
+
v_notification = rb_struct_new(v_sender_dry_event_struct,
|
1003
|
+
UINT2NUM(snp->sn_sender_dry_event.sender_dry_type),
|
1004
|
+
UINT2NUM(snp->sn_sender_dry_event.sender_dry_flags),
|
1005
|
+
UINT2NUM(snp->sn_sender_dry_event.sender_dry_length),
|
1006
|
+
UINT2NUM(snp->sn_sender_dry_event.sender_dry_assoc_id)
|
1007
|
+
);
|
1008
|
+
break;
|
997
1009
|
}
|
998
1010
|
}
|
999
1011
|
|
@@ -1025,10 +1037,10 @@ static VALUE rsctp_recvmsg(int argc, VALUE* argv, VALUE self){
|
|
1025
1037
|
*
|
1026
1038
|
* The following parameters can be configured:
|
1027
1039
|
*
|
1028
|
-
*
|
1029
|
-
*
|
1030
|
-
*
|
1031
|
-
*
|
1040
|
+
* :output_streams - The number of outbound SCTP streams an application would like to request.
|
1041
|
+
* :input_streams - The maximum number of inbound streams an application is prepared to allow.
|
1042
|
+
* :max_attempts - How many times the the SCTP stack should send the initial INIT message before it's considered unreachable.
|
1043
|
+
* :timeout - The maximum RTO value for the INIT timer.
|
1032
1044
|
*
|
1033
1045
|
* By default these values are set to zero (i.e. ignored).
|
1034
1046
|
*/
|
@@ -1089,11 +1101,8 @@ static VALUE rsctp_set_initmsg(VALUE self, VALUE v_options){
|
|
1089
1101
|
* :adaptation
|
1090
1102
|
* :authentication
|
1091
1103
|
* :partial_delivery
|
1092
|
-
*
|
1093
|
-
* Not yet supported:
|
1094
|
-
*
|
1095
1104
|
* :sender_dry
|
1096
|
-
* :peer_error
|
1105
|
+
* :peer_error (aka remote error)
|
1097
1106
|
*
|
1098
1107
|
* Example:
|
1099
1108
|
*
|
@@ -1206,7 +1215,7 @@ static VALUE rsctp_listen(int argc, VALUE* argv, VALUE self){
|
|
1206
1215
|
* while true
|
1207
1216
|
* info = socket.recvmsg
|
1208
1217
|
* assoc_fileno = socket.peeloff(info.association_id)
|
1209
|
-
* # ... Do something with this new
|
1218
|
+
* # ... Do something with this new fileno
|
1210
1219
|
* end
|
1211
1220
|
*/
|
1212
1221
|
static VALUE rsctp_peeloff(VALUE self, VALUE v_assoc_id){
|
@@ -1224,6 +1233,21 @@ static VALUE rsctp_peeloff(VALUE self, VALUE v_assoc_id){
|
|
1224
1233
|
return INT2NUM(assoc_fileno);
|
1225
1234
|
}
|
1226
1235
|
|
1236
|
+
/*
|
1237
|
+
* Returns the default set of parameters that a call to the sendto function
|
1238
|
+
* uses on this association. This is a struct that contains the following
|
1239
|
+
* members:
|
1240
|
+
*
|
1241
|
+
* * stream
|
1242
|
+
* * ssn
|
1243
|
+
* * flags
|
1244
|
+
* * ppid
|
1245
|
+
* * context
|
1246
|
+
* * ttl
|
1247
|
+
* * tsn
|
1248
|
+
* * cumtsn
|
1249
|
+
* * association_id
|
1250
|
+
*/
|
1227
1251
|
static VALUE rsctp_get_default_send_params(VALUE self){
|
1228
1252
|
int fileno;
|
1229
1253
|
socklen_t size;
|
@@ -1253,6 +1277,19 @@ static VALUE rsctp_get_default_send_params(VALUE self){
|
|
1253
1277
|
);
|
1254
1278
|
}
|
1255
1279
|
|
1280
|
+
/*
|
1281
|
+
* Returns the association specific parameters. This is a struct
|
1282
|
+
* that contains the following members:
|
1283
|
+
*
|
1284
|
+
* * association_id
|
1285
|
+
* * max_retransmission_count
|
1286
|
+
* * number_peer_destinations
|
1287
|
+
* * peer_receive_window
|
1288
|
+
* * local_receive_window
|
1289
|
+
* * cookie_life
|
1290
|
+
*
|
1291
|
+
* All values that refer to time values are measured in milliseconds.
|
1292
|
+
*/
|
1256
1293
|
static VALUE rsctp_get_association_info(VALUE self){
|
1257
1294
|
int fileno;
|
1258
1295
|
socklen_t size;
|
@@ -1279,6 +1316,18 @@ static VALUE rsctp_get_association_info(VALUE self){
|
|
1279
1316
|
);
|
1280
1317
|
}
|
1281
1318
|
|
1319
|
+
/*
|
1320
|
+
* Shuts down socket send and receive operations.
|
1321
|
+
*
|
1322
|
+
* Optionally accepts an argument that specifieds the type of shutdown.
|
1323
|
+
* This can be one of the following values:
|
1324
|
+
*
|
1325
|
+
* * SHUT_RD - Disables further receive operations.
|
1326
|
+
* * SHUT_WR - Disables further send operations.
|
1327
|
+
* * SHUT_RDWR - Disables further send and receive operations.
|
1328
|
+
*
|
1329
|
+
* The default is SHUT_RDWR.
|
1330
|
+
*/
|
1282
1331
|
static VALUE rsctp_shutdown(int argc, VALUE* argv, VALUE self){
|
1283
1332
|
int how, fileno;
|
1284
1333
|
VALUE v_how;
|
@@ -1301,6 +1350,16 @@ static VALUE rsctp_shutdown(int argc, VALUE* argv, VALUE self){
|
|
1301
1350
|
return self;
|
1302
1351
|
}
|
1303
1352
|
|
1353
|
+
/*
|
1354
|
+
* Returns the protocol parameters that are used to initialize and bind the
|
1355
|
+
* retransmission timeout (RTO) tunable. This is a struct with the following
|
1356
|
+
* members:
|
1357
|
+
*
|
1358
|
+
* * association_id
|
1359
|
+
* * initial
|
1360
|
+
* * max
|
1361
|
+
* * min
|
1362
|
+
*/
|
1304
1363
|
static VALUE rsctp_get_retransmission_info(VALUE self){
|
1305
1364
|
int fileno;
|
1306
1365
|
socklen_t size;
|
@@ -1389,6 +1448,26 @@ static VALUE rsctp_get_status(VALUE self){
|
|
1389
1448
|
);
|
1390
1449
|
}
|
1391
1450
|
|
1451
|
+
/*
|
1452
|
+
* Returns a struct of events detailing which events have been
|
1453
|
+
* subscribed to by the socket. The struct contains the following
|
1454
|
+
* members:
|
1455
|
+
*
|
1456
|
+
* * data_io
|
1457
|
+
* * association
|
1458
|
+
* * address
|
1459
|
+
* * send_failure
|
1460
|
+
* * peer_error
|
1461
|
+
* * shutdown
|
1462
|
+
* * partial_delivery
|
1463
|
+
* * adaptation_layer
|
1464
|
+
* * authentication
|
1465
|
+
* * sender_dry
|
1466
|
+
* * stream_reset
|
1467
|
+
* * assoc_reset
|
1468
|
+
* * stream_change
|
1469
|
+
* * send_failure_event
|
1470
|
+
*/
|
1392
1471
|
static VALUE rsctp_get_subscriptions(VALUE self){
|
1393
1472
|
int fileno;
|
1394
1473
|
socklen_t size;
|
@@ -1422,6 +1501,34 @@ static VALUE rsctp_get_subscriptions(VALUE self){
|
|
1422
1501
|
);
|
1423
1502
|
}
|
1424
1503
|
|
1504
|
+
static VALUE rsctp_get_peer_address_params(VALUE self){
|
1505
|
+
int fileno;
|
1506
|
+
char str[16];
|
1507
|
+
socklen_t size;
|
1508
|
+
sctp_assoc_t assoc_id;
|
1509
|
+
struct sctp_paddrparams paddr;
|
1510
|
+
|
1511
|
+
bzero(&paddr, sizeof(paddr));
|
1512
|
+
bzero(&str, sizeof(str));
|
1513
|
+
|
1514
|
+
fileno = NUM2INT(rb_iv_get(self, "@fileno"));
|
1515
|
+
assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
|
1516
|
+
size = sizeof(struct sctp_paddrparams);
|
1517
|
+
|
1518
|
+
if(sctp_opt_info(fileno, assoc_id, SCTP_PEER_ADDR_PARAMS, (void*)&paddr, &size) < 0)
|
1519
|
+
rb_raise(rb_eSystemCallError, "sctp_opt_info: %s", strerror(errno));
|
1520
|
+
|
1521
|
+
inet_ntop(AF_INET, ((struct sockaddr_in*)&paddr.spp_address), str, sizeof(str));
|
1522
|
+
|
1523
|
+
return rb_struct_new(
|
1524
|
+
v_sctp_peer_addr_params_struct,
|
1525
|
+
INT2NUM(paddr.spp_assoc_id),
|
1526
|
+
rb_str_new2(str),
|
1527
|
+
INT2NUM(paddr.spp_hbinterval),
|
1528
|
+
INT2NUM(paddr.spp_pathmaxrxt)
|
1529
|
+
);
|
1530
|
+
}
|
1531
|
+
|
1425
1532
|
void Init_socket(void){
|
1426
1533
|
mSCTP = rb_define_module("SCTP");
|
1427
1534
|
cSocket = rb_define_class_under(mSCTP, "Socket", rb_cObject);
|
@@ -1442,7 +1549,7 @@ void Init_socket(void){
|
|
1442
1549
|
);
|
1443
1550
|
|
1444
1551
|
v_remote_error_struct = rb_struct_define(
|
1445
|
-
"RemoteError", "type", "length", "error", "association_id", "data", NULL
|
1552
|
+
"RemoteError", "type", "flags", "length", "error", "association_id", "data", NULL
|
1446
1553
|
);
|
1447
1554
|
|
1448
1555
|
v_send_failed_event_struct = rb_struct_define(
|
@@ -1470,6 +1577,10 @@ void Init_socket(void){
|
|
1470
1577
|
"AuthEvent", "type", "length", "key_number", "indication", "association_id", NULL
|
1471
1578
|
);
|
1472
1579
|
|
1580
|
+
v_sender_dry_event_struct = rb_struct_define(
|
1581
|
+
"SenderDryEvent", "type", "flags", "length", "association_id", NULL
|
1582
|
+
);
|
1583
|
+
|
1473
1584
|
v_sockaddr_in_struct = rb_struct_define(
|
1474
1585
|
"SockAddrIn", "family", "port", "address", NULL
|
1475
1586
|
);
|
@@ -1506,6 +1617,11 @@ void Init_socket(void){
|
|
1506
1617
|
"cumtsn", "context", "assocation_id", NULL
|
1507
1618
|
);
|
1508
1619
|
|
1620
|
+
v_sctp_peer_addr_params_struct = rb_struct_define(
|
1621
|
+
"PeerAddressParams", "association_id", "address", "heartbeat_interval",
|
1622
|
+
"max_retransmission_count", NULL
|
1623
|
+
);
|
1624
|
+
|
1509
1625
|
rb_define_method(cSocket, "initialize", rsctp_init, -1);
|
1510
1626
|
|
1511
1627
|
rb_define_method(cSocket, "bindx", rsctp_bindx, -1);
|
@@ -1518,6 +1634,7 @@ void Init_socket(void){
|
|
1518
1634
|
rb_define_method(cSocket, "get_retransmission_info", rsctp_get_retransmission_info, 0);
|
1519
1635
|
rb_define_method(cSocket, "get_association_info", rsctp_get_association_info, 0);
|
1520
1636
|
rb_define_method(cSocket, "get_subscriptions", rsctp_get_subscriptions, 0);
|
1637
|
+
rb_define_method(cSocket, "get_peer_address_params", rsctp_get_peer_address_params, 0);
|
1521
1638
|
rb_define_method(cSocket, "listen", rsctp_listen, -1);
|
1522
1639
|
rb_define_method(cSocket, "peeloff", rsctp_peeloff, 1);
|
1523
1640
|
rb_define_method(cSocket, "recvmsg", rsctp_recvmsg, -1);
|
@@ -1542,8 +1659,8 @@ void Init_socket(void){
|
|
1542
1659
|
rb_define_attr(cSocket, "association_id", 1, 1);
|
1543
1660
|
rb_define_attr(cSocket, "port", 1, 1);
|
1544
1661
|
|
1545
|
-
/* 0.0
|
1546
|
-
rb_define_const(cSocket, "VERSION", rb_str_new2("0.0
|
1662
|
+
/* 0.1.0: The version of this library */
|
1663
|
+
rb_define_const(cSocket, "VERSION", rb_str_new2("0.1.0"));
|
1547
1664
|
|
1548
1665
|
/* send flags */
|
1549
1666
|
|
data/sctp-socket.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'sctp-socket'
|
3
|
-
spec.version = '0.0
|
3
|
+
spec.version = '0.1.0'
|
4
4
|
spec.author = 'Daniel Berger'
|
5
5
|
spec.email = 'djberg96@gmail.com'
|
6
6
|
spec.summary = 'Ruby bindings for SCTP sockets'
|
@@ -14,10 +14,10 @@ Gem::Specification.new do |spec|
|
|
14
14
|
|
15
15
|
spec.extensions = ['ext/sctp/extconf.rb']
|
16
16
|
|
17
|
-
spec.add_development_dependency 'bundler'
|
18
|
-
spec.add_development_dependency 'rake'
|
19
|
-
spec.add_development_dependency 'rake-compiler'
|
20
|
-
spec.add_development_dependency 'rspec'
|
17
|
+
spec.add_development_dependency 'bundler'
|
18
|
+
spec.add_development_dependency 'rake'
|
19
|
+
spec.add_development_dependency 'rake-compiler'
|
20
|
+
spec.add_development_dependency 'rspec'
|
21
21
|
|
22
22
|
spec.metadata = {
|
23
23
|
'homepage_uri' => 'https://github.com/djberg96/sctp-socket',
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sctp-socket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Berger
|
@@ -35,64 +35,64 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2024-
|
38
|
+
date: 2024-06-01 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: bundler
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '0'
|
47
47
|
type: :development
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '0'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: rake
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - "
|
58
|
+
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '0'
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '0'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: rake-compiler
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '0'
|
75
75
|
type: :development
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '0'
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rspec
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- - "
|
93
|
+
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
95
|
+
version: '0'
|
96
96
|
description: |2
|
97
97
|
The sctp-socket library provides Ruby bindings for SCTP sockets. is a
|
98
98
|
message oriented, reliable transport protocol with direct support for
|
metadata.gz.sig
CHANGED
Binary file
|