Author: kmoore Date: Fri Dec 12 08:15:54 2014 New Revision: 6091 URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=6091 Log: Testsuite: Test for hold using 'inactive' streams
This adds tests checking the use of the 'inactive' stream direction for setting hold. This is used by some Seimens phones. This is primarily a copy of the existing hold tests for 'sendonly' streams with a little cleanup. Review: https://reviewboard.asterisk.org/r/4253/ Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/ asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/ asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_hold_update.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_media_restrict.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_unhold_sans_sdp.xml (with props) asterisk/trunk/tests/channels/pjsip/hold_inactive/test-config.yaml (with props) Modified: asterisk/trunk/tests/channels/pjsip/tests.yaml Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf Fri Dec 12 08:15:54 2014 @@ -1,0 +1,11 @@ +[general] +PHONE_TO_DIAL=PJSIP/phone_B + +[default] +; Dial with no options; use bridge set up based on peer definitions +exten => devicehint,hint,PJSIP/phone_A + +exten => basicdial,1,NoOp() + same => n,Dial(PJSIP/phone_B,,g) + same => n,UserEvent(TestStatus, extension: basicdial) + same => n,Hangup() Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf Fri Dec 12 08:15:54 2014 @@ -1,0 +1,28 @@ +[local] +type=transport +protocol=udp +bind=127.0.0.1:5060 + +[phone_A] +type=aor +contact=sip:[email protected]:5060 + +[phone_A] +type=endpoint +aors=phone_A +context=default +disallow=all +allow=ulaw +direct_media=no + +[phone_B] +type=aor +contact=sip:[email protected]:5060 + +[phone_B] +type=endpoint +aors=phone_B +context=default +disallow=all +allow=ulaw +direct_media=no Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test Fri Dec 12 08:15:54 2014 @@ -1,0 +1,267 @@ +#!/usr/bin/env python +""" +Copyright (C) 2014, Digium, Inc. +Kinsey Moore <[email protected]> + +This program is free software, distributed under the terms of +the GNU General Public License Version 2. +""" + +import sys +import logging + +sys.path.append("lib/python") + +from asterisk.test_case import TestCase +from asterisk.sipp import SIPpScenario +from twisted.internet import reactor + +LOGGER = logging.getLogger(__name__) +INJECT_FILE = "inject.csv" + + +class SIPHold(TestCase): + '''TestCase to execute and evaluate PJSIP hold/unhold scenarios ''' + + def __init__(self): + ''' Constructor ''' + super(SIPHold, self).__init__() + self.create_asterisk() + + self.sipp_scn_phone_a = [{'scenario': 'phone_A.xml', + '-i': '127.0.0.2', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_A.xml', + '-i': '127.0.0.2', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_A.xml', + '-i': '127.0.0.2', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_A.xml', + '-i': '127.0.0.2', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_A.xml', + '-i': '127.0.0.2', '-p': '5060', + '-inf': INJECT_FILE}] + self.sipp_scn_phone_b = [{'scenario': 'phone_B_media_restrict.xml', + '-i': '127.0.0.3', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_B_unhold_sans_sdp.xml', + '-i': '127.0.0.3', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_B_duplicate_hold.xml', + '-i': '127.0.0.3', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_B_hold_update.xml', + '-i': '127.0.0.3', '-p': '5060', + '-inf': INJECT_FILE}, + {'scenario': 'phone_B_IP_media_restrict.xml', + '-i': '127.0.0.3', '-p': '5060', + '-inf': INJECT_FILE}] + + self.passed = True + self.moh_start_events = 0 + self.moh_stop_events = 0 + self.hold_events = 0 + self.unhold_events = 0 + self.user_events = 0 + self.status_inuse_events = 0 + self.status_onhold_events = 0 + self.status_notinuse_events = 0 + self._test_counter = 0 + self._a_finished = False + self._b_finished = False + + def ami_connect(self, ami): + ''' Reaction to new AMI connection + + :param ami: AMI connection that was established + ''' + super(SIPHold, self).ami_connect(ami) + ami.registerEvent('UserEvent', self.user_event_handler) + + ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler) + ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler) + + ami.registerEvent('ExtensionStatus', self.extension_status_handler) + + ami.registerEvent('Hold', self.hold_event_handler) + ami.registerEvent('Unhold', self.unhold_event_handler) + + LOGGER.info("Starting SIP scenario") + self.execute_scenarios() + + def execute_scenarios(self): + '''Execute sipp scenarios and check results for a single test phase + ''' + def __check_scenario_a(result): + ''' Callback from successful sipp scenario - raises flag + indicating that side A completed execution + + :param result: value returned by sipp indicating completion status + ''' + self._a_finished = True + return result + + def __check_scenario_b(result): + ''' Callback from successful sipp scenario - raises flag + indicating that side B completed execution + + :param result: value returned by sipp indicating completion status + ''' + self._b_finished = True + return result + + def __execute_next_scenario(result): + ''' Callback from successful sipp scenario - if both sipp + scenarios are finished then this function will start executing + the next scenario. + + :param result: value returned by sipp indicating completion status + ''' + if self._a_finished and self._b_finished: + self._test_counter += 1 + self.reset_timeout() + self.execute_scenarios() + return result + + if self._test_counter == len(self.sipp_scn_phone_a): + LOGGER.info("All scenarios executed") + return + + sipp_a = SIPpScenario(self.test_name, + self.sipp_scn_phone_a[self._test_counter]) + sipp_b = SIPpScenario(self.test_name, + self.sipp_scn_phone_b[self._test_counter]) + + # Start up the listener first - Phone A calls Phone B + self._a_finished = False + self._b_finished = False + res_b = sipp_b.run(self) + res_a = sipp_a.run(self) + + res_a.addCallback(__check_scenario_a) + res_a.addCallback(__execute_next_scenario) + res_b.addCallback(__check_scenario_b) + res_b.addCallback(__execute_next_scenario) + + def user_event_handler(self, ami, event): + ''' Reacts to UserEvents issued to indicate the end of a call. + stops the testsuite once all calls have reached that point. + + :param ami: AMI connection that the event was received from + :param event: Event that was received + ''' + self.user_events += 1 + if (self.user_events == len(self.sipp_scn_phone_a)): + LOGGER.info("All user events received; stopping reactor") + self.stop_reactor() + + def moh_start_event_handler(self, ami, event): + ''' Reacts to music on hold start events and tallies them. + + :param ami: AMI connection the event was received from + :param event: Event that was received + ''' + LOGGER.debug("Received MOH start event") + self.moh_start_events += 1 + + def moh_stop_event_handler(self, ami, event): + ''' Reacts to music on hold stop events and tallies them. + + :param ami: AMI connection the event was received from + :param event: Event that was received + ''' + + LOGGER.debug("Received MOH stop event") + self.moh_stop_events += 1 + + def extension_status_handler(self, ami, event): + ''' Count hold, unhold, and hungup statuses ''' + status = event.get('status') + if status == '1': + self.status_inuse_events += 1 + elif status == '16': + self.status_onhold_events += 1 + elif status == '0': + self.status_notinuse_events += 1 + + def hold_event_handler(self, ami, event): + ''' Reacts to hold events and tallies them. + + :param ami: AMI connection the event was received from + :param event: Event that was received + ''' + + LOGGER.debug("Recieved Hold event") + self.hold_events += 1 + + def unhold_event_handler(self, ami, event): + ''' Reacts to unhold events and tallies them. + + :param ami: AMI connection the event was received from + :param event: Event that was received + ''' + + LOGGER.debug("Received Unhold event") + self.unhold_events += 1 + + def run(self): + ''' Run the test and create an AMI connection ''' + + super(SIPHold, self).run() + self.create_ami_factory() + + +def main(): + ''' Run the test and check the results ''' + test = SIPHold() + reactor.run() + + if (test.moh_start_events != len(test.sipp_scn_phone_a)): + LOGGER.error("Failed to receive %d MOH start events (received %d)" % + (len(test.sipp_scn_phone_a), test.moh_start_events)) + test.passed = False + if (test.moh_stop_events != len(test.sipp_scn_phone_a)): + LOGGER.error("Failed to receive %d MOH stop events (received %d)" % + (len(test.sipp_scn_phone_a), test.moh_stop_events)) + test.passed = False + if (test.hold_events != len(test.sipp_scn_phone_a)): + LOGGER.error("Failed to receive %d Hold events (received %d)" % + (len(test.sipp_scn_phone_a), test.hold_events)) + test.passed = False + if (test.unhold_events != len(test.sipp_scn_phone_a)): + LOGGER.error("Failed to receive %d Unhold events (received %d)" % + (len(test.sipp_scn_phone_a), test.unhold_events)) + test.passed = False + if (test.user_events != len(test.sipp_scn_phone_a)): + LOGGER.error("Failed to receive %d user test events (received %d)" % + (len(test.sipp_scn_phone_a), test.user_events)) + test.passed = False + if (test.status_inuse_events != len(test.sipp_scn_phone_a) * 2): + LOGGER.error("ExtensionStatus - InUse: %d / %d" % + (len(test.sipp_scn_phone_a) * 2, + test.status_inuse_events)) + test.passed = False + if (test.status_onhold_events != len(test.sipp_scn_phone_a)): + LOGGER.error("ExtensionStatus - Hold: %d / %d" % + (len(test.sipp_scn_phone_a), + test.status_onhold_events)) + test.passed = False + if (test.status_notinuse_events != len(test.sipp_scn_phone_a)): + LOGGER.error("ExtensionStatus - NotInUse: %d / %d" % + (len(test.sipp_scn_phone_a), + test.status_notinuse_events)) + test.passed = False + + if test.passed: + return 0 + else: + return 1 + + +if __name__ == "__main__": + sys.exit(main()) + + +# vim:sw=4:ts=4:expandtab:textwidth=79 Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test ------------------------------------------------------------------------------ svn:executable = * Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/run-test ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv Fri Dec 12 08:15:54 2014 @@ -1,0 +1,2 @@ +SEQUENTIAL +phone_A;phone_B;basicdial Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/inject.csv ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml Fri Dec 12 08:15:54 2014 @@ -1,0 +1,92 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<scenario name="Phone A Hold with IP and Media Restrictions"> + + <send retrans="500"> + <![CDATA[ + INVITE sip:[field2]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number] + To: <sip:[field2]@[remote_ip]:[remote_port];user=phone> + CSeq: 1 INVITE + Call-ID: [call_id] + Contact: <sip:[field0]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1324901698 1324901698 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=sendrecv + m=audio 2226 RTP/AVP 0 101 + a=sendrecv + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="180" optional="true" /> + + <recv response="183" optional="true" /> + + <recv response="200" /> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field0] <sip:[field0]@[remote_ip]>;tag=[call_number] + To: <sip:[field1]@[remote_ip];user=phone>[peer_tag_param] + CSeq: 1 ACK + Call-ID: [call_id] + Contact: <sip:[field0]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <recv request="BYE"/> + + <send retrans="500"> + <![CDATA[ + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field0]@[local_ip]:[local_port];transport=[transport]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + Supported: 100rel,replaces + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1324901698 1324901698 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=sendrecv + m=audio 2226 RTP/AVP 0 101 + a=sendrecv + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + +</scenario> Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_A.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml Fri Dec 12 08:15:54 2014 @@ -1,0 +1,220 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<scenario name="Phone B Hold with IP and Media Restrictions"> + <Global variables="global_call_id"/> + <Global variables="prime_tag"/> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp=".*" + header="Call-ID:" + search_in="hdr" + check_it="true" + assign_to="global_call_id"/> + <ereg regexp="tag=.*" + header="From:" + search_in="hdr" + check_it="true" + assign_to="prime_tag"/> + </action> + </recv> + + <send> + <![CDATA[ + SIP/2.0 100 Trying + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <send> + <![CDATA[ + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Allow-Events: talk,hold,conference + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <pause milliseconds="200"/> + + <send retrans="500"> + <![CDATA[ + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + Supported: 100rel,replaces + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003604 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=sendrecv + m=audio 2226 RTP/AVP 0 101 + a=sendrecv + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <!-- RECV ACK --> + <recv request="ACK"/> + + <!-- Wait some period of time --> + <pause milliseconds="3000"/> + + <!-- Modify RTP session to be inactive --> + <send retrans="500"> + <![CDATA[ + INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>;[$prime_tag] + CSeq: [cseq] INVITE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Supported: 100rel,replaces + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003604 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 0.0.0.0 + t=0 0 + m=audio 2226 RTP/AVP 0 101 + a=inactive + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="200" /> + + <pause milliseconds="200"/> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]>;tag=[call_number] + To: <sip:[field0]@[remote_ip];user=[field0]>[peer_tag_param] + CSeq: [cseq] ACK + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <!-- Wait some period of time, then send the un-hold --> + <pause milliseconds="3000"/> + + <send retrans="500"> + <![CDATA[ + INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>;[$prime_tag] + CSeq: [cseq] INVITE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Supported: 100rel,replaces + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003605 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=sendrecv + m=audio 2226 RTP/AVP 0 101 + a=sendrecv + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="200" /> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]>;tag=[call_number] + To: <sip:[field0]@[remote_ip];user=[field0]>[peer_tag_param] + CSeq: [cseq] ACK + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <!-- Wait some period of time --> + <pause milliseconds="500"/> + + <send> + <![CDATA[ + BYE sip:[field1]@1[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/UDP [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>[peer_tag_param] + CSeq: [cseq] BYE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + +</scenario> Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_IP_media_restrict.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml Fri Dec 12 08:15:54 2014 @@ -1,0 +1,267 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<scenario name="Phone B Hold"> + <Global variables="global_call_id"/> + <Global variables="prime_tag"/> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp=".*" + header="Call-ID:" + search_in="hdr" + check_it="true" + assign_to="global_call_id"/> + <ereg regexp="tag=.*" + header="From:" + search_in="hdr" + check_it="true" + assign_to="prime_tag"/> + </action> + </recv> + + <send> + <![CDATA[ + SIP/2.0 100 Trying + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <send> + <![CDATA[ + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Allow-Events: talk,hold,conference + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <pause milliseconds="200"/> + + <send retrans="500"> + <![CDATA[ + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + Supported: 100rel,replaces + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003604 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=sendrecv + m=audio 2226 RTP/AVP 0 101 + a=sendrecv + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <!-- RECV ACK --> + <recv request="ACK"/> + + <!-- Wait some period of time --> + <pause milliseconds="2000"/> + + <!-- Modify RTP session to be inactive --> + <send retrans="500"> + <![CDATA[ + INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>;[$prime_tag] + CSeq: [cseq] INVITE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Supported: 100rel,replaces + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003604 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=inactive + m=audio 2226 RTP/AVP 0 101 + a=inactive + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="200" /> + + <pause milliseconds="200"/> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]>;tag=[call_number] + To: <sip:[field0]@[remote_ip];user=[field0]>[peer_tag_param] + CSeq: [cseq] ACK + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <!-- Wait some period of time --> + <pause milliseconds="2000"/> + + <!-- Modify RTP session to be inactive --> + <send retrans="500"> + <![CDATA[ + INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>;[$prime_tag] + CSeq: [cseq] INVITE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Supported: 100rel,replaces + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=- 1325003603 1325003604 IN IP4 [local_ip] + s=Polycom IP Phone + c=IN IP4 [local_ip] + t=0 0 + a=inactive + m=audio 2226 RTP/AVP 0 101 + a=inactive + a=rtpmap:0 PCMU/8000 + a=rtpmap:101 telephone-event/8000 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="200" /> + + <pause milliseconds="200"/> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]>;tag=[call_number] + To: <sip:[field0]@[remote_ip];user=[field0]>[peer_tag_param] + CSeq: [cseq] ACK + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <!-- Wait some period of time, then send the un-hold as reinvite without SDP --> + <pause milliseconds="2000"/> + + <send retrans="500"> + <![CDATA[ + INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>;[$prime_tag] + CSeq: [cseq] INVITE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Supported: 100rel,replaces + Allow-Events: talk,hold,conference + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <recv response="100" optional="true" /> + + <recv response="200" /> + + <send> + <![CDATA[ + ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]>;tag=[call_number] + To: <sip:[field0]@[remote_ip];user=[field0]>[peer_tag_param] + CSeq: [cseq] ACK + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + <!-- Wait some period of time --> + <pause milliseconds="2000"/> + + <send> + <![CDATA[ + BYE sip:[field1]@1[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/UDP [local_ip]:[local_port];branch=[branch] + From: [field1] <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number] + To: [field0] <sip:[field1]@[remote_ip]>[peer_tag_param] + CSeq: [cseq] BYE + Call-ID: [$global_call_id] + Contact: <sip:[field1]@[local_ip]:[local_port]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Max-Forwards: 70 + Content-Length: 0 + ]]> + </send> + + +</scenario> Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_duplicate_hold.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_hold_update.xml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_hold_update.xml?view=auto&rev=6091 ============================================================================== --- asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_hold_update.xml (added) +++ asterisk/trunk/tests/channels/pjsip/hold_inactive/sipp/phone_B_hold_update.xml Fri Dec 12 08:15:54 2014 @@ -1,0 +1,267 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<scenario name="Phone B Hold"> + <Global variables="global_call_id"/> + <Global variables="prime_tag"/> + + <recv request="INVITE" crlf="true"> + <action> + <ereg regexp=".*" + header="Call-ID:" + search_in="hdr" + check_it="true" + assign_to="global_call_id"/> + <ereg regexp="tag=.*" + header="From:" + search_in="hdr" + check_it="true" + assign_to="prime_tag"/> + </action> + </recv> + + <send> + <![CDATA[ + SIP/2.0 100 Trying + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <send> + <![CDATA[ + SIP/2.0 180 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Allow-Events: talk,hold,conference + Accept-Language: en + Content-Length: 0 + ]]> + </send> + + <pause milliseconds="200"/> + + <send retrans="500"> + <![CDATA[ + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field1]@[local_ip]:[local_port];transport=[transport]> + Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER + Supported: 100rel,replaces + User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734 + Accept-Language: en + Content-Type: application/sdp [... 729 lines stripped ...] -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits
