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,84 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # A UAS that receives a second INVITE before it sends the final response to a first
5
+ # INVITE with a lower CSeq sequence number on the same dialog MUST return a 500
6
+ # (Server Internal Error) response to the second INVITE and MUST include a Retry-After
7
+ # header field with a randomly chosen value of between 0 and 10 seconds.
8
+
9
+ class TestReInviteUasOngoingIst < DrivenSipTestCase
10
+
11
+ def setup
12
+ @orig_compliance = SipperConfigurator[:ProtocolCompliance]
13
+ SipperConfigurator[:ProtocolCompliance]='strict'
14
+ super
15
+ str = <<-EOF
16
+
17
+
18
+ require 'sip_test_driver_controller'
19
+
20
+ module SipInline
21
+ class UasReInvite4Controller < SIP::SipTestDriverController
22
+
23
+ transaction_usage :use_transactions=>true
24
+ session_timer #{@grty*6}
25
+
26
+ def on_invite(session)
27
+ session.invalidate
28
+ end
29
+
30
+
31
+ def order
32
+ 0
33
+ end
34
+ end
35
+
36
+ class UacReInvite4Controller < SIP::SipTestDriverController
37
+
38
+ transaction_usage :use_transactions=>true
39
+ session_timer #{@grty*8}
40
+ def start
41
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
42
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
43
+ logd("Sent a new INVITE from "+name)
44
+ end
45
+
46
+ def on_trying_res(session)
47
+ unless session['re-invite-sent']
48
+ orig_compliance = SipperConfigurator[:ProtocolCompliance]
49
+ SipperConfigurator[:ProtocolCompliance] = 'lax'
50
+ session.request_with("invite")
51
+ SipperConfigurator[:ProtocolCompliance] = orig_compliance
52
+ session['re-invite-sent'] = true
53
+ end
54
+ end
55
+
56
+ def on_failure_res(session)
57
+ session.do_record("retry_after_found") if session.iresponse.retry_after
58
+ session.invalidate
59
+ session.flow_completed_for("TestReInviteUasOngoingIst")
60
+ end
61
+
62
+
63
+ end
64
+ end
65
+ EOF
66
+ define_controller_from(str)
67
+ set_controller("SipInline::UacReInvite4Controller")
68
+ end
69
+
70
+
71
+ def test_reinvite
72
+ self.expected_flow = ["> INVITE", "< 100", "> INVITE", "< 100", "< 500", "> ACK", "! retry_after_found"]
73
+ start_controller
74
+ verify_call_flow(:out)
75
+ self.expected_flow = ["< INVITE", "> 100", "< INVITE", "> 100", "> 500", "< ACK"]
76
+ verify_call_flow(:in)
77
+ end
78
+
79
+ def teardown
80
+ SipperConfigurator[:ProtocolCompliance] = @orig_compliance
81
+ super
82
+ end
83
+
84
+ end
@@ -0,0 +1,101 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestReInviteWithOngoingIct < DrivenSipTestCase
6
+
7
+ def setup
8
+ @orig_compliance = SipperConfigurator[:ProtocolCompliance]
9
+ SipperConfigurator[:ProtocolCompliance]='strict'
10
+ super
11
+ str = <<-EOF
12
+
13
+ #----- Txn Handler--------
14
+
15
+ require 'transaction/state_machine_wrapper'
16
+
17
+ class IctTxnHandler
18
+
19
+ def before_success_final(txn)
20
+ txn.__consume_msg(true)
21
+ def before_success_final(txn)
22
+ SIP::Transaction::SM_PROCEED
23
+ end
24
+ SIP::Transaction::SM_DO_NOT_PROCEED
25
+ end
26
+
27
+ end
28
+ #------------------------
29
+
30
+
31
+ #------ Controllers -----
32
+
33
+ require 'sip_test_driver_controller'
34
+
35
+ module SipInline
36
+ class UasReInvite2Controller < SIP::SipTestDriverController
37
+
38
+ transaction_usage :use_transactions=>true
39
+ t2xx_usage true
40
+
41
+ def on_invite(session)
42
+ session.respond_with(200)
43
+ end
44
+
45
+ def on_ack(session)
46
+ session.invalidate(true)
47
+ session.flow_completed_for("TestReInviteWithOngoingIct")
48
+ end
49
+
50
+ def order
51
+ 0
52
+ end
53
+ end
54
+
55
+ class UacReInvite2Controller < SIP::SipTestDriverController
56
+
57
+ transaction_usage :use_transactions=>true
58
+ transaction_handlers :Ict=>IctTxnHandler
59
+
60
+ def start
61
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
62
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
63
+ logd("Sent a new INVITE from "+name)
64
+ end
65
+
66
+ def on_success_res(session)
67
+ if session['seen_once']
68
+ session.request_with('ack')
69
+ session.invalidate(true)
70
+ else
71
+ session['seen_once'] = true
72
+ session.request_with("invite")
73
+ end
74
+ rescue RuntimeError
75
+ session.do_record("existing_ict")
76
+ end
77
+
78
+ end
79
+ end
80
+ EOF
81
+ define_controller_from(str)
82
+ set_controller("SipInline::UacReInvite2Controller")
83
+ end
84
+
85
+
86
+ def test_reinvite
87
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "! existing_ict", "< 200", "> ACK"]
88
+ start_controller
89
+ verify_call_flow(:out)
90
+ self.expected_flow = ["< INVITE", "> 100", "> 200 {2,2}", "< ACK"]
91
+ verify_call_flow(:in)
92
+ end
93
+
94
+ def teardown
95
+ SipperConfigurator[:ProtocolCompliance] = @orig_compliance
96
+ super
97
+ end
98
+
99
+ end
100
+
101
+
@@ -0,0 +1,89 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestReInviteWithOngoingIst < DrivenSipTestCase
6
+
7
+ def setup
8
+ @orig_compliance = SipperConfigurator[:ProtocolCompliance]
9
+ SipperConfigurator[:ProtocolCompliance]='strict'
10
+ super
11
+ str = <<-EOF
12
+
13
+
14
+ require 'sip_test_driver_controller'
15
+
16
+ module SipInline
17
+ class UasReInvite3Controller < SIP::SipTestDriverController
18
+
19
+ transaction_usage :use_transactions=>true
20
+ t2xx_usage true
21
+
22
+ def on_invite(session)
23
+ session.request_with("invite")
24
+ rescue RuntimeError
25
+ session.do_record("existing_ist")
26
+ session.respond_with(200)
27
+ end
28
+
29
+ def on_ack(session)
30
+ r = session.request_with("invite")
31
+ end
32
+
33
+ def on_success_res(session)
34
+ session.request_with("ack")
35
+ session.invalidate(true)
36
+ end
37
+
38
+
39
+ def order
40
+ 0
41
+ end
42
+ end
43
+
44
+ class UacReInvite3Controller < SIP::SipTestDriverController
45
+
46
+ transaction_usage :use_transactions=>true
47
+ t2xx_usage true
48
+
49
+ def start
50
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
51
+ u.request_with("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
52
+ logd("Sent a new INVITE from "+name)
53
+ end
54
+
55
+ def on_success_res(session)
56
+ session.request_with('ack')
57
+ end
58
+
59
+ def on_invite(session)
60
+ session.respond_with(200)
61
+ end
62
+
63
+ def on_ack(session)
64
+ session.invalidate(true)
65
+ session.flow_completed_for("TestReInviteWithOngoingIst")
66
+ end
67
+
68
+ end
69
+ end
70
+ EOF
71
+ define_controller_from(str)
72
+ set_controller("SipInline::UacReInvite3Controller")
73
+ end
74
+
75
+
76
+ def test_reinvite
77
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "> ACK", "< INVITE", "> 100", "> 200", "< ACK"]
78
+ start_controller
79
+ verify_call_flow(:out)
80
+ self.expected_flow = ["< INVITE", "> 100", "! existing_ist", "> 200", "< ACK", "> INVITE", "< 100", "< 200", "> ACK"]
81
+ verify_call_flow(:in)
82
+ end
83
+
84
+ def teardown
85
+ SipperConfigurator[:ProtocolCompliance] = @orig_compliance
86
+ super
87
+ end
88
+
89
+ end
@@ -0,0 +1,157 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestRecorderSwap < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+ # FLOW : > INVITE, < 180, < 200, > ACK, < REFER, > 202, > NOTIFY, < 200, < BYE, > 200, > INVITE, < 180, < 200, > BYE, < 200
10
+ #
11
+ require 'base_controller'
12
+ module Swap
13
+ class TestCInviteController < SIP::SipTestDriverController
14
+
15
+ # change the directive below to true to enable transaction usage.
16
+ # If you do that then make sure that your controller is also
17
+ # transaction aware. i.e does not try send ACK to non-2xx responses,
18
+ # does not send 100 Trying response etc.
19
+
20
+ transaction_usage :use_transactions=>false
21
+
22
+ def initialize
23
+ logd('Controller created')
24
+ end
25
+
26
+ def on_refer(session)
27
+ session.respond_with(202)
28
+ session[:carol_uri] = session.irequest.refer_to
29
+ session.request_with('NOTIFY')
30
+ end
31
+
32
+ def on_bye(session)
33
+ session.respond_with(200)
34
+ new_session =
35
+ create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
36
+ new_session.continue_recording_from session
37
+ new_session.request_with('INVITE', session[:carol_uri],
38
+ :user => 'carol', :p_session_record=>'msg-info')
39
+ new_session[:for_carol] = true
40
+ session.invalidate(true)
41
+ end
42
+
43
+
44
+ def start
45
+ session = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
46
+ session.request_with('INVITE', 'sip:nasir@sipper.com',
47
+ :user => 'alice', :p_session_record=>'msg-info')
48
+ end
49
+
50
+ def on_success_res(session)
51
+ if session.iresponse.get_request_method == 'INVITE'
52
+ session.request_with('ACK')
53
+ session.request_with('BYE') if session[:for_carol]
54
+ elsif session.iresponse.get_request_method == 'BYE'
55
+ session.invalidate(true)
56
+ session.flow_completed_for('TestRecorderSwap')
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ class InviteReferController < SIP::BaseController
63
+
64
+ # change the directive below to true to enable transaction usage.
65
+ # If you do that then make sure that your controller is also
66
+ # transaction aware. i.e does not try send ACK to non-2xx responses,
67
+ # does not send 100 Trying response etc.
68
+
69
+ transaction_usage :use_transactions=>false
70
+
71
+ # change the directive below to true to start after loading.
72
+ start_on_load false
73
+
74
+ def initialize
75
+ logd('Controller created')
76
+ end
77
+
78
+ def on_invite(session)
79
+ session.respond_with(180)
80
+ session.respond_with(200)
81
+ end
82
+
83
+
84
+ def on_success_res(session)
85
+ session.invalidate(true) if session.iresponse.get_request_method == 'BYE'
86
+ end
87
+
88
+ def on_notify(session)
89
+ session.respond_with(200)
90
+ session.request_with('BYE')
91
+ end
92
+
93
+ def on_ack(session)
94
+ r = session.create_subsequent_request('REFER')
95
+ r.refer_to = 'sip:carol@192.168.1.2'
96
+ session.send r
97
+ end
98
+
99
+ def interested?(r)
100
+ if r[:user] && r.user == 'alice'
101
+ return true
102
+ else
103
+ return false
104
+ end
105
+ end
106
+ end
107
+
108
+ class InviteController < SIP::BaseController
109
+
110
+ # change the directive below to true to enable transaction usage.
111
+ # If you do that then make sure that your controller is also
112
+ # transaction aware. i.e does not try send ACK to non-2xx responses,
113
+ # does not send 100 Trying response etc.
114
+
115
+ transaction_usage :use_transactions=>false
116
+
117
+ # change the directive below to true to start after loading.
118
+ start_on_load false
119
+
120
+ def initialize
121
+ logd('Controller created')
122
+ end
123
+
124
+ def on_invite(session)
125
+ session.respond_with(180)
126
+ session.respond_with(200)
127
+ end
128
+
129
+ def on_bye(session)
130
+ session.respond_with(200)
131
+ session.invalidate(true)
132
+ end
133
+
134
+ def on_ack(session)
135
+ end
136
+
137
+ def interested?(r)
138
+ if r[:user] && r.user == 'carol'
139
+ return true
140
+ else
141
+ return false
142
+ end
143
+ end
144
+
145
+ end
146
+ end # module
147
+ EOF
148
+ define_controller_from(str)
149
+ set_controller('Swap::TestCInviteController')
150
+ end
151
+
152
+ def test_case_1
153
+ self.expected_flow = ['> INVITE','< 180','< 200','> ACK','< REFER','> 202','> NOTIFY','< 200','< BYE','> 200', '> INVITE','< 180','< 200','> ACK', '> BYE', '< 200' ]
154
+ start_controller
155
+ verify_call_flow(:out)
156
+ end
157
+ end
@@ -0,0 +1,121 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestRefer < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module TestRefer_SipInline
13
+ class Uas2xxController < SIP::SipTestDriverController
14
+
15
+ transaction_usage :use_transactions=>true
16
+
17
+ session_timer 1500
18
+
19
+ def on_refer(session)
20
+ logd("Received Refer in #{name}")
21
+
22
+ subscription = session.get_subscription(session.irequest)
23
+
24
+ if subscription == nil
25
+ logd("New subscription received.")
26
+ subscription = session.create_subscription_from_request(session.irequest)
27
+ end
28
+
29
+ response = session.create_response(202)
30
+ session.send_response(response)
31
+
32
+ notifyReq = session.create_subsequent_request("NOTIFY")
33
+ session.add_subscription_to_request(notifyReq, subscription)
34
+ notifyReq.content = "SIP/2.0 100 Trying\r\n"
35
+ notifyReq.content_type = "message/sipfrag;version=2.0"
36
+
37
+ session.send_request(notifyReq)
38
+ end
39
+
40
+ def on_success_res(session)
41
+ logd("Received response in #{name}")
42
+
43
+ request = session.iresponse.get_request()
44
+ subscription = session.get_subscription(request)
45
+
46
+ if subscription.state == "terminated"
47
+ session.remove_subscription(subscription)
48
+ session.invalidate
49
+ session.flow_completed_for("TestRefer")
50
+ else
51
+ subscription.state = "terminated"
52
+ notifyReq = session.create_subsequent_request("NOTIFY")
53
+ session.add_subscription_to_request(notifyReq, subscription)
54
+ notifyReq.content = "SIP/2.0 200 OK\r\n"
55
+ notifyReq.content_type = "message/sipfrag;version=2.0"
56
+
57
+ session.send_request(notifyReq)
58
+ end
59
+ end
60
+
61
+ def order
62
+ 0
63
+ end
64
+ end
65
+
66
+ class Uac2xxController < SIP::SipTestDriverController
67
+ transaction_usage :use_transactions=>false
68
+ session_timer 500
69
+
70
+ def start
71
+ r = Request.create_initial("refer", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
72
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
73
+ subscription = u.create_subscription("refer")
74
+ u.add_subscription_to_request(r, subscription)
75
+ u.send(r)
76
+ logd("Sent a new REFER from #{name}")
77
+ end
78
+
79
+ def on_notify(session)
80
+ logd("Received notify in #{name}")
81
+
82
+ subscription = session.get_subscription(session.irequest)
83
+
84
+ if subscription == nil
85
+ logd("Unsolicited notify received.")
86
+ session.respond_with(200)
87
+ return
88
+ end
89
+
90
+ session.respond_with(200)
91
+
92
+ subscription = session.update_subscription(session.irequest)
93
+
94
+ if subscription.state == "terminated"
95
+ session.invalidate
96
+ end
97
+ end
98
+
99
+ def on_success_res(session)
100
+ logd("Received response in #{name}")
101
+ end
102
+ end
103
+ end
104
+ EOF
105
+ define_controller_from(str)
106
+ set_controller("TestRefer_SipInline::Uac2xxController")
107
+ end
108
+
109
+
110
+ def test_subscribe_notify
111
+ self.expected_flow = ["> REFER","< 202 {0,}", "< NOTIFY", "< 202 {0,}", "> 200", "< NOTIFY", "> 200"]
112
+ start_controller
113
+ verify_call_flow(:out)
114
+ self.expected_flow = ["< REFER","> 202", "> NOTIFY", "< 200", "> NOTIFY", "< 200"]
115
+
116
+ verify_call_flow(:in)
117
+ end
118
+
119
+ end
120
+
121
+