/*
* 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.media.*;
/**
* An implementation of the <tt>Call</tt> abstract class for the common part of
* Jabber and Gtalk protocols.
*
* @author Vincent Lucas
*/
public abstract class AbstractCallJabberGTalkImpl
<T extends AbstractCallPeerJabberGTalkImpl<?, ?, ?>>
extends MediaAwareCall<
T,
OperationSetBasicTelephonyJabberImpl,
ProtocolProviderServiceJabberImpl>
{
/**
* Indicates if the <tt>CallPeer</tt> will support <tt>inputevt</tt>
* extension (i.e. will be able to be remote-controlled).
*/
private boolean localInputEvtAware = false;
/**
* Initializes a new <tt>AbstractCallJabberGTalkImpl</tt> instance.
*
* @param parentOpSet the {@link OperationSetBasicTelephonyJabberImpl}
* instance in the context of which this call has been created.
*/
protected AbstractCallJabberGTalkImpl(
OperationSetBasicTelephonyJabberImpl parentOpSet)
{
super(parentOpSet);
//let's add ourselves to the calls repo. we are doing it ourselves just
//to make sure that no one ever forgets.
//parentOpSet.getActiveCallsRepository().addCall(this);
}
/**
* Enable or disable <tt>inputevt</tt> support (remote control).
*
* @param enable new state of inputevt support
*/
public void setLocalInputEvtAware(boolean enable)
{
localInputEvtAware = enable;
}
/**
* Returns if the call support <tt>inputevt</tt> (remote control).
*
* @return true if the call support <tt>inputevt</tt>, false otherwise
*/
public boolean getLocalInputEvtAware()
{
return localInputEvtAware;
}
/**
* Send a <tt>content-modify</tt> message for all current <tt>CallPeer</tt>
* to reflect possible video change in media setup.
*
* @throws OperationFailedException if problem occurred during message
* generation or network problem
*/
public abstract void modifyVideoContent()
throws OperationFailedException;
/**
* Returns the peer whose corresponding session has the specified
* <tt>sid</tt>.
*
* @param sid the ID of the session whose peer we are looking for.
*
* @return the {@link CallPeerJabberImpl} with the specified jingle
* <tt>sid</tt> and <tt>null</tt> if no such peer exists in this call.
*/
public T getPeer(String sid)
{
if (sid == null)
return null;
for(T peer : getCallPeerList())
{
if (sid.equals(peer.getSID()))
return peer;
}
return null;
}
/**
* Determines if this call contains a peer whose corresponding session has
* the specified <tt>sid</tt>.
*
* @param sid the ID of the session whose peer we are looking for.
*
* @return <tt>true</tt> if this call contains a peer with the specified
* jingle <tt>sid</tt> and false otherwise.
*/
public boolean containsSID(String sid)
{
return (getPeer(sid) != null);
}
/**
* Returns the peer whose corresponding session-init ID has the specified
* <tt>id</tt>.
*
* @param id the ID of the session-init IQ whose peer we are looking for.
*
* @return the {@link CallPeerJabberImpl} with the specified IQ
* <tt>id</tt> and <tt>null</tt> if no such peer exists in this call.
*/
public T getPeerBySessInitPacketID(String id)
{
if (id == null)
return null;
for(T peer : getCallPeerList())
{
if (id.equals(peer.getSessInitID()))
return peer;
}
return null;
}
}