/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.protocol.jabber.extensions.version; import net.java.sip.communicator.impl.protocol.jabber.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import org.jitsi.service.version.*; import org.jivesoftware.smack.*; import org.jivesoftware.smack.filter.*; import org.jivesoftware.smack.packet.*; /** * XEP-0092: Software Version. * Provider that fills the version IQ using our Version Service. * * @author Damian Minkov */ public class VersionManager implements RegistrationStateChangeListener, PacketListener { /** * Our parent provider. */ private ProtocolProviderServiceJabberImpl parentProvider = null; /** * Creates and registers the provider. * @param parentProvider */ public VersionManager(ProtocolProviderServiceJabberImpl parentProvider) { this.parentProvider = parentProvider; this.parentProvider.addRegistrationStateChangeListener(this); } /** * The method is called by a ProtocolProvider implementation whenever * a change in the registration state of the corresponding provider had * occurred. * @param evt ProviderStatusChangeEvent the event describing the status * change. */ public void registrationStateChanged(RegistrationStateChangeEvent evt) { if (evt.getNewState() == RegistrationState.REGISTERED) { parentProvider.getConnection().removePacketListener(this); parentProvider.getConnection().addPacketListener(this, new AndFilter(new IQTypeFilter(IQ.Type.GET), new PacketTypeFilter( org.jivesoftware.smackx.packet.Version.class))); } else if(evt.getNewState() == RegistrationState.UNREGISTERED || evt.getNewState() == RegistrationState.CONNECTION_FAILED || evt.getNewState() == RegistrationState.AUTHENTICATION_FAILED) { if(parentProvider.getConnection() != null) parentProvider.getConnection().removePacketListener(this); } } /** * A packet Listener for incoming Version packets. * @param packet an incoming packet */ public void processPacket(Packet packet) { // send packet org.jivesoftware.smackx.packet.Version versionIQ = new org.jivesoftware.smackx.packet.Version(); versionIQ.setType(IQ.Type.RESULT); versionIQ.setTo(packet.getFrom()); versionIQ.setFrom(packet.getTo()); versionIQ.setPacketID(packet.getPacketID()); Version ver = JabberActivator.getVersionService().getCurrentVersion(); String appName = ver.getApplicationName(); if(!appName.toLowerCase().contains("jitsi")) appName += "-Jitsi"; versionIQ.setName(appName); versionIQ.setVersion(ver.toString()); versionIQ.setOs(System.getProperty("os.name")); parentProvider.getConnection().sendPacket(versionIQ); } }