/** * Processes channels allocation response from the JVB and stores info about new channels in * {@link #conferenceState}. * * @param allocateResponse the Colibri IQ that describes JVB response to allocate request. */ public void processChannelAllocResp(ColibriConferenceIQ allocateResponse) { String conferenceResponseID = allocateResponse.getID(); String colibriID = conferenceState.getID(); if (colibriID == null) conferenceState.setID(conferenceResponseID); else if (!colibriID.equals(conferenceResponseID)) throw new IllegalStateException("conference.id"); /* * XXX We must remember the JID of the Jitsi Videobridge because * (1) we do not want to re-discover it in every method * invocation on this Call instance and (2) we want to use one * and the same for all CallPeers within this Call instance. */ conferenceState.setFrom(allocateResponse.getFrom()); for (ColibriConferenceIQ.Content contentResponse : allocateResponse.getContents()) { String contentName = contentResponse.getName(); ColibriConferenceIQ.Content content = conferenceState.getOrCreateContent(contentName); // FIXME: we do not check if allocated channel does not clash // with any existing one for (ColibriConferenceIQ.Channel channelResponse : contentResponse.getChannels()) { content.addChannel(channelResponse); } for (ColibriConferenceIQ.SctpConnection sctpConnResponse : contentResponse.getSctpConnections()) { content.addSctpConnection(sctpConnResponse); } } for (ColibriConferenceIQ.ChannelBundle bundle : allocateResponse.getChannelBundles()) { conferenceState.addChannelBundle(bundle); } }
/** * Sets the values of the properties of a specific <tt>ColibriConferenceIQ</tt> to the values of * the respective properties of this instance. Thus, the specified <tt>iq</tt> may be thought of * as a description of this instance. * * <p><b>Note</b>: The copying of the values is deep i.e. the <tt>Contents</tt>s of this instance * are described in the specified <tt>iq</tt>. * * @param iq the <tt>ColibriConferenceIQ</tt> to set the values of the properties of this instance * on */ public void describeDeep(ColibriConferenceIQ iq) { describeShallow(iq); if (isRecording()) { ColibriConferenceIQ.Recording recordingIQ = new ColibriConferenceIQ.Recording(State.ON.toString()); recordingIQ.setDirectory(getRecordingDirectory()); iq.setRecording(recordingIQ); } for (Content content : getContents()) { ColibriConferenceIQ.Content contentIQ = iq.getOrCreateContent(content.getName()); for (Channel channel : content.getChannels()) { if (channel instanceof SctpConnection) { ColibriConferenceIQ.SctpConnection sctpConnectionIQ = new ColibriConferenceIQ.SctpConnection(); channel.describe(sctpConnectionIQ); contentIQ.addSctpConnection(sctpConnectionIQ); } else { ColibriConferenceIQ.Channel channelIQ = new ColibriConferenceIQ.Channel(); channel.describe(channelIQ); contentIQ.addChannel(channelIQ); } } } }