pdu_tools 0.0.10 → 0.0.11
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 +7 -0
- data/lib/pdu_tools/decoder.rb +32 -19
- data/lib/pdu_tools/encoder.rb +5 -1
- data/lib/pdu_tools/helpers.rb +6 -2
- data/lib/pdu_tools/message_part.rb +2 -1
- data/spec/decoder_spec.rb +3 -2
- data/spec/encoder_spec.rb +41 -26
- metadata +12 -18
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 690cdec3a163cbd9fff055805df869c6775dee04
|
4
|
+
data.tar.gz: c606392f2548459453516d0d4117d06a0db93e94
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 66f929ea3c8a23f344479a418a9a29fb10606eb7e70c901236aade26565a82a27f466938a2537282537927e61dd81200633fdccdd64261bb6751ce83df942949
|
7
|
+
data.tar.gz: 9dfbb96261462bea76962f25610fbf219b928c8632b0be8b13d36f38fb6850337bb329532592d726bbbad26977f20a8ea258757f2a9e066705ef6669fdfdf369
|
data/lib/pdu_tools/decoder.rb
CHANGED
@@ -174,7 +174,7 @@ module PDUTools
|
|
174
174
|
end
|
175
175
|
case @data_coding_scheme[:alphabet]
|
176
176
|
when :a7bit
|
177
|
-
@message = gsm0338_to_utf8 decode7bit(@pdu_hex, @offset_7bit)
|
177
|
+
@message = gsm0338_to_utf8 decode7bit(@pdu_hex, data_length, @offset_7bit)
|
178
178
|
when :a8bit
|
179
179
|
@message = gsm0338_to_utf8 decode8bit(@pdu_hex, data_length)
|
180
180
|
when :a16bit
|
@@ -183,25 +183,38 @@ module PDUTools
|
|
183
183
|
end
|
184
184
|
|
185
185
|
def parse_user_data_header header
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
186
|
+
ret = {}
|
187
|
+
while header.length > 0
|
188
|
+
iei_type = take 2, :string, header
|
189
|
+
iei_length = take 2, :integer, header
|
190
|
+
iei_data = take iei_length * 2, :string, header
|
191
|
+
case iei_type
|
192
|
+
when "00"
|
193
|
+
reference = take 2, :integer, iei_data
|
194
|
+
parts = take 2, :integer, iei_data
|
195
|
+
part_number = take 2, :integer, iei_data
|
196
|
+
ret[:multipart] = { reference: reference, parts: parts, part_number: part_number }
|
197
|
+
@offset_7bit = 0
|
198
|
+
when '05'
|
199
|
+
dest_port = take 4, :integer, iei_data
|
200
|
+
source_port = take 4, :integer, iei_data
|
201
|
+
ret[:addressing] = { source: source_port, destination: dest_port }
|
202
|
+
when "08"
|
203
|
+
reference = take 4, :integer, iei_data
|
204
|
+
parts = take 2, :integer, iei_data
|
205
|
+
part_number = take 2, :integer, iei_data
|
206
|
+
ret[:multipart] = { reference: reference, parts: parts, part_number: part_number }
|
207
|
+
@offset_7bit += 1
|
208
|
+
else
|
209
|
+
ret[:unknown] ||= {}
|
210
|
+
ret[:unknown][iei_type] = iei_data.dup
|
211
|
+
iei_data = ''
|
212
|
+
end
|
213
|
+
if iei_data.length != 0
|
214
|
+
raise DecodeError, "Failure to decode: iei length is not correct for type"
|
215
|
+
end
|
197
216
|
end
|
198
|
-
|
199
|
-
part_number = take 2, :integer, header
|
200
|
-
{
|
201
|
-
reference: reference,
|
202
|
-
parts: parts,
|
203
|
-
part_number: part_number
|
204
|
-
}
|
217
|
+
ret
|
205
218
|
end
|
206
219
|
|
207
220
|
DecodeError = Class.new(StandardError)
|
data/lib/pdu_tools/encoder.rb
CHANGED
@@ -102,7 +102,11 @@ module PDUTools
|
|
102
102
|
def prepare_recipient recipient
|
103
103
|
Phoner::Phone.default_country_code ||= "421"
|
104
104
|
address_type = "91" # International
|
105
|
-
|
105
|
+
if @options[:force_recipient]
|
106
|
+
address = recipient
|
107
|
+
else
|
108
|
+
address = Phoner::Phone.parse(recipient).format("%c%a%n")
|
109
|
+
end
|
106
110
|
address_length = "%02X" % address.length
|
107
111
|
address_encoded = normal2swapped address
|
108
112
|
address_length + address_type + address_encoded
|
data/lib/pdu_tools/helpers.rb
CHANGED
@@ -73,7 +73,7 @@ module PDUTools
|
|
73
73
|
string.scan(/../).collect(&:reverse).join.gsub(/F$/,'')
|
74
74
|
end
|
75
75
|
|
76
|
-
def decode7bit textdata, offset=1
|
76
|
+
def decode7bit textdata, length = nil, offset = 1
|
77
77
|
ret = ""
|
78
78
|
bytes = []
|
79
79
|
textdata.split('').each_slice(2) do |s|
|
@@ -100,7 +100,11 @@ module PDUTools
|
|
100
100
|
end
|
101
101
|
next_septet = nil
|
102
102
|
end
|
103
|
-
|
103
|
+
if length
|
104
|
+
ret[0..length - 1]
|
105
|
+
else
|
106
|
+
ret
|
107
|
+
end
|
104
108
|
end
|
105
109
|
|
106
110
|
def decode8bit data, length
|
data/spec/decoder_spec.rb
CHANGED
@@ -28,8 +28,9 @@ describe PDUTools::Decoder do
|
|
28
28
|
it "should decode" do
|
29
29
|
message_part = decoder.decode
|
30
30
|
expect(message_part.user_data_header).to be_present
|
31
|
-
expect(message_part.user_data_header[:
|
32
|
-
expect(message_part.user_data_header[:
|
31
|
+
expect(message_part.user_data_header[:multipart]).to be_present
|
32
|
+
expect(message_part.user_data_header[:multipart][:parts]).to eq 2
|
33
|
+
expect(message_part.user_data_header[:multipart][:part_number]).to eq 1
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
data/spec/encoder_spec.rb
CHANGED
@@ -2,41 +2,56 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe PDUTools::Encoder do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
context "
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
context "encoding" do
|
6
|
+
let(:recipient) { "+421 900 100 100" }
|
7
|
+
let(:encoder) { PDUTools::Encoder.new recipient: recipient, message: message }
|
8
|
+
context "short" do
|
9
|
+
context "7bit text" do
|
10
|
+
let(:message) { "This is a test message" }
|
11
|
+
it "should encode pdu" do
|
12
|
+
pdus = encoder.encode
|
13
|
+
expect(pdus.size).to eq(1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "16bit text" do
|
18
|
+
let(:message) { "This is diacritics ľščťžýáíäúôň" }
|
19
|
+
it "should encode pdu" do
|
20
|
+
pdus = encoder.encode
|
21
|
+
expect(pdus.size).to eq(1)
|
22
|
+
end
|
13
23
|
end
|
14
24
|
end
|
15
25
|
|
16
|
-
context "
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
26
|
+
context "lonh" do
|
27
|
+
context "7bit text" do
|
28
|
+
let(:message) { "This is a test message" * 10 }
|
29
|
+
it "should encode pdu" do
|
30
|
+
pdus = encoder.encode
|
31
|
+
expect(pdus.size).to eq(2)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "16bit text" do
|
36
|
+
let(:message) { "This is diacritics ľščťžýáíäúôň" * 3 }
|
37
|
+
it "should encode pdu" do
|
38
|
+
pdus = encoder.encode
|
39
|
+
expect(pdus.size).to eq(2)
|
40
|
+
end
|
21
41
|
end
|
22
42
|
end
|
23
43
|
end
|
24
44
|
|
25
|
-
context "
|
26
|
-
|
27
|
-
|
28
|
-
it "should encode pdu" do
|
29
|
-
pdus = encoder.encode
|
30
|
-
expect(pdus.size).to eq(2)
|
31
|
-
end
|
45
|
+
context "recipient" do
|
46
|
+
it "should fail on 71730 without force" do
|
47
|
+
expect { PDUTools::Encoder.new recipient: "71730", message: "test" }.to raise_error(Phoner::AreaCodeError)
|
32
48
|
end
|
33
49
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
expect(pdus.size).to eq(2)
|
39
|
-
end
|
50
|
+
it "should succeed on 71730 with force" do
|
51
|
+
encoder = PDUTools::Encoder.new recipient: "71730", force_recipient: true, message: "test"
|
52
|
+
pdus = encoder.encode
|
53
|
+
expect(pdus.size).to eq(1)
|
40
54
|
end
|
55
|
+
|
41
56
|
end
|
42
57
|
end
|
metadata
CHANGED
@@ -1,46 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdu_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.11
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Filip Zachar
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: phone
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.2.3
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.2.3
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activesupport
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 3.2.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 3.2.0
|
46
41
|
description: Tools for encoding and decoding GSM SMS PDUs.
|
@@ -49,38 +44,37 @@ executables: []
|
|
49
44
|
extensions: []
|
50
45
|
extra_rdoc_files: []
|
51
46
|
files:
|
47
|
+
- lib/pdu_tools.rb
|
52
48
|
- lib/pdu_tools/decoder.rb
|
53
49
|
- lib/pdu_tools/encoder.rb
|
54
50
|
- lib/pdu_tools/helpers.rb
|
55
51
|
- lib/pdu_tools/message_part.rb
|
56
52
|
- lib/pdu_tools/pdu.rb
|
57
|
-
- lib/pdu_tools.rb
|
58
53
|
- spec/decoder_spec.rb
|
59
54
|
- spec/encoder_spec.rb
|
60
55
|
- spec/spec_helper.rb
|
61
56
|
homepage: https://github.com/tulak/pdu_tools
|
62
57
|
licenses:
|
63
58
|
- MIT
|
59
|
+
metadata: {}
|
64
60
|
post_install_message:
|
65
61
|
rdoc_options: []
|
66
62
|
require_paths:
|
67
63
|
- lib
|
68
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
65
|
requirements:
|
71
|
-
- -
|
66
|
+
- - ">="
|
72
67
|
- !ruby/object:Gem::Version
|
73
68
|
version: '0'
|
74
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
70
|
requirements:
|
77
|
-
- -
|
71
|
+
- - ">="
|
78
72
|
- !ruby/object:Gem::Version
|
79
73
|
version: '0'
|
80
74
|
requirements: []
|
81
75
|
rubyforge_project:
|
82
|
-
rubygems_version:
|
76
|
+
rubygems_version: 2.5.1
|
83
77
|
signing_key:
|
84
|
-
specification_version:
|
78
|
+
specification_version: 4
|
85
79
|
summary: Tools for encoding and decoding GSM SMS PDUs.
|
86
80
|
test_files: []
|