ruby_ucp 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,31 @@
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
+ require "ucp/pdu/ucp51_result.rb"
22
+
23
+ class Ucp::Pdu::Ucp57Result < Ucp::Pdu::Ucp51Result
24
+
25
+ def initialize(fields=nil)
26
+ super(fields)
27
+ @operation="57"
28
+ end
29
+
30
+ end
31
+
@@ -0,0 +1,31 @@
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
+ require "ucp/pdu/ucp51_operation.rb"
22
+
23
+ class Ucp::Pdu::Ucp58Operation < Ucp::Pdu::Ucp51Operation
24
+
25
+ def initialize(fields=nil)
26
+ super(fields)
27
+ @operation="58"
28
+ end
29
+
30
+ end
31
+
@@ -0,0 +1,31 @@
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
+ require "ucp/pdu/ucp51_result.rb"
22
+
23
+ class Ucp::Pdu::Ucp58Result < Ucp::Pdu::Ucp51Result
24
+
25
+ def initialize(fields=nil)
26
+ super(fields)
27
+ @operation="58"
28
+ end
29
+
30
+ end
31
+
@@ -0,0 +1,40 @@
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::UCP5x < Ucp::Pdu::UCPMessage
22
+
23
+ @xservices=[]
24
+
25
+ def initialize()
26
+ super()
27
+ @xservices=Array.new
28
+ @fields=[:adc,:oadc,:ac,:nrq,:nadc,:nt,:npid,:lrq,:lrad,:lpid,:dd,:ddt,:vp,:rpid,:scts,:dst,:rsn,:dscts,:mt,:nb,:msg,:mms,:pr,:dcs,:mcls,:rpi,:cpg,:rply,:otoa,:hplmn,:xser,:res4,:res5]
29
+ end
30
+
31
+ def set_fields(ucpfields={})
32
+ @h=@h.merge ucpfields
33
+ end
34
+
35
+ def initialize_message(ucpfields={})
36
+ super()
37
+ @h=@h.merge ucpfields
38
+ end
39
+
40
+ end
@@ -0,0 +1,30 @@
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::UCP61 < Ucp::Pdu::UCPMessage
22
+
23
+ def initialize()
24
+ super()
25
+ @operation="61"
26
+ end
27
+
28
+
29
+ end
30
+
@@ -0,0 +1,58 @@
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::Ucp60Operation < Ucp::Pdu::UCP60
22
+
23
+ def initialize(fields=nil)
24
+ super()
25
+ #@operation="60"
26
+ @operation_type="O"
27
+ @fields=[:oadc,:oton,:onpi,:styp,:pwd,:npwd,:vers,:ladc,:lton,:lnpi,:opid,:res1]
28
+
29
+ if fields.nil?
30
+ return
31
+ end
32
+
33
+
34
+ @trn=fields[0]
35
+ @operation_type=fields[2]
36
+ @operation=fields[3]
37
+
38
+ # *00/00050/O/60/8006/6/5/1/F474FB2D07//0100//////15#
39
+
40
+ for i in 4..(fields.length-1)
41
+ field=@fields[i-4]
42
+ @h[field]=fields[i]
43
+ end
44
+
45
+ end
46
+
47
+
48
+
49
+
50
+ def basic_auth(originator,password,ucpfields={})
51
+ #super()
52
+ #@operation_type="O"
53
+
54
+ @h={:oadc=>originator, :pwd=>UCP.ascii2ira(password), :vers=>"0100", :styp=>"1", :oton=>"6",:onpi=>"5"}
55
+ @h=@h.merge ucpfields
56
+ end
57
+
58
+ 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
+
21
+ class Ucp::Pdu::Ucp60Result < Ucp::Pdu::UCP60
22
+
23
+ def initialize(fields=nil)
24
+ super()
25
+ @operation_type="R"
26
+ if fields.nil?
27
+ return
28
+ end
29
+
30
+ @trn=fields[0]
31
+ if fields[4].eql?("A")
32
+ # 00/00019/R/60/A//6D
33
+ ack(fields[5])
34
+ elsif fields[4].eql?("N")
35
+ # 00/00022/R/60/N/01//04
36
+ nack(fields[5],fields[6])
37
+ else
38
+ raise "invalid result in UCP60"
39
+ end
40
+
41
+ # TODO: verificar len e checksum
42
+
43
+ end
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,31 @@
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
+ class Ucp::Pdu::UCP60 < Ucp::Pdu::UCPMessage
23
+
24
+ def initialize()
25
+ super()
26
+ @operation="60"
27
+ end
28
+
29
+
30
+ end
31
+
@@ -0,0 +1,49 @@
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::Ucp61Operation < Ucp::Pdu::UCP61
22
+
23
+ def initialize(fields=nil)
24
+ super()
25
+ @operation_type="O"
26
+ @fields=[:oadc,:oton,:onpi,:styp,:pwd,:npwd,:vers,:ladc,:lton,:lnpi,:res1,:res2]
27
+
28
+ if fields.nil?
29
+ return
30
+ end
31
+
32
+
33
+ @trn=fields[0]
34
+ @operation_type=fields[2]
35
+ @operation=fields[3]
36
+
37
+ # 00/00058/O/61/04568768///2///0100/1920870340094000//5///06
38
+
39
+
40
+ for i in 4..(fields.length-1)
41
+ field=@fields[i-4]
42
+ @h[field]=fields[i]
43
+ end
44
+
45
+ end
46
+
47
+
48
+
49
+ 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
+
21
+ class Ucp::Pdu::Ucp61Result < Ucp::Pdu::UCP61
22
+
23
+ def initialize(fields=nil)
24
+ super()
25
+ @operation_type="R"
26
+ if fields.nil?
27
+ return
28
+ end
29
+
30
+ @trn=fields[0]
31
+ if fields[4].eql?("A")
32
+ # 00/00019/R/61/A//6E
33
+ ack(fields[5])
34
+ elsif fields[4].eql?("N")
35
+ # 00/00022/R/61/N/02//06
36
+ nack(fields[5],fields[6])
37
+ else
38
+ raise "invalid result in UCP61"
39
+ end
40
+
41
+ # TODO: verificar len e checksum
42
+
43
+ end
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,27 @@
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::UcpOperation < Ucp::Pdu::UCPMessage
21
+
22
+ def initialize
23
+ @operation_type="O"
24
+ end
25
+
26
+
27
+ end
@@ -0,0 +1,26 @@
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::UcpResult < Ucp::Pdu::UCPMessage
22
+
23
+ def initialize
24
+ @operation_type="R"
25
+ end
26
+ end
@@ -0,0 +1,125 @@
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
+
23
+ class UCPMessage
24
+ DELIMITER="/"
25
+ STX=2.chr
26
+ ETX=3.chr
27
+
28
+
29
+ @fields=[]
30
+ @h={}
31
+
32
+ # @@trn="00"
33
+ attr_reader :operation
34
+ attr_reader :operation_type
35
+ attr_accessor :trn
36
+ attr_reader :dcs
37
+ attr_reader :message_ref, :part_nr, :total_parts
38
+
39
+ # usado pelas classes que o extendem
40
+ def initialize()
41
+ @dcs="01"
42
+
43
+ @trn="00"
44
+ @fields=[]
45
+ @h=Hash.new
46
+
47
+ @message_ref=0
48
+ @part_nr=1
49
+ @total_parts=1
50
+ end
51
+
52
+ def get_field(field)
53
+ return @h[field]
54
+ end
55
+
56
+ def set_field(field,value)
57
+ @h[field]=value
58
+ end
59
+
60
+ def set_fields(ucpfields={})
61
+ @h=@h.merge ucpfields
62
+ end
63
+
64
+
65
+ def is_operation?
66
+ return @operation_type=="O"
67
+ end
68
+
69
+ def is_result?
70
+ return @operation_type=="R"
71
+ end
72
+
73
+ def is_ack?
74
+ return @h.has_key?(:ack)
75
+ end
76
+
77
+ def is_nack?
78
+ return @h.has_key?(:nack)
79
+ end
80
+
81
+ def checksum(s)
82
+ # The <checksum> is derived by the addition of all bytes of the header, data field separators
83
+ # and data fields (i.e. all characters after the stx-character, up to and including the last “/”
84
+ # before the checksum field). The 8 Least Significant Bits (LSB) of the result is then
85
+ # represented as two printable characters.
86
+
87
+ sum=0
88
+ s.each_byte { |byte|
89
+ sum+=byte
90
+ }
91
+ #return sprintf("%02x",sum)[-2,2]
92
+ return sum.to_s(16)[-2,2].upcase
93
+ end
94
+
95
+ def length(s)
96
+ return sprintf("%05d",s.length+16)
97
+ end
98
+
99
+ def to_s
100
+
101
+ s=""
102
+ @fields.each{ |key|
103
+ value=@h[key]
104
+ if value.nil?
105
+ s+=DELIMITER
106
+ else
107
+ s+=value.to_s+DELIMITER
108
+ end
109
+ }
110
+
111
+
112
+ pdu=@trn+DELIMITER
113
+ pdu+=length(s)+DELIMITER
114
+ pdu+=@operation_type+DELIMITER
115
+ pdu+=@operation+DELIMITER
116
+ pdu+=s
117
+ pdu+=checksum(pdu)
118
+ pdu=STX+pdu+ETX
119
+ return pdu
120
+ end
121
+
122
+ end # class
123
+
124
+
125
+ end # module
@@ -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::Util
21
+
22
+ end
@@ -0,0 +1,50 @@
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::Util::GsmPackedMsg < Ucp::Util::PackedMsg
21
+
22
+
23
+ # attr_reader :encoded,:unencoded,:chars,:required_septets,:part_nr,:total_parts,:message_ref
24
+
25
+ @encoded=""
26
+ @unencoded=""
27
+ @required_septets=0
28
+ @chars=0
29
+
30
+ # ??
31
+ #@dcs=nil
32
+
33
+ # @part_nr=nil
34
+ # @total_parts=nil
35
+ # @message_ref=nil
36
+
37
+ def initialize(encoded,unencoded,chars,required_septets,tainted=false)
38
+ @encoded=encoded
39
+ @unencoded=unencoded
40
+ @chars=chars
41
+ @required_septets=required_septets
42
+ @tainted=tainted
43
+
44
+ # @part_nr=1
45
+ # @total_parts=1
46
+ # @message_ref=0
47
+ end
48
+
49
+
50
+ end