Fixes issue with error COIN packets. If error COIN packet is recieved it isn't handled as normal COIN packet anymore, jitsi only displays systray popup message with the error, logs the error and displays error text in the peer panel.

cusax-fix
hristoterezov 12 years ago
parent ba7fc7b40f
commit e278630c4d

@ -190,6 +190,7 @@ service.gui.ENTER_PHONE_NUMBER=Enter phone number
service.gui.ENTER_NAME_OR_NUMBER=Enter name or number service.gui.ENTER_NAME_OR_NUMBER=Enter name or number
service.gui.ERROR=Error service.gui.ERROR=Error
service.gui.ERROR_WAS=Error was: {0} service.gui.ERROR_WAS=Error was: {0}
service.gui.ERROR_RECEIVED_FROM=Error received from
service.gui.ESTIMATED_TIME=Estimated time: service.gui.ESTIMATED_TIME=Estimated time:
service.gui.EVENTS=Events service.gui.EVENTS=Events
service.gui.EXIT=E&xit service.gui.EXIT=E&xit
@ -393,6 +394,7 @@ service.gui.PREVIOUS=Previous
service.gui.PREVIOUS_TOOLTIP=Browse older conversations service.gui.PREVIOUS_TOOLTIP=Browse older conversations
service.gui.PRINT=&Print service.gui.PRINT=&Print
service.gui.PROACTIVE_NOTIFICATION=is writing a message service.gui.PROACTIVE_NOTIFICATION=is writing a message
service.gui.PROBLEMS_ENCOUNTERED=Problems encountered
service.gui.PROTOCOL=Protocol service.gui.PROTOCOL=Protocol
service.gui.PUT_OFF_HOLD=Put off hold service.gui.PUT_OFF_HOLD=Put off hold
service.gui.PUT_ON_HOLD=Put on hold service.gui.PUT_ON_HOLD=Put on hold

@ -14,6 +14,7 @@
import javax.swing.*; import javax.swing.*;
import javax.swing.Timer; import javax.swing.Timer;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.event.*; import net.java.sip.communicator.impl.gui.event.*;
import net.java.sip.communicator.impl.gui.main.call.*; import net.java.sip.communicator.impl.gui.main.call.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
@ -24,6 +25,7 @@
* <tt>CallConference</tt> and is contained in a <tt>CallPanel</tt>. * <tt>CallConference</tt> and is contained in a <tt>CallPanel</tt>.
* *
* @author Lyubomir Marinov * @author Lyubomir Marinov
* @author Hristo Terezov
*/ */
public abstract class BasicConferenceCallPanel public abstract class BasicConferenceCallPanel
extends JPanel extends JPanel
@ -243,6 +245,29 @@ protected void conferenceMemberAdded(CallPeerConferenceEvent ev)
{ {
updateViewFromModel(); updateViewFromModel();
} }
/**
* Notifies this instance that a <tt>CallPeer</tt> associated with a
* <tt>Call</tt> participating in the telephony conference received a error
* packet.
*
* @param ev a <tt>CallPeerConferenceEvent</tt> which specifies the
* <tt>CallPeer</tt> which sent the error packet and an error message.
*/
protected void conferenceMemberErrorReceived(CallPeerConferenceEvent ev)
{
CallPeer callPeer = ev.getSourceCallPeer();
callPeerPanels.get(callPeer).setErrorReason(
GuiActivator.getResources().getI18NString(
"service.gui.PROBLEMS_ENCOUNTERED"));
GuiActivator.getAlertUIService().showAlertPopup(
GuiActivator.getResources().getI18NString(
"service.gui.ERROR_RECEIVED_FROM")
+ callPeer.getDisplayName(),
ev.getErrorString());
}
/** /**
* Notifies this instance that a <tt>CallPeer</tt> associated with a * Notifies this instance that a <tt>CallPeer</tt> associated with a
@ -669,6 +694,17 @@ public void callStateChanged(CallChangeEvent ev)
BasicConferenceCallPanel.this.callStateChanged(ev); BasicConferenceCallPanel.this.callStateChanged(ev);
} }
/**
* Invokes
* {@link BasicConferenceCallPanel#conferenceMemberErrorReceived(
* CallPeerConferenceEvent)}.
*/
public void conferenceMemberErrorReceived(
CallPeerConferenceEvent ev)
{
BasicConferenceCallPanel.this.conferenceMemberErrorReceived(ev);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

@ -15,6 +15,7 @@
import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.Logger;
import net.java.sip.communicator.util.skin.*; import net.java.sip.communicator.util.skin.*;
import org.jitsi.service.protocol.event.*; import org.jitsi.service.protocol.event.*;
@ -127,6 +128,12 @@ public ConferenceFocusPanel(
*/ */
private void addConferenceMemberPanel(ConferenceMember conferenceMember) private void addConferenceMemberPanel(ConferenceMember conferenceMember)
{ {
Logger.getLogger(ConferenceFocusPanel.class).info("AAAAAAAAAAAAAAA" ,
new Exception("addd!!"));
for(ConferenceMember c: conferenceMemberPanels.keySet())
{
Logger.getLogger(ConferenceFocusPanel.class).info("CCC/" + c.getDisplayName());
}
/* /*
* The local user/peer should not be depicted by a ConferenceMemberPanel * The local user/peer should not be depicted by a ConferenceMemberPanel
* because it is not the responsibility of ConferenceFocusPanel and * because it is not the responsibility of ConferenceFocusPanel and
@ -159,6 +166,9 @@ private void addConferenceMemberPanel(ConferenceMember conferenceMember)
*/ */
conferenceMemberPanels.put(conferenceMember, conferenceMemberPanel); conferenceMemberPanels.put(conferenceMember, conferenceMemberPanel);
Logger.getLogger(ConferenceFocusPanel.class).info("AAAAAAAAAAAAAAA11111"
+ conferenceMember.getDisplayName(),
new Exception("addd111!!"));
/* /*
* Add the newly-initialized ConferenceMemberPanel to the user interface * Add the newly-initialized ConferenceMemberPanel to the user interface
* hierarchy of this view. * hierarchy of this view.

@ -370,6 +370,7 @@ public boolean accept(Packet packet)
public void processPacket(Packet packet) public void processPacket(Packet packet)
{ {
CoinIQ coinIQ = (CoinIQ) packet; CoinIQ coinIQ = (CoinIQ) packet;
String errorMessage = null;
//first ack all "set" requests. //first ack all "set" requests.
if (coinIQ.getType() == IQ.Type.SET) if (coinIQ.getType() == IQ.Type.SET)
@ -378,7 +379,22 @@ public void processPacket(Packet packet)
parentProvider.getConnection().sendPacket(ack); parentProvider.getConnection().sendPacket(ack);
} }
if(coinIQ.getType() == IQ.Type.ERROR)
{
logger.error("Received error in COIN packet.");
XMPPError error = coinIQ.getError();
if(error != null)
{
String msg = error.getMessage();
errorMessage = ((msg != null)? (msg + " ") : "")
+ "Error code: " + error.getCode();
logger.error(errorMessage);
}
}
String sid = coinIQ.getSID(); String sid = coinIQ.getSID();
if (sid != null) if (sid != null)
@ -386,12 +402,20 @@ public void processPacket(Packet packet)
CallPeerJabberImpl callPeer CallPeerJabberImpl callPeer
= getBasicTelephony().getActiveCallsRepository().findCallPeer( = getBasicTelephony().getActiveCallsRepository().findCallPeer(
sid); sid);
if (callPeer != null) if (callPeer != null)
{ {
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
logger.debug("Processing COIN from " + coinIQ.getFrom() logger.debug("Processing COIN from " + coinIQ.getFrom()
+ " (version=" + coinIQ.getVersion() + ")"); + " (version=" + coinIQ.getVersion() + ")");
if(coinIQ.getType() == IQ.Type.ERROR)
{
callPeer.fireConferenceMemberErrorEvent(errorMessage);
return;
}
handleCoin(callPeer, coinIQ); handleCoin(callPeer, coinIQ);
} }
} }

@ -646,6 +646,13 @@ public void conferenceMemberAdded(CallPeerConferenceEvent conferenceEvent)
} }
} }
/**
* {@inheritDoc}
*
* Not used.
*/
public void conferenceMemberErrorReceived(CallPeerConferenceEvent ev) {}
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

@ -266,7 +266,31 @@ public void addConferenceMember(ConferenceMember conferenceMember)
conferenceMember)); conferenceMember));
} }
} }
/**
* Fires
* <tt>CallPeerConferenceEvent#CONFERENCE_MEMBER_ERROR_RECEIVED</tt> to
* the currently registered <tt>CallPeerConferenceListener</tt>s.
*
* @param errorMessage error message that can be displayed.
*/
public void fireConferenceMemberErrorEvent(String errorMessge)
{
if(errorMessge == null || errorMessge.length() == 0)
{
logger.warn("The error message for " + this.getDisplayName()
+ " null or empty string.");
return;
}
fireCallPeerConferenceEvent(
new CallPeerConferenceEvent(
this,
CallPeerConferenceEvent
.CONFERENCE_MEMBER_ERROR_RECEIVED,
null,
errorMessge));
}
/** /**
* Finds the first <tt>ConferenceMember</tt> whose <tt>audioSsrc</tt> is * Finds the first <tt>ConferenceMember</tt> whose <tt>audioSsrc</tt> is
* equals to a specific value. The method is meant for very frequent use so * equals to a specific value. The method is meant for very frequent use so
@ -436,6 +460,9 @@ protected void fireCallPeerConferenceEvent(
case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED: case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED:
eventIDString = "CONFERENCE_MEMBER_REMOVED"; eventIDString = "CONFERENCE_MEMBER_REMOVED";
break; break;
case CallPeerConferenceEvent.CONFERENCE_MEMBER_ERROR_RECEIVED:
eventIDString = "CONFERENCE_MEMBER_ERROR_RECEIVED";
break;
default: default:
eventIDString = "UNKNOWN"; eventIDString = "UNKNOWN";
break; break;
@ -461,6 +488,9 @@ protected void fireCallPeerConferenceEvent(
case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED: case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED:
listener.conferenceMemberRemoved(conferenceEvent); listener.conferenceMemberRemoved(conferenceEvent);
break; break;
case CallPeerConferenceEvent.CONFERENCE_MEMBER_ERROR_RECEIVED:
listener.conferenceMemberErrorReceived(conferenceEvent);
break;
} }
} }

@ -193,6 +193,20 @@ protected void onCallPeerConferenceEvent(CallPeerConferenceEvent ev)
{ {
CallConference.this.onCallPeerConferenceEvent(ev); CallConference.this.onCallPeerConferenceEvent(ev);
} }
/**
* {@inheritDoc}
*
* Invokes
* {@link CallConference#onCallPeerConferenceEvent(
* CallPeerConferenceEvent)}.
*/
@Override
public void conferenceMemberErrorReceived(
CallPeerConferenceEvent ev)
{
CallConference.this.onCallPeerConferenceEvent(ev);
}
}; };
/** /**
@ -692,6 +706,9 @@ private void onCallPeerConferenceEvent(CallPeerConferenceEvent ev)
case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED: case CallPeerConferenceEvent.CONFERENCE_MEMBER_REMOVED:
l.conferenceMemberRemoved(ev); l.conferenceMemberRemoved(ev);
break; break;
case CallPeerConferenceEvent.CONFERENCE_MEMBER_ERROR_RECEIVED:
l.conferenceMemberErrorReceived(ev);
break;
default: default:
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Unsupported CallPeerConferenceEvent eventID."); "Unsupported CallPeerConferenceEvent eventID.");

@ -38,6 +38,14 @@ public void conferenceMemberAdded(CallPeerConferenceEvent ev)
onCallPeerConferenceEvent(ev); onCallPeerConferenceEvent(ev);
} }
/**
* {@inheritDoc}
*
* Dummy implementation of
* {@link #conferenceMemberErrorReceived(CallPeerConferenceEvent)}.
*/
public void conferenceMemberErrorReceived(CallPeerConferenceEvent ev) {}
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

@ -55,6 +55,12 @@ public class CallPeerConferenceEvent
*/ */
public static final int CONFERENCE_MEMBER_REMOVED = 3; public static final int CONFERENCE_MEMBER_REMOVED = 3;
/**
* The ID of <tt>CallPeerConferenceEvent</tt> which notifies
* about an error packet received from a <tt>CallPeer</tt>.
*/
public static final int CONFERENCE_MEMBER_ERROR_RECEIVED = 4;
/** /**
* The <code>ConferenceMember</code> which has been changed (e.g. added to * The <code>ConferenceMember</code> which has been changed (e.g. added to
* or removed from the conference) if this event has been fired because of * or removed from the conference) if this event has been fired because of
@ -64,12 +70,21 @@ public class CallPeerConferenceEvent
/** /**
* The ID of this event which may be one of * The ID of this event which may be one of
* {@link #CONFERENCE_FOCUS_CHANGED}, {@link #CONFERENCE_MEMBER_ADDED} and * {@link #CONFERENCE_FOCUS_CHANGED}, {@link #CONFERENCE_MEMBER_ADDED},
* {@link #CONFERENCE_MEMBER_ERROR_RECEIVED} and
* {@link #CONFERENCE_MEMBER_REMOVED} and indicates the specifics of the * {@link #CONFERENCE_MEMBER_REMOVED} and indicates the specifics of the
* change in the conference-related information and the details this event * change in the conference-related information and the details this event
* carries. * carries.
*/ */
private final int eventID; private final int eventID;
/**
* The error message associated with the error packet that was received. If
* the eventID is not {@link #CONFERENCE_MEMBER_ERROR_RECEIVED} the value
* should should be <tt>null</tt>.
*/
private final String errorString;
/** /**
* Initializes a new <code>CallPeerConferenceEvent</code> which is to * Initializes a new <code>CallPeerConferenceEvent</code> which is to
@ -112,11 +127,41 @@ public CallPeerConferenceEvent(
CallPeer sourceCallPeer, CallPeer sourceCallPeer,
int eventID, int eventID,
ConferenceMember conferenceMember) ConferenceMember conferenceMember)
{
this(sourceCallPeer, eventID, conferenceMember, null);
}
/**
* Initializes a new <tt>CallPeerConferenceEvent</tt> which is to
* be fired by a specific <tt>CallPeer</tt> and which notifies
* about a change in its conference-related information pertaining to a
* specific <tt>ConferenceMember</tt>.
*
* @param sourceCallPeer the <tt>CallPeer</tt> which is to fire the new
* event
* @param eventID
* the ID of this event which may be
* {@link #CONFERENCE_MEMBER_ADDED} and
* {@link #CONFERENCE_MEMBER_REMOVED} and indicates the specifics
* of the change in the conference-related information and the
* details this event carries
* @param conferenceMember
* the <tt>ConferenceMember</tt> which caused the new event
* to be fired
* @param errorString the error string associated with the error packet that
* is received
*/
public CallPeerConferenceEvent(
CallPeer sourceCallPeer,
int eventID,
ConferenceMember conferenceMember,
String errorString)
{ {
super(sourceCallPeer); super(sourceCallPeer);
this.eventID = eventID; this.eventID = eventID;
this.conferenceMember = conferenceMember; this.conferenceMember = conferenceMember;
this.errorString = errorString;
} }
/** /**
@ -163,4 +208,13 @@ public CallPeer getSourceCallPeer()
{ {
return (CallPeer) getSource(); return (CallPeer) getSource();
} }
/**
* Gets the value of {@link #errorString}.
* @return the error string.
*/
public String getErrorString()
{
return errorString;
}
} }

@ -45,6 +45,17 @@ public void conferenceFocusChanged(
*/ */
public void conferenceMemberAdded( public void conferenceMemberAdded(
CallPeerConferenceEvent conferenceEvent); CallPeerConferenceEvent conferenceEvent);
/**
* Notifies this listener about an error packet received from specific
* <tt>CallPeer</tt>.
*
* @param conferenceEvent a <tt>CallPeerConferenceEvent</tt> with ID
* <tt>CallPeerConferenceEvent#CONFERENCE_MEMBER_ERROR_RECEIVED</tt>
* and the error message associated with the packet.
*/
public void conferenceMemberErrorReceived(
CallPeerConferenceEvent conferenceEvent);
/** /**
* Notifies this listener about the removal of a specific * Notifies this listener about the removal of a specific

@ -471,6 +471,14 @@ public void conferenceMemberAdded(CallPeerConferenceEvent conferenceEvent)
mediaHandler.setCsrcAudioLevelListener(this); mediaHandler.setCsrcAudioLevelListener(this);
} }
} }
/**
* Dummy implementation of {@link CallPeerConferenceListener
* #conferenceMemberErrorReceived(CallPeerConferenceEvent)}.
*
* @param ev the event
*/
public void conferenceMemberErrorReceived(CallPeerConferenceEvent ev) {};
/** /**
* Called when this peer stops being a mixer. The method add removes this * Called when this peer stops being a mixer. The method add removes this

Loading…
Cancel
Save