pdu_tools 0.0.10 → 0.0.11

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