/* * 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; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.service.protocol.media.*; import net.java.sip.communicator.util.*; import org.jivesoftware.smack.*; import org.jivesoftware.smack.packet.*; import org.jivesoftware.smackx.packet.*; /** * An implementation of the CallPeer abstract class for the common part * of Jabber and Gtalk protocols. * * @author Vincent Lucas * @author Lyubomir Marinov */ public abstract class AbstractCallPeerJabberGTalkImpl , U extends AbstractCallPeerMediaHandlerJabberGTalkImpl, V extends IQ> extends MediaAwareCallPeer { /** * The Logger used by the AbstractCallPeerJabberGTalkImpl * class and its instances for logging output. */ private static final Logger logger = Logger.getLogger(AbstractCallPeerJabberGTalkImpl.class); /** * Any discovery information that we have for this peer. */ private DiscoverInfo discoverInfo; /** * The indicator which determines whether this peer has initiated the * session. */ protected boolean initiator = false; /** * The jabber address of this peer */ protected String peerJID; /** * The {@link IQ} that created the session that this call represents. */ protected V sessionInitIQ; /** * Creates a new call peer with address peerAddress. * * @param peerAddress the Jabber or Google Talk address of the new call * peer. * @param owningCall the call that contains this call peer. */ protected AbstractCallPeerJabberGTalkImpl(String peerAddress, T owningCall) { super(owningCall); this.peerJID = peerAddress; } /** * Returns a String locator for that peer. * * @return the peer's address or phone number. */ public String getAddress() { return peerJID; } /** * Returns the contact corresponding to this peer or null if no * particular contact has been associated. *

* @return the Contact corresponding to this peer or null * if no particular contact has been associated. */ public Contact getContact() { OperationSetPresence presence = getProtocolProvider().getOperationSet(OperationSetPresence.class); return (presence == null) ? null : presence.findContactByID(getAddress()); } /** * Returns the service discovery information that we have for this peer. * * @return the service discovery information that we have for this peer. */ public DiscoverInfo getDiscoveryInfo() { return discoverInfo; } /** * Returns a human readable name representing this peer. * * @return a String containing a name for that peer. */ public String getDisplayName() { if (getCall() != null) { Contact contact = getContact(); if (contact != null) return contact.getDisplayName(); } return peerJID; } /** * Returns full URI of the address. * * @return full URI of the address */ public String getURI() { return "xmpp:" + peerJID; } /** * Determines whether this peer initiated the session. Note that if this * peer is the initiator of the session, then we are the responder! * * @return true if this peer initiated the session; false, * otherwise (i.e. if _we_ initiated the session). */ public boolean isInitiator() { return initiator; } /** * Retrieves the DiscoverInfo for a given peer identified by its URI. * * @param calleeURI The URI of the call peer. * * @return The retrieved DiscoverInfo, or null if not available. */ protected void retrieveDiscoveryInfo(String calleeURI) { try { DiscoverInfo discoveryInfo = getProtocolProvider().getDiscoveryManager().discoverInfo( calleeURI); if(discoveryInfo != null) setDiscoveryInfo(discoveryInfo); } catch (XMPPException xmppex) { logger.warn("Could not retrieve info for " + calleeURI, xmppex); } } /** * Specifies the address, phone number, or other protocol specific * identifier that represents this call peer. This method is to be * used by service users and MUST NOT be called by the implementation. * * @param address The address of this call peer. */ public void setAddress(String address) { if (!peerJID.equals(address)) { String oldAddress = getAddress(); peerJID = address; fireCallPeerChangeEvent( CallPeerChangeEvent.CALL_PEER_ADDRESS_CHANGE, oldAddress, address); } } /** * Sets the service discovery information that we have for this peer. * * @param discoverInfo the discovery information that we have obtained for * this peer. */ public void setDiscoveryInfo(DiscoverInfo discoverInfo) { this.discoverInfo = discoverInfo; } /** * Returns the session ID of the Jingle session associated with this call. * * @return the session ID of the Jingle session associated with this call. */ public abstract String getSID(); /** * Returns the IQ ID of the Jingle session-initiate packet associated with * this call. * * @return the IQ ID of the Jingle session-initiate packet associated with * this call. */ public String getSessInitID() { return sessionInitIQ != null ? sessionInitIQ.getPacketID() : null; } }