ruby_ucp 0.1.0

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.
Files changed (54) hide show
  1. data/CHANGELOG +42 -0
  2. data/LICENSE +505 -0
  3. data/README +10 -0
  4. data/Rakefile +118 -0
  5. data/Rakefile.orig +45 -0
  6. data/VERSION +1 -0
  7. data/lib/ruby_ucp.rb +42 -0
  8. data/lib/samples/main.rb +182 -0
  9. data/lib/ucp/base.rb +24 -0
  10. data/lib/ucp/pdu/base.rb +22 -0
  11. data/lib/ucp/pdu/ucp01.rb +37 -0
  12. data/lib/ucp/pdu/ucp01_operation.rb +61 -0
  13. data/lib/ucp/pdu/ucp01_result.rb +60 -0
  14. data/lib/ucp/pdu/ucp30.rb +28 -0
  15. data/lib/ucp/pdu/ucp30_operation.rb +59 -0
  16. data/lib/ucp/pdu/ucp30_result.rb +63 -0
  17. data/lib/ucp/pdu/ucp31.rb +29 -0
  18. data/lib/ucp/pdu/ucp31_operation.rb +50 -0
  19. data/lib/ucp/pdu/ucp31_result.rb +61 -0
  20. data/lib/ucp/pdu/ucp51_operation.rb +167 -0
  21. data/lib/ucp/pdu/ucp51_result.rb +64 -0
  22. data/lib/ucp/pdu/ucp52_operation.rb +31 -0
  23. data/lib/ucp/pdu/ucp52_result.rb +31 -0
  24. data/lib/ucp/pdu/ucp53_operation.rb +31 -0
  25. data/lib/ucp/pdu/ucp53_result.rb +31 -0
  26. data/lib/ucp/pdu/ucp54_operation.rb +31 -0
  27. data/lib/ucp/pdu/ucp54_result.rb +31 -0
  28. data/lib/ucp/pdu/ucp55_operation.rb +31 -0
  29. data/lib/ucp/pdu/ucp55_result.rb +31 -0
  30. data/lib/ucp/pdu/ucp56_operation.rb +31 -0
  31. data/lib/ucp/pdu/ucp56_result.rb +31 -0
  32. data/lib/ucp/pdu/ucp57_operation.rb +31 -0
  33. data/lib/ucp/pdu/ucp57_result.rb +31 -0
  34. data/lib/ucp/pdu/ucp58_operation.rb +31 -0
  35. data/lib/ucp/pdu/ucp58_result.rb +31 -0
  36. data/lib/ucp/pdu/ucp5x.rb +40 -0
  37. data/lib/ucp/pdu/ucp60.rb +30 -0
  38. data/lib/ucp/pdu/ucp60_operation.rb +58 -0
  39. data/lib/ucp/pdu/ucp60_result.rb +60 -0
  40. data/lib/ucp/pdu/ucp61.rb +31 -0
  41. data/lib/ucp/pdu/ucp61_operation.rb +49 -0
  42. data/lib/ucp/pdu/ucp61_result.rb +60 -0
  43. data/lib/ucp/pdu/ucp_operation.rb +27 -0
  44. data/lib/ucp/pdu/ucp_result.rb +26 -0
  45. data/lib/ucp/pdu/ucpmessage.rb +125 -0
  46. data/lib/ucp/util/base.rb +22 -0
  47. data/lib/ucp/util/gsm_packed_msg.rb +50 -0
  48. data/lib/ucp/util/packed_msg.rb +34 -0
  49. data/lib/ucp/util/sms_request.rb +48 -0
  50. data/lib/ucp/util/ucp.rb +885 -0
  51. data/lib/ucp/util/ucp_client.rb +207 -0
  52. data/lib/ucp/util/ucp_server.rb +122 -0
  53. data/lib/ucp/util/ucs2_packed_msg.rb +29 -0
  54. metadata +120 -0
data/Rakefile.orig ADDED
@@ -0,0 +1,45 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ require 'rubygems'
7
+ require 'rake'
8
+ require 'rake/clean'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/rdoctask'
11
+ require 'rake/testtask'
12
+
13
+ spec = Gem::Specification.new do |s|
14
+ s.name = 'ruby_ucp'
15
+ s.version = '0.0.2'
16
+ s.has_rdoc = true
17
+ s.extra_rdoc_files = ['README', 'LICENSE']
18
+ s.summary = 'EMI/UCP protocol library'
19
+ s.description = s.summary
20
+ s.author = 'Sergio Freire'
21
+ s.email = 'sergio-s-freire@ptinovacao.pt'
22
+ # s.executables = ['your_executable_here']
23
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
24
+ s.require_path = "lib"
25
+ s.bindir = "bin"
26
+ end
27
+
28
+ Rake::GemPackageTask.new(spec) do |p|
29
+ p.gem_spec = spec
30
+ p.need_tar = true
31
+ p.need_zip = true
32
+ end
33
+
34
+ Rake::RDocTask.new do |rdoc|
35
+ files =['README', 'LICENSE', 'lib/**/*.rb']
36
+ rdoc.rdoc_files.add(files)
37
+ rdoc.main = "README" # page to start on
38
+ rdoc.title = "ruby_ucp Docs"
39
+ rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
40
+ rdoc.options << '--line-numbers'
41
+ end
42
+
43
+ Rake::TestTask.new do |t|
44
+ t.test_files = FileList['test/**/*.rb']
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/ruby_ucp.rb ADDED
@@ -0,0 +1,42 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+
21
+ $:.unshift(File.dirname(__FILE__))
22
+
23
+ require "ucp/base.rb"
24
+ require "ucp/pdu/ucpmessage.rb"
25
+ require "ucp/pdu/ucp01.rb"
26
+ require "ucp/pdu/ucp30.rb"
27
+ require "ucp/pdu/ucp31.rb"
28
+ require "ucp/pdu/ucp5x.rb"
29
+ require "ucp/pdu/ucp60.rb"
30
+ require "ucp/pdu/ucp61.rb"
31
+ require "ucp/util/base.rb"
32
+
33
+
34
+ # Load all YCP PDUs
35
+ Dir.glob(File.join(File.dirname(__FILE__), 'ucp', 'pdu', '*.rb')) do |f|
36
+ require f unless f.match('ucpmessage.rb$')
37
+ end
38
+
39
+ # Load all auxiliary classes
40
+ Dir.glob(File.join(File.dirname(__FILE__), 'ucp', 'util', '*.rb')) do |f|
41
+ require f unless f.match('base.rb$')
42
+ end
@@ -0,0 +1,182 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ =begin
21
+ this file actually contais a LOT of garbage... used just to test things while developing
22
+ i left so you can take a look of concrete examples, while I build clean samples along
23
+ with tests
24
+ =end
25
+
26
+ $KCODE = 'UTF8'
27
+ require 'jcode'
28
+
29
+ require "rubygems"
30
+
31
+ require "ruby_ucp"
32
+ include Ucp::Util
33
+
34
+ def handle_me(smsreq)
35
+ puts "handle_me [#{smsreq.source_ip}:#{smsreq.source_port}] (#{smsreq.originator},#{smsreq.recipient}) (#{smsreq.part_nr}/#{smsreq.total_parts}): #{smsreq.text}\n"
36
+ end
37
+
38
+ #ucp=UCP.parse_str("*00/00113/O/51/961234567/1234/////////////////4/120/B49AED86CBC162B219AD66BBE17230//////////0106050003450202///90#")
39
+ #puts "UCP: #{ucp.to_s}"
40
+ #exit
41
+
42
+
43
+
44
+
45
+
46
+ ucp=Ucp31Operation.new
47
+ puts "UCP: #{ucp.to_s}"
48
+ ucp=Ucp30Operation.new
49
+ ucp.basic_submit(1234, 961234567, "ola")
50
+ puts "UCP: #{ucp.to_s}"
51
+
52
+
53
+
54
+ ustr=2.chr+"01/00357/O/51/961234567/1234/////////////////4/1072/0031003200330034003500360037003800390030003100320033003400350036003700380039003000310032003300340035003600370038003900300031003200330034003500360037003800390030003100320033003400350036003700380039003000310032003300340035003600370038003900300031003200330034003500360037//////////0106050003450201020108///01"+3.chr
55
+ ucp=UCP.parse_str(ustr)
56
+
57
+ ucp.set_fields({:oadc=>"10412614190438AB4D",:otoa=>"5039"})
58
+ text=UCP.decode_ucp_msg(ucp)
59
+ originator=UCP.decode_ucp_oadc(ucp)
60
+ puts "originator: #{originator} ; text: #{text}"
61
+
62
+ #exit
63
+
64
+
65
+ puts UCP.str2ucs2("ola").encoded
66
+
67
+ s="1234567890"*7 +"1€"
68
+ UCP.make_multi_ucps(1235,961234568,s)
69
+
70
+ #exit
71
+
72
+ puts "1€€".length,"1€€".jlength
73
+ puts "1€"[1..1]
74
+ puts "1€".chars #[0..1]
75
+ "1€".each_char{ |c|
76
+ puts "C: #{c}"
77
+ }
78
+ #exit
79
+
80
+
81
+ #exit
82
+
83
+ ucp=Ucp01Operation.new
84
+ ucp.basic_submit("1234x",961234567,"ola")
85
+ #ucp.set_fields( {:mt=>"4", :oadc=>"x"})
86
+ ucp.trn="02"
87
+ puts ucp.to_s
88
+
89
+
90
+ port=12009
91
+ server=UcpServer.new(method(:handle_me),port)
92
+
93
+
94
+ cliente=UcpClient.new("localhost",port,{:login=>8006,:password=>"timor"})
95
+ #sent=cliente.send_message(1234,961234567,"1234567890"*17+"ola custa 1€ sabias?")
96
+
97
+ ans=cliente.send_alert("961234567","0100")
98
+ puts "ans: #{ans}"
99
+ s="1234567890"*8+"1€"
100
+ sent=cliente.send_message(1234,961234567,s)
101
+ puts "sent: #{sent}"
102
+ ucp=Ucp30Operation.new
103
+ ucp.basic_submit(1234, 961234567, "ola 1€éuro Ç!@\'\"#\$%&/()=<>,.-;:*+[]")
104
+ ans=cliente.send_sync(ucp)
105
+ puts "ans: #{ans}"
106
+ cliente.close
107
+ server.stop
108
+ exit
109
+
110
+
111
+
112
+
113
+
114
+ ucp=UCP.parse_str("*00/00113/O/51/961234567/1234/////////////////4/120/B49AED86CBC162B219AD66BBE17230//////////0106050003450202///90#")
115
+ puts ucp.to_s
116
+
117
+
118
+ puts UCP.pack7bits("€")
119
+ #puts UCP.packucs2("ola")
120
+ puts UCP.decode7bitgsm(UCP.pack7bits("1234567890"*17))
121
+ gsmparts= UCP.pack7bits2("1234567890"*17,134)
122
+ puts "septets: #{gsmparts.required_septets} ; unenc: #{gsmparts.unencoded}"
123
+ gsmparts= UCP.multi_pack7bits2("1234567890"*17,134)
124
+ gsmparts.each { |gsmpart|
125
+ puts "part: #{gsmpart.unencoded}"
126
+ }
127
+
128
+ UCP.make_multi_ucps(1235,961234568,"1234567890"*17)
129
+
130
+ str= UCP.pack7bits("1234567890"*17)
131
+ smparts=[]
132
+ i=0
133
+ while i*2<str.length
134
+ tmp= str[i*2,(i+134)*2]
135
+ puts "tmp.len. #{tmp.length/2} ; TMP: #{tmp}"
136
+ puts UCP.decode7bitgsm(tmp)
137
+ smparts << tmp
138
+ i+=134
139
+ end
140
+
141
+ puts str.length/2
142
+ puts str.length*8/14
143
+ #exit
144
+
145
+ #ucp=Ucp51Operation.new("1234x",961234567,"ola")
146
+ #ucp.set_fields( {:mt=>"4", :oadc=>"x"})
147
+ #ucp.add_xser_raw("020101")
148
+ #ucp.add_xser("03","01")
149
+ #ucp.trn="02"
150
+ #puts ucp.to_s
151
+
152
+
153
+
154
+ ucp=Ucp01Result.new
155
+ ucp.ack("ok")
156
+ puts ucp.to_s
157
+ puts ucp.is_nack?
158
+
159
+ ucp=Ucp01Result.new
160
+ ucp.nack("02","bla")
161
+ ucp.trn="12"
162
+ puts ucp.to_s
163
+ puts ucp.is_nack?
164
+
165
+ ucp=Ucp60Result.new()
166
+ ucp.ack("ok")
167
+ puts ucp.to_s
168
+ puts ucp.is_nack?
169
+
170
+
171
+
172
+ cliente=UcpClient.new("localhost",12000,{:login=>8006,:password=>"timor"})
173
+ ucp=Ucp51Operation.new(1234,961234567,"ola")
174
+ ans=cliente.send_sync(ucp)
175
+
176
+ if ans.is_ack?
177
+ puts "aceite!"
178
+ else
179
+ puts "rejeitado!"
180
+ end
181
+
182
+ cliente.close
data/lib/ucp/base.rb ADDED
@@ -0,0 +1,24 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+
21
+
22
+ module Ucp
23
+
24
+ end
@@ -0,0 +1,22 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ module Ucp::Pdu
21
+
22
+ end
@@ -0,0 +1,37 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ class Ucp::Pdu::UCP01 < Ucp::Pdu::UCPMessage
21
+
22
+ def initialize()
23
+ super()
24
+ @operation="01"
25
+ end
26
+
27
+ def set_fields(ucpfields={})
28
+ @h=@h.merge ucpfields
29
+ end
30
+
31
+ def initialize_message(ucpfields={})
32
+ super()
33
+ @h=@h.merge ucpfields
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,61 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ class Ucp::Pdu::Ucp01Operation < Ucp::Pdu::UCP01
21
+
22
+ def initialize(fields=nil)
23
+ super()
24
+ @operation_type="O"
25
+ @fields=[:adc,:oadc,:ac,:mt,:msg]
26
+
27
+ if fields.nil?
28
+ return
29
+ end
30
+
31
+ @trn=fields[0]
32
+ @operation_type=fields[2]
33
+ @operation=fields[3]
34
+
35
+ # *02/00050/O/01/961234567/0931D98C8607//3/6F7618/72#
36
+
37
+ for i in 4..(fields.length-1)
38
+ field=@fields[i-4]
39
+ @h[field]=fields[i]
40
+ end
41
+
42
+
43
+ end
44
+
45
+ def basic_submit(originator,recipient,message,ucpfields={})
46
+ #super()
47
+ #@operation_type="O"
48
+ #@fields=[:adc,:oadc,:ac,:mt,:msg]
49
+
50
+ # UCP01 only supports IRA encoded SMS (7bit GSM alphabet chars, encoded in 8bits)
51
+ msg=UCP.ascii2ira(message).encoded
52
+
53
+ # UCP01 does NOT support alphanumeric oadc
54
+ oadc=originator
55
+
56
+ @h={:oadc=>oadc, :adc=>recipient, :msg=>msg,:mt=>3}
57
+
58
+ @h=@h.merge ucpfields
59
+ end
60
+
61
+ end
@@ -0,0 +1,60 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ class Ucp::Pdu::Ucp01Result < Ucp::Pdu::UCP01
21
+
22
+ def initialize(fields=nil)
23
+ super()
24
+ @operation_type="R"
25
+ if fields.nil?
26
+ return
27
+ end
28
+
29
+ @trn=fields[0]
30
+ if fields[4].eql?("A")
31
+ # 06/00043/R/01/A/01234567890:090196103258/4E
32
+ ack(fields[5])
33
+ elsif fields[4].eql?("N")
34
+ # 12/00022/R/01/N/02//03
35
+ nack(fields[5],fields[6])
36
+ else
37
+ raise "invalid result in UCP01"
38
+ end
39
+
40
+ # TODO: verificar len e checksum
41
+
42
+ end
43
+
44
+
45
+ def ack(sm="")
46
+ @fields=[:ack,:sm]
47
+ @h[:ack]="A"
48
+ @h[:sm]=sm
49
+ end
50
+
51
+ def nack(ec,sm="")
52
+ @fields=[:nack,:ec,:sm]
53
+ @h[:nack]="N"
54
+ @h[:ec]=ec
55
+ @h[:sm]=sm
56
+ end
57
+
58
+
59
+
60
+ end
@@ -0,0 +1,28 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ class Ucp::Pdu::UCP30 < Ucp::Pdu::UCPMessage
21
+
22
+ def initialize()
23
+ super()
24
+ @operation="30"
25
+ end
26
+
27
+ end
28
+
@@ -0,0 +1,59 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+
21
+ class Ucp::Pdu::Ucp30Operation < Ucp::Pdu::UCP30
22
+
23
+ def initialize(fields=nil)
24
+ super()
25
+ @operation_type="O"
26
+ @fields=[:adc,:oadc,:ac,:nrq,:nad,:npid,:dd,:ddt,:vp,:amsg]
27
+
28
+ if fields.nil?
29
+ return
30
+ end
31
+
32
+ @trn=fields[0]
33
+ @operation_type=fields[2]
34
+ @operation=fields[3]
35
+
36
+ # 44/00077/O/30/0673845336//////1/1003961344/1203961200/4D657373616765204F4B/27
37
+
38
+ for i in 4..(fields.length-1)
39
+ field=@fields[i-4]
40
+ @h[field]=fields[i]
41
+ end
42
+
43
+
44
+ end
45
+
46
+ def basic_submit(originator,recipient,message,ucpfields={})
47
+
48
+ # UCP30 only supports IRA encoded SMS (7bit GSM alphabet chars, encoded in 8bits)
49
+ msg=UCP.ascii2ira(message).encoded
50
+
51
+ # UCP30 does NOT support alphanumeric oadc
52
+ oadc=originator
53
+
54
+ @h={:oadc=>oadc, :adc=>recipient, :amsg=>msg}
55
+
56
+ @h=@h.merge ucpfields
57
+ end
58
+
59
+ end
@@ -0,0 +1,63 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+ class Ucp::Pdu::Ucp30Result < Ucp::Pdu::UCP30
21
+
22
+ def initialize(fields=nil)
23
+ super()
24
+ @operation="30"
25
+ @operation_type="R"
26
+ if fields.nil?
27
+ return
28
+ end
29
+
30
+ @trn=fields[0]
31
+ if fields[4].eql?("A")
32
+ # 10/00039/R/30/A//067345:070295121212/6F
33
+ ack(fields[5],fields[6])
34
+ elsif fields[4].eql?("N")
35
+ # 11/00022/R/30/N/24//08
36
+ nack(fields[5],fields[6])
37
+ else
38
+ raise "invalid result in UCP51"
39
+ end
40
+
41
+ # TODO: verificar len e checksum
42
+
43
+ end
44
+
45
+
46
+ def ack(mvp="",sm="")
47
+ @fields=[:ack,:sm]
48
+ @h[:ack]="A"
49
+ @h[:mvp]=mvp
50
+ @h[:sm]=sm
51
+ end
52
+
53
+ def nack(ec,sm="")
54
+ @fields=[:nack,:ec,:sm]
55
+ @h[:nack]="N"
56
+ @h[:ec]=ec
57
+ @h[:sm]=sm
58
+ end
59
+
60
+
61
+
62
+ end
63
+
@@ -0,0 +1,29 @@
1
+ =begin
2
+ Ruby library implementation of EMI/UCP protocol v4.6 for SMS
3
+ Copyright (C) 2011, Sergio Freire <sergio.freire@gmail.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ =end
19
+
20
+
21
+ class Ucp::Pdu::UCP31 < Ucp::Pdu::UCPMessage
22
+
23
+ def initialize()
24
+ super()
25
+ @operation="31"
26
+ end
27
+
28
+ end
29
+