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,9 @@
1
+ require 'stray_message_manager'
2
+
3
+ class MyStrayHandler < SIP::StrayMessageHandler
4
+
5
+ def handle(m)
6
+ [SIP::StrayMessageHandler::SMH_DROP, m]
7
+ end
8
+
9
+ end
@@ -0,0 +1,24 @@
1
+
2
+ require 'sip_test_driver_controller'
3
+
4
+ class StrayUacController < SIP::SipTestDriverController
5
+
6
+ transaction_usage :use_transactions=>false
7
+
8
+ def initialize
9
+ logd('#{name} controller created')
10
+ end
11
+
12
+ def start
13
+ session = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
14
+ r = session.create_initial_request('INVITE', 'sip:nasir@sipper.com', :p_session_record=>"msg-debug")
15
+ session.send(r)
16
+ end
17
+
18
+ def on_success_res(session)
19
+ session.request_with('ACK')
20
+ session.invalidate(true)
21
+ session.flow_completed_for('TestStray')
22
+ end
23
+
24
+ end
@@ -0,0 +1,31 @@
1
+
2
+ require 'sip_test_driver_controller'
3
+
4
+ class StrayUasController < SIP::SipTestDriverController
5
+
6
+ # change the directive below to true to enable transaction usage.
7
+ # If you do that then make sure that your controller is also
8
+ # transaction aware. i.e does not try send ACK to non-2xx responses,
9
+ # does not send 100 Trying response etc.
10
+
11
+ transaction_usage :use_transactions=>false
12
+
13
+
14
+ def initialize
15
+ logd('#{name} controller created')
16
+ end
17
+
18
+ def on_invite(session)
19
+ session.respond_with(100)
20
+ session.respond_with(200)
21
+ session.invalidate(true)
22
+ end
23
+
24
+ def start
25
+ session = create_udp_session(SipperConfigurator[:DefaultRIP], SipperConfigurator[:DefaultRP])
26
+ end
27
+
28
+ def on_ack(session)
29
+ end
30
+
31
+ end
@@ -0,0 +1 @@
1
+ - UasController
@@ -0,0 +1,29 @@
1
+ require 'base_controller'
2
+
3
+
4
+ module StringRecord
5
+
6
+ class UacController < SIP::BaseController
7
+
8
+ #start_on_load :true
9
+
10
+ def initialize
11
+ logd("UAC controller created")
12
+ end
13
+
14
+ def start
15
+ r = Request.create_initial("info", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
16
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
17
+ u.record_io = yield if block_given?
18
+ u.send(r)
19
+ logd("Sent a new request from uac_controller")
20
+ end
21
+
22
+ def on_success_res(session)
23
+ logd("Received response in the uac_controller")
24
+ session.invalidate(true)
25
+ session.flow_completed_for("TestStringRecord")
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,22 @@
1
+ require 'base_controller'
2
+
3
+ module StringRecord
4
+
5
+ class UasController < SIP::BaseController
6
+
7
+ def initialize
8
+ logd("#{name} controller created")
9
+ end
10
+
11
+
12
+ def on_info(session)
13
+ logd("on_info called for #{name}")
14
+ session.local_tag = 5 #todo differentiate the key for UAC/UAS
15
+ r = session.create_response(200, "OK")
16
+ session.send(r)
17
+ session.invalidate(true)
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'base_controller'
2
+
3
+
4
+ class TestController < SIP::BaseController
5
+
6
+ start_on_load :true
7
+ transaction_usage :use_transactions=>true, :use_ict=>false, :use_nict=>true, :use_ist=>false, :use_nist=>true
8
+ transaction_timers :t1=>200, :tb=>16000
9
+
10
+ def on_invite(session)
11
+ end
12
+
13
+ def on_success_res(session)
14
+ end
15
+
16
+ def start
17
+ return true
18
+ end
19
+
20
+ def get_test_session
21
+ u = create_udp_session("127.0.0.1", 6061)
22
+ end
23
+
24
+ end
@@ -0,0 +1,78 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestDetachedSession1 < DrivenSipTestCase
6
+
7
+ def setup
8
+ super
9
+ str = <<-EOF
10
+
11
+ require 'sip_test_driver_controller'
12
+
13
+ module TestDetachedSession1_SipInline
14
+ class Uas1DetachedController < SIP::SipTestDriverController
15
+
16
+ transaction_usage :use_transactions=>true
17
+
18
+ def on_invite(session)
19
+ session.respond_with(200)
20
+ logd("Received INVITE sent a 200 from "+name)
21
+ end
22
+
23
+ def on_ack(session)
24
+ session.request_with("bye")
25
+ end
26
+
27
+ def on_success_res(session)
28
+ session.invalidate(true)
29
+ session.flow_completed_for("TestDetachedSession1")
30
+ end
31
+
32
+ def order
33
+ 0
34
+ end
35
+
36
+ end
37
+
38
+ class UacDetached1Controller < SIP::SipTestDriverController
39
+
40
+ transaction_usage :use_transactions=>true
41
+
42
+ def start
43
+ r = Request.create_initial("invite", "sip:nasir@#{SipperConfigurator[:LocalSipperIP]}:#{SipperConfigurator[:LocalTestPort]}", :p_session_record=>"msg-info")
44
+ ds = create_session
45
+ ds.send(r)
46
+ logd("Sent a new INVITE from "+name)
47
+ end
48
+
49
+
50
+ def on_success_res(session)
51
+ session.request_with('ACK')
52
+ end
53
+
54
+ def on_bye(session)
55
+ session.respond_with(200)
56
+ session.invalidate(true)
57
+ end
58
+
59
+ end
60
+ end
61
+ EOF
62
+ define_controller_from(str)
63
+ set_controller("TestDetachedSession1_SipInline::UacDetached1Controller")
64
+ end
65
+
66
+
67
+ def test_detached_controller
68
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "> ACK", "< BYE", "> 200"]
69
+ start_controller
70
+ verify_call_flow(:out)
71
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< ACK", "> BYE", "< 200"]
72
+ verify_call_flow(:in)
73
+ end
74
+
75
+
76
+ end
77
+
78
+
@@ -0,0 +1,139 @@
1
+
2
+ require 'base_test_case'
3
+ require 'session_state/dialog_routes'
4
+ require 'request'
5
+ require 'response'
6
+
7
+ class TestDialogRoutes < BaseTestCase
8
+
9
+ def setup
10
+ super
11
+ #
12
+ end
13
+
14
+ def test_null_dr
15
+ dr = DialogRoutes.new
16
+ assert_nil(dr.get_ruri_and_routes[0])
17
+ assert(dr.get_ruri_and_routes[1].empty?)
18
+ end
19
+
20
+
21
+ def test_pre_existing
22
+ routes = ["<sip:sipper.com;lr>", "<sips:goblet.com;lr>"]
23
+ dr = DialogRoutes.new(routes)
24
+ assert_nil(dr.get_ruri_and_routes[0])
25
+ assert_equal(routes, dr.get_ruri_and_routes[1].map {|x| x.to_s})
26
+ end
27
+
28
+ def test_request_without_rr
29
+ dr = DialogRoutes.new
30
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com")
31
+ dr.request_received(r)
32
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[0].to_s)
33
+ assert(dr.get_ruri_and_routes[1].empty?)
34
+ end
35
+
36
+ # The route set MUST be set to the list of URIs in the Record-Route header field from the
37
+ # request, taken in order and preserving all URI parameters. If no Record-Route header
38
+ # field is present in the request, the route set MUST be set to the empty set.
39
+ # This route set, even if empty, overrides any pre-existing route set for future
40
+ # requests in this dialog. The remote target MUST be set to the URI from the Contact
41
+ # header field of the request.
42
+ def test_request_without_rr_override_plrs
43
+ routes = ["sip:sipper.com;lr", "sips:goblet.com;lr"]
44
+ dr = DialogRoutes.new(routes)
45
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com")
46
+ dr.request_received(r)
47
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[0].to_s)
48
+ assert(dr.get_ruri_and_routes[1].empty?)
49
+ end
50
+
51
+ def test_request_with_rr
52
+ dr = DialogRoutes.new
53
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com",
54
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr")
55
+ dr.request_received(r)
56
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
57
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
58
+ end
59
+
60
+ def test_request_with_rr_override_plrs
61
+ routes = ["sip:sipper.com;lr", "sips:goblet.com;lr"]
62
+ dr = DialogRoutes.new(routes)
63
+ assert_equal("<sip:sipper.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
64
+ assert_equal("<sips:goblet.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
65
+ r = Request.create_initial("subscribe", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com",
66
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr")
67
+ dr.request_received(r)
68
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
69
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
70
+ end
71
+
72
+
73
+ def test_request_without_rr_subsequent_with_rr
74
+ dr = DialogRoutes.new
75
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com")
76
+ dr.request_received(r)
77
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[0].to_s)
78
+ assert(dr.get_ruri_and_routes[1].empty?)
79
+ r = Request.create_initial("subscribe", "sip:nasir@sipper.com", :contact=>"sip:nasir@sipper.com",
80
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr")
81
+ dr.request_received(r)
82
+ assert_equal("sip:nasir@sipper.com", dr.get_ruri_and_routes[0].to_s)
83
+ assert(dr.get_ruri_and_routes[1].empty?)
84
+ end
85
+
86
+ def test_response_with_rr
87
+ dr = DialogRoutes.new
88
+ r = Response.create(200, "OK", :contact=>"sip:nasir@goblet.com",
89
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr", :cseq=>"1 NOTIFY")
90
+ dr.response_received(r)
91
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[0].to_s)
92
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
93
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
94
+ end
95
+
96
+ def test_response_with_rr_subsequent_with_rr
97
+ dr = DialogRoutes.new
98
+ r = Response.create(200, "OK", :contact=>"sip:nasir@goblet.com",
99
+ :record_route=>"sip:example1.com;lr,sip:example2.com;lr", :cseq=>"1 NOTIFY")
100
+ dr.response_received(r)
101
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[0].to_s)
102
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
103
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
104
+ r = Response.create(200, "OK", :contact=>"sip:nasir@sipper.com",
105
+ :record_route=>"sip:example3.com;lr,sip:example4.com;lr", :cseq=>"1 INVITE")
106
+ dr.response_received(r)
107
+ assert_equal("sip:nasir@sipper.com", dr.get_ruri_and_routes[0].to_s)
108
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
109
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][1].to_s)
110
+ end
111
+
112
+
113
+ def test_rr_without_lr
114
+ dr = DialogRoutes.new
115
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :contact=>"sip:nasir@goblet.com",
116
+ :record_route=>"sip:example1.com,sip:example2.com;lr")
117
+ dr.request_received(r)
118
+ assert_equal("sip:example1.com", dr.get_ruri_and_routes[0].to_s)
119
+ assert_equal("<sip:example2.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
120
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[1][1].to_s)
121
+ end
122
+
123
+
124
+ def test_response_rr_without_lr
125
+ dr = DialogRoutes.new
126
+ r = Response.create(200, "OK", :contact=>"sip:nasir@goblet.com",
127
+ :record_route=>"sip:example1.com;lr,sip:example2.com", :cseq=>"1 NOTIFY")
128
+ dr.response_received(r)
129
+ assert_equal("sip:example2.com", dr.get_ruri_and_routes[0].to_s)
130
+ assert_equal("<sip:example1.com;lr>", dr.get_ruri_and_routes[1][0].to_s)
131
+ assert_equal("sip:nasir@goblet.com", dr.get_ruri_and_routes[1][1].to_s)
132
+ end
133
+
134
+ def teardown
135
+ #
136
+ super
137
+ end
138
+
139
+ end
@@ -0,0 +1,89 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestDigestChallenge1 < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module SipInline
13
+ class UasDigest1Controller < SIP::SipTestDriverController
14
+
15
+ transaction_usage :use_transactions=>true
16
+
17
+ def on_invite(session)
18
+ if session.irequest[:authorization]
19
+ session.respond_with(200)
20
+ else
21
+ r = session.create_response(401)
22
+ r.www_authenticate = 'Digest realm="atlanta.com", domain="sip:ss1.carrier.com", nonce="f84f1cec41e6cbe5aea9c8e88d359", stale=FALSE, algorithm=MD5'
23
+ session.send r
24
+ end
25
+ end
26
+
27
+
28
+ def on_ack(session)
29
+ session.request_with 'BYE'
30
+ end
31
+
32
+ def on_success_res(s)
33
+ s.invalidate(true)
34
+ s.flow_completed_for("TestDigestChallenge1")
35
+ end
36
+
37
+ def order
38
+ 0
39
+ end
40
+
41
+ end
42
+
43
+ class UacDigest1Controller < SIP::SipTestDriverController
44
+
45
+ transaction_usage :use_transactions=>true
46
+
47
+ def start
48
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
49
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
50
+ u.send(r)
51
+ logd("Sent a new INVITE from "+name)
52
+ end
53
+
54
+ def on_failure_res(session)
55
+ if session.iresponse.code == 401
56
+ r = session.create_request_with_response_to_challenge(session.iresponse.www_authenticate, false,
57
+ "sipper_user", "sipper_passwd")
58
+ session.send r
59
+ end
60
+ end
61
+
62
+
63
+ def on_success_res(session)
64
+ session.request_with('ACK')
65
+ end
66
+
67
+ def on_bye(session)
68
+ session.respond_with(200)
69
+ session.invalidate(true)
70
+ end
71
+
72
+ end
73
+ end
74
+ EOF
75
+ define_controller_from(str)
76
+ set_controller("SipInline::UacDigest1Controller")
77
+ end
78
+
79
+
80
+ def test_digest_controllers
81
+ self.expected_flow = ["> INVITE", "< 100", "< 401", "> ACK", "> INVITE", "< 100", "< 200", "> ACK", "< BYE", "> 200"]
82
+ start_controller
83
+ verify_call_flow(:out)
84
+ self.expected_flow = ["< INVITE", "> 100", "> 401", "< ACK", "< INVITE", "> 100", "> 200", "< ACK", "> BYE", "< 200"]
85
+ verify_call_flow(:in)
86
+ end
87
+
88
+
89
+ end