Sipper 1.1.3

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 (326) hide show
  1. data/sipper/README.rb +26 -0
  2. data/sipper/b2bua_controller.rb +163 -0
  3. data/sipper/b2bua_session_mixin.rb +24 -0
  4. data/sipper/base_controller.rb +425 -0
  5. data/sipper/bin/common.rb +42 -0
  6. data/sipper/bin/generate.rb +70 -0
  7. data/sipper/bin/project.rb +44 -0
  8. data/sipper/bin/run.rb +85 -0
  9. data/sipper/bin/run_smoke.rb +8 -0
  10. data/sipper/config/log4r.xml +71 -0
  11. data/sipper/controller_class_loader.rb +29 -0
  12. data/sipper/controller_selector.rb +119 -0
  13. data/sipper/controllers/invite_controller.rb +30 -0
  14. data/sipper/controllers/order.yaml +3 -0
  15. data/sipper/custom_message.rb +4 -0
  16. data/sipper/detached_session.rb +11 -0
  17. data/sipper/docs/manual.txt +1621 -0
  18. data/sipper/generators/README +12 -0
  19. data/sipper/generators/gen_controller.rb +228 -0
  20. data/sipper/generators/gen_project.rb +45 -0
  21. data/sipper/generators/gen_test.rb +72 -0
  22. data/sipper/generators/project_template_dir/Rakefile +56 -0
  23. data/sipper/generators/project_template_dir/config/sipper.cfg +31 -0
  24. data/sipper/generators/project_template_dir/controllers/README.txt +2 -0
  25. data/sipper/generators/project_template_dir/dot_sipper.proj +2 -0
  26. data/sipper/generators/project_template_dir/logs/README.txt +2 -0
  27. data/sipper/generators/project_template_dir/tests/README.txt +2 -0
  28. data/sipper/lib/smc/statemap.rb +194 -0
  29. data/sipper/logs/dialog_info_store +0 -0
  30. data/sipper/logs/r.cmd +6 -0
  31. data/sipper/logs/r.sh +6 -0
  32. data/sipper/media/sipper_media_client.rb +268 -0
  33. data/sipper/media/sipper_media_event.rb +43 -0
  34. data/sipper/media/sipper_media_manager.rb +145 -0
  35. data/sipper/media/sipper_media_proxy.rb +60 -0
  36. data/sipper/media/sipper_offer_answer.rb +285 -0
  37. data/sipper/message.rb +512 -0
  38. data/sipper/modified_pattern_formatter.rb +119 -0
  39. data/sipper/proxy_controller.rb +143 -0
  40. data/sipper/registration.rb +52 -0
  41. data/sipper/request.rb +109 -0
  42. data/sipper/response.rb +123 -0
  43. data/sipper/ruby_ext/module.rb +27 -0
  44. data/sipper/ruby_ext/mutable_class.rb +17 -0
  45. data/sipper/ruby_ext/object.rb +38 -0
  46. data/sipper/ruby_ext/pqueue.rb +190 -0
  47. data/sipper/ruby_ext/snapshot.rb +201 -0
  48. data/sipper/ruby_ext/string.rb +18 -0
  49. data/sipper/ruby_ext/time.rb +9 -0
  50. data/sipper/run/run_sipper1.rb +28 -0
  51. data/sipper/run/run_sipper2.rb +56 -0
  52. data/sipper/sdp/sdp.rb +257 -0
  53. data/sipper/sdp/sdp_generator.rb +131 -0
  54. data/sipper/sdp/sdp_parser.rb +136 -0
  55. data/sipper/session.rb +1952 -0
  56. data/sipper/session_manager.rb +170 -0
  57. data/sipper/session_recorder.rb +190 -0
  58. data/sipper/session_state/DialogState.sm +54 -0
  59. data/sipper/session_state/DialogState_sm.rb +337 -0
  60. data/sipper/session_state/dialog_routes.rb +141 -0
  61. data/sipper/sip_headers/header.rb +632 -0
  62. data/sipper/sip_headers/sipuri.rb +352 -0
  63. data/sipper/sip_logger.rb +65 -0
  64. data/sipper/sip_message_router.rb +231 -0
  65. data/sipper/sip_test_driver_controller.rb +10 -0
  66. data/sipper/sipper.rb +329 -0
  67. data/sipper/sipper_assertions.rb +21 -0
  68. data/sipper/sipper_configurator.rb +376 -0
  69. data/sipper/sipper_http/sipper_http_request_dispatcher.rb +71 -0
  70. data/sipper/sipper_http/sipper_http_response.rb +25 -0
  71. data/sipper/stray_message_manager.rb +40 -0
  72. data/sipper/test_completion_signaling_helper.rb +77 -0
  73. data/sipper/transaction/Ict.sm +59 -0
  74. data/sipper/transaction/Ict_sm.rb +430 -0
  75. data/sipper/transaction/Ist.sm +74 -0
  76. data/sipper/transaction/Ist_sm.rb +460 -0
  77. data/sipper/transaction/Nict.sm +51 -0
  78. data/sipper/transaction/Nict_sm.rb +325 -0
  79. data/sipper/transaction/Nist.sm +59 -0
  80. data/sipper/transaction/Nist_sm.rb +356 -0
  81. data/sipper/transaction/invite_client_transaction.rb +274 -0
  82. data/sipper/transaction/invite_server_transaction.rb +319 -0
  83. data/sipper/transaction/non_invite_client_transaction.rb +230 -0
  84. data/sipper/transaction/non_invite_server_transaction.rb +263 -0
  85. data/sipper/transaction/state_machine_wrapper.rb +58 -0
  86. data/sipper/transaction/transaction.rb +212 -0
  87. data/sipper/transport/base_transport.rb +84 -0
  88. data/sipper/transport/rel_unrel.rb +19 -0
  89. data/sipper/transport/transport_and_route_resolver.rb +67 -0
  90. data/sipper/transport/udp_transport.rb +156 -0
  91. data/sipper/transport_manager.rb +33 -0
  92. data/sipper/udp_session.rb +17 -0
  93. data/sipper/util/command_element.rb +62 -0
  94. data/sipper/util/compact_converter.rb +50 -0
  95. data/sipper/util/counter.rb +26 -0
  96. data/sipper/util/digest/digest_authorizer.rb +204 -0
  97. data/sipper/util/expectation_parser.rb +164 -0
  98. data/sipper/util/locator.rb +31 -0
  99. data/sipper/util/message_fill.rb +58 -0
  100. data/sipper/util/persistence/ps_sipper_map.rb +63 -0
  101. data/sipper/util/persistence/sipper_map.rb +41 -0
  102. data/sipper/util/sipper_util.rb +305 -0
  103. data/sipper/util/timer/sip_timer_helper.rb +26 -0
  104. data/sipper/util/timer/timer_manager.rb +80 -0
  105. data/sipper/util/timer/timer_task.rb +56 -0
  106. data/sipper/util/validations.rb +44 -0
  107. data/sipper/version.rb +10 -0
  108. data/sipper_test/_test_media_uas.rb +79 -0
  109. data/sipper_test/base_test_case.rb +31 -0
  110. data/sipper_test/c_134.txt +7 -0
  111. data/sipper_test/driven_sip_test_case.rb +96 -0
  112. data/sipper_test/gold.txt +10 -0
  113. data/sipper_test/gold_res.txt +8 -0
  114. data/sipper_test/gold_sub.txt +9 -0
  115. data/sipper_test/hello_sipper.au +0 -0
  116. data/sipper_test/in_sipper.au +0 -0
  117. data/sipper_test/nonrr_proxy.rb +17 -0
  118. data/sipper_test/order_tests.yaml +4 -0
  119. data/sipper_test/rake_res.txt +399 -0
  120. data/sipper_test/rr_proxy.rb +17 -0
  121. data/sipper_test/run_test.cmd +94 -0
  122. data/sipper_test/sip_test_case.rb +104 -0
  123. data/sipper_test/test2xx_retransmission.rb +80 -0
  124. data/sipper_test/test2xx_retransmission_with_limit.rb +81 -0
  125. data/sipper_test/test2xx_retransmission_with_nist.rb +91 -0
  126. data/sipper_test/test2xx_retransmission_with_txns.rb +94 -0
  127. data/sipper_test/test_address_header.rb +66 -0
  128. data/sipper_test/test_b2bua1.rb +130 -0
  129. data/sipper_test/test_b2bua2.rb +120 -0
  130. data/sipper_test/test_b2bua3.rb +160 -0
  131. data/sipper_test/test_b2bua4.rb +130 -0
  132. data/sipper_test/test_base_controller.rb +110 -0
  133. data/sipper_test/test_base_transport.rb +37 -0
  134. data/sipper_test/test_cancel.rb +21 -0
  135. data/sipper_test/test_cancel_after2xx.rb +81 -0
  136. data/sipper_test/test_cancel_retransmission.rb +105 -0
  137. data/sipper_test/test_cancel_with481.rb +83 -0
  138. data/sipper_test/test_cancel_with487.rb +70 -0
  139. data/sipper_test/test_cancel_with_ist_without_nist.rb +99 -0
  140. data/sipper_test/test_cancel_with_nist.rb +84 -0
  141. data/sipper_test/test_cancel_without487.rb +77 -0
  142. data/sipper_test/test_command_element.rb +38 -0
  143. data/sipper_test/test_compact_converter.rb +33 -0
  144. data/sipper_test/test_controller_class_loader.rb +37 -0
  145. data/sipper_test/test_controller_selector.rb +53 -0
  146. data/sipper_test/test_controller_using_compact_headers.rb +74 -0
  147. data/sipper_test/test_controller_using_header_order.rb +85 -0
  148. data/sipper_test/test_controller_using_ict.rb +64 -0
  149. data/sipper_test/test_controller_using_ict_with_non_success.rb +72 -0
  150. data/sipper_test/test_controller_using_ict_with_tcbh.rb +24 -0
  151. data/sipper_test/test_controller_using_ict_with_tcbh_no_action.rb +24 -0
  152. data/sipper_test/test_controller_using_ist.rb +70 -0
  153. data/sipper_test/test_controller_using_ist_with_tcbh.rb +24 -0
  154. data/sipper_test/test_controller_using_nict.rb +115 -0
  155. data/sipper_test/test_controller_using_nict_with_tcbh.rb +24 -0
  156. data/sipper_test/test_controller_using_nist.rb +63 -0
  157. data/sipper_test/test_controller_using_pre_existing_rs0.rb +73 -0
  158. data/sipper_test/test_controller_using_pre_existing_rs1.rb +75 -0
  159. data/sipper_test/test_controller_using_pre_existing_rs2.rb +71 -0
  160. data/sipper_test/test_controller_using_route_set.rb +86 -0
  161. data/sipper_test/test_controller_with_sdp.rb +80 -0
  162. data/sipper_test/test_controllers/cancel/order.yaml +2 -0
  163. data/sipper_test/test_controllers/cancel/uac_cancel_controller.rb +35 -0
  164. data/sipper_test/test_controllers/cancel/uas_cancel_controller.rb +25 -0
  165. data/sipper_test/test_controllers/class_loading/ordered/first_ordered_controller.rb +5 -0
  166. data/sipper_test/test_controllers/class_loading/ordered/order.yaml +3 -0
  167. data/sipper_test/test_controllers/class_loading/ordered/recond_ordered_controller.rb +6 -0
  168. data/sipper_test/test_controllers/class_loading/ordered/second_ordered_controller.rb +6 -0
  169. data/sipper_test/test_controllers/class_loading/unordered/first_unordered_controller.rb +7 -0
  170. data/sipper_test/test_controllers/class_loading/unordered/second_unordered_controller.rb +6 -0
  171. data/sipper_test/test_controllers/ctrl_trhandler/lib/transport_filters/my_transport_handler.rb +22 -0
  172. data/sipper_test/test_controllers/ctrl_trhandler/uac_tr_handler_controller.rb +27 -0
  173. data/sipper_test/test_controllers/ctrl_trhandler/uas_tr_handler_controller.rb +21 -0
  174. data/sipper_test/test_controllers/ete/order.yaml +1 -0
  175. data/sipper_test/test_controllers/ete/uac_controller.rb +39 -0
  176. data/sipper_test/test_controllers/ete/uas_controller.rb +34 -0
  177. data/sipper_test/test_controllers/extensions/extension_uac_controller.rb +24 -0
  178. data/sipper_test/test_controllers/extensions/extension_uas_controller.rb +35 -0
  179. data/sipper_test/test_controllers/extensions/lib/sipper_extensions/my_from_extension.rb +16 -0
  180. data/sipper_test/test_controllers/ict_tcbh/lib/transaction_handlers/app_ict_handler.rb +23 -0
  181. data/sipper_test/test_controllers/ict_tcbh/uac_ict_tcbh_controller.rb +27 -0
  182. data/sipper_test/test_controllers/ict_tcbh/uac_ict_tcbh_no_action_controller.rb +28 -0
  183. data/sipper_test/test_controllers/ict_tcbh/uas_ict_tcbh_controller.rb +29 -0
  184. data/sipper_test/test_controllers/ict_tcbh/uas_ict_tcbh_no_action_controller.rb +31 -0
  185. data/sipper_test/test_controllers/ist_tcbh/lib/app_ist_handler.rb +13 -0
  186. data/sipper_test/test_controllers/ist_tcbh/uac_ist_tcbh_controller.rb +22 -0
  187. data/sipper_test/test_controllers/ist_tcbh/uas_ist_tcbh_controller.rb +31 -0
  188. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/in_order.yaml +2 -0
  189. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/my_transport_handler1.rb +21 -0
  190. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/my_transport_handler2.rb +21 -0
  191. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/out_order.yaml +2 -0
  192. data/sipper_test/test_controllers/multi_trhandlers/uac_multi_tr_handler_controller.rb +27 -0
  193. data/sipper_test/test_controllers/multi_trhandlers/uas_multi_tr_handler_controller.rb +29 -0
  194. data/sipper_test/test_controllers/multiple/lib/blank_test.rb +2 -0
  195. data/sipper_test/test_controllers/multiple/uac_info_controller.rb +21 -0
  196. data/sipper_test/test_controllers/multiple/uac_msg_controller.rb +20 -0
  197. data/sipper_test/test_controllers/multiple/uas_info_controller.rb +15 -0
  198. data/sipper_test/test_controllers/multiple/uas_msg_controller.rb +14 -0
  199. data/sipper_test/test_controllers/nict_tcbh/lib/transaction_handlers/app_nict_handler.rb +13 -0
  200. data/sipper_test/test_controllers/nict_tcbh/uac_nict_tcbh_controller.rb +26 -0
  201. data/sipper_test/test_controllers/nict_tcbh/uas_nict_tcbh_controller.rb +20 -0
  202. data/sipper_test/test_controllers/state_machine_based/lib/CreditControl.sm +43 -0
  203. data/sipper_test/test_controllers/state_machine_based/lib/CreditControl_sm.rb +194 -0
  204. data/sipper_test/test_controllers/state_machine_based/order.yaml +1 -0
  205. data/sipper_test/test_controllers/state_machine_based/uac_message_controller.rb +34 -0
  206. data/sipper_test/test_controllers/state_machine_based/uas_message_controller.rb +44 -0
  207. data/sipper_test/test_controllers/stray_message/lib/sipper_extensions/my_stray_handler.rb +9 -0
  208. data/sipper_test/test_controllers/stray_message/stray_uac_controller.rb +24 -0
  209. data/sipper_test/test_controllers/stray_message/stray_uas_controller.rb +31 -0
  210. data/sipper_test/test_controllers/string/order.yaml +1 -0
  211. data/sipper_test/test_controllers/string/uac_controller.rb +29 -0
  212. data/sipper_test/test_controllers/string/uas_controller.rb +22 -0
  213. data/sipper_test/test_controllers/test_controller.rb +24 -0
  214. data/sipper_test/test_detached_session1.rb +78 -0
  215. data/sipper_test/test_dialog_routes.rb +139 -0
  216. data/sipper_test/test_digest_challenge1.rb +89 -0
  217. data/sipper_test/test_digest_challenge2.rb +90 -0
  218. data/sipper_test/test_dynamic_parse.rb +249 -0
  219. data/sipper_test/test_empty_sdp.rb +89 -0
  220. data/sipper_test/test_ete.rb +37 -0
  221. data/sipper_test/test_expectation_parser.rb +76 -0
  222. data/sipper_test/test_extensions.rb +28 -0
  223. data/sipper_test/test_freeze.rb +81 -0
  224. data/sipper_test/test_generated.rb +90 -0
  225. data/sipper_test/test_header_parameters.rb +75 -0
  226. data/sipper_test/test_header_parse.rb +141 -0
  227. data/sipper_test/test_http_client1.rb +84 -0
  228. data/sipper_test/test_http_client2.rb +90 -0
  229. data/sipper_test/test_ict_with_timeout.rb +62 -0
  230. data/sipper_test/test_in_dialog_request.rb +61 -0
  231. data/sipper_test/test_inline_controller.rb +67 -0
  232. data/sipper_test/test_invite_client_transaction.rb +272 -0
  233. data/sipper_test/test_invite_replace.rb +147 -0
  234. data/sipper_test/test_invite_retransmission.rb +90 -0
  235. data/sipper_test/test_invite_server_transaction.rb +208 -0
  236. data/sipper_test/test_lower_cseq.rb +79 -0
  237. data/sipper_test/test_media.rb +52 -0
  238. data/sipper_test/test_message.rb +392 -0
  239. data/sipper_test/test_method_specific_response_handling.rb +81 -0
  240. data/sipper_test/test_multi_homed1.rb +127 -0
  241. data/sipper_test/test_multi_homed2.rb +109 -0
  242. data/sipper_test/test_multi_homed_duplicate.rb +87 -0
  243. data/sipper_test/test_multi_homed_with_detached.rb +88 -0
  244. data/sipper_test/test_multiple.rb +49 -0
  245. data/sipper_test/test_multiple_contacts.rb +89 -0
  246. data/sipper_test/test_non2xx_retransmission_with_ist.rb +87 -0
  247. data/sipper_test/test_non_invite_client_transaction.rb +210 -0
  248. data/sipper_test/test_non_invite_retransmission.rb +91 -0
  249. data/sipper_test/test_non_invite_server_transaction.rb +202 -0
  250. data/sipper_test/test_offer_answer_prack.rb +103 -0
  251. data/sipper_test/test_pickup.rb +258 -0
  252. data/sipper_test/test_prack.rb +105 -0
  253. data/sipper_test/test_prack_store_and_dispatch.rb +101 -0
  254. data/sipper_test/test_prack_timer.rb +105 -0
  255. data/sipper_test/test_ps_sipper_map.rb +56 -0
  256. data/sipper_test/test_re_invite_uas_ongoing_ict.rb +81 -0
  257. data/sipper_test/test_re_invite_uas_ongoing_ist.rb +84 -0
  258. data/sipper_test/test_re_invite_with_ongoing_ict.rb +101 -0
  259. data/sipper_test/test_re_invite_with_ongoing_ist.rb +89 -0
  260. data/sipper_test/test_recorder_swap.rb +157 -0
  261. data/sipper_test/test_refer.rb +121 -0
  262. data/sipper_test/test_registeration_clearing.rb +97 -0
  263. data/sipper_test/test_registrar.rb +109 -0
  264. data/sipper_test/test_registration_controller.rb +73 -0
  265. data/sipper_test/test_registration_timeout.rb +90 -0
  266. data/sipper_test/test_remote_controller.rb +39 -0
  267. data/sipper_test/test_remote_target_update_on2xx.rb +140 -0
  268. data/sipper_test/test_request.rb +106 -0
  269. data/sipper_test/test_response.rb +40 -0
  270. data/sipper_test/test_response_without_to_tag.rb +92 -0
  271. data/sipper_test/test_rport.rb +88 -0
  272. data/sipper_test/test_sdp.rb +91 -0
  273. data/sipper_test/test_sdp_parser.rb +145 -0
  274. data/sipper_test/test_session.rb +276 -0
  275. data/sipper_test/test_session_callback_handler.rb +68 -0
  276. data/sipper_test/test_session_lifetime.rb +66 -0
  277. data/sipper_test/test_session_manager.rb +141 -0
  278. data/sipper_test/test_session_recorder.rb +145 -0
  279. data/sipper_test/test_session_state_user_defined.rb +84 -0
  280. data/sipper_test/test_session_states.rb +91 -0
  281. data/sipper_test/test_simple_dialog_state.rb +86 -0
  282. data/sipper_test/test_simple_re_invite.rb +86 -0
  283. data/sipper_test/test_sip_uri.rb +234 -0
  284. data/sipper_test/test_sipper_util.rb +45 -0
  285. data/sipper_test/test_smc_controller.rb +17 -0
  286. data/sipper_test/test_smoke.rb +80 -0
  287. data/sipper_test/test_stray.rb +28 -0
  288. data/sipper_test/test_stray_inline.rb +89 -0
  289. data/sipper_test/test_stray_res_acked.rb +103 -0
  290. data/sipper_test/test_stray_respond.rb +104 -0
  291. data/sipper_test/test_stray_retry.rb +92 -0
  292. data/sipper_test/test_stray_retry_failure.rb +93 -0
  293. data/sipper_test/test_stray_retry_initial.rb +100 -0
  294. data/sipper_test/test_strict_router_with_angled.rb +84 -0
  295. data/sipper_test/test_string_record.rb +31 -0
  296. data/sipper_test/test_subscribe_notify.rb +141 -0
  297. data/sipper_test/test_subscribe_notify_client_timeout.rb +158 -0
  298. data/sipper_test/test_subscribe_notify_dialog.rb +146 -0
  299. data/sipper_test/test_subscribe_notify_expires.rb +155 -0
  300. data/sipper_test/test_subscribe_notify_multiple_subscription.rb +157 -0
  301. data/sipper_test/test_subscribe_notify_server_timeout.rb +144 -0
  302. data/sipper_test/test_subsequent_unsent.rb +88 -0
  303. data/sipper_test/test_target_refresh_proxy_detached.rb +128 -0
  304. data/sipper_test/test_target_refresh_proxy_udp.rb +130 -0
  305. data/sipper_test/test_target_refresh_rr_proxy_udp.rb +133 -0
  306. data/sipper_test/test_target_refresh_with_new_port.rb +158 -0
  307. data/sipper_test/test_target_refresh_with_proxy1.rb +113 -0
  308. data/sipper_test/test_target_refresh_with_rr_update_proxy.rb +145 -0
  309. data/sipper_test/test_target_refresh_with_update_proxy.rb +144 -0
  310. data/sipper_test/test_target_refresh_with_update_proxy2.rb +139 -0
  311. data/sipper_test/test_timer_manager.rb +71 -0
  312. data/sipper_test/test_timer_task.rb +60 -0
  313. data/sipper_test/test_transport_handler.rb +19 -0
  314. data/sipper_test/test_transport_multi_handler.rb +18 -0
  315. data/sipper_test/test_udp_transport.rb +119 -0
  316. data/sipper_test/test_unparsed.rb +70 -0
  317. data/sipper_test/test_validations.rb +69 -0
  318. data/sipper_test/test_with_rr_proxy.rb +111 -0
  319. data/sipper_test/testmediacontroller.rb +71 -0
  320. data/sipper_test/tracing.rb +23 -0
  321. data/sipper_test/transaction_test_helper.rb +176 -0
  322. data/sipper_test/transport_filters.rb +26 -0
  323. data/sipper_test/ts_sipper.rb +91 -0
  324. data/sipper_test/ts_smoke.rb +3 -0
  325. data/sipper_test/tt.cmd +20 -0
  326. metadata +455 -0
@@ -0,0 +1,21 @@
1
+ require 'blank_test'
2
+
3
+ module InfoTest
4
+ class UacInfoController < SIP::BaseController
5
+
6
+ def start
7
+ r = Request.create_initial("info", "sip:nasir@agnity.com", :p_session_record=>"msg-info")
8
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
9
+ u.send(r)
10
+ logd("Sent a new request from #{name}")
11
+ b = BlankTest.new
12
+ end
13
+
14
+ def on_success_res(session)
15
+ logd("Received response in #{name}")
16
+ session.invalidate(true)
17
+ session.flow_completed_for("TestMultiple")
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ require 'base_controller'
2
+
3
+ module SipMessage
4
+ class UacMsgController < SIP::BaseController
5
+
6
+ def start
7
+ r = Request.create_initial("message", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
8
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
9
+ u.send(r)
10
+ logd("Sent a new request from #{name}")
11
+ end
12
+
13
+ def on_success_res(session)
14
+ logd("Received response in #{name}")
15
+ session.invalidate(true)
16
+ session.flow_completed_for("TestMultiple")
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ require 'base_controller'
2
+
3
+ module InfoTest
4
+ class UasInfoController < SIP::BaseController
5
+
6
+ def on_info(session)
7
+ logd("Received #{session.irequest.method} in #{name}")
8
+ session.local_tag = 5 #todo differentiate automatically on the same container somehow
9
+ r = session.create_response(200, "OK")
10
+ session.send(r)
11
+ session.invalidate(true)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ require 'base_controller'
2
+
3
+ module SipMessage
4
+ class UasMsgController < SIP::BaseController
5
+
6
+ def on_message(session)
7
+ logd("Received MESSAGE in #{name}")
8
+ session.local_tag = 5 #todo differentiate automatically on the same container somehow
9
+ r = session.create_response(200, "OK")
10
+ session.send(r)
11
+ session.invalidate(true)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require 'transaction/state_machine_wrapper'
2
+
3
+ class AppNictHandler
4
+
5
+ def before_request(txn)
6
+ txn.message.test_header = "Sipper"
7
+ end
8
+
9
+ def before_final(txn)
10
+ txn.message.test_response_header = "Sipper"
11
+ end
12
+
13
+ end
@@ -0,0 +1,26 @@
1
+ require 'transaction_handlers/app_nict_handler'
2
+
3
+ module SipNict
4
+ class UacNictTcbhController < SIP::SipTestDriverController
5
+
6
+ transaction_usage :use_transactions=>false, :use_nict=>true
7
+ transaction_handlers :Nict=>AppNictHandler
8
+ #start_on_load :true
9
+
10
+ def start
11
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
12
+ u.request_with("info", "sip:nasir@sipper.com", :p_session_record=>"msg-debug")
13
+ logd("Sent a new INFO from #{name}")
14
+ end
15
+
16
+ def on_success_res(session)
17
+ logd("Received response in #{name}")
18
+ if session.iresponse.test_response_header
19
+ logd("Test-Response-Header found in the response")
20
+ session.request_with("message")
21
+ end
22
+ session.invalidate
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ require 'sip_test_driver_controller'
2
+
3
+ module SipNict
4
+ class UasNictTcbhController < SIP::SipTestDriverController
5
+ def on_info(session)
6
+ logd("Received INFO in #{name}")
7
+ session.local_tag = 5 #todo differentiate automatically on the same container somehow
8
+ session.respond_with(200)
9
+ end
10
+
11
+ def on_message(session)
12
+ session.invalidate
13
+ session.flow_completed_for("TestControllerUsingNictWithTcbh")
14
+ end
15
+
16
+ def order
17
+ 0
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ %class SipCreditControl
2
+
3
+ %start MessageMap::Initial
4
+
5
+ %map MessageMap
6
+
7
+ %%
8
+
9
+ Initial
10
+ {
11
+ invite Connecting {}
12
+ }
13
+
14
+
15
+ Connecting
16
+ {
17
+
18
+ provisional nil {}
19
+
20
+ error(s: Session) Terminated { cleanup(s); }
21
+
22
+ success Connected {}
23
+
24
+ }
25
+
26
+
27
+ Connected
28
+ {
29
+ message(s: Session)
30
+ [ctxt.check_credit(s)]
31
+ nil { send_success(s); }
32
+
33
+ message(s: Session) Terminated { send_bye(s); cleanup(s); }
34
+
35
+ bye(s: Session) Terminated { send_bye(s); cleanup(s); }
36
+ }
37
+
38
+
39
+ Terminated
40
+ {
41
+ }
42
+
43
+ %%
@@ -0,0 +1,194 @@
1
+ # DO NOT EDIT.
2
+ # generated by smc (http://smc.sourceforge.net/)
3
+ # from file : CreditControl.sm
4
+
5
+ require 'statemap'
6
+
7
+ class SipCreditControlState < Statemap::State
8
+
9
+ def Entry(fsm) end
10
+
11
+ def Exit(fsm) end
12
+
13
+ def bye(fsm, s)
14
+ Default(fsm)
15
+ end
16
+
17
+ def error(fsm, s)
18
+ Default(fsm)
19
+ end
20
+
21
+ def invite(fsm)
22
+ Default(fsm)
23
+ end
24
+
25
+ def message(fsm, s)
26
+ Default(fsm)
27
+ end
28
+
29
+ def provisional(fsm)
30
+ Default(fsm)
31
+ end
32
+
33
+ def success(fsm)
34
+ Default(fsm)
35
+ end
36
+
37
+ def Default(fsm)
38
+ msg = "\nState: " + fsm.getState.getName +
39
+ "\nTransition: " + fsm.getTransition + "\n"
40
+ raise Statemap::TransitionUndefinedException, msg
41
+ end
42
+
43
+ end
44
+
45
+ class MessageMap_Default < SipCreditControlState
46
+
47
+ end
48
+
49
+ class MessageMap_Initial < MessageMap_Default
50
+
51
+ def invite(fsm)
52
+ fsm.getState.Exit(fsm)
53
+ fsm.setState(MessageMap::Connecting)
54
+ fsm.getState.Entry(fsm)
55
+ end
56
+
57
+ end
58
+
59
+ class MessageMap_Connecting < MessageMap_Default
60
+
61
+ def error(fsm, s)
62
+ ctxt = fsm.getOwner
63
+ fsm.getState.Exit(fsm)
64
+ fsm.clearState
65
+ begin
66
+ ctxt.cleanup(s)
67
+ ensure
68
+ fsm.setState(MessageMap::Terminated)
69
+ fsm.getState.Entry(fsm)
70
+ end
71
+ end
72
+
73
+ def provisional(fsm)
74
+ end
75
+
76
+ def success(fsm)
77
+ fsm.getState.Exit(fsm)
78
+ fsm.setState(MessageMap::Connected)
79
+ fsm.getState.Entry(fsm)
80
+ end
81
+
82
+ end
83
+
84
+ class MessageMap_Connected < MessageMap_Default
85
+
86
+ def bye(fsm, s)
87
+ ctxt = fsm.getOwner
88
+ fsm.getState.Exit(fsm)
89
+ fsm.clearState
90
+ begin
91
+ ctxt.send_bye(s)
92
+ ctxt.cleanup(s)
93
+ ensure
94
+ fsm.setState(MessageMap::Terminated)
95
+ fsm.getState.Entry(fsm)
96
+ end
97
+ end
98
+
99
+ def message(fsm, s)
100
+ ctxt = fsm.getOwner
101
+ if ctxt.check_credit(s) then
102
+ endState = fsm.getState
103
+ fsm.clearState
104
+ begin
105
+ ctxt.send_success(s)
106
+ ensure
107
+ fsm.setState(endState)
108
+ end
109
+ else
110
+ fsm.getState.Exit(fsm)
111
+ fsm.clearState
112
+ begin
113
+ ctxt.send_bye(s)
114
+ ctxt.cleanup(s)
115
+ ensure
116
+ fsm.setState(MessageMap::Terminated)
117
+ fsm.getState.Entry(fsm)
118
+ end
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ class MessageMap_Terminated < MessageMap_Default
125
+
126
+ end
127
+
128
+ module MessageMap
129
+
130
+ Initial = MessageMap_Initial::new('MessageMap.Initial', 0).freeze
131
+ Connecting = MessageMap_Connecting::new('MessageMap.Connecting', 1).freeze
132
+ Connected = MessageMap_Connected::new('MessageMap.Connected', 2).freeze
133
+ Terminated = MessageMap_Terminated::new('MessageMap.Terminated', 3).freeze
134
+ Default = MessageMap_Default::new('MessageMap.Default', -1).freeze
135
+
136
+ end
137
+
138
+ class SipCreditControl_sm < Statemap::FSMContext
139
+
140
+ def initialize(owner)
141
+ super()
142
+ @_owner = owner
143
+ setState(MessageMap::Initial)
144
+ MessageMap::Initial.Entry(self)
145
+ end
146
+
147
+ def bye(*arglist)
148
+ @_transition = 'bye'
149
+ getState.bye(self, *arglist)
150
+ @_transition = nil
151
+ end
152
+
153
+ def error(*arglist)
154
+ @_transition = 'error'
155
+ getState.error(self, *arglist)
156
+ @_transition = nil
157
+ end
158
+
159
+ def invite()
160
+ @_transition = 'invite'
161
+ getState.invite(self)
162
+ @_transition = nil
163
+ end
164
+
165
+ def message(*arglist)
166
+ @_transition = 'message'
167
+ getState.message(self, *arglist)
168
+ @_transition = nil
169
+ end
170
+
171
+ def provisional()
172
+ @_transition = 'provisional'
173
+ getState.provisional(self)
174
+ @_transition = nil
175
+ end
176
+
177
+ def success()
178
+ @_transition = 'success'
179
+ getState.success(self)
180
+ @_transition = nil
181
+ end
182
+
183
+ def getState()
184
+ if @_state.nil? then
185
+ raise Statemap::StateUndefinedException
186
+ end
187
+ return @_state
188
+ end
189
+
190
+ def getOwner()
191
+ return @_owner
192
+ end
193
+
194
+ end
@@ -0,0 +1 @@
1
+ - Smc::UasMessageController
@@ -0,0 +1,34 @@
1
+ # The UAC does not use the state machine but the UAS does, this example
2
+ # demonstrates the difference in coding style between the two
3
+ # approaches
4
+
5
+ module Smc
6
+ class UacMessageController < SIP::SipTestDriverController
7
+
8
+ def start
9
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
10
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
11
+ logd("Sent a new request from uac_controller")
12
+ u[:state] = "invite"
13
+ end
14
+
15
+ def on_success_res(session)
16
+ if session[:state] == "invite"
17
+ logd("Creating ACK on getting 200 OK")
18
+ session.create_and_send_ack
19
+ end
20
+ session.request_with("message")
21
+ session[:state] = "message"
22
+ end
23
+
24
+ def on_bye(session)
25
+ if session[:state] == "message"
26
+ session.respond_with 200
27
+ session.invalidate
28
+ else
29
+ logw("Got BYE in wrong state")
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,44 @@
1
+ require 'CreditControl_sm'
2
+
3
+ module Smc
4
+ class UasMessageController < SIP::SipTestDriverController
5
+
6
+ def on_invite(session)
7
+ session[:sm] = SipCreditControl_sm.new(self) unless session[:sm]
8
+ session[:sm].invite
9
+ session.local_tag = 5 #to differentiate the key for UAC/UAS
10
+ session.respond_with(200)
11
+ logd("Sent response from #{name}")
12
+ session[:sm].success
13
+ end
14
+
15
+ def on_message(s)
16
+ s[:sm].message(s)
17
+ end
18
+
19
+ def on_success_res(s)
20
+ s.invalidate
21
+ s.flow_completed_for("TestSmcController")
22
+ end
23
+
24
+ #--------SM callbacks--------
25
+ def check_credit(s)
26
+ (s.remote_cseq)%3!=0
27
+ end
28
+
29
+ def send_success(s)
30
+ s.respond_with(200)
31
+ end
32
+
33
+ def send_bye(s)
34
+ s.request_with "bye"
35
+ end
36
+
37
+ def cleanup(s)
38
+ #nothing to cleanup here as we want to signal on 2xx callback, invalidating here
39
+ #would remove the session which would not allow the response to reach us.
40
+ end
41
+ #--------SM callbacks--------
42
+
43
+ end
44
+ end