diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java index f30c035bf54ca1e2bcc937ca64bb98611069c3dc..80482bc806efb6c4e34bd015dc87461ca8cc0657 100644 --- a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java +++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java @@ -137,49 +137,54 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { LOG.info("Previous poll still in progress"); return; } - // Get the ISO 3166 code for the caller's country - String callerIso = callback.getLocalProperties().get("iso3166"); - if(StringUtils.isNullOrEmpty(callerIso)) return; - // Call contacts one at a time in a random order - Map<ContactId, TransportProperties> remote = - callback.getRemoteProperties(); - List<ContactId> contacts = new ArrayList<ContactId>(remote.keySet()); - Collections.shuffle(contacts); - Iterator<ContactId> it = contacts.iterator(); - while(it.hasNext() && running) { - ContactId c = it.next(); - // Get the ISO 3166 code for the callee's country - TransportProperties properties = remote.get(c); - if(properties == null) continue; - String calleeIso = properties.get("iso3166"); - if(StringUtils.isNullOrEmpty(calleeIso)) continue; - // Get the callee's phone number - String number = properties.get("number"); - if(StringUtils.isNullOrEmpty(number)) continue; - // Convert the number into direct dialling form - number = CountryCodes.translate(number, callerIso, calleeIso); - if(number == null) continue; - // Dial the number - try { - if(!modem.dial(number)) continue; - } catch(IOException e) { - if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); - if(resetModem()) continue; - break; - } - if(LOG.isLoggable(INFO)) LOG.info("Outgoing call connected"); - ModemTransportConnection conn = new ModemTransportConnection(); - callback.outgoingConnectionCreated(c, conn); - try { - conn.waitForDisposal(); - } catch(InterruptedException e) { - if(LOG.isLoggable(WARNING)) - LOG.warning("Interrupted while polling"); - Thread.currentThread().interrupt(); - break; + try { + // Get the ISO 3166 code for the caller's country + String callerIso = callback.getLocalProperties().get("iso3166"); + if(StringUtils.isNullOrEmpty(callerIso)) return; + // Call contacts one at a time in a random order + Map<ContactId, TransportProperties> remote = + callback.getRemoteProperties(); + List<ContactId> contacts = + new ArrayList<ContactId>(remote.keySet()); + Collections.shuffle(contacts); + Iterator<ContactId> it = contacts.iterator(); + while(it.hasNext() && running) { + ContactId c = it.next(); + // Get the ISO 3166 code for the callee's country + TransportProperties properties = remote.get(c); + if(properties == null) continue; + String calleeIso = properties.get("iso3166"); + if(StringUtils.isNullOrEmpty(calleeIso)) continue; + // Get the callee's phone number + String number = properties.get("number"); + if(StringUtils.isNullOrEmpty(number)) continue; + // Convert the number into direct dialling form + number = CountryCodes.translate(number, callerIso, calleeIso); + if(number == null) continue; + // Dial the number + try { + if(!modem.dial(number)) continue; + } catch(IOException e) { + if(LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + if(resetModem()) continue; + break; + } + if(LOG.isLoggable(INFO)) LOG.info("Outgoing call connected"); + ModemTransportConnection conn = new ModemTransportConnection(); + callback.outgoingConnectionCreated(c, conn); + try { + conn.waitForDisposal(); + } catch(InterruptedException e) { + if(LOG.isLoggable(WARNING)) + LOG.warning("Interrupted while polling"); + Thread.currentThread().interrupt(); + break; + } } + } finally { + polling.release(); } - polling.release(); } public DuplexTransportConnection createConnection(ContactId c) {