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.
@@ -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
@@ -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
- iei = take 2, :string, header
187
- header_length = take 2, :integer, header
188
- case iei
189
- when "00"
190
- reference = take 2, :integer, header
191
- @offset_7bit = 0
192
- when "08"
193
- reference = take 4, :integer, header
194
- @offset_7bit = 1
195
- else
196
- raise DecodeError, "unsupported Information Element Identifier in User Data Header: #{iei}"
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
- parts = take 2, :integer, header
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)
@@ -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
- address = Phoner::Phone.parse(recipient).format("%c%a%n")
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
@@ -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
- ret
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
@@ -14,7 +14,8 @@ module PDUTools
14
14
 
15
15
  def complete?
16
16
  return true unless @user_data_header
17
- if @user_data_header[:parts] > 1
17
+ return true unless @user_data_header[:multipart]
18
+ if @user_data_header[:multipart][:parts] > 1
18
19
  false
19
20
  else
20
21
  true
@@ -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[:parts]).to eq 2
32
- expect(message_part.user_data_header[:part_number]).to eq 1
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
 
@@ -2,41 +2,56 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe PDUTools::Encoder do
5
- let(:recipient) { "+421 900 100 100" }
6
- let(:encoder) { PDUTools::Encoder.new recipient: recipient, message: message }
7
- context "short" do
8
- context "7bit text" do
9
- let(:message) { "This is a test message" }
10
- it "should encode pdu" do
11
- pdus = encoder.encode
12
- expect(pdus.size).to eq(1)
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 "16bit text" do
17
- let(:message) { "This is diacritics ľščťžýáíäúôň" }
18
- it "should encode pdu" do
19
- pdus = encoder.encode
20
- expect(pdus.size).to eq(1)
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 "lonh" do
26
- context "7bit text" do
27
- let(:message) { "This is a test message" * 10 }
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
- context "16bit text" do
35
- let(:message) { "This is diacritics ľščťžýáíäúôň" * 3 }
36
- it "should encode pdu" do
37
- pdus = encoder.encode
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.10
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: 2015-12-14 00:00:00.000000000 Z
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: 1.8.23.2
76
+ rubygems_version: 2.5.1
83
77
  signing_key:
84
- specification_version: 3
78
+ specification_version: 4
85
79
  summary: Tools for encoding and decoding GSM SMS PDUs.
86
80
  test_files: []