sctp-socket 0.0.4 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30d42e64586703d527155f2fb7582e165ce6662fa3ddecec417b9905479454ca
4
- data.tar.gz: ad2fce717f7d4c42a83db6524e7323c92b1b1edf1b73058757e6689a638cc3ce
3
+ metadata.gz: 319cf8cad773727889aed0c51508d4febfa4e145f9572ef2cdc265bdfc4c6ef2
4
+ data.tar.gz: aa085297b675c4f8a1468d689868a25ff6e9b9f5c954324801146b3878bdb150
5
5
  SHA512:
6
- metadata.gz: 94b319f18b44be59f7b5434ccbd9c4e2b4b1e948d9dfcf155c29c497e13059a6016a945aca04712b0b1afaa6801043450268533c758491ce118dc615d1209c4b
7
- data.tar.gz: f77fd5430cc646354117a27c3a5a2064b8af11cdc7019c7400286300065eea6b107b6b7bb7796408de0f5998661c652eb16b07460b54ef25defca5a231ffa731
6
+ metadata.gz: a26f8069a0034447ceadd4bb5e59af079da161e4ed0d2620de9df1809e072284fa2fc7aea0799f8f1d17f2da74de744ebc4fec399f21f93e0afa713092b5e0ca
7
+ data.tar.gz: 5267896027a79534c91c52396528654a9f046437ccf437be392d1609fbee72980cfd18116db8e85453048976a990084321089d6159822a5453d4ba155163581f
checksums.yaml.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  *.log
4
4
  *.lock
5
5
  Makefile
6
+ tmp/
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.0.5 - 15-Dec-2021
2
+ * Add handling for Linux platforms that don't support the sctp_sendv function
3
+ and/or the SCTP_SEND_FAILED_EVENT notification.
4
+ * Some minor updates to Rakefile and Gemfile.
5
+
1
6
  ## 0.0.4 - 3-Dec-2020
2
7
  * Added the send method. Use this when you already have a connection.
3
8
  * Fixed a flags bug in the sendmsg method.
data/Gemfile CHANGED
@@ -1,10 +1,2 @@
1
- source 'https://rubygems.org' do
2
- group 'test' do
3
- gem 'rake'
4
- gem 'rspec', '~> 3.9'
5
- end
6
-
7
- group 'development' do
8
- gem 'rake-compiler', '~> 1.1'
9
- end
10
- end
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md CHANGED
@@ -12,7 +12,7 @@ On some systems, such as RHEL8, you may need to enable the sctp module.
12
12
 
13
13
  ## Installation
14
14
 
15
- `gem install sctp-socket`
15
+ `gem install sctp-socket`
16
16
 
17
17
  ## About SCTP
18
18
 
@@ -30,7 +30,7 @@ is applied to correct loss or corruption of data.
30
30
 
31
31
  ## Synopsis
32
32
 
33
- ```
33
+ ```ruby
34
34
  # sample_server.rb
35
35
  require 'sctp/socket'
36
36
 
@@ -62,10 +62,19 @@ end
62
62
  Currently this has only been developed and tested on Linux. Other platforms
63
63
  will probably only be supported via community contributions.
64
64
 
65
+ On Ubuntu 20 and possibly other Linux variants, the sendv method is not
66
+ available. Use the sendmsg method instead.
67
+
65
68
  Please report any issues on the github project page.
66
69
 
67
70
  https://github.com/djberg96/sctp-socket
68
71
 
72
+ ## More Information on SCTP
73
+
74
+ * https://www.linuxjournal.com/article/9748
75
+ * https://www.linuxjournal.com/article/9749
76
+ * https://www.linuxjournal.com/article/9784
77
+
69
78
  ## License
70
79
 
71
80
  Apache-2.0
data/Rakefile CHANGED
@@ -6,20 +6,21 @@ require 'rake/extensiontask'
6
6
  include RbConfig
7
7
 
8
8
  CLEAN.include(
9
- '**/*.gem', # Gem files
10
- '**/*.rbc', # Rubinius
11
- '**/*.o', # C object file
12
- '**/*.log', # Ruby extension build log
13
- '**/Makefile', # C Makefile
14
- '**/conftest.dSYM', # OS X build directory
15
- "**/*.#{CONFIG['DLEXT']}" # C shared object
9
+ '**/*.gem', # Gem files
10
+ '**/*.rbc', # Rubinius
11
+ '**/*.o', # C object file
12
+ '**/*.log', # Ruby extension build log
13
+ '**/Makefile', # C Makefile
14
+ '**/conftest.dSYM', # OS X build directory
15
+ "**/*.#{CONFIG['DLEXT']}", # C shared object
16
+ 'tmp' # Rake compiler
16
17
  )
17
18
 
18
19
  namespace :gem do
19
20
  desc "Create the sys-uname gem"
20
21
  task :create => [:clean] do
21
22
  require 'rubygems/package'
22
- spec = eval(IO.read('sctp-socket.gemspec'))
23
+ spec = Gem::Specification.load('sctp-socket.gemspec')
23
24
  spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
24
25
  Gem::Package.build(spec)
25
26
  end
@@ -39,4 +40,4 @@ end
39
40
  RSpec::Core::RakeTask.new
40
41
 
41
42
  task :spec => :compile
42
- task :default => :spec
43
+ task :default => [:clean, :spec]
data/ext/sctp/extconf.rb CHANGED
@@ -2,4 +2,6 @@ require 'mkmf'
2
2
 
3
3
  have_header('netinet/sctp.h')
4
4
  have_library('sctp')
5
+ have_func('sctp_sendv', 'netinet/sctp.h')
6
+ have_struct_member('struct sctp_event_subscribe', 'sctp_send_failure_event', 'netinet/sctp.h')
5
7
  create_makefile('sctp/socket')
data/ext/sctp/socket.c CHANGED
@@ -17,11 +17,44 @@ VALUE v_adaptation_event_struct;
17
17
  VALUE v_partial_delivery_event_struct;
18
18
  VALUE v_auth_event_struct;
19
19
  VALUE v_sockaddr_in_struct;
20
-
20
+ VALUE v_sctp_status_struct;
21
+ VALUE v_sctp_rtoinfo_struct;
22
+ VALUE v_sctp_associnfo_struct;
23
+ VALUE v_sctp_default_send_params_struct;
24
+
25
+ #if !defined(IOV_MAX)
26
+ #if defined(_SC_IOV_MAX)
27
+ #define IOV_MAX (sysconf(_SC_IOV_MAX))
28
+ #else
29
+ // Assume infinity, or let the syscall return with error
30
+ #define IOV_MAX INT_MAX
31
+ #endif
32
+ #endif
33
+
34
+ #define ARY2IOVEC(iov,ary) \
35
+ do { \
36
+ VALUE *cur; \
37
+ struct iovec *tmp; \
38
+ long n; \
39
+ cur = RARRAY_PTR(ary); \
40
+ n = RARRAY_LEN(ary); \
41
+ iov = tmp = alloca(sizeof(struct iovec) * n); \
42
+ for (; --n >= 0; tmp++, cur++) { \
43
+ if (TYPE(*cur) != T_STRING) \
44
+ rb_raise(rb_eArgError, "must be an array of strings"); \
45
+ tmp->iov_base = RSTRING_PTR(*cur); \
46
+ tmp->iov_len = RSTRING_LEN(*cur); \
47
+ } \
48
+ } while (0)
49
+
50
+ // TODO: Yes, I know I need to update the signature.
21
51
  VALUE convert_sockaddr_in_to_struct(struct sockaddr_in* addr){
22
- char ipbuf[16];
52
+ char ipbuf[INET6_ADDRSTRLEN];
23
53
 
24
- inet_ntop(addr->sin_family, &(((struct sockaddr_in *)addr)->sin_addr), ipbuf, sizeof(ipbuf));
54
+ if(addr->sin_family == AF_INET6)
55
+ inet_ntop(addr->sin_family, &(((struct sockaddr_in6 *)addr)->sin6_addr), ipbuf, sizeof(ipbuf));
56
+ else
57
+ inet_ntop(addr->sin_family, &(((struct sockaddr_in *)addr)->sin_addr), ipbuf, sizeof(ipbuf));
25
58
 
26
59
  return rb_struct_new(v_sockaddr_in_struct,
27
60
  INT2NUM(addr->sin_family),
@@ -316,6 +349,51 @@ static VALUE rsctp_getlocalnames(VALUE self){
316
349
  return v_array;
317
350
  }
318
351
 
352
+ #ifdef HAVE_SCTP_SENDV
353
+ static VALUE rsctp_sendv(VALUE self, VALUE v_messages){
354
+ struct iovec* iov;
355
+ struct sockaddr* addrs[8];
356
+ struct sctp_sndinfo info;
357
+ int sock_fd, num_bytes, size;
358
+
359
+ Check_Type(v_messages, T_ARRAY);
360
+ bzero(&addrs, sizeof(addrs));
361
+
362
+ sock_fd = NUM2INT(rb_iv_get(self, "@sock_fd"));
363
+
364
+ Check_Type(v_messages, T_ARRAY);
365
+ size = RARRAY_LEN(v_messages);
366
+
367
+ if(!size)
368
+ rb_raise(rb_eArgError, "Must contain at least one message");
369
+
370
+ if(size > IOV_MAX)
371
+ rb_raise(rb_eArgError, "Array size is greater than IOV_MAX");
372
+
373
+ ARY2IOVEC(iov, v_messages);
374
+
375
+ info.snd_flags = SCTP_UNORDERED;
376
+ info.snd_assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
377
+
378
+ num_bytes = sctp_sendv(
379
+ sock_fd,
380
+ iov,
381
+ size,
382
+ NULL,
383
+ 0,
384
+ &info,
385
+ sizeof(info),
386
+ SCTP_SENDV_SNDINFO,
387
+ 0
388
+ );
389
+
390
+ if(num_bytes < 0)
391
+ rb_raise(rb_eSystemCallError, "sctp_sendv: %s", strerror(errno));
392
+
393
+ return INT2NUM(num_bytes);
394
+ }
395
+ #endif
396
+
319
397
  /*
320
398
  * Send a message on an already-connected socket to a specific association.
321
399
  *
@@ -678,6 +756,7 @@ static VALUE rsctp_recvmsg(int argc, VALUE* argv, VALUE self){
678
756
  rb_ary_new4(snp->sn_remote_error.sre_length, v_temp)
679
757
  );
680
758
  break;
759
+ #ifdef SCTP_SEND_FAILED_EVENT
681
760
  case SCTP_SEND_FAILED_EVENT:
682
761
  v_temp = ALLOCA_N(VALUE, snp->sn_send_failed_event.ssf_length);
683
762
 
@@ -700,6 +779,24 @@ static VALUE rsctp_recvmsg(int argc, VALUE* argv, VALUE self){
700
779
  rb_ary_new4(snp->sn_send_failed_event.ssf_length, v_temp)
701
780
  );
702
781
  break;
782
+ #else
783
+ case SCTP_SEND_FAILED:
784
+ v_temp = ALLOCA_N(VALUE, snp->sn_send_failed.ssf_length);
785
+
786
+ for(i = 0; i < snp->sn_send_failed.ssf_length; i++){
787
+ v_temp[i] = UINT2NUM(snp->sn_send_failed.ssf_data[i]);
788
+ }
789
+
790
+ v_notification = rb_struct_new(v_send_failed_event_struct,
791
+ UINT2NUM(snp->sn_send_failed.ssf_type),
792
+ UINT2NUM(snp->sn_send_failed.ssf_length),
793
+ UINT2NUM(snp->sn_send_failed.ssf_error),
794
+ Qnil,
795
+ UINT2NUM(snp->sn_send_failed.ssf_assoc_id),
796
+ rb_ary_new4(snp->sn_send_failed.ssf_length, v_temp)
797
+ );
798
+ break;
799
+ #endif
703
800
  case SCTP_SHUTDOWN_EVENT:
704
801
  v_notification = rb_struct_new(v_shutdown_event_struct,
705
802
  UINT2NUM(snp->sn_shutdown_event.sse_type),
@@ -860,9 +957,12 @@ static VALUE rsctp_subscribe(VALUE self, VALUE v_options){
860
957
  if(RTEST(rb_hash_aref2(v_options, "address")))
861
958
  events.sctp_address_event = 1;
862
959
 
863
- // Use the new version
864
960
  if(RTEST(rb_hash_aref2(v_options, "send_failure")))
961
+ #ifdef HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_SEND_FAILURE_EVENT
962
+ events.sctp_send_failure_event = 1;
963
+ #else
865
964
  events.sctp_send_failure_event_event = 1;
965
+ #endif
866
966
 
867
967
  if(RTEST(rb_hash_aref2(v_options, "peer_error")))
868
968
  events.sctp_peer_error_event = 1;
@@ -942,6 +1042,61 @@ static VALUE rsctp_peeloff(VALUE self, VALUE v_assoc_id){
942
1042
  return self;
943
1043
  }
944
1044
 
1045
+ static VALUE rsctp_get_default_send_params(VALUE self){
1046
+ int sock_fd;
1047
+ socklen_t size;
1048
+ sctp_assoc_t assoc_id;
1049
+ struct sctp_sndrcvinfo sndrcv;
1050
+
1051
+ bzero(&sndrcv, sizeof(sndrcv));
1052
+
1053
+ sock_fd = NUM2INT(rb_iv_get(self, "@sock_fd"));
1054
+ assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
1055
+ size = sizeof(struct sctp_sndrcvinfo);
1056
+
1057
+ if(sctp_opt_info(sock_fd, assoc_id, SCTP_DEFAULT_SEND_PARAM, (void*)&sndrcv, &size) < 0)
1058
+ rb_raise(rb_eSystemCallError, "sctp_opt_info: %s", strerror(errno));
1059
+
1060
+ return rb_struct_new(
1061
+ v_sctp_default_send_params_struct,
1062
+ INT2NUM(sndrcv.sinfo_stream),
1063
+ INT2NUM(sndrcv.sinfo_ssn),
1064
+ INT2NUM(sndrcv.sinfo_flags),
1065
+ INT2NUM(sndrcv.sinfo_ppid),
1066
+ INT2NUM(sndrcv.sinfo_context),
1067
+ INT2NUM(sndrcv.sinfo_timetolive),
1068
+ INT2NUM(sndrcv.sinfo_tsn),
1069
+ INT2NUM(sndrcv.sinfo_cumtsn),
1070
+ INT2NUM(sndrcv.sinfo_assoc_id)
1071
+ );
1072
+ }
1073
+
1074
+ static VALUE rsctp_get_association_info(VALUE self){
1075
+ int sock_fd;
1076
+ socklen_t size;
1077
+ sctp_assoc_t assoc_id;
1078
+ struct sctp_assocparams assoc;
1079
+
1080
+ bzero(&assoc, sizeof(assoc));
1081
+
1082
+ sock_fd = NUM2INT(rb_iv_get(self, "@sock_fd"));
1083
+ assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
1084
+ size = sizeof(struct sctp_assocparams);
1085
+
1086
+ if(sctp_opt_info(sock_fd, assoc_id, SCTP_ASSOCINFO, (void*)&assoc, &size) < 0)
1087
+ rb_raise(rb_eSystemCallError, "sctp_opt_info: %s", strerror(errno));
1088
+
1089
+ return rb_struct_new(
1090
+ v_sctp_associnfo_struct,
1091
+ INT2NUM(assoc.sasoc_assoc_id),
1092
+ INT2NUM(assoc.sasoc_asocmaxrxt),
1093
+ INT2NUM(assoc.sasoc_number_peer_destinations),
1094
+ INT2NUM(assoc.sasoc_peer_rwnd),
1095
+ INT2NUM(assoc.sasoc_local_rwnd),
1096
+ INT2NUM(assoc.sasoc_cookie_life)
1097
+ );
1098
+ }
1099
+
945
1100
  static VALUE rsctp_shutdown(int argc, VALUE* argv, VALUE self){
946
1101
  int how, sock_fd;
947
1102
  VALUE v_how;
@@ -964,6 +1119,73 @@ static VALUE rsctp_shutdown(int argc, VALUE* argv, VALUE self){
964
1119
  return self;
965
1120
  }
966
1121
 
1122
+ static VALUE rsctp_get_retransmission_info(VALUE self){
1123
+ int sock_fd;
1124
+ socklen_t size;
1125
+ sctp_assoc_t assoc_id;
1126
+ struct sctp_rtoinfo rto;
1127
+
1128
+ bzero(&rto, sizeof(rto));
1129
+
1130
+ sock_fd = NUM2INT(rb_iv_get(self, "@sock_fd"));
1131
+ assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
1132
+ size = sizeof(struct sctp_rtoinfo);
1133
+
1134
+ if(sctp_opt_info(sock_fd, assoc_id, SCTP_RTOINFO, (void*)&rto, &size) < 0)
1135
+ rb_raise(rb_eSystemCallError, "sctp_opt_info: %s", strerror(errno));
1136
+
1137
+ return rb_struct_new(
1138
+ v_sctp_rtoinfo_struct,
1139
+ INT2NUM(rto.srto_assoc_id),
1140
+ INT2NUM(rto.srto_initial),
1141
+ INT2NUM(rto.srto_max),
1142
+ INT2NUM(rto.srto_min)
1143
+ );
1144
+ }
1145
+
1146
+ static VALUE rsctp_get_status(VALUE self){
1147
+ int sock_fd;
1148
+ socklen_t size;
1149
+ sctp_assoc_t assoc_id;
1150
+ struct sctp_status status;
1151
+ struct sctp_paddrinfo* spinfo;
1152
+ char tmpname[INET_ADDRSTRLEN];
1153
+
1154
+ bzero(&status, sizeof(status));
1155
+
1156
+ sock_fd = NUM2INT(rb_iv_get(self, "@sock_fd"));
1157
+ assoc_id = NUM2INT(rb_iv_get(self, "@association_id"));
1158
+ size = sizeof(struct sctp_status);
1159
+
1160
+ if(sctp_opt_info(sock_fd, assoc_id, SCTP_STATUS, (void*)&status, &size) < 0)
1161
+ rb_raise(rb_eSystemCallError, "sctp_opt_info: %s", strerror(errno));
1162
+
1163
+ spinfo = &status.sstat_primary;
1164
+
1165
+ if (spinfo->spinfo_address.ss_family == AF_INET6) {
1166
+ struct sockaddr_in6 *sin6;
1167
+ sin6 = (struct sockaddr_in6 *)&spinfo->spinfo_address;
1168
+ inet_ntop(AF_INET6, &sin6->sin6_addr, tmpname, sizeof (tmpname));
1169
+ }
1170
+ else {
1171
+ struct sockaddr_in *sin;
1172
+ sin = (struct sockaddr_in *)&spinfo->spinfo_address;
1173
+ inet_ntop(AF_INET, &sin->sin_addr, tmpname, sizeof (tmpname));
1174
+ }
1175
+
1176
+ return rb_struct_new(v_sctp_status_struct,
1177
+ INT2NUM(status.sstat_assoc_id),
1178
+ INT2NUM(status.sstat_state),
1179
+ INT2NUM(status.sstat_rwnd),
1180
+ INT2NUM(status.sstat_unackdata),
1181
+ INT2NUM(status.sstat_penddata),
1182
+ INT2NUM(status.sstat_instrms),
1183
+ INT2NUM(status.sstat_outstrms),
1184
+ INT2NUM(status.sstat_fragmentation_point),
1185
+ rb_str_new2(tmpname)
1186
+ );
1187
+ }
1188
+
967
1189
  void Init_socket(){
968
1190
  mSCTP = rb_define_module("SCTP");
969
1191
  cSocket = rb_define_class_under(mSCTP, "Socket", rb_cObject);
@@ -1016,6 +1238,26 @@ void Init_socket(){
1016
1238
  "SockAddrIn", "family", "port", "address", NULL
1017
1239
  );
1018
1240
 
1241
+ v_sctp_status_struct = rb_struct_define(
1242
+ "Status", "association_id", "state", "receive_window", "unacknowledged_data",
1243
+ "pending_data", "inbound_streams", "outbound_streams", "fragmentation_point", "primary", NULL
1244
+ );
1245
+
1246
+ v_sctp_rtoinfo_struct = rb_struct_define(
1247
+ "RetransmissionInfo", "association_id", "initial", "max", "min", NULL
1248
+ );
1249
+
1250
+ v_sctp_associnfo_struct = rb_struct_define(
1251
+ "AssociationInfo", "association_id", "max_retransmission_count",
1252
+ "number_peer_destinations", "peer_receive_window", "local_receive_window",
1253
+ "cookie_life", NULL
1254
+ );
1255
+
1256
+ v_sctp_default_send_params_struct = rb_struct_define(
1257
+ "DefaultSendParams", "stream", "ssn", "flags", "ppid", "context",
1258
+ "ttl", "tsn", "cumtsn", "association_id", NULL
1259
+ );
1260
+
1019
1261
  rb_define_method(cSocket, "initialize", rsctp_init, -1);
1020
1262
 
1021
1263
  rb_define_method(cSocket, "bind", rsctp_bind, -1);
@@ -1023,10 +1265,19 @@ void Init_socket(){
1023
1265
  rb_define_method(cSocket, "connect", rsctp_connect, -1);
1024
1266
  rb_define_method(cSocket, "getpeernames", rsctp_getpeernames, 0);
1025
1267
  rb_define_method(cSocket, "getlocalnames", rsctp_getlocalnames, 0);
1268
+ rb_define_method(cSocket, "get_status", rsctp_get_status, 0);
1269
+ rb_define_method(cSocket, "get_default_send_params", rsctp_get_default_send_params, 0);
1270
+ rb_define_method(cSocket, "get_retransmission_info", rsctp_get_retransmission_info, 0);
1271
+ rb_define_method(cSocket, "get_association_info", rsctp_get_association_info, 0);
1026
1272
  rb_define_method(cSocket, "listen", rsctp_listen, -1);
1027
1273
  rb_define_method(cSocket, "peeloff!", rsctp_peeloff, 1);
1028
1274
  rb_define_method(cSocket, "recvmsg", rsctp_recvmsg, -1);
1029
1275
  rb_define_method(cSocket, "send", rsctp_send, 1);
1276
+
1277
+ #ifdef HAVE_SCTP_SENDV
1278
+ rb_define_method(cSocket, "sendv", rsctp_sendv, 1);
1279
+ #endif
1280
+
1030
1281
  rb_define_method(cSocket, "sendmsg", rsctp_sendmsg, 1);
1031
1282
  rb_define_method(cSocket, "set_initmsg", rsctp_set_initmsg, 1);
1032
1283
  rb_define_method(cSocket, "shutdown", rsctp_shutdown, -1);
@@ -1038,8 +1289,8 @@ void Init_socket(){
1038
1289
  rb_define_attr(cSocket, "association_id", 1, 1);
1039
1290
  rb_define_attr(cSocket, "port", 1, 1);
1040
1291
 
1041
- /* 0.0.4: The version of this library */
1042
- rb_define_const(cSocket, "VERSION", rb_str_new2("0.0.4"));
1292
+ /* 0.0.5: The version of this library */
1293
+ rb_define_const(cSocket, "VERSION", rb_str_new2("0.0.5"));
1043
1294
 
1044
1295
  /* send flags */
1045
1296
 
@@ -1059,4 +1310,16 @@ void Init_socket(){
1059
1310
  rb_define_const(cSocket, "SCTP_SENDALL", INT2NUM(SCTP_SENDALL));
1060
1311
 
1061
1312
  rb_define_const(cSocket, "MSG_NOTIFICATION", INT2NUM(MSG_NOTIFICATION));
1313
+
1314
+ // ASSOCIATION STATES //
1315
+
1316
+ rb_define_const(cSocket, "SCTP_EMPTY", INT2NUM(SCTP_EMPTY));
1317
+ rb_define_const(cSocket, "SCTP_CLOSED", INT2NUM(SCTP_CLOSED));
1318
+ rb_define_const(cSocket, "SCTP_COOKIE_WAIT", INT2NUM(SCTP_COOKIE_WAIT));
1319
+ rb_define_const(cSocket, "SCTP_COOKIE_ECHOED", INT2NUM(SCTP_COOKIE_ECHOED));
1320
+ rb_define_const(cSocket, "SCTP_ESTABLISHED", INT2NUM(SCTP_ESTABLISHED));
1321
+ rb_define_const(cSocket, "SCTP_SHUTDOWN_PENDING", INT2NUM(SCTP_SHUTDOWN_PENDING));
1322
+ rb_define_const(cSocket, "SCTP_SHUTDOWN_SENT", INT2NUM(SCTP_SHUTDOWN_SENT));
1323
+ rb_define_const(cSocket, "SCTP_SHUTDOWN_RECEIVED", INT2NUM(SCTP_SHUTDOWN_RECEIVED));
1324
+ rb_define_const(cSocket, "SCTP_SHUTDOWN_ACK_SENT", INT2NUM(SCTP_SHUTDOWN_ACK_SENT));
1062
1325
  }
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.4'
3
+ spec.version = '0.0.5'
4
4
  spec.author = 'Daniel Berger'
5
5
  spec.email = 'djberg96@gmail.com'
6
6
  spec.summary = 'Ruby bindings for SCTP sockets'
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
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Berger
@@ -35,7 +35,7 @@ cert_chain:
35
35
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
36
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
37
37
  -----END CERTIFICATE-----
38
- date: 2020-12-03 00:00:00.000000000 Z
38
+ date: 2021-12-15 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: bundler
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
- rubygems_version: 3.0.6
141
+ rubygems_version: 3.2.25
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: Ruby bindings for SCTP sockets
metadata.gz.sig CHANGED
Binary file