pdu_tools 0.0.12 → 0.0.13

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