[Asterisk-java-cvs] CVS: asterisk-java/src/java/net/sf/asterisk/manager DefaultAsteriskManager.java,
Brought to you by:
srt
From: Stefan R. <sr...@us...> - 2005-07-27 21:06:17
|
Update of /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7575/src/java/net/sf/asterisk/manager Modified Files: DefaultAsteriskManager.java AsteriskManager.java MultiAsterisksManager.java Log Message: Added getVersion() and getVersion(String) methods to AsteriskManager Index: DefaultAsteriskManager.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager/DefaultAsteriskManager.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -p -r1.10 -r1.11 --- DefaultAsteriskManager.java 26 Jul 2005 11:37:49 -0000 1.10 +++ DefaultAsteriskManager.java 27 Jul 2005 21:06:08 -0000 1.11 @@ -21,8 +21,12 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.sf.asterisk.manager.action.CommandAction; import net.sf.asterisk.manager.action.OriginateAction; import net.sf.asterisk.manager.action.QueueStatusAction; import net.sf.asterisk.manager.action.StatusAction; @@ -42,6 +46,8 @@ import net.sf.asterisk.manager.event.Que import net.sf.asterisk.manager.event.RenameEvent; import net.sf.asterisk.manager.event.StatusEvent; import net.sf.asterisk.manager.event.UnlinkEvent; +import net.sf.asterisk.manager.response.CommandResponse; +import net.sf.asterisk.manager.response.ManagerResponse; import net.sf.asterisk.util.Log; import net.sf.asterisk.util.LogFactory; @@ -57,7 +63,14 @@ public class DefaultAsteriskManager AsteriskManager, ManagerEventHandler { + private static final Pattern SHOW_VERSION_FILES_PATTERN = Pattern + .compile("^([\\S]+)\\s+Revision: ([0-9\\.]+)"); + private final Log logger = LogFactory.getLog(this.getClass()); + + /** + * The underlying manager connection used to talk to Asterisk. + */ private ManagerConnection connection; /** @@ -71,6 +84,20 @@ public class DefaultAsteriskManager private final Map queues; /** + * The version of the Asterisk server we are connected to.<br> + * Contains <code>null</code> until lazily initialized. + */ + private String version; + + /** + * Holds the version of Asterisk's source files.<br> + * That corresponds to the output of the CLI command + * <code>show version files</code>.<br> + * Contains <code>null</code> until lazily initialized. + */ + private Map versions; + + /** * Creates a new instance. */ public DefaultAsteriskManager() @@ -81,6 +108,8 @@ public class DefaultAsteriskManager /** * Creates a new instance. + * + * @param connection the manager connection to use */ public DefaultAsteriskManager(ManagerConnection connection) { @@ -223,6 +252,90 @@ public class DefaultAsteriskManager return queues; } + public String getVersion() + { + if (version == null) + { + ManagerResponse response; + try + { + response = connection.sendAction(new CommandAction( + "show version")); + if (response instanceof CommandResponse) + { + List result; + + result = ((CommandResponse) response).getResult(); + if (result.size() > 0) + { + version = (String) result.get(0); + } + } + } + catch (Exception e) + { + logger.warn("Unable to send 'show version' command.", e); + } + } + + return version; + } + + public String getVersion(String file) + { + String fileVersion = null; + + if (versions == null) + { + Map map; + ManagerResponse response; + + map = new HashMap(); + try + { + response = connection.sendAction(new CommandAction( + "show version files")); + if (response instanceof CommandResponse) + { + List result; + + result = ((CommandResponse) response).getResult(); + for (int i = 2; i < result.size(); i++) + { + String line; + Matcher matcher; + + line = (String) result.get(i); + matcher = SHOW_VERSION_FILES_PATTERN.matcher(line); + if (matcher.find()) + { + String key = matcher.group(1); + String value = matcher.group(2); + + map.put(key, value); + } + } + + fileVersion = (String) map.get(file); + versions = map; + } + } + catch (Exception e) + { + logger.warn("Unable to send 'show version files' command.", e); + } + } + else + { + synchronized (versions) + { + fileVersion = (String) versions.get(file); + } + } + + return fileVersion; + } + /* Implementation of the ManagerEventHandler interface */ /** @@ -354,6 +467,11 @@ public class DefaultAsteriskManager */ protected void handleConnectEvent(ConnectEvent connectEvent) { + // reset version information as it might have changed while Asterisk + // restarted + this.version = null; + this.versions = null; + try { initializeChannels(); Index: AsteriskManager.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager/AsteriskManager.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -p -r1.7 -r1.8 --- AsteriskManager.java 16 Jul 2005 23:26:59 -0000 1.7 +++ AsteriskManager.java 27 Jul 2005 21:06:08 -0000 1.8 @@ -41,7 +41,8 @@ public interface AsteriskManager * @throws TimeoutException if the originated call is not answered in time * @throws IOException if the action cannot be sent to the asterisk server */ - public Call originateCall(Originate originate) throws TimeoutException, IOException; + public Call originateCall(Originate originate) throws TimeoutException, + IOException; /** * Returns a Map of active channels.<br> @@ -60,4 +61,32 @@ public interface AsteriskManager * @return a Map of queues. */ Map getQueues(); + + /** + * Returns the version of the Asterisk server you are connected to.<br> + * This typically looks like "Asterisk 1.0.9 built by root@host on a i686 + * running Linux". + * + * @return the version of the Asterisk server you are connected to + * @since 0.2 + */ + String getVersion(); + + /** + * Returns the CVS revision of a given source file of the Asterisk server + * you are connected to.<br> + * For example getVersion("app_meetme.c") may return "1.102".<br> + * Note that this feature is not available with Asterisk 1.0.x.<br> + * You can use this feature if you need to write applications that behave + * different depending on specific modules being available in a specific + * version or not. + * + * @param file the file for which to get the version like "app_meetme.c" + * @return the CVS revision of the file, or <code>null</code> if that file + * is not part of the Asterisk instance you are connected to (maybe + * due to a module that provides it has not been loaded) or if you + * are connected to an Astersion 1.0.x + * @since 0.2 + */ + String getVersion(String file); } Index: MultiAsterisksManager.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager/MultiAsterisksManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -p -r1.4 -r1.5 --- MultiAsterisksManager.java 22 Jun 2005 18:27:12 -0000 1.4 +++ MultiAsterisksManager.java 27 Jul 2005 21:06:08 -0000 1.5 @@ -1,5 +1,5 @@ /* - * Created on 1 févr. 2005 by Pierre-Yves ROGER. + * Created on 1 f�vr. 2005 by Pierre-Yves ROGER. * */ package net.sf.asterisk.manager; @@ -461,4 +461,14 @@ public class MultiAsterisksManager imple // TODO Auto-generated method stub return null; } + + public String getVersion(String file) + { + throw new UnsupportedOperationException(); + } + + public String getVersion() + { + throw new UnsupportedOperationException(); + } } |