coap 0.0.16 → 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
- data/.gitignore +2 -0
- data/.travis.yml +13 -2
- data/Gemfile +0 -1
- data/LICENSE +2 -2
- data/README.md +37 -33
- data/Rakefile +12 -3
- data/bin/coap +111 -0
- data/coap.gemspec +34 -29
- data/lib/coap.rb +3 -34
- data/lib/core.rb +11 -0
- data/lib/core/coap.rb +42 -0
- data/lib/core/coap/block.rb +98 -0
- data/lib/core/coap/client.rb +314 -0
- data/lib/core/coap/coap.rb +26 -0
- data/lib/core/coap/coding.rb +146 -0
- data/lib/core/coap/fsm.rb +82 -0
- data/lib/core/coap/message.rb +203 -0
- data/lib/core/coap/observer.rb +40 -0
- data/lib/core/coap/options.rb +44 -0
- data/lib/core/coap/registry.rb +32 -0
- data/lib/core/coap/registry/content_formats.yml +7 -0
- data/lib/core/coap/resolver.rb +17 -0
- data/lib/core/coap/transmission.rb +165 -0
- data/lib/core/coap/types.rb +69 -0
- data/lib/core/coap/utility.rb +34 -0
- data/lib/core/coap/version.rb +5 -0
- data/lib/core/core_ext/socket.rb +19 -0
- data/lib/core/hexdump.rb +18 -0
- data/lib/core/link.rb +97 -0
- data/lib/core/os.rb +15 -0
- data/spec/block_spec.rb +160 -0
- data/spec/client_spec.rb +86 -0
- data/spec/fixtures/coap.me.link +1 -0
- data/spec/link_spec.rb +98 -0
- data/spec/registry_spec.rb +39 -0
- data/spec/resolver_spec.rb +19 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/transmission_spec.rb +70 -0
- data/test/helper.rb +15 -0
- data/test/test_client.rb +99 -228
- data/test/test_message.rb +99 -71
- metadata +140 -37
- data/bin/client +0 -42
- data/lib/coap/block.rb +0 -45
- data/lib/coap/client.rb +0 -364
- data/lib/coap/coap.rb +0 -273
- data/lib/coap/message.rb +0 -187
- data/lib/coap/mysocket.rb +0 -81
- data/lib/coap/observer.rb +0 -41
- data/lib/coap/version.rb +0 -3
- data/lib/misc/hexdump.rb +0 -17
- data/test/coap_test_helper.rb +0 -2
- data/test/disabled_econotag_blck.rb +0 -33
data/test/test_message.rb
CHANGED
@@ -1,126 +1,154 @@
|
|
1
|
-
#
|
2
|
-
require_relative 'coap_test_helper'
|
1
|
+
# encoding: utf-8
|
3
2
|
|
4
|
-
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class TestMessage < Minitest::Test
|
5
6
|
def test_number_of_bits_up_to
|
6
|
-
assert_equal 0, CoAP.number_of_bits_up_to(1)
|
7
|
-
assert_equal 4, CoAP.number_of_bits_up_to(16)
|
8
|
-
assert_equal 5, CoAP.number_of_bits_up_to(32)
|
9
|
-
assert_equal 7, CoAP.number_of_bits_up_to(128)
|
7
|
+
assert_equal 0, CoRE::CoAP.number_of_bits_up_to(1)
|
8
|
+
assert_equal 4, CoRE::CoAP.number_of_bits_up_to(16)
|
9
|
+
assert_equal 5, CoRE::CoAP.number_of_bits_up_to(32)
|
10
|
+
assert_equal 7, CoRE::CoAP.number_of_bits_up_to(128)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_path_encode
|
14
|
+
assert_equal "/", CoRE::CoAP.path_encode([])
|
15
|
+
assert_equal "/foo", CoRE::CoAP.path_encode(["foo"])
|
16
|
+
assert_equal "/foo/bar", CoRE::CoAP.path_encode(["foo", "bar"])
|
17
|
+
assert_equal "/f.o/b-r", CoRE::CoAP.path_encode(["f.o", "b-r"])
|
18
|
+
assert_equal "/f(o/b)r", CoRE::CoAP.path_encode(["f(o", "b)r"])
|
19
|
+
assert_equal "/foo/b%2Fr", CoRE::CoAP.path_encode(["foo", "b/r"])
|
20
|
+
assert_equal "/foo/b&r", CoRE::CoAP.path_encode(["foo", "b&r"])
|
21
|
+
assert_equal "/f%C3%B8o/b%C3%A4r", CoRE::CoAP.path_encode(["føo", "bär"])
|
10
22
|
end
|
11
23
|
|
12
24
|
def test_query_encode
|
13
|
-
assert_equal
|
14
|
-
assert_equal
|
15
|
-
assert_equal
|
16
|
-
assert_equal
|
17
|
-
assert_equal
|
18
|
-
assert_equal
|
19
|
-
assert_equal
|
20
|
-
assert_equal
|
21
|
-
assert_equal
|
25
|
+
assert_equal "", CoRE::CoAP.query_encode([])
|
26
|
+
assert_equal "?", CoRE::CoAP.query_encode([""])
|
27
|
+
assert_equal "?foo", CoRE::CoAP.query_encode(["foo"])
|
28
|
+
assert_equal "?foo&bar", CoRE::CoAP.query_encode(["foo", "bar"])
|
29
|
+
assert_equal "?f.o&b-r", CoRE::CoAP.query_encode(["f.o", "b-r"])
|
30
|
+
assert_equal "?f(o&b)r", CoRE::CoAP.query_encode(["f(o", "b)r"])
|
31
|
+
assert_equal "?foo&b/r", CoRE::CoAP.query_encode(["foo", "b/r"])
|
32
|
+
assert_equal "?foo&b%26r", CoRE::CoAP.query_encode(["foo", "b&r"])
|
33
|
+
assert_equal "?f%C3%B8o&b%C3%A4r", CoRE::CoAP.query_encode(["føo", "bär"])
|
22
34
|
end
|
23
35
|
|
24
36
|
# XXX: now properly checks for trailing slashes, how much trouble?
|
25
37
|
def test_path_decode
|
26
|
-
assert_equal [], CoAP.path_decode(
|
27
|
-
assert_equal [
|
28
|
-
assert_equal [
|
29
|
-
assert_equal
|
30
|
-
assert_equal [
|
31
|
-
assert_equal [
|
32
|
-
assert_equal [
|
33
|
-
assert_equal [
|
34
|
-
assert_equal [
|
38
|
+
assert_equal [], CoRE::CoAP.path_decode("/")
|
39
|
+
assert_equal ["foo"], CoRE::CoAP.path_decode("/foo")
|
40
|
+
assert_equal ["foo", ""], CoRE::CoAP.path_decode("/foo/") # confusing!
|
41
|
+
assert_equal ["foo", "bar"], CoRE::CoAP.path_decode("/foo/bar")
|
42
|
+
assert_equal ["f.o", "b-r"], CoRE::CoAP.path_decode("/f.o/b-r")
|
43
|
+
assert_equal ["f(o", "b)r"], CoRE::CoAP.path_decode("/f(o/b)r")
|
44
|
+
assert_equal ["foo", "b/r"], CoRE::CoAP.path_decode("/foo/b%2Fr")
|
45
|
+
assert_equal ["foo", "b&r"], CoRE::CoAP.path_decode("/foo/b&r")
|
46
|
+
assert_equal ["føo", "bär"], CoRE::CoAP.path_decode("/f%C3%B8o/b%C3%A4r")
|
35
47
|
end
|
36
48
|
|
37
49
|
# XXX: now checks for trailing ampersands
|
38
50
|
def test_query_decode
|
39
|
-
assert_equal [], CoAP.query_decode(
|
40
|
-
assert_equal [
|
41
|
-
assert_equal [
|
42
|
-
assert_equal [
|
43
|
-
assert_equal
|
44
|
-
assert_equal [
|
45
|
-
assert_equal [
|
46
|
-
assert_equal [
|
47
|
-
assert_equal [
|
48
|
-
assert_equal [
|
51
|
+
assert_equal [], CoRE::CoAP.query_decode("")
|
52
|
+
assert_equal [], CoRE::CoAP.query_decode("?")
|
53
|
+
assert_equal ["foo"], CoRE::CoAP.query_decode("?foo")
|
54
|
+
assert_equal ["foo", ""], CoRE::CoAP.query_decode("?foo&")
|
55
|
+
assert_equal ["foo", "bar"], CoRE::CoAP.query_decode("?foo&bar")
|
56
|
+
assert_equal ["f.o", "b-r"], CoRE::CoAP.query_decode("?f.o&b-r")
|
57
|
+
assert_equal ["f(o", "b)r"], CoRE::CoAP.query_decode("?f(o&b)r")
|
58
|
+
assert_equal ["foo", "b/r"], CoRE::CoAP.query_decode("?foo&b/r")
|
59
|
+
assert_equal ["foo", "b&r"], CoRE::CoAP.query_decode("?foo&b%26r")
|
60
|
+
assert_equal ["føo", "bär"], CoRE::CoAP.query_decode("?f%C3%B8o&b%C3%A4r")
|
49
61
|
end
|
50
62
|
|
51
63
|
def test_scheme_and_authority_encode
|
52
|
-
assert_equal
|
53
|
-
assert_equal
|
54
|
-
|
55
|
-
CoAP.scheme_and_authority_encode(
|
64
|
+
assert_equal "coap://foo.bar:4711", CoRE::CoAP.scheme_and_authority_encode("foo.bar", 4711)
|
65
|
+
assert_equal "coap://foo.bar:4711", CoRE::CoAP.scheme_and_authority_encode("foo.bar", "4711")
|
66
|
+
assert_raises ArgumentError do
|
67
|
+
CoRE::CoAP.scheme_and_authority_encode("foo.bar", "baz")
|
56
68
|
end
|
57
|
-
assert_equal
|
58
|
-
assert_equal
|
69
|
+
assert_equal "coap://bar.baz", CoRE::CoAP.scheme_and_authority_encode("bar.baz", 5683)
|
70
|
+
assert_equal "coap://bar.baz", CoRE::CoAP.scheme_and_authority_encode("bar.baz", "5683")
|
59
71
|
end
|
60
72
|
|
61
73
|
def test_scheme_and_authority_decode
|
62
|
-
assert_equal [
|
63
|
-
assert_equal [
|
64
|
-
assert_equal [
|
65
|
-
assert_equal [
|
74
|
+
assert_equal [nil, "foo.bar", 4711], CoRE::CoAP.scheme_and_authority_decode("coap://foo.bar:4711")
|
75
|
+
assert_equal [nil, "foo.bar", 5683], CoRE::CoAP.scheme_and_authority_decode("coap://foo.bar")
|
76
|
+
assert_equal [nil, "foo:bar", 4711], CoRE::CoAP.scheme_and_authority_decode("coap://[foo:bar]:4711")
|
77
|
+
assert_equal [nil, "foo:bar", 5683], CoRE::CoAP.scheme_and_authority_decode("coap://%5Bfoo:bar%5D")
|
66
78
|
end
|
67
79
|
|
68
80
|
def test_coap_message
|
69
|
-
input = "\x44\x02\x12\xA0abcd\x41A\x7B.well-known\x04core\x0D\x04rhabarbersaftglas\xFFfoobar".force_encoding(
|
70
|
-
|
81
|
+
input = "\x44\x02\x12\xA0abcd\x41A\x7B.well-known\x04core\x0D\x04rhabarbersaftglas\xFFfoobar".force_encoding("BINARY")
|
82
|
+
Log.debug input.hexdump('input ')
|
83
|
+
output = CoRE::CoAP.parse(input)
|
84
|
+
Log.debug output
|
85
|
+
Log.debug "critical?: #{output.options.map { |k, v| [k, CoRE::CoAP.critical?(k)]}.inspect}"
|
71
86
|
w = output.to_wire
|
87
|
+
Log.debug w.hexdump('output ')
|
72
88
|
assert_equal input, w
|
73
89
|
end
|
74
90
|
|
75
|
-
# XXX TODO add token tests
|
91
|
+
# XXX TODO add token tests
|
76
92
|
|
77
93
|
def test_fenceposting
|
78
|
-
m = CoAP::Message.new(:con, :get, 4711,
|
79
|
-
|
94
|
+
m = CoRE::CoAP::Message.new(:con, :get, 4711, "Hello")
|
95
|
+
Log.debug m
|
96
|
+
m.options = { max_age: 987654321, if_none_match: true }
|
97
|
+
Log.debug m
|
80
98
|
me = m.to_wire
|
81
|
-
|
82
|
-
|
99
|
+
Log.debug me.inspect
|
100
|
+
m2 = CoRE::CoAP::parse(me)
|
101
|
+
Log.debug m2
|
102
|
+
m.options = CoRE::CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
83
103
|
assert_equal m2, m
|
84
104
|
end
|
85
105
|
|
86
106
|
def test_fenceposting2
|
87
|
-
m = CoAP::Message.new(:con, :get, 4711,
|
88
|
-
|
107
|
+
m = CoRE::CoAP::Message.new(:con, :get, 4711, "Hello")
|
108
|
+
Log.debug m
|
109
|
+
m.options = { 4711 => ["foo"], 256 => ["bar"] }
|
110
|
+
Log.debug m
|
89
111
|
me = m.to_wire
|
90
|
-
|
91
|
-
|
112
|
+
Log.debug me.inspect
|
113
|
+
m2 = CoRE::CoAP::parse(me)
|
114
|
+
Log.debug m2
|
115
|
+
m.options = CoRE::CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
92
116
|
assert_equal m2, m
|
93
117
|
end
|
94
118
|
|
95
119
|
def test_emptypayload
|
96
|
-
m = CoAP::Message.new(:con, :get, 4711,
|
97
|
-
|
120
|
+
m = CoRE::CoAP::Message.new(:con, :get, 4711, "")
|
121
|
+
Log.debug m
|
122
|
+
m.options = { 4711 => ["foo"], 256 => ["bar"], 65535 => ["abc" * 100] }
|
123
|
+
Log.debug m
|
98
124
|
me = m.to_wire
|
99
|
-
|
100
|
-
|
125
|
+
Log.debug me.inspect
|
126
|
+
m2 = CoRE::CoAP::parse(me)
|
127
|
+
Log.debug m2
|
128
|
+
m.options = CoRE::CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
101
129
|
assert_equal m2, m
|
102
130
|
end
|
103
131
|
|
104
132
|
def test_option_numbers
|
105
|
-
(0...
|
106
|
-
unless CoAP::OPTIONS[on] # those might have special semantics
|
107
|
-
m = CoAP::Message.new(:con, :get, 4711,
|
108
|
-
m.options = { on => [
|
133
|
+
(0...65536).each do |on|
|
134
|
+
unless CoRE::CoAP::OPTIONS[on] # those might have special semantics
|
135
|
+
m = CoRE::CoAP::Message.new(:con, :get, 4711, "Hello")
|
136
|
+
m.options = { on => [""] }
|
109
137
|
me = m.to_wire
|
110
|
-
m2 = CoAP
|
111
|
-
m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
138
|
+
m2 = CoRE::CoAP::parse(me)
|
139
|
+
m.options = CoRE::CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
112
140
|
assert_equal m2, m
|
113
141
|
end
|
114
142
|
end
|
115
143
|
end
|
116
144
|
|
117
145
|
def test_option_lengths
|
118
|
-
(0...
|
119
|
-
m = CoAP::Message.new(:con, :get, 4711,
|
120
|
-
m.options = { 99 => [
|
146
|
+
(0...1035).each do |ol|
|
147
|
+
m = CoRE::CoAP::Message.new(:con, :get, 4711, "Hello")
|
148
|
+
m.options = { 99 => ["x"*ol] }
|
121
149
|
me = m.to_wire
|
122
|
-
m2 = CoAP
|
123
|
-
m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
150
|
+
m2 = CoRE::CoAP::parse(me)
|
151
|
+
m.options = CoRE::CoAP::DEFAULTING_OPTIONS.merge(m.options)
|
124
152
|
assert_equal m2, m
|
125
153
|
end
|
126
154
|
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coap
|
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
|
- Carsten Bormann
|
8
8
|
- Simon Frerichs
|
9
|
+
- henning mueller
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2015-01-20 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
@@ -17,56 +18,131 @@ dependencies:
|
|
17
18
|
requirements:
|
18
19
|
- - "~>"
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: '1.
|
21
|
+
version: '1.6'
|
21
22
|
type: :development
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
26
|
- - "~>"
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: '1.
|
28
|
+
version: '1.6'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: coveralls
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0.7'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.7'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: faker
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.4'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.4'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: minitest
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '5.4'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '5.4'
|
28
71
|
- !ruby/object:Gem::Dependency
|
29
72
|
name: rake
|
30
73
|
requirement: !ruby/object:Gem::Requirement
|
31
74
|
requirements:
|
32
|
-
- - "
|
75
|
+
- - "~>"
|
33
76
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
77
|
+
version: '10.3'
|
35
78
|
type: :development
|
36
79
|
prerelease: false
|
37
80
|
version_requirements: !ruby/object:Gem::Requirement
|
38
81
|
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '10.3'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: rspec
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '3.0'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '3.0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: celluloid-io
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0.16'
|
39
106
|
- - ">="
|
40
107
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
108
|
+
version: 0.16.1
|
109
|
+
type: :runtime
|
110
|
+
prerelease: false
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0.16'
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.16.1
|
42
119
|
- !ruby/object:Gem::Dependency
|
43
120
|
name: resolv-ipv6favor
|
44
121
|
requirement: !ruby/object:Gem::Requirement
|
45
122
|
requirements:
|
46
|
-
- - "
|
123
|
+
- - "~>"
|
47
124
|
- !ruby/object:Gem::Version
|
48
125
|
version: '0'
|
49
126
|
type: :runtime
|
50
127
|
prerelease: false
|
51
128
|
version_requirements: !ruby/object:Gem::Requirement
|
52
129
|
requirements:
|
53
|
-
- - "
|
130
|
+
- - "~>"
|
54
131
|
- !ruby/object:Gem::Version
|
55
132
|
version: '0'
|
56
133
|
description: |-
|
57
|
-
Ruby
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
email:
|
67
|
-
- morpheus@morphhome.net
|
134
|
+
Pure Ruby implementation of RFC 7252 (Constrained Application
|
135
|
+
Protocol (CoAP)). The Constrained Application Protocol (CoAP) is a
|
136
|
+
specialized web transfer protocol for use with constrained nodes and
|
137
|
+
constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit
|
138
|
+
microcontrollers with small amounts of ROM and RAM, while constrained
|
139
|
+
networks such as IPv6 over Low-Power Wireless Personal Area Networks
|
140
|
+
(6LoWPANs) often have high packet error rates and a typical throughput of
|
141
|
+
10s of kbit/s. The protocol is designed for machine-to-machine (M2M)
|
142
|
+
applications such as smart energy and building automation.
|
143
|
+
email: henning@orgizm.net
|
68
144
|
executables:
|
69
|
-
-
|
145
|
+
- coap
|
70
146
|
extensions: []
|
71
147
|
extra_rdoc_files: []
|
72
148
|
files:
|
@@ -76,22 +152,42 @@ files:
|
|
76
152
|
- LICENSE
|
77
153
|
- README.md
|
78
154
|
- Rakefile
|
79
|
-
- bin/
|
155
|
+
- bin/coap
|
80
156
|
- coap.gemspec
|
81
157
|
- lib/coap.rb
|
82
|
-
- lib/
|
83
|
-
- lib/coap
|
84
|
-
- lib/coap/
|
85
|
-
- lib/coap/
|
86
|
-
- lib/coap/
|
87
|
-
- lib/coap/
|
88
|
-
- lib/coap/
|
89
|
-
- lib/
|
90
|
-
-
|
91
|
-
-
|
158
|
+
- lib/core.rb
|
159
|
+
- lib/core/coap.rb
|
160
|
+
- lib/core/coap/block.rb
|
161
|
+
- lib/core/coap/client.rb
|
162
|
+
- lib/core/coap/coap.rb
|
163
|
+
- lib/core/coap/coding.rb
|
164
|
+
- lib/core/coap/fsm.rb
|
165
|
+
- lib/core/coap/message.rb
|
166
|
+
- lib/core/coap/observer.rb
|
167
|
+
- lib/core/coap/options.rb
|
168
|
+
- lib/core/coap/registry.rb
|
169
|
+
- lib/core/coap/registry/content_formats.yml
|
170
|
+
- lib/core/coap/resolver.rb
|
171
|
+
- lib/core/coap/transmission.rb
|
172
|
+
- lib/core/coap/types.rb
|
173
|
+
- lib/core/coap/utility.rb
|
174
|
+
- lib/core/coap/version.rb
|
175
|
+
- lib/core/core_ext/socket.rb
|
176
|
+
- lib/core/hexdump.rb
|
177
|
+
- lib/core/link.rb
|
178
|
+
- lib/core/os.rb
|
179
|
+
- spec/block_spec.rb
|
180
|
+
- spec/client_spec.rb
|
181
|
+
- spec/fixtures/coap.me.link
|
182
|
+
- spec/link_spec.rb
|
183
|
+
- spec/registry_spec.rb
|
184
|
+
- spec/resolver_spec.rb
|
185
|
+
- spec/spec_helper.rb
|
186
|
+
- spec/transmission_spec.rb
|
187
|
+
- test/helper.rb
|
92
188
|
- test/test_client.rb
|
93
189
|
- test/test_message.rb
|
94
|
-
homepage: https://github.com/
|
190
|
+
homepage: https://github.com/nning/coap
|
95
191
|
licenses:
|
96
192
|
- MIT
|
97
193
|
metadata: {}
|
@@ -111,12 +207,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
207
|
version: '0'
|
112
208
|
requirements: []
|
113
209
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
210
|
+
rubygems_version: 2.4.5
|
115
211
|
signing_key:
|
116
212
|
specification_version: 4
|
117
|
-
summary: Ruby
|
213
|
+
summary: Pure Ruby implementation of RFC 7252 (Constrained Application Protocol (CoAP))
|
118
214
|
test_files:
|
119
|
-
-
|
120
|
-
-
|
215
|
+
- spec/block_spec.rb
|
216
|
+
- spec/client_spec.rb
|
217
|
+
- spec/fixtures/coap.me.link
|
218
|
+
- spec/link_spec.rb
|
219
|
+
- spec/registry_spec.rb
|
220
|
+
- spec/resolver_spec.rb
|
221
|
+
- spec/spec_helper.rb
|
222
|
+
- spec/transmission_spec.rb
|
223
|
+
- test/helper.rb
|
121
224
|
- test/test_client.rb
|
122
225
|
- test/test_message.rb
|