anthill_smpp_ruby 0.5.1

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 (154) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README +30 -0
  3. data/anthill_smpp_ruby.gemspec +18 -0
  4. data/changelog +43 -0
  5. data/data/dumps/random_command.dump +1 -0
  6. data/data/dumps/smpp_alert_notification.dump +1 -0
  7. data/data/dumps/smpp_bind_receiver.dump +1 -0
  8. data/data/dumps/smpp_bind_receiver_resp.dump +1 -0
  9. data/data/dumps/smpp_bind_transceiver.dump +1 -0
  10. data/data/dumps/smpp_bind_transceiver_1.dump +2 -0
  11. data/data/dumps/smpp_bind_transceiver_resp.dump +1 -0
  12. data/data/dumps/smpp_bind_transmitter.dump +1 -0
  13. data/data/dumps/smpp_bind_transmitter_resp.dump +1 -0
  14. data/data/dumps/smpp_broadcast_sm.dump +1 -0
  15. data/data/dumps/smpp_broadcast_sm_resp.dump +1 -0
  16. data/data/dumps/smpp_cancel_broadcast_sm.dump +1 -0
  17. data/data/dumps/smpp_cancel_broadcast_sm_resp.dump +1 -0
  18. data/data/dumps/smpp_cancel_sm.dump +1 -0
  19. data/data/dumps/smpp_cancel_sm_resp.dump +1 -0
  20. data/data/dumps/smpp_data_sm.dump +1 -0
  21. data/data/dumps/smpp_data_sm_resp.dump +1 -0
  22. data/data/dumps/smpp_deliver_sm.dump +1 -0
  23. data/data/dumps/smpp_deliver_sm_resp.dump +1 -0
  24. data/data/dumps/smpp_enquire_link.dump +1 -0
  25. data/data/dumps/smpp_enquire_link_resp.dump +1 -0
  26. data/data/dumps/smpp_generic_nack.dump +1 -0
  27. data/data/dumps/smpp_outbind.dump +1 -0
  28. data/data/dumps/smpp_query_broadcast_sm.dump +1 -0
  29. data/data/dumps/smpp_query_broadcast_sm_resp.dump +1 -0
  30. data/data/dumps/smpp_query_broadcast_sm_resp_1.dump +1 -0
  31. data/data/dumps/smpp_query_sm.dump +1 -0
  32. data/data/dumps/smpp_query_sm_resp.dump +1 -0
  33. data/data/dumps/smpp_replace_sm.dump +1 -0
  34. data/data/dumps/smpp_replace_sm_resp.dump +1 -0
  35. data/data/dumps/smpp_submit_multi.dump +1 -0
  36. data/data/dumps/smpp_submit_multi_resp.dump +1 -0
  37. data/data/dumps/smpp_submit_sm.dump +1 -0
  38. data/data/dumps/smpp_submit_sm_resp.dump +1 -0
  39. data/data/dumps/smpp_unbind.dump +1 -0
  40. data/data/dumps/smpp_unbind_resp.dump +1 -0
  41. data/data/pdus/random_command.xml +35 -0
  42. data/data/pdus/smpp_alert_notification.xml +14 -0
  43. data/data/pdus/smpp_alert_notification_no_optional.xml +13 -0
  44. data/data/pdus/smpp_bind_receiver.xml +17 -0
  45. data/data/pdus/smpp_bind_receiver_resp.xml +12 -0
  46. data/data/pdus/smpp_bind_receiver_resp_no_optional.xml +11 -0
  47. data/data/pdus/smpp_bind_transceiver.xml +17 -0
  48. data/data/pdus/smpp_bind_transceiver_resp.xml +12 -0
  49. data/data/pdus/smpp_bind_transceiver_resp_no_optional.xml +11 -0
  50. data/data/pdus/smpp_bind_transmitter.xml +17 -0
  51. data/data/pdus/smpp_bind_transmitter_resp.xml +12 -0
  52. data/data/pdus/smpp_bind_transmitter_resp_no_optional.xml +11 -0
  53. data/data/pdus/smpp_broadcast_sm.xml +47 -0
  54. data/data/pdus/smpp_broadcast_sm_no_optional.xml +26 -0
  55. data/data/pdus/smpp_broadcast_sm_resp.xml +14 -0
  56. data/data/pdus/smpp_broadcast_sm_resp_no_optional.xml +8 -0
  57. data/data/pdus/smpp_cancel_broadcast_sm.xml +17 -0
  58. data/data/pdus/smpp_cancel_broadcast_sm_no_optional.xml +15 -0
  59. data/data/pdus/smpp_cancel_broadcast_sm_resp.xml +7 -0
  60. data/data/pdus/smpp_cancel_sm.xml +18 -0
  61. data/data/pdus/smpp_cancel_sm_resp.xml +10 -0
  62. data/data/pdus/smpp_commands.xsd +914 -0
  63. data/data/pdus/smpp_data_sm.xml +58 -0
  64. data/data/pdus/smpp_data_sm_no_optional.xml +17 -0
  65. data/data/pdus/smpp_data_sm_resp.xml +15 -0
  66. data/data/pdus/smpp_data_sm_resp_no_optional.xml +8 -0
  67. data/data/pdus/smpp_deliver_sm.xml +46 -0
  68. data/data/pdus/smpp_deliver_sm_no_optional.xml +25 -0
  69. data/data/pdus/smpp_deliver_sm_resp.xml +14 -0
  70. data/data/pdus/smpp_deliver_sm_resp_no_optional.xml +8 -0
  71. data/data/pdus/smpp_enquire_link.xml +10 -0
  72. data/data/pdus/smpp_enquire_link_resp.xml +10 -0
  73. data/data/pdus/smpp_generic_nack.xml +10 -0
  74. data/data/pdus/smpp_outbind.xml +12 -0
  75. data/data/pdus/smpp_query_broadcast_sm.xml +12 -0
  76. data/data/pdus/smpp_query_broadcast_sm_no_optional.xml +11 -0
  77. data/data/pdus/smpp_query_broadcast_sm_resp.xml +17 -0
  78. data/data/pdus/smpp_query_broadcast_sm_resp_no_optional.xml +15 -0
  79. data/data/pdus/smpp_query_sm.xml +11 -0
  80. data/data/pdus/smpp_query_sm_resp.xml +11 -0
  81. data/data/pdus/smpp_replace_sm.xml +18 -0
  82. data/data/pdus/smpp_replace_sm_no_optional.xml +17 -0
  83. data/data/pdus/smpp_replace_sm_resp.xml +7 -0
  84. data/data/pdus/smpp_submit_multi.xml +73 -0
  85. data/data/pdus/smpp_submit_multi_no_optional.xml +51 -0
  86. data/data/pdus/smpp_submit_multi_resp.xml +35 -0
  87. data/data/pdus/smpp_submit_sm.xml +57 -0
  88. data/data/pdus/smpp_submit_sm_no_optional.xml +28 -0
  89. data/data/pdus/smpp_submit_sm_resp.xml +8 -0
  90. data/data/pdus/smpp_unbind.xml +10 -0
  91. data/data/pdus/smpp_unbind_resp.xml +10 -0
  92. data/examples/dump_viewer.rb +298 -0
  93. data/examples/pdu_composer.rb +1331 -0
  94. data/knownbugs +24 -0
  95. data/lib/anthill_smpp_ruby.rb +83 -0
  96. data/lib/i_smpp_outputter.rb +425 -0
  97. data/lib/pdu/smpp_alert_notification.rb +132 -0
  98. data/lib/pdu/smpp_bind.rb +102 -0
  99. data/lib/pdu/smpp_bind_receiver.rb +29 -0
  100. data/lib/pdu/smpp_bind_receiver_resp.rb +30 -0
  101. data/lib/pdu/smpp_bind_resp.rb +100 -0
  102. data/lib/pdu/smpp_bind_transceiver.rb +29 -0
  103. data/lib/pdu/smpp_bind_transceiver_resp.rb +31 -0
  104. data/lib/pdu/smpp_bind_transmitter.rb +29 -0
  105. data/lib/pdu/smpp_bind_transmitter_resp.rb +30 -0
  106. data/lib/pdu/smpp_broadcast_sm.rb +566 -0
  107. data/lib/pdu/smpp_broadcast_sm_resp.rb +130 -0
  108. data/lib/pdu/smpp_cancel_broadcast_sm.rb +143 -0
  109. data/lib/pdu/smpp_cancel_broadcast_sm_resp.rb +60 -0
  110. data/lib/pdu/smpp_cancel_sm.rb +110 -0
  111. data/lib/pdu/smpp_cancel_sm_resp.rb +60 -0
  112. data/lib/pdu/smpp_data_sm.rb +679 -0
  113. data/lib/pdu/smpp_data_sm_resp.rb +148 -0
  114. data/lib/pdu/smpp_deliver_sm.rb +458 -0
  115. data/lib/pdu/smpp_deliver_sm_resp.rb +137 -0
  116. data/lib/pdu/smpp_enquire_link.rb +59 -0
  117. data/lib/pdu/smpp_enquire_link_resp.rb +61 -0
  118. data/lib/pdu/smpp_generic_nack.rb +61 -0
  119. data/lib/pdu/smpp_outbind.rb +71 -0
  120. data/lib/pdu/smpp_pdu.rb +90 -0
  121. data/lib/pdu/smpp_query_broadcast_sm.rb +120 -0
  122. data/lib/pdu/smpp_query_broadcast_sm_resp.rb +192 -0
  123. data/lib/pdu/smpp_query_sm.rb +92 -0
  124. data/lib/pdu/smpp_query_sm_resp.rb +92 -0
  125. data/lib/pdu/smpp_replace_sm.rb +172 -0
  126. data/lib/pdu/smpp_replace_sm_resp.rb +61 -0
  127. data/lib/pdu/smpp_resp.rb +40 -0
  128. data/lib/pdu/smpp_submit_multi.rb +517 -0
  129. data/lib/pdu/smpp_submit_multi_resp.rb +90 -0
  130. data/lib/pdu/smpp_submit_sm.rb +591 -0
  131. data/lib/pdu/smpp_submit_sm_resp.rb +72 -0
  132. data/lib/pdu/smpp_unbind.rb +60 -0
  133. data/lib/pdu/smpp_unbind_resp.rb +61 -0
  134. data/lib/smpp_constants.rb +917 -0
  135. data/lib/smpp_csv_outputter.rb +1601 -0
  136. data/lib/smpp_datatypes.rb +89 -0
  137. data/lib/smpp_decoder.rb +627 -0
  138. data/lib/smpp_encoder.rb +495 -0
  139. data/lib/smpp_hex_outputter.rb +36 -0
  140. data/lib/smpp_outputter_base.rb +315 -0
  141. data/lib/smpp_structures.rb +98 -0
  142. data/lib/smpp_txt_outputter.rb +1895 -0
  143. data/lib/smpp_validator.rb +373 -0
  144. data/lib/smpp_xml_outputter.rb +34 -0
  145. data/roadmap +18 -0
  146. data/setup.rb +1585 -0
  147. data/test/anthill_smpp_test.rb +29 -0
  148. data/test/smpp_codec_test.rb +30 -0
  149. data/test/smpp_datatypes_test.rb +69 -0
  150. data/test/smpp_outputter_test.rb +1261 -0
  151. data/test/smpp_parsing_test.rb +1758 -0
  152. data/test/smpp_rawdump_test.rb +2095 -0
  153. data/test/smpp_validator_test.rb +441 -0
  154. metadata +206 -0
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd" xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
+ <smpp_submit_multi>
4
+ <command_status>0</command_status>
5
+ <sequence_number>12</sequence_number>
6
+ <service_type>srvtp</service_type>
7
+ <source_addr_ton>1</source_addr_ton>
8
+ <source_addr_npi>2</source_addr_npi>
9
+ <source_addr>123</source_addr>
10
+ <number_of_dest>6</number_of_dest>
11
+ <dest_addresses>
12
+ <dest_address>
13
+ <distr_list_name>distr_list1</distr_list_name>
14
+ </dest_address>
15
+ <dest_address>
16
+ <distr_list_name>distr_list2</distr_list_name>
17
+ </dest_address>
18
+ <dest_address>
19
+ <sme_address>
20
+ <ton>1</ton>
21
+ <npi>1</npi>
22
+ <address>123</address>
23
+ </sme_address>
24
+ </dest_address>
25
+ <dest_address>
26
+ <sme_address>
27
+ <ton>2</ton>
28
+ <npi>2</npi>
29
+ <address>223</address>
30
+ </sme_address>
31
+ </dest_address>
32
+ <dest_address>
33
+ <distr_list_name>distr_list1</distr_list_name>
34
+ </dest_address>
35
+ <dest_address>
36
+ <distr_list_name>distr_list2</distr_list_name>
37
+ </dest_address>
38
+ </dest_addresses>
39
+ <esm_class>1</esm_class>
40
+ <protocol_id>2</protocol_id>
41
+ <priority_flag>3</priority_flag>
42
+ <schedule_delivery_time/>
43
+ <validity_period/>
44
+ <registered_delivery>4</registered_delivery>
45
+ <replace_if_present_flag>5</replace_if_present_flag>
46
+ <data_coding>6</data_coding>
47
+ <sm_default_msg_id>7</sm_default_msg_id>
48
+ <sm_length>0</sm_length>
49
+ <short_message></short_message>
50
+ </smpp_submit_multi>
51
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd" xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
+ <smpp_submit_multi_resp>
4
+ <command_status>0</command_status>
5
+ <sequence_number>12</sequence_number>
6
+ <message_id>123</message_id>
7
+ <no_unsuccess>3</no_unsuccess>
8
+ <unsuccess_smes>
9
+ <unsuccess_sme>
10
+ <sme_address>
11
+ <ton>1</ton>
12
+ <npi>2</npi>
13
+ <address>123</address>
14
+ </sme_address>
15
+ <error_status_code>1</error_status_code>
16
+ </unsuccess_sme>
17
+ <unsuccess_sme>
18
+ <sme_address>
19
+ <ton>3</ton>
20
+ <npi>4</npi>
21
+ <address>321</address>
22
+ </sme_address>
23
+ <error_status_code>3</error_status_code>
24
+ </unsuccess_sme>
25
+ <unsuccess_sme>
26
+ <sme_address>
27
+ <ton>5</ton>
28
+ <npi>6</npi>
29
+ <address>213</address>
30
+ </sme_address>
31
+ <error_status_code>3</error_status_code>
32
+ </unsuccess_sme>
33
+ </unsuccess_smes>
34
+ </smpp_submit_multi_resp>
35
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands
3
+ xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd"
4
+ xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
+ <smpp_submit_sm>
7
+ <command_status>0</command_status>
8
+ <sequence_number>12</sequence_number>
9
+ <service_type>SMS</service_type>
10
+ <source_addr_ton>1</source_addr_ton>
11
+ <source_addr_npi>2</source_addr_npi>
12
+ <source_addr>123</source_addr>
13
+ <dest_addr_ton>4</dest_addr_ton>
14
+ <dest_addr_npi>5</dest_addr_npi>
15
+ <dest_addr>321</dest_addr>
16
+ <esm_class>6</esm_class>
17
+ <protocol_id>7</protocol_id>
18
+ <priority_flag>8</priority_flag>
19
+ <schedule_delivery_time></schedule_delivery_time>
20
+ <validity_period></validity_period>
21
+ <registered_delivery>9</registered_delivery>
22
+ <replace_if_present_flag>10</replace_if_present_flag>
23
+ <data_coding>11</data_coding>
24
+ <sm_default_msg_id>12</sm_default_msg_id>
25
+ <sm_length>0</sm_length>
26
+ <short_message></short_message>
27
+
28
+ <user_message_reference>1</user_message_reference>
29
+ <source_port>2</source_port>
30
+ <source_addr_subunit>3</source_addr_subunit>
31
+ <destination_port>4</destination_port>
32
+ <dest_addr_subunit>5</dest_addr_subunit>
33
+ <sar_msg_ref_num>6</sar_msg_ref_num>
34
+ <sar_total_segments>7</sar_total_segments>
35
+ <sar_segment_seqnum>8</sar_segment_seqnum>
36
+ <more_messages_to_send>9</more_messages_to_send>
37
+ <payload_type>10</payload_type>
38
+ <message_payload>01 02 AA FF</message_payload>
39
+ <privacy_indicator>11</privacy_indicator>
40
+ <callback_num>01 02 AA FF</callback_num>
41
+ <callback_num_pres_ind>12</callback_num_pres_ind>
42
+ <callback_num_atag>01 02 AA FF</callback_num_atag>
43
+ <source_subaddress>01 02 AA FF</source_subaddress>
44
+ <dest_subaddress>01 02 AA FF</dest_subaddress>
45
+ <user_response_code>13</user_response_code>
46
+ <display_time>14</display_time>
47
+ <sms_signal>15</sms_signal>
48
+ <ms_validity>16</ms_validity>
49
+ <ms_msg_wait_facilities>17</ms_msg_wait_facilities>
50
+ <number_of_messages>18</number_of_messages>
51
+ <alert_on_msg_delivery>19</alert_on_msg_delivery>
52
+ <language_indicator>20</language_indicator>
53
+ <its_reply_type>21</its_reply_type>
54
+ <its_session_info>22</its_session_info>
55
+ <ussd_service_op>23</ussd_service_op>
56
+ </smpp_submit_sm>
57
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands
3
+ xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd"
4
+ xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
+ <smpp_submit_sm>
7
+ <command_status>0</command_status>
8
+ <sequence_number>12</sequence_number>
9
+ <service_type>SMS</service_type>
10
+ <source_addr_ton>1</source_addr_ton>
11
+ <source_addr_npi>2</source_addr_npi>
12
+ <source_addr>123</source_addr>
13
+ <dest_addr_ton>4</dest_addr_ton>
14
+ <dest_addr_npi>5</dest_addr_npi>
15
+ <dest_addr>321</dest_addr>
16
+ <esm_class>6</esm_class>
17
+ <protocol_id>7</protocol_id>
18
+ <priority_flag>8</priority_flag>
19
+ <schedule_delivery_time></schedule_delivery_time>
20
+ <validity_period></validity_period>
21
+ <registered_delivery>9</registered_delivery>
22
+ <replace_if_present_flag>10</replace_if_present_flag>
23
+ <data_coding>11</data_coding>
24
+ <sm_default_msg_id>12</sm_default_msg_id>
25
+ <sm_length>0</sm_length>
26
+ <short_message></short_message>
27
+ </smpp_submit_sm>
28
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd" xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
+ <smpp_submit_sm_resp>
4
+ <command_status>0</command_status>
5
+ <sequence_number>12</sequence_number>
6
+ <message_id>123</message_id>
7
+ </smpp_submit_sm_resp>
8
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands
3
+ xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd"
4
+ xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
+ <smpp_unbind>
7
+ <command_status>0</command_status>
8
+ <sequence_number>12</sequence_number>
9
+ </smpp_unbind>
10
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <smpp_commands:smpp_commands
3
+ xsi:schemaLocation="http://www.example.net/smpp_commands.xsd smpp_commands.xsd"
4
+ xmlns:smpp_commands="http://www.example.net/smpp_commands.xsd"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
+ <smpp_unbind_resp>
7
+ <command_status>0</command_status>
8
+ <sequence_number>12</sequence_number>
9
+ </smpp_unbind_resp>
10
+ </smpp_commands:smpp_commands>
@@ -0,0 +1,298 @@
1
+ #!/usr/bin/ruby
2
+ # == Synopsis
3
+ # SMPP decoder.
4
+ #
5
+ # == Examples
6
+ # This command decode SMPP package and output it.
7
+ # dump_viewer --dumpfile dump.smpp
8
+ #
9
+ # Other examples:
10
+ # dump_viewer -q --dumpfile _dump.smpp --showdump 1 --outputter txt
11
+ # dump_viewer --verbose --dumpfile _dump.smpp --showdump 0 --outputter csv
12
+ #
13
+ # == Usage
14
+ # dump_viewer [options]
15
+ #
16
+ # For help use: dump_viewer -h
17
+ #
18
+ # == Options
19
+ # -h, --help Displays help message
20
+ # -v, --version Display the version, then exit
21
+ # -q, --quiet Output as little as possible, overrides verbose
22
+ # -V, --verbose Verbose output
23
+ # -f, --dumpfile Path to file with SMPP dump
24
+ # -x, --[no-]showhex Show hex fields representation
25
+ # -d, --[no-]showdump Show buffer dump after reading it from file
26
+ # -e, --[no-]showesm Show detailed information from esm class
27
+ # -f, --[no-]showfmt Show detailed information about area format
28
+ # -o, --outputter Outputter for printing(txt, csv, hex or xml)
29
+ #
30
+ # == Author
31
+ # Majoron
32
+ #
33
+ # == Copyright
34
+ # Copyright 2007 Majoron.com (developers@majoron.com)
35
+ # Original sources are available at www.majoron.com
36
+ #
37
+ # Licensed under the Apache License, Version 2.0 (the "License");
38
+ # you may not use this file except in compliance with the License.
39
+ # You may obtain a copy of the License at
40
+ #
41
+ # http://www.apache.org/licenses/LICENSE-2.0
42
+ #
43
+ # Unless required by applicable law or agreed to in writing, software
44
+ # distributed under the License is distributed on an "AS IS" BASIS,
45
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ # See the License for the specific language governing permissions and
47
+ # limitations under the License.
48
+ #
49
+
50
+ $:.unshift File.dirname(__FILE__) + '/../lib/'
51
+ $:.unshift File.dirname(__FILE__) + '/../lib/' + '/../../../AntHill/0.5/lib/'
52
+
53
+
54
+ # Include necessary libraries
55
+ require "optparse"
56
+ require "rdoc/usage"
57
+ require "ostruct"
58
+ require "date"
59
+
60
+ # Include anthill library
61
+ require "anthill"
62
+ require "anthill_smpp"
63
+
64
+
65
+ #
66
+ class DumpViewer
67
+ # Module contains supportable outputters
68
+ module Outputter
69
+ TXT = "TXT"
70
+ CSV = "CSV"
71
+ HEX = "HEX"
72
+ XML = "XML"
73
+ end
74
+
75
+ # Module contains error messages
76
+ module Errors
77
+ UNABLE_TO_OPEN_FILE = "Unable to open file."
78
+ INVALID_COMMAND_ID = "Unknown PDU command id."
79
+ MORE_THAN_ONE_PACKAGE = "Dump contains a valid SMPP package and extra dump information."
80
+ UNSUPPORTABLE_OUTPUTTER = "Unsupportable outputter. Supportable are: txt, csv, hex and xml."
81
+ end
82
+
83
+ # Constructor
84
+ def initialize(arguments, stdin)
85
+ @arguments = arguments
86
+ @stdin = stdin
87
+
88
+ # Set defaults
89
+ @options = OpenStruct.new
90
+ @options.verbose = false
91
+ @options.quiet = false
92
+ @options.showhex = true
93
+ @options.showdump = true
94
+ @options.showesm = true
95
+ @options.showfmt = true
96
+ @options.dumpfile = "dump.smpp"
97
+ @options.outputter = "txt"
98
+
99
+ # Set accessors
100
+ @outputter = ""
101
+ @package = nil
102
+ @buffer = ""
103
+ end
104
+
105
+ # Entry point to run application
106
+ def run_application
107
+ if parsed_options? && arguments_valid?
108
+ output_options if @options.verbose # [Optional]
109
+ process_arguments
110
+ process_application
111
+ else
112
+ output_usage
113
+ end
114
+ end
115
+
116
+ # Public accessors
117
+ attr_reader :options
118
+
119
+ protected
120
+ def parsed_options?
121
+ # Specify options
122
+ opts = OptionParser.new
123
+ opts.on('-v', '--version') { output_version ; exit 0 }
124
+ opts.on('-h', '--help') { output_help }
125
+ opts.on('-V', '--verbose') { @options.verbose = true }
126
+ opts.on('-q', '--quiet') { @options.quiet = true }
127
+
128
+ # Get a show dump option
129
+ opts.on("-x", "--[no-]showhex", "Show hex fields representation") do |val|
130
+ options.showhex = val
131
+ end
132
+
133
+ # Get a show dump option
134
+ opts.on("-d", "--[no-]showdump", "Show buffer dump after reading it from file") do |val|
135
+ options.showdump = val
136
+ end
137
+
138
+ # Get a show esm class options option
139
+ opts.on("-e", "--[no-]showesm", "Show detailed information from esm class") do |val|
140
+ options.showesm = val
141
+ end
142
+
143
+ # Get a show format option
144
+ opts.on("-e", "--[no-]showfmt", "Show detailed information about area format") do |val|
145
+ options.showfmt = val
146
+ end
147
+
148
+ # Get a dumpfile
149
+ opts.on("-f", "--dumpfile DUMPFILE", "Path to file with SMPP dump") do |dump|
150
+ @options.dumpfile = dump
151
+ end
152
+
153
+ # Get a outputter
154
+ opts.on("-o", "--outputter OUTPUTTER",
155
+ "Outputter for printing(txt, csv, hex or xml)") do |out|
156
+ @options.outputter = out
157
+ end
158
+
159
+ opts.parse!(@arguments) rescue return false
160
+ process_options
161
+ true
162
+
163
+ end
164
+
165
+ # Performs post-parse processing on options
166
+ def process_options
167
+ @options.verbose = false if @options.quiet
168
+ end
169
+
170
+ def output_options
171
+ puts "Options:\n"
172
+ @options.marshal_dump.each do |name, val|
173
+ puts " #{name} = #{val}"
174
+ end
175
+ end
176
+
177
+ # True if required arguments were provided
178
+ def arguments_valid?
179
+ return false if @options.dumpfile.nil?
180
+ true
181
+ end
182
+
183
+ # Setup the arguments
184
+ def process_arguments
185
+ # Place in local vars, etc
186
+ end
187
+
188
+ def output_help
189
+ output_version
190
+ RDoc::usage() #exits app
191
+ end
192
+
193
+ def output_usage
194
+ RDoc::usage('usage') # gets usage from comments above
195
+ end
196
+
197
+ def output_version
198
+ puts "#{File.basename(__FILE__)} version #{VERSION}"
199
+ end
200
+
201
+ # At the begining read data from file, then decode a byte buffer
202
+ # that was read and then output information about SMPP package
203
+ def process_application
204
+ begin
205
+ create_smpp_outputter()
206
+
207
+ create_byte_buffer()
208
+
209
+ decode_byte_buffer()
210
+
211
+ output_byte_buffer()
212
+
213
+ output_smpp_package()
214
+ rescue Exception => e
215
+ puts e
216
+ end
217
+ end
218
+
219
+ # Create appropriate outputter based on command line
220
+ def create_smpp_outputter
221
+ case @options.outputter.upcase
222
+ when Outputter::TXT
223
+ @outputter = AntHill::SMPP::SMPPTxtOutputter.new(STDOUT,
224
+ options.showhex, options.showesm, options.showfmt)
225
+ when Outputter::CSV
226
+ @outputter = AntHill::SMPP::SMPPCSVOutputter.new(STDOUT,
227
+ options.showesm, options.showfmt)
228
+ when Outputter::HEX
229
+ @outputter = AntHill::SMPP::SMPPHexOutputter.new(STDOUT)
230
+ when Outputter::XML
231
+ @outputter = AntHill::SMPP::SMPPXMLOutputter.new(STDOUT)
232
+ else
233
+ raise Errors::UNSUPPORTABLE_OUTPUTTER
234
+ end
235
+ end
236
+
237
+ # Open file with smpp dump and create a byte buffer based on a file
238
+ def create_byte_buffer
239
+ file = File.new(@options.dumpfile, "r")
240
+ raise Errors::UNABLE_TO_OPEN_FILE if file.nil?
241
+ begin
242
+ buf = AntHill::ByteBuffer.new(@buffer)
243
+ buf.read_dump(file)
244
+ file.close()
245
+ rescue RuntimeError => e
246
+ file.close()
247
+ raise
248
+ end
249
+ end
250
+
251
+ def decode_byte_buffer
252
+ begin
253
+ decoder = AntHill::SMPP::SMPPDecoder.new()
254
+ validator = AntHill::SMPP::SMPPValidator.new()
255
+
256
+ decoder.append_buffer(@buffer)
257
+ @package = decoder.get_packet()
258
+ if !@package.nil?
259
+ @package.decode_packet(decoder)
260
+ decoder.validate_offset(@package.command_length)
261
+ @package.validate_packet(validator)
262
+ if @package.command_length != @buffer.size()
263
+ puts Errors::MORE_THAN_ONE_PACKAGE
264
+ end
265
+ else
266
+ raise Errors::INVALID_COMMAND_ID
267
+ end
268
+ rescue RuntimeError => e
269
+ puts e
270
+ end
271
+
272
+ end
273
+
274
+ # Output byte buffer if showdump option is true
275
+ def output_byte_buffer
276
+ return if !@options.showdump
277
+ puts AntHill::ByteBuffer.encode_hex(@buffer)
278
+ end
279
+
280
+ def output_smpp_package
281
+ return if package.nil?
282
+ package.output_packet(@outputter)
283
+ end
284
+
285
+ #
286
+ VERSION = '0.5.1'
287
+
288
+ # Private accessors
289
+ attr_accessor :outputter
290
+ attr_accessor :package
291
+ attr_accessor :buffer
292
+
293
+
294
+ end
295
+
296
+ # Create a application and process
297
+ dump_viewer = DumpViewer.new(ARGV, STDIN)
298
+ dump_viewer.run_application()