From d67e969a0afd2d97c162a1ca9f446815887574e4 Mon Sep 17 00:00:00 2001 From: Vincent Lucas Date: Tue, 2 Oct 2012 09:43:44 +0000 Subject: [PATCH] Improves call info frame to show the ICE harvesting time if available. Updates Ice4j to r338: Adds extra function to export harvesting time. --- lib/installer-exclude/ice4j.jar | Bin 450166 -> 450908 bytes resources/languages/resources.properties | 1 + .../impl/gui/main/call/CallInfoFrame.java | 50 ++++++++++++++---- .../jabber/IceUdpTransportManager.java | 18 +++++++ .../protocol/jabber/JingleNodesHarvester.java | 2 +- .../jabber/RawUdpTransportManager.java | 14 +++++ .../jabber/TransportManagerGTalkImpl.java | 18 +++++++ .../protocol/sip/TransportManagerSipImpl.java | 14 +++++ .../protocol/media/CallPeerMediaHandler.java | 19 +++++++ .../protocol/media/TransportManager.java | 11 ++++ 10 files changed, 135 insertions(+), 12 deletions(-) diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar index 47b51a81e1f57c0128039e734f423302249c5416..7c9c00c78d08897ac7517fb28c1ca6c08aff1b14 100644 GIT binary patch delta 36143 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%0DBt9;>@-IXkm;0 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 SM&k;LPC_Rj8yrX{g8v8X9=ad^ diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index b0f84e7f7..3b67ef211 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -580,6 +580,7 @@ service.gui.callinfo.ICE_LOCAL_RELAYED_ADDRESS=Local relayed IP / Port: service.gui.callinfo.ICE_REMOTE_HOST_ADDRESS=Remote host IP / Port: service.gui.callinfo.ICE_REMOTE_REFLEXIVE_ADDRESS=Remote reflexive IP / Port: service.gui.callinfo.ICE_REMOTE_RELAYED_ADDRESS=Remote relayed IP / Port: +service.gui.callinfo.HARVESTING_TIME=Harvesting time service.gui.ALWAYS_TRUST=Always trust this certificate service.gui.CERT_DIALOG_TITLE=Verify Certificate diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallInfoFrame.java b/src/net/java/sip/communicator/impl/gui/main/call/CallInfoFrame.java index 80498d1de..ee76dfd5e 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/CallInfoFrame.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/CallInfoFrame.java @@ -275,17 +275,6 @@ private void constructPeerInfo(CallPeer callPeer, StringBuffer stringBuffer) if(callPeerMediaHandler != null) { - String iceState = callPeerMediaHandler.getICEState(); - if(iceState != null && !iceState.equals("Terminated")) - { - stringBuffer.append(getLineString( - resources.getI18NString( - "service.gui.callinfo.ICE_STATE"), - resources.getI18NString( - "service.gui.callinfo.ICE_STATE." + iceState))); - } - - MediaStream mediaStream = callPeerMediaHandler.getStream(MediaType.AUDIO); @@ -328,6 +317,45 @@ private void constructPeerInfo(CallPeer callPeer, StringBuffer stringBuffer) stringBuffer, MediaType.VIDEO); } + + stringBuffer.append("
"); + // ICE state + String iceState = callPeerMediaHandler.getICEState(); + if(iceState != null && !iceState.equals("Terminated")) + { + stringBuffer.append(getLineString( + resources.getI18NString( + "service.gui.callinfo.ICE_STATE"), + resources.getI18NString( + "service.gui.callinfo.ICE_STATE." + iceState))); + } + + // Current harvester time if ICE agent is harvesting. + String[] harvesterNames = + { + "GoogleTurnCandidateHarvester", + "GoogleTurnSSLCandidateHarvester", + "HostCandidateHarvester", + "JingleNodesHarvester", + "StunCandidateHarvester", + "TurnCandidateHarvester", + "UPNPHarvester" + }; + long harvestingTime; + for(int i = 0; i < harvesterNames.length; ++i) + { + harvestingTime = callPeerMediaHandler.getHarvestingTime( + harvesterNames[i]); + if(harvestingTime != -1) + { + stringBuffer.append(getLineString( + resources.getI18NString( + "service.gui.callinfo.HARVESTING_TIME") + + " " + harvesterNames[i] + ":", + harvestingTime + " ms")); + } + } + } } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/IceUdpTransportManager.java b/src/net/java/sip/communicator/impl/protocol/jabber/IceUdpTransportManager.java index 8ee05abc1..84a69d466 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/IceUdpTransportManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/IceUdpTransportManager.java @@ -1350,6 +1350,24 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) return null; } + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public long getHarvestingTime(String harvesterName) + { + if(iceAgent != null) + { + return iceAgent.getHarvestingTime(harvesterName); + } + return -1; + } + /** * Retransmit state change events from the Agent to the media handler. * @param evt the event for state change. diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/JingleNodesHarvester.java b/src/net/java/sip/communicator/impl/protocol/jabber/JingleNodesHarvester.java index a6a975c84..b13df28d0 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/JingleNodesHarvester.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/JingleNodesHarvester.java @@ -25,7 +25,7 @@ * @author Sebastien Vincent */ public class JingleNodesHarvester - implements CandidateHarvester + extends CandidateHarvester { /** * The Logger used by the JingleNodesHarvester class and diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java b/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java index b4eb73795..83f85281b 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java @@ -742,6 +742,20 @@ public InetSocketAddress getICELocalRelayedAddress(String streamName) return null; } + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public long getHarvestingTime(String harvesterName) + { + return -1; + } + /** * Returns the ICE remote relayed address (server or peer relayed). * diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/TransportManagerGTalkImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/TransportManagerGTalkImpl.java index 78d506b89..987a50a54 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/TransportManagerGTalkImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/TransportManagerGTalkImpl.java @@ -1476,6 +1476,24 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) return null; } + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public long getHarvestingTime(String harvesterName) + { + if(iceAgent != null) + { + return iceAgent.getHarvestingTime(harvesterName); + } + return -1; + } + /** * Retransmit state change events from the Agent. * @param evt the event for state change. diff --git a/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java index d0584f722..de3f99223 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java @@ -141,6 +141,20 @@ public InetSocketAddress getICELocalRelayedAddress(String streamName) return null; } + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public long getHarvestingTime(String harvesterName) + { + return -1; + } + /** * Returns the ICE remote relayed address (server or peer relayed). * diff --git a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java index 9b594c9ba..bb13bd87c 100644 --- a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java +++ b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java @@ -1576,6 +1576,25 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) : transportManager.getICERemoteRelayedAddress(streamName); } + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public long getHarvestingTime(String harvesterName) + { + TransportManager transportManager = getTransportManager(); + + return + (transportManager == null) + ? null + : transportManager.getHarvestingTime(harvesterName); + } + public MediaHandler getMediaHandler() { return mediaHandler; diff --git a/src/net/java/sip/communicator/service/protocol/media/TransportManager.java b/src/net/java/sip/communicator/service/protocol/media/TransportManager.java index c68803f58..95e8ce3ad 100644 --- a/src/net/java/sip/communicator/service/protocol/media/TransportManager.java +++ b/src/net/java/sip/communicator/service/protocol/media/TransportManager.java @@ -668,6 +668,17 @@ public abstract InetSocketAddress getICELocalRelayedAddress( public abstract InetSocketAddress getICERemoteRelayedAddress( String streamName); + /** + * Returns the harvesting time (in ms) for the harvester given in parameter. + * + * @param harvesterName The class name if the harvester. + * + * @return The harvesting time (in ms) for the harvester given in parameter. + * -1 if this harvester does not exists, if the ICE agent is null, or if the + * agent is not currently harvesting with this harvester. + */ + public abstract long getHarvestingTime(String harvesterName); + /** * Returns the ICE candidate extended type selected by the given agent. *