/** * Creates new instance of <tt>JireconRecorder</tt>. * * @param mucRoomJid focus room jid in form of "room_name@muc_component/focus_nickname". * @param recorderComponentJid recorder component address. * @param xmpp {@link OperationSetDirectSmackXmpp} instance for current XMPP connection. */ public JireconRecorder( String mucRoomJid, String recorderComponentJid, OperationSetDirectSmackXmpp xmpp) { super(recorderComponentJid, xmpp); this.mucRoomJid = mucRoomJid; this.token = FocusBundleActivator.getConfigService().getString(MEDIA_RECORDING_TOKEN_PNAME); }
/** Handles XEP-0337 "log" extensions. */ private void handleLogRequest(LogPacketExtension log, String jid) { JitsiMeetConference conference = getConferenceForMucJid(jid); if (conference == null) { logger.debug("Room not found for JID: " + jid); return; } Participant participant = conference.findParticipantForRoomJid(jid); if (participant == null) { logger.info("Ignoring log request from an unknown JID: " + jid); return; } EventAdmin eventAdmin = FocusBundleActivator.getEventAdmin(); if (eventAdmin == null) return; if (LogUtil.LOG_ID_PC_STATS.equals(log.getID())) { String content = LogUtil.getContent(log); if (content != null) { ColibriConference colibriConference = conference.getColibriConference(); if (colibriConference != null) { Event event = EventFactory.peerConnectionStats( colibriConference.getConferenceId(), participant.getEndpointId(), content); if (event != null) eventAdmin.sendEvent(event); } else { logger.warn("Unhandled log request" + " - no valid Colibri conference"); } } } else if (logger.isInfoEnabled()) { logger.info("Ignoring log request with an unknown ID:" + log.getID()); } }
/** * Handles presence stanzas * * @param presence */ private void handlePresence(Presence presence) { // unavailable is sent when user leaves the room if (!presence.isAvailable()) { return; } String from = presence.getFrom(); JitsiMeetConference conference = getConferenceForMucJid(from); if (conference == null) { if (logger.isDebugEnabled()) { logger.debug("Room not found for JID: " + from); } return; } ChatRoomMemberRole role = conference.getRoleForMucJid(from); if (role != null && role.compareTo(ChatRoomMemberRole.MODERATOR) < 0) { StartMutedPacketExtension ext = (StartMutedPacketExtension) presence.getExtension( StartMutedPacketExtension.ELEMENT_NAME, StartMutedPacketExtension.NAMESPACE); if (ext != null) { boolean[] startMuted = {ext.getAudioMuted(), ext.getVideoMuted()}; conference.setStartMuted(startMuted); } } Participant participant = conference.findParticipantForRoomJid(from); ColibriConference colibriConference = conference.getColibriConference(); if (participant != null && colibriConference != null) { // Check if this conference is valid String conferenceId = colibriConference.getConferenceId(); if (StringUtils.isNullOrEmpty(conferenceId)) { logger.error("Unable to send DisplayNameChanged event" + " - no conference id"); return; } // Check for changes to the display name String oldDisplayName = participant.getDisplayName(); String newDisplayName = null; for (PacketExtension pe : presence.getExtensions()) { if (pe instanceof Nick) { newDisplayName = ((Nick) pe).getName(); break; } } if (!Objects.equals(oldDisplayName, newDisplayName)) { participant.setDisplayName(newDisplayName); EventAdmin eventAdmin = FocusBundleActivator.getEventAdmin(); if (eventAdmin != null) { // Prevent NPE when adding to event hashtable if (newDisplayName == null) { newDisplayName = ""; } eventAdmin.sendEvent( EventFactory.endpointDisplayNameChanged( conferenceId, participant.getEndpointId(), newDisplayName)); } } } }