pdu_sms 0.2.1 → 0.2.2
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 +4 -4
- data/bin/console +1 -1
- data/lib/pdu_sms/helpers.rb +10 -9
- data/lib/pdu_sms/phone.rb +6 -8
- data/lib/pdu_sms/service_center_time_stamp.rb +2 -4
- data/lib/pdu_sms/user_data.rb +10 -12
- data/lib/pdu_sms/validity_period.rb +2 -3
- data/lib/pdu_sms/version.rb +1 -1
- data/lib/pdu_sms.rb +0 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a560cefebc50cea65ac1fa3e2d2c8806157500d8
|
|
4
|
+
data.tar.gz: b181a063478093c3e5d190188ca1872ef873f040
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5c9c5745bc04b440abdf1d1b7768c1e10720366dc51c5bbe810768c1ff14e04d88ae51dc0916a54f954c6b28f5a1a542760b62c004af8b753162f7d752c69e1c
|
|
7
|
+
data.tar.gz: d965d612c272ebfade71dd99df18bd34b8b40c8d161b3422515d5159a09c36e2e8a85ed5f4d1c2e9795637d4dcba25761625d713c4cc81d8bfbd8c24b20fa2ad
|
data/bin/console
CHANGED
data/lib/pdu_sms/helpers.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module PduSms
|
|
2
|
+
|
|
2
3
|
module Helpers
|
|
3
4
|
|
|
4
|
-
def encode_bcd(str)
|
|
5
|
+
def self.encode_bcd(str)
|
|
5
6
|
if String == str.class and str.length % 2 == 0
|
|
6
7
|
str.split('').enum_for(:each_slice, 2).to_a.collect{|array| array[0], array[1] = array[1], array[0]}.join
|
|
7
8
|
else
|
|
@@ -9,23 +10,23 @@ module PduSms
|
|
|
9
10
|
end
|
|
10
11
|
end
|
|
11
12
|
|
|
12
|
-
def decode_bcd(str)
|
|
13
|
+
def self.decode_bcd(str)
|
|
13
14
|
encode_bcd(str)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
def decode_ucs2(message)
|
|
17
|
+
def self.decode_ucs2(message)
|
|
17
18
|
message.split('').enum_for(:each_slice,4).to_a.collect(&:join).collect {|o| o.to_i(16).chr(Encoding::UTF_8)}.join
|
|
18
19
|
end
|
|
19
20
|
|
|
20
|
-
def encode_ucs2(message)
|
|
21
|
+
def self.encode_ucs2(message)
|
|
21
22
|
message.chars.to_a.collect {|char| '%04X' % char.ord}.join
|
|
22
23
|
end
|
|
23
24
|
|
|
24
|
-
def is_7bit?(message)
|
|
25
|
+
def self.is_7bit?(message)
|
|
25
26
|
/^[A-Za-z0-9\@£\$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ\!\"#¤\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?¡¿ÄÖÑܧäöñüà\^\{\}\\\[~\]\|€]*$/ === message
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
def encode_7bit(string)
|
|
29
|
+
def self.encode_7bit(string)
|
|
29
30
|
string_encode = []
|
|
30
31
|
string.chars.each_slice(8).each do |chars|
|
|
31
32
|
chars.each_with_index do |char, i|
|
|
@@ -41,7 +42,7 @@ module PduSms
|
|
|
41
42
|
string_encode.collect {|x| '%02X' % x.to_i(2)}.join.upcase
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
def decode_7bit(string)
|
|
45
|
+
def self.decode_7bit(string)
|
|
45
46
|
text = ''
|
|
46
47
|
string.split('').each_slice(2).collect {|s| '%08b' % s.join.to_i(16)}.each_slice(7) do |bytes|
|
|
47
48
|
ending = ''
|
|
@@ -54,11 +55,11 @@ module PduSms
|
|
|
54
55
|
text
|
|
55
56
|
end
|
|
56
57
|
|
|
57
|
-
def encode_8bit(string)
|
|
58
|
+
def self.encode_8bit(string)
|
|
58
59
|
string.chars.to_a.collect {|char| '%02X' % char.ord }.join
|
|
59
60
|
end
|
|
60
61
|
|
|
61
|
-
def decode_8bit(string)
|
|
62
|
+
def self.decode_8bit(string)
|
|
62
63
|
string.split('').enum_for(:each_slice, 2).to_a.collect(&:join).collect {|char| char.to_i(16).chr}.join
|
|
63
64
|
end
|
|
64
65
|
|
data/lib/pdu_sms/phone.rb
CHANGED
|
@@ -2,8 +2,6 @@ module PduSms
|
|
|
2
2
|
|
|
3
3
|
class Phone
|
|
4
4
|
|
|
5
|
-
include Helpers
|
|
6
|
-
|
|
7
5
|
attr_reader(:number_plan_identifier, :type_number)
|
|
8
6
|
|
|
9
7
|
@phone_number = ''
|
|
@@ -27,7 +25,7 @@ module PduSms
|
|
|
27
25
|
elsif /^\d+$/ === phone_number
|
|
28
26
|
@number_plan_identifier = ID_UNKNOWN
|
|
29
27
|
@type_number = TP_ISDN
|
|
30
|
-
elsif is_7bit?(phone_number)
|
|
28
|
+
elsif Helpers.is_7bit?(phone_number)
|
|
31
29
|
@number_plan_identifier = ID_ALPHANUMERIC
|
|
32
30
|
@type_number = TP_UNKNOWN
|
|
33
31
|
else
|
|
@@ -38,7 +36,7 @@ module PduSms
|
|
|
38
36
|
|
|
39
37
|
def _check_phone?
|
|
40
38
|
if @number_plan_identifier == ID_ALPHANUMERIC
|
|
41
|
-
is_7bit?(@phone_number)
|
|
39
|
+
Helpers.is_7bit?(@phone_number)
|
|
42
40
|
else
|
|
43
41
|
/^\d+$/ === @phone_number
|
|
44
42
|
end
|
|
@@ -46,7 +44,7 @@ module PduSms
|
|
|
46
44
|
|
|
47
45
|
def _get_hex_type_and_phone
|
|
48
46
|
if @number_plan_identifier == ID_ALPHANUMERIC
|
|
49
|
-
'%s%s' % [_type_of_address_hex, encode_7bit(@phone_number)]
|
|
47
|
+
'%s%s' % [_type_of_address_hex, Helpers.encode_7bit(@phone_number)]
|
|
50
48
|
else
|
|
51
49
|
'%s%s' % [_type_of_address_hex, _convert_to_bcd_format]
|
|
52
50
|
end
|
|
@@ -95,7 +93,7 @@ module PduSms
|
|
|
95
93
|
if clear_phone.length % 2 != 0
|
|
96
94
|
clear_phone += 'F'
|
|
97
95
|
end
|
|
98
|
-
encode_bcd(clear_phone)
|
|
96
|
+
Helpers.encode_bcd(clear_phone)
|
|
99
97
|
end
|
|
100
98
|
|
|
101
99
|
def _convert_to_normal_format(bcd)
|
|
@@ -108,9 +106,9 @@ module PduSms
|
|
|
108
106
|
@number_plan_identifier = number_type[1..3].to_i(2)
|
|
109
107
|
@type_number = number_type[4..7].to_i(2)
|
|
110
108
|
if @number_plan_identifier == ID_ALPHANUMERIC
|
|
111
|
-
@phone_number = decode_7bit(bcd[2..-1])
|
|
109
|
+
@phone_number = Helpers.decode_7bit(bcd[2..-1])
|
|
112
110
|
else
|
|
113
|
-
@phone_number = decode_bcd(bcd[2..-1])[/[fF]$/] ? decode_bcd(bcd[2..-1])[0..-2] : decode_bcd(bcd[2..-1])
|
|
111
|
+
@phone_number = Helpers.decode_bcd(bcd[2..-1])[/[fF]$/] ? Helpers.decode_bcd(bcd[2..-1])[0..-2] : Helpers.decode_bcd(bcd[2..-1])
|
|
114
112
|
end
|
|
115
113
|
self
|
|
116
114
|
end
|
|
@@ -4,8 +4,6 @@ module PduSms
|
|
|
4
4
|
|
|
5
5
|
class ServiceCenterTimeStamp
|
|
6
6
|
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
7
|
def initialize(type, data)
|
|
10
8
|
if type == :encode_sc
|
|
11
9
|
@scts = _absolute_timestamp data
|
|
@@ -57,11 +55,11 @@ module PduSms
|
|
|
57
55
|
tz[0] = ?1
|
|
58
56
|
date_time += '%02X' % tz.to_i(2)
|
|
59
57
|
end
|
|
60
|
-
@scts = encode_bcd(date_time)
|
|
58
|
+
@scts = Helpers.encode_bcd(date_time)
|
|
61
59
|
end
|
|
62
60
|
|
|
63
61
|
def _absolute_pdu(vp)
|
|
64
|
-
ss = decode_bcd(vp)
|
|
62
|
+
ss = Helpers.decode_bcd(vp)
|
|
65
63
|
year, month, day, hours, minutes, seconds, zone_quarter = Time.now.year.to_s[0..1] + ss[0..1], ss[2..3], ss[4..5], ss[6..7], ss[8..9], ss[10..11], ss[12..13]
|
|
66
64
|
tz = '%08b' % zone_quarter
|
|
67
65
|
if tz[0] == '1'
|
data/lib/pdu_sms/user_data.rb
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
module PduSms
|
|
2
2
|
class UserData
|
|
3
3
|
|
|
4
|
-
include Helpers
|
|
5
|
-
|
|
6
4
|
def initialize(message, coding, ied1: false, ied2: false, ied3: false, udhl: false, iei: false, iedl: false)
|
|
7
5
|
@coding = _check_coding coding
|
|
8
6
|
@message = _check_message message, coding, ied1
|
|
@@ -16,7 +14,7 @@ module PduSms
|
|
|
16
14
|
|
|
17
15
|
def UserData.encode_ms(message, coding=:auto)
|
|
18
16
|
message_array = [message]
|
|
19
|
-
coding = is_7bit?(message) ? ALPHABET_7BIT : ALPHABET_16BIT if coding == :auto
|
|
17
|
+
coding = Helpers.is_7bit?(message) ? ALPHABET_7BIT : ALPHABET_16BIT if coding == :auto
|
|
20
18
|
if coding == ALPHABET_7BIT
|
|
21
19
|
if message.length > 160
|
|
22
20
|
message_array = message.scan(/.{1,152}/)
|
|
@@ -49,13 +47,13 @@ module PduSms
|
|
|
49
47
|
dcs = DataCodingScheme.decode_ms(pdu_str)
|
|
50
48
|
if dcs.alphabet_7bit?
|
|
51
49
|
coding = dcs.get_alphabet.to_i(2)
|
|
52
|
-
message = decode_7bit(message)
|
|
50
|
+
message = Helpers.decode_7bit(message)
|
|
53
51
|
elsif dcs.alphabet_8bit?
|
|
54
52
|
coding = dcs.get_alphabet.to_i(2)
|
|
55
|
-
message = decode_8bit(message)
|
|
53
|
+
message = Helpers.decode_8bit(message)
|
|
56
54
|
elsif dcs.alphabet_16bit?
|
|
57
55
|
coding = dcs.get_alphabet.to_i(2)
|
|
58
|
-
message = decode_ucs2(message)
|
|
56
|
+
message = Helpers.decode_ucs2(message)
|
|
59
57
|
else
|
|
60
58
|
raise ArgumentError, 'The "pdu_str" is incorrect'
|
|
61
59
|
end
|
|
@@ -79,13 +77,13 @@ module PduSms
|
|
|
79
77
|
dcs = DataCodingScheme.decode_sc(pdu_str)
|
|
80
78
|
if dcs.alphabet_7bit?
|
|
81
79
|
coding = dcs.get_alphabet.to_i(2)
|
|
82
|
-
message = decode_7bit(message)
|
|
80
|
+
message = Helpers.decode_7bit(message)
|
|
83
81
|
elsif dcs.alphabet_8bit?
|
|
84
82
|
coding = dcs.get_alphabet.to_i(2)
|
|
85
|
-
message = decode_8bit(message)
|
|
83
|
+
message = Helpers.decode_8bit(message)
|
|
86
84
|
elsif dcs.alphabet_16bit?
|
|
87
85
|
coding = dcs.get_alphabet.to_i(2)
|
|
88
|
-
message = decode_ucs2(message)
|
|
86
|
+
message = Helpers.decode_ucs2(message)
|
|
89
87
|
else
|
|
90
88
|
raise ArgumentError, 'The "pdu_str" is incorrect'
|
|
91
89
|
end
|
|
@@ -176,11 +174,11 @@ module PduSms
|
|
|
176
174
|
def get_hex
|
|
177
175
|
message = case @coding
|
|
178
176
|
when ALPHABET_7BIT
|
|
179
|
-
encode_7bit(@message)
|
|
177
|
+
Helpers.encode_7bit(@message)
|
|
180
178
|
when ALPHABET_8BIT
|
|
181
|
-
encode_8bit(@message)
|
|
179
|
+
Helpers.encode_8bit(@message)
|
|
182
180
|
when ALPHABET_16BIT
|
|
183
|
-
encode_ucs2(@message)
|
|
181
|
+
Helpers.encode_ucs2(@message)
|
|
184
182
|
end
|
|
185
183
|
'%s%s%s%s%s%s%s' % [get_udhl, get_iei, get_iedl, get_ied1, get_ied2, get_ied3, message]
|
|
186
184
|
end
|
|
@@ -3,7 +3,6 @@ require 'date'
|
|
|
3
3
|
module PduSms
|
|
4
4
|
class ValidityPeriod
|
|
5
5
|
|
|
6
|
-
include Helpers
|
|
7
6
|
|
|
8
7
|
def initialize(type, times, type_time=false)
|
|
9
8
|
@type_time = type_time
|
|
@@ -145,11 +144,11 @@ module PduSms
|
|
|
145
144
|
tz[0] = ?1
|
|
146
145
|
date_time += '%02X' % tz.to_i(2)
|
|
147
146
|
end
|
|
148
|
-
@vp = encode_bcd(date_time)
|
|
147
|
+
@vp = Helpers.encode_bcd(date_time)
|
|
149
148
|
end
|
|
150
149
|
|
|
151
150
|
def _absolute_pdu(vp)
|
|
152
|
-
ss = decode_bcd(vp)
|
|
151
|
+
ss = Helpers.decode_bcd(vp)
|
|
153
152
|
year, month, day, hours, minutes, seconds, zone_quarter = Time.now.year.to_s[0..1] + ss[0..1], ss[2..3], ss[4..5], ss[6..7], ss[8..9], ss[10..11], ss[12..13]
|
|
154
153
|
tz = '%08b' % zone_quarter
|
|
155
154
|
if tz[0] == '1'
|
data/lib/pdu_sms/version.rb
CHANGED
data/lib/pdu_sms.rb
CHANGED