pdu_tools 0.0.12 → 0.0.13

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
  SHA1:
3
- metadata.gz: 7a1d29b2c325be277c56302810bf5ff2d670bc0c
4
- data.tar.gz: da0a05535d770d5f9d6001f72b6b9cec8f04dd7a
3
+ metadata.gz: 2ab44edb2f04fb1f0a5072462e58031132ad9029
4
+ data.tar.gz: 19aa54ad9e78d2777562f6b42dce17b0ba2c9650
5
5
  SHA512:
6
- metadata.gz: f59b736743430da53b80d70dd663a0af00af5b3005ef0e6e58b50ca26f8966bbd87f5ced99516ea721da690e8f6f7f4861b862c52d944ba1dd245e6d875e7f57
7
- data.tar.gz: 3a0fcdee326d45a9947cfc1b3fab4bcefdbcd39131b701543d5c95e214efc91881196d62d5829ad17febbc8c81d6021aaeac3c531630b6c811bb7477b647940b
6
+ metadata.gz: cb4ce42a5f8ce1f126b3dbc1a3c55cb5597aa7340c693a1cbba075148e585bea3e7523499609fba908c110a3a99816a9b3f119bcf2d348c32be13110be4faeab
7
+ data.tar.gz: df3bcd1ecd21777b1c3eb422a92b163f8d74f37591e6511306197c76d4a970fbe2257085661025501a229d8f52ecfa641f07cee2da1b6a1bbdd7ee7937ae2b2a
@@ -18,9 +18,7 @@ module PDUTools
18
18
  @message_reference = take(2) if @pdu_type[:mti] == :sms_submit
19
19
  @address_length = take(2, :integer)
20
20
  @address_type = parse_address_type take(2)
21
- if [:national, :international, :a7bit].include? @address_type
22
- @address_length = @address_length.odd? ? @address_length + 1 : @address_length # Always take byte aligned - hexdecimal F is added when odd number
23
- end
21
+ @address_length = @address_length.odd? ? @address_length + 1 : @address_length # Always take byte aligned - hexdecimal F is added when odd number
24
22
  @address = parse_address take(@address_length), @address_type, @address_length
25
23
  @pid = take(2)
26
24
  @data_coding_scheme = parse_data_coding_scheme take(2, :binary)
@@ -65,16 +63,18 @@ module PDUTools
65
63
  end
66
64
 
67
65
  def parse_address_type type
68
- case type.to_i(16).to_s(2)[1,3]
69
- when "001"
70
- :international
71
- when "010", "100", "000"
72
- :national
73
- when "101"
74
- :a7bit
75
- else
76
- raise DecodeError, "unknown address type: #{type}"
77
- end
66
+ map = {
67
+ "000" => :unknown,
68
+ "001" => :international,
69
+ "010" => :national,
70
+ "011" => :network_specific,
71
+ "100" => :subscriber,
72
+ "101" => :a7bit,
73
+ "110" => :abbreviated,
74
+ "111" => :reserved
75
+ }
76
+ bin_type = type.to_i(16).to_s(2)[1,3]
77
+ map[bin_type]
78
78
  end
79
79
 
80
80
  def parse_address address, type, length
@@ -193,7 +193,7 @@ module PDUTools
193
193
  reference = take 2, :integer, iei_data
194
194
  parts = take 2, :integer, iei_data
195
195
  part_number = take 2, :integer, iei_data
196
- ret[:multipart] = { reference: reference, parts: parts, part_number: part_number }
196
+ ret[:multipart] = { reference: reference, parts: parts, part_number: part_number, iei_type: iei_type }
197
197
  @offset_7bit = 0
198
198
  when '05'
199
199
  dest_port = take 4, :integer, iei_data
@@ -203,8 +203,8 @@ module PDUTools
203
203
  reference = take 4, :integer, iei_data
204
204
  parts = take 2, :integer, iei_data
205
205
  part_number = take 2, :integer, iei_data
206
- ret[:multipart] = { reference: reference, parts: parts, part_number: part_number }
207
- @offset_7bit += 1
206
+ ret[:multipart] = { reference: reference, parts: parts, part_number: part_number, iei_type: iei_type }
207
+ @offset_7bit = 1
208
208
  else
209
209
  ret[:unknown] ||= {}
210
210
  ret[:unknown][iei_type] = iei_data.dup
@@ -219,4 +219,4 @@ module PDUTools
219
219
 
220
220
  DecodeError = Class.new(StandardError)
221
221
  end
222
- end
222
+ end
@@ -79,14 +79,6 @@ describe PDUTools::Decoder do
79
79
  end
80
80
  end
81
81
 
82
- context "Raise DecodeError when cannot decode" do
83
- let(:pdu) { "07912491500000410403F055F542F14101124175208030CD30BD0C8A81DC6F7B1EF426AFC37A17C8FA6687D5F432E84D5E87F56F7B1D3467D7F5E23AA856ABB940" }
84
-
85
- it do
86
- expect{ decoder.decode }.to raise_error(PDUTools::Decoder::DecodeError)
87
- end
88
- end
89
-
90
82
  context "Decode UTF-16 / UCS2 data" do
91
83
  let(:pdu) { "0791249194099990040C9124910408426100087101303182438004D83DDC4D" }
92
84
  let(:utf16_data) { "D83DDC4D" } # thumbs up smiley in UTF-16 / UCS2
@@ -99,4 +91,4 @@ describe PDUTools::Decoder do
99
91
  end
100
92
  end
101
93
 
102
- end
94
+ end
data/test.rb ADDED
@@ -0,0 +1,24 @@
1
+ require_relative('lib/pdu_tools')
2
+
3
+ pdus_db = Marshal.load(File.read('sms_pdu.marshal'));
4
+
5
+ found = []
6
+ errors = []
7
+
8
+ pdus_db.each do |pdu_data|
9
+ id, pdus = pdu_data
10
+
11
+ pdus.split(/\n/).each do |pdu|
12
+ begin
13
+ decoder = PDUTools::Decoder.new(pdu)
14
+ decoder.decode
15
+ udh = decoder.instance_eval{ @user_data_header }
16
+ mp = udh and udh[:multipart]
17
+ if mp and mp[:iei_type] == '08'
18
+ found << id
19
+ end
20
+ rescue => e
21
+ errors << [e, id, pdu]
22
+ end
23
+ end
24
+ end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdu_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Filip Zachar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-24 00:00:00.000000000 Z
11
+ date: 2018-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phone
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.2.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.2.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 3.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.2.0
41
41
  description: Tools for encoding and decoding GSM SMS PDUs.
@@ -44,15 +44,16 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
+ - lib/pdu_tools.rb
47
48
  - lib/pdu_tools/decoder.rb
48
49
  - lib/pdu_tools/encoder.rb
49
50
  - lib/pdu_tools/helpers.rb
50
51
  - lib/pdu_tools/message_part.rb
51
52
  - lib/pdu_tools/pdu.rb
52
- - lib/pdu_tools.rb
53
53
  - spec/decoder_spec.rb
54
54
  - spec/encoder_spec.rb
55
55
  - spec/spec_helper.rb
56
+ - test.rb
56
57
  homepage: https://github.com/tulak/pdu_tools
57
58
  licenses:
58
59
  - MIT
@@ -63,17 +64,17 @@ require_paths:
63
64
  - lib
64
65
  required_ruby_version: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - '>='
67
+ - - ">="
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  required_rubygems_version: !ruby/object:Gem::Requirement
70
71
  requirements:
71
- - - '>='
72
+ - - ">="
72
73
  - !ruby/object:Gem::Version
73
74
  version: '0'
74
75
  requirements: []
75
76
  rubyforge_project:
76
- rubygems_version: 2.0.14.1
77
+ rubygems_version: 2.6.11
77
78
  signing_key:
78
79
  specification_version: 4
79
80
  summary: Tools for encoding and decoding GSM SMS PDUs.