/** * Notifies this instance that a specific <tt>ColibriConferenceIQ</tt> has been received. * * @param conferenceIQ the <tt>ColibriConferenceIQ</tt> which has been received */ private void processColibriConferenceIQ(ColibriConferenceIQ conferenceIQ) { /* * The application is not a Jitsi Videobridge server, it is a client. * Consequently, the specified ColibriConferenceIQ is sent to it in * relation to the part of the application's functionality which makes * requests to a Jitsi Videobridge server i.e. CallJabberImpl. * * Additionally, the method processColibriConferenceIQ is presently tasked * with processing ColibriConferenceIQ requests only. They are SET IQs * sent by the Jitsi Videobridge server to notify the application about * updates in the states of (colibri) conferences organized by the * application. */ if (IQ.Type.SET.equals(conferenceIQ.getType()) && conferenceIQ.getID() != null) { OperationSetBasicTelephony<?> basicTelephony = protocolProvider.getOperationSet(OperationSetBasicTelephony.class); if (basicTelephony != null) { Iterator<? extends Call> i = basicTelephony.getActiveCalls(); while (i.hasNext()) { Call call = i.next(); if (call instanceof CallJabberImpl) { CallJabberImpl callJabberImpl = (CallJabberImpl) call; MediaAwareCallConference conference = callJabberImpl.getConference(); if ((conference != null) && conference.isJitsiVideobridge()) { /* * TODO We may want to disallow rogue CallJabberImpl * instances which may throw an exception to prevent * the conferenceIQ from reaching the CallJabberImpl * instance which it was meant for. */ if (callJabberImpl.processColibriConferenceIQ(conferenceIQ)) break; } } } } } }
private void handleColibriIq(ColibriConferenceIQ colibriIQ) { ColibriConferenceIQ.Recording recording = colibriIQ.getRecording(); String from = colibriIQ.getFrom(); JitsiMeetConference conference = getConferenceForMucJid(colibriIQ.getFrom()); if (conference == null) { logger.debug("Room not found for JID: " + from); return; } JitsiMeetRecording recordingHandler = conference.getRecording(); if (recordingHandler == null) { logger.error("JitsiMeetRecording is null for iq: " + colibriIQ.toXML()); // Internal server error smackXmpp .getXmppConnection() .sendPacket( IQ.createErrorResponse( colibriIQ, new XMPPError(XMPPError.Condition.interna_server_error))); return; } State recordingState = recordingHandler.modifyRecordingState( colibriIQ.getFrom(), recording.getToken(), recording.getState(), recording.getDirectory(), colibriIQ.getTo()); ColibriConferenceIQ response = new ColibriConferenceIQ(); response.setType(IQ.Type.RESULT); response.setPacketID(colibriIQ.getPacketID()); response.setTo(colibriIQ.getFrom()); response.setFrom(colibriIQ.getTo()); response.setName(colibriIQ.getName()); response.setRecording(new ColibriConferenceIQ.Recording(recordingState)); smackXmpp.getXmppConnection().sendPacket(response); }