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,103 @@
1
+
2
+ # Get a stray 200 OK response and create and send an ACK out of thin air.
3
+ #
4
+ require 'driven_sip_test_case'
5
+
6
+ class TestStrayResAcked < DrivenSipTestCase
7
+
8
+ def setup
9
+ super
10
+ str = <<-EOF
11
+
12
+ require 'stray_message_manager'
13
+ require 'udp_session'
14
+
15
+ class ResponseStrayHandler < SIP::StrayMessageHandler
16
+ def handle(m)
17
+ ## ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]
18
+ if m.is_response? && m.rcvd_from_info[0] == "AF_INET"
19
+ remote_ip = m.rcvd_from_info[3]
20
+ remote_port = SipperConfigurator[:LocalTestPort]
21
+ rts = if m[:record_route]
22
+ m.record_routes.reverse
23
+ else
24
+ nil
25
+ end
26
+ s = UdpSession.new(remote_ip, remote_port, rts)
27
+ r = s.create_initial_request("ACK", m.contact.uri)
28
+ r.copy_from(m, :from, :to, :call_id)
29
+ s.send(r)
30
+ s.invalidate(true)
31
+ end
32
+ [SIP::StrayMessageHandler::SMH_HANDLED, nil]
33
+ end
34
+ end
35
+
36
+
37
+ require 'sip_test_driver_controller'
38
+
39
+ module SipInline
40
+ class UasStrayResAckController < SIP::SipTestDriverController
41
+
42
+ transaction_usage :use_transactions=>true
43
+
44
+
45
+ def initialize
46
+ logd(name+' controller created')
47
+ end
48
+
49
+ def on_invite(session)
50
+ session.respond_with(200)
51
+ end
52
+
53
+ def on_ack(session)
54
+ session.invalidate(true)
55
+ session.flow_completed_for('TestStrayResAcked')
56
+ end
57
+
58
+ def order
59
+ 0
60
+ end
61
+
62
+ end
63
+
64
+ class UacStrayResAckController < SIP::SipTestDriverController
65
+
66
+ transaction_usage :use_transactions=>true
67
+
68
+ def start
69
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
70
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info",
71
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr")
72
+ logd("Sent a new INVITE from "+name)
73
+ end
74
+
75
+ def on_trying_res(session)
76
+ session.invalidate(true)
77
+ end
78
+
79
+ end
80
+ end
81
+ EOF
82
+ define_controller_from(str)
83
+ set_controller("SipInline::UacStrayResAckController")
84
+ end
85
+
86
+
87
+ def test_stray_controller_for_res
88
+ self.expected_flow = ["> INVITE", "< 100"]
89
+ start_controller
90
+ verify_call_flow(:out)
91
+ self.expected_flow = ["< INVITE", "> 100","> 200", "< ACK"]
92
+ verify_call_flow(:in)
93
+ end
94
+
95
+ def teardown
96
+ SIP::StrayMessageManager.clear_handler
97
+ super
98
+ end
99
+
100
+ end
101
+
102
+
103
+
@@ -0,0 +1,104 @@
1
+
2
+ # Get a subsequent request and create a response to the stray request.
3
+ #
4
+ require 'driven_sip_test_case'
5
+
6
+ class TestStrayRespond < DrivenSipTestCase
7
+
8
+ def setup
9
+ super
10
+ str = <<-EOF
11
+
12
+ require 'stray_message_manager'
13
+ require 'udp_session'
14
+
15
+ class ResponsiveStrayHandler < SIP::StrayMessageHandler
16
+ def handle(m)
17
+ ## ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]
18
+ if m.is_request? && m.rcvd_from_info[0] == "AF_INET"
19
+ remote_ip = m.via.received || m.via.sent_by_ip
20
+ remote_port = m.via.sent_by_port
21
+ s = UdpSession.new(remote_ip, remote_port, nil)
22
+ r = s.create_response(200, "SELECT", m)
23
+ s.send(r)
24
+ s.invalidate(true)
25
+ end
26
+ [SIP::StrayMessageHandler::SMH_HANDLED, nil]
27
+ end
28
+ end
29
+
30
+
31
+ require 'sip_test_driver_controller'
32
+
33
+ module SipInline
34
+ class UasStrayResponsiveController < SIP::SipTestDriverController
35
+
36
+ transaction_usage :use_transactions=>true
37
+
38
+
39
+ def initialize
40
+ logd(name+' controller created')
41
+ end
42
+
43
+ def on_invite(session)
44
+ session.respond_with(200)
45
+ end
46
+
47
+
48
+ def on_ack(session)
49
+ session.request_with("bye")
50
+ end
51
+
52
+ def on_success_res(session)
53
+ session.invalidate(true)
54
+ session.flow_completed_for('TestStrayRespond')
55
+ end
56
+
57
+ def order
58
+ 0
59
+ end
60
+
61
+ end
62
+
63
+ class UacStrayResponsiveController < SIP::SipTestDriverController
64
+
65
+ transaction_usage :use_transactions=>true
66
+
67
+ def start
68
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
69
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
70
+ logd("Sent a new INVITE from "+name)
71
+ end
72
+
73
+
74
+ def on_success_res(session)
75
+ session.request_with('ACK')
76
+ session.invalidate(true)
77
+ end
78
+
79
+
80
+ end
81
+ end
82
+ EOF
83
+ define_controller_from(str)
84
+ set_controller("SipInline::UacStrayResponsiveController")
85
+ end
86
+
87
+
88
+ def test_stray_controller1
89
+ self.expected_flow = ["> INVITE", "< 100","< 200", "> ACK"]
90
+ start_controller
91
+ verify_call_flow(:out)
92
+ self.expected_flow = ["< INVITE", "> 100","> 200", "< ACK", "> BYE", "< 200"]
93
+ verify_call_flow(:in)
94
+ end
95
+
96
+ def teardown
97
+ SIP::StrayMessageManager.clear_handler
98
+ super
99
+ end
100
+
101
+ end
102
+
103
+
104
+
@@ -0,0 +1,92 @@
1
+
2
+ # Get a subsequent request and modify and retry.
3
+ #
4
+ require 'driven_sip_test_case'
5
+
6
+ class TestStrayRetry < DrivenSipTestCase
7
+
8
+ def setup
9
+ super
10
+ str = <<-EOF
11
+
12
+ require 'stray_message_manager'
13
+ require 'udp_session'
14
+
15
+ class RetryStrayHandler < SIP::StrayMessageHandler
16
+ def handle(m)
17
+ m.from.tag = m.from.orig_tg
18
+ [SIP::StrayMessageHandler::SMH_RETRY, m]
19
+ end
20
+ end
21
+
22
+
23
+ require 'sip_test_driver_controller'
24
+
25
+ module SipInline
26
+ class UasStrayRetryController < SIP::SipTestDriverController
27
+
28
+ transaction_usage :use_transactions=>true
29
+
30
+ def initialize
31
+ logd(name+' controller created')
32
+ end
33
+
34
+ def on_invite(session)
35
+ session.respond_with(200)
36
+ end
37
+
38
+
39
+ def on_ack(session)
40
+ session.invalidate(true)
41
+ session.flow_completed_for('TestStrayRetry')
42
+ end
43
+
44
+
45
+ def order
46
+ 0
47
+ end
48
+
49
+ end
50
+
51
+ class UacStrayRetryController < SIP::SipTestDriverController
52
+
53
+ transaction_usage :use_transactions=>true
54
+
55
+ def start
56
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
57
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
58
+ logd("Sent a new INVITE from "+name)
59
+ end
60
+
61
+
62
+ def on_success_res(session)
63
+ ack = session.create_2xx_ack
64
+ ack.from.orig_tg = ack.from.tag
65
+ ack.from.tag = "bad_tag"
66
+ session.send(ack)
67
+ session.invalidate(true)
68
+ end
69
+
70
+
71
+ end
72
+ end
73
+ EOF
74
+ define_controller_from(str)
75
+ set_controller("SipInline::UacStrayRetryController")
76
+ end
77
+
78
+
79
+ def test_stray_controller1
80
+ self.expected_flow = ["> INVITE", "< 100","< 200", "> ACK"]
81
+ start_controller
82
+ verify_call_flow(:out)
83
+ self.expected_flow = ["< INVITE", "> 100","> 200", "< ACK"]
84
+ verify_call_flow(:in)
85
+ end
86
+
87
+ def teardown
88
+ SIP::StrayMessageManager.clear_handler
89
+ super
90
+ end
91
+
92
+ end
@@ -0,0 +1,93 @@
1
+
2
+ # Get a subsequent request and retry, without modification.
3
+ #
4
+ require 'driven_sip_test_case'
5
+
6
+ class TestStrayRetryFailure < DrivenSipTestCase
7
+
8
+ def setup
9
+ super
10
+ str = <<-EOF
11
+
12
+ require 'stray_message_manager'
13
+ require 'udp_session'
14
+
15
+ class RetryStrayHandler < SIP::StrayMessageHandler
16
+ def handle(m)
17
+ [SIP::StrayMessageHandler::SMH_RETRY, m]
18
+ end
19
+ end
20
+
21
+
22
+ require 'sip_test_driver_controller'
23
+
24
+ module SipInline
25
+ class UasStrayRetryFailureController < SIP::SipTestDriverController
26
+
27
+ transaction_usage :use_transactions=>true
28
+
29
+ def initialize
30
+ logd(name+' controller created')
31
+ end
32
+
33
+ def on_invite(session)
34
+ session.respond_with(200)
35
+ session.invalidate
36
+ end
37
+
38
+
39
+ def on_ack(session)
40
+ # this should never be sent as we will not see ack
41
+ session.request_with("bye")
42
+ end
43
+
44
+
45
+ def order
46
+ 0
47
+ end
48
+
49
+ end
50
+
51
+ class UacStrayRetryFailureController < SIP::SipTestDriverController
52
+
53
+ transaction_usage :use_transactions=>true
54
+
55
+ def start
56
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
57
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
58
+ logd("Sent a new INVITE from "+name)
59
+ end
60
+
61
+
62
+ def on_success_res(session)
63
+ ack = session.create_2xx_ack
64
+ ack.from.tag = "bad_tag"
65
+ session.send(ack)
66
+ session.invalidate
67
+ session.flow_completed_for('TestStrayRetryFailure')
68
+ end
69
+
70
+ def on_bye(session)
71
+ end
72
+
73
+ end
74
+ end
75
+ EOF
76
+ define_controller_from(str)
77
+ set_controller("SipInline::UacStrayRetryFailureController")
78
+ end
79
+
80
+
81
+ def test_stray_controller1
82
+ self.expected_flow = ["> INVITE", "< 100","< 200", "> ACK"]
83
+ start_controller
84
+ verify_call_flow(:out)
85
+ end
86
+
87
+ def teardown
88
+ SIP::StrayMessageManager.clear_handler
89
+ super
90
+ end
91
+
92
+ end
93
+
@@ -0,0 +1,100 @@
1
+
2
+ # Get a subsequent request and retry it as iniytial.
3
+ # Note the second session that is created is not recorded
4
+ # because it does not have the session record header.
5
+ #
6
+ require 'driven_sip_test_case'
7
+
8
+ class TestStrayRetryInitial < DrivenSipTestCase
9
+
10
+ def setup
11
+ super
12
+ str = <<-EOF
13
+
14
+ require 'stray_message_manager'
15
+ require 'udp_session'
16
+
17
+ class RetryStrayInitialHandler < SIP::StrayMessageHandler
18
+ def handle(m)
19
+ [SIP::StrayMessageHandler::SMH_TREAT_INITIAL, m]
20
+ end
21
+ end
22
+
23
+
24
+ require 'sip_test_driver_controller'
25
+
26
+ module SipInline
27
+ class UasStrayRetryInitialController < SIP::SipTestDriverController
28
+
29
+ transaction_usage :use_transactions=>true
30
+
31
+ def initialize
32
+ logd(name+' controller created')
33
+ end
34
+
35
+ def on_invite(session)
36
+ session.respond_with(200)
37
+ end
38
+
39
+ def on_ack(session)
40
+ session.invalidate(true)
41
+ end
42
+
43
+ def on_bye(session)
44
+ session.respond_with(200)
45
+ session.invalidate(true)
46
+ end
47
+
48
+ def order
49
+ 0
50
+ end
51
+
52
+ end
53
+
54
+ class UacStrayRetryInitialController < SIP::SipTestDriverController
55
+
56
+ transaction_usage :use_transactions=>true
57
+
58
+ def start
59
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
60
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
61
+ logd("Sent a new INVITE from "+name)
62
+ end
63
+
64
+
65
+ def on_success_res(session)
66
+ if session.iresponse.get_request_method == "INVITE"
67
+ session.request_with("ack")
68
+ bye = session.create_subsequent_request("bye")
69
+ bye.from.tag = "bad_tag"
70
+ session.force_update_session_map = true
71
+ session.send(bye)
72
+ else
73
+ session.invalidate(true)
74
+ session.flow_completed_for("TestStrayRetryInitial")
75
+ end
76
+ end
77
+
78
+
79
+ end
80
+ end
81
+ EOF
82
+ define_controller_from(str)
83
+ set_controller("SipInline::UacStrayRetryInitialController")
84
+ end
85
+
86
+
87
+ def test_stray_controller1
88
+ self.expected_flow = ["> INVITE", "< 100","< 200", "> ACK", "> BYE", "< 200"]
89
+ start_controller
90
+ verify_call_flow(:out)
91
+ self.expected_flow = ["< INVITE", "> 100","> 200", "< ACK"]
92
+ verify_call_flow(:in)
93
+ end
94
+
95
+ def teardown
96
+ SIP::StrayMessageManager.clear_handler
97
+ super
98
+ end
99
+
100
+ end