coap 0.0.16 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|