From 8e594b7212bc6afbedc203b8c39efefce098986c Mon Sep 17 00:00:00 2001 From: Vincent Lucas Date: Thu, 4 Oct 2012 09:14:20 +0000 Subject: [PATCH] Adds total harvesting time to the call info frame. Updates Ice4j to r339: Adds extra function to export the total harvesting time. --- lib/installer-exclude/ice4j.jar | Bin 450908 -> 451003 bytes resources/languages/resources.properties | 1 + .../impl/gui/main/call/CallInfoFrame.java | 15 ++++++- .../jabber/IceUdpTransportManager.java | 17 +++++++- .../jabber/RawUdpTransportManager.java | 37 ++++++++++++------ .../jabber/TransportManagerGTalkImpl.java | 17 +++++++- .../protocol/sip/TransportManagerSipImpl.java | 37 ++++++++++++------ .../protocol/media/CallPeerMediaHandler.java | 18 ++++++++- .../protocol/media/TransportManager.java | 10 ++++- 9 files changed, 120 insertions(+), 32 deletions(-) diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar index 7c9c00c78d08897ac7517fb28c1ca6c08aff1b14..6a2d8c0bb6fc423b6dacf5b19655824302c52935 100644 GIT binary patch delta 30903 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%0AA5q;`9`?UOwe`!!p*pd~Fo7 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 xF"); + // Total harvesting time. + long harvestingTime + = callPeerMediaHandler.getTotalHarvestingTime(); + if(harvestingTime != -1) + { + stringBuffer.append(getLineString(resources.getI18NString( + "service.gui.callinfo.TOTAL_HARVESTING_TIME" + ) + + ":", + harvestingTime + " ms")); + } + // Current harvester time if ICE agent is harvesting. String[] harvesterNames = { @@ -341,7 +354,6 @@ private void constructPeerInfo(CallPeer callPeer, StringBuffer stringBuffer) "TurnCandidateHarvester", "UPNPHarvester" }; - long harvestingTime; for(int i = 0; i < harvesterNames.length; ++i) { harvestingTime = callPeerMediaHandler.getHarvestingTime( @@ -355,7 +367,6 @@ private void constructPeerInfo(CallPeer callPeer, StringBuffer stringBuffer) 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 84a69d466..4e239e4d5 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,21 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) return null; } + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public long getTotalHarvestingTime() + { + if(iceAgent != null) + { + return iceAgent.getTotalHarvestingTime(); + } + return -1; + } + /** * Returns the harvesting time (in ms) for the harvester given in parameter. * @@ -1357,7 +1372,7 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) * * @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. + * agent has never harvested with this harvester. */ public long getHarvestingTime(String harvesterName) { 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 83f85281b..924f2d1b2 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/RawUdpTransportManager.java @@ -743,30 +743,41 @@ public InetSocketAddress getICELocalRelayedAddress(String streamName) } /** - * Returns the harvesting time (in ms) for the harvester given in parameter. + * Returns the ICE remote relayed address (server or peer relayed). * - * @param harvesterName The class name if the harvester. + * @param streamName The stream name (AUDIO, VIDEO); * - * @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. + * @return the ICE remote relayed address. May be null if this transport + * manager is not using ICE or if there is no relayed address for the + * remote candidate used. */ - public long getHarvestingTime(String harvesterName) + public InetSocketAddress getICERemoteRelayedAddress(String streamName) + { + return null; + } + + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public long getTotalHarvestingTime() { return -1; } /** - * Returns the ICE remote relayed address (server or peer relayed). + * Returns the harvesting time (in ms) for the harvester given in parameter. * - * @param streamName The stream name (AUDIO, VIDEO); + * @param harvesterName The class name if the harvester. * - * @return the ICE remote relayed address. May be null if this transport - * manager is not using ICE or if there is no relayed address for the - * remote candidate used. + * @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 has never harvested with this harvester. */ - public InetSocketAddress getICERemoteRelayedAddress(String streamName) + public long getHarvestingTime(String harvesterName) { - return null; + return -1; } } 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 987a50a54..104927b69 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,21 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) return null; } + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public long getTotalHarvestingTime() + { + if(iceAgent != null) + { + return iceAgent.getTotalHarvestingTime(); + } + return -1; + } + /** * Returns the harvesting time (in ms) for the harvester given in parameter. * @@ -1483,7 +1498,7 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) * * @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. + * agent has never harvested with this harvester. */ public long getHarvestingTime(String harvesterName) { 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 de3f99223..d573991a0 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/TransportManagerSipImpl.java @@ -142,30 +142,41 @@ public InetSocketAddress getICELocalRelayedAddress(String streamName) } /** - * Returns the harvesting time (in ms) for the harvester given in parameter. + * Returns the ICE remote relayed address (server or peer relayed). * - * @param harvesterName The class name if the harvester. + * @param streamName The stream name (AUDIO, VIDEO); * - * @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. + * @return the ICE remote relayed address. May be null if this transport + * manager is not using ICE or if there is no relayed address for the + * remote candidate used. */ - public long getHarvestingTime(String harvesterName) + public InetSocketAddress getICERemoteRelayedAddress(String streamName) + { + return null; + } + + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public long getTotalHarvestingTime() { return -1; } /** - * Returns the ICE remote relayed address (server or peer relayed). + * Returns the harvesting time (in ms) for the harvester given in parameter. * - * @param streamName The stream name (AUDIO, VIDEO); + * @param harvesterName The class name if the harvester. * - * @return the ICE remote relayed address. May be null if this transport - * manager is not using ICE or if there is no relayed address for the - * remote candidate used. + * @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 has never harvested with this harvester. */ - public InetSocketAddress getICERemoteRelayedAddress(String streamName) + public long getHarvestingTime(String harvesterName) { - return null; + return -1; } } 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 bb13bd87c..4a34e7755 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,22 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) : transportManager.getICERemoteRelayedAddress(streamName); } + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public long getTotalHarvestingTime() + { + TransportManager transportManager = getTransportManager(); + + return + (transportManager == null) + ? null + : transportManager.getTotalHarvestingTime(); + } + /** * Returns the harvesting time (in ms) for the harvester given in parameter. * @@ -1583,7 +1599,7 @@ public InetSocketAddress getICERemoteRelayedAddress(String streamName) * * @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. + * agent has never harvested with this harvester. */ public long getHarvestingTime(String harvesterName) { 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 95e8ce3ad..be7907f6a 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,14 @@ public abstract InetSocketAddress getICELocalRelayedAddress( public abstract InetSocketAddress getICERemoteRelayedAddress( String streamName); + /** + * Returns the total harvesting time (in ms) for all harvesters. + * + * @return The total harvesting time (in ms) for all the harvesters. -1 if + * the ICE agent is null, or if the agent has nevers harvested. + */ + public abstract long getTotalHarvestingTime(); + /** * Returns the harvesting time (in ms) for the harvester given in parameter. * @@ -675,7 +683,7 @@ public abstract InetSocketAddress getICERemoteRelayedAddress( * * @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. + * agent has never harvested with this harvester. */ public abstract long getHarvestingTime(String harvesterName);