Wait for a state change in any of a list of call channel objects.
This function will also return if an object’s state is IDLE or ERROR when the function is called.
This function will return a list containing the current state of each call channel object supplied in object_list.
Usage example:
from prosody.uas import Error, Hangup, wait_for_any_state
def main(channel, application_instance_id, file_man, my_log, application_parameters):
# start a call on the outbound channel
out_channel = channel.ExtraChannel[0]
if out_channel.start_call('sip:3301@127.0.0.1:5060;user=phone', call_from='bob@1234') is True:
# get the current state of the two channels
state = channel.state()
out_state = out_channel.state()
# wait for a state change in either channel, e.g.
# channel going to IDLE or out_channel going to ringing
state, out_state = wait_for_any_state([channel, out_channel], [state, out_state])
# the inbound call might have gone IDLE
if state == channel.State.IDLE:
raise Hangup('channel state is IDLE')
if out_state == out_channel.State.RING_OUTGOING:
# perhaps do something here, e.g. put ringing on the inbound channel
channel.ring()
elif out_state == out_channel.State.ANSWERED:
# do something here, e.g. answer the inbound call
state = channel.answer()