From 41412a8822cd2db976cd50d077b667982628936d Mon Sep 17 00:00:00 2001 From: Deantwo Date: Tue, 10 Jul 2018 15:57:24 +0200 Subject: [PATCH 01/11] Version increment --- Asterisk.2013/Asterisk.NET/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Properties/AssemblyInfo.cs b/Asterisk.2013/Asterisk.NET/Properties/AssemblyInfo.cs index 7a1c0352..60515348 100644 --- a/Asterisk.2013/Asterisk.NET/Properties/AssemblyInfo.cs +++ b/Asterisk.2013/Asterisk.NET/Properties/AssemblyInfo.cs @@ -11,8 +11,8 @@ [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("abe98502-ea83-4b04-98c3-ffe3eabe06b0")] -[assembly: AssemblyVersion("1.2.0.0")] -[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyVersion("1.3.0.0")] +[assembly: AssemblyFileVersion("1.3.0.0")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from From ad9cda09cbc23eb0b51e5f2b78de014ff9a43b76 Mon Sep 17 00:00:00 2001 From: Deantwo Date: Tue, 10 Jul 2018 16:00:21 +0200 Subject: [PATCH 02/11] IndexOf fix --- Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs index 98cca810..2f33f400 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs @@ -133,7 +133,7 @@ private void mrReaderCallbback(IAsyncResult ar) // \n - because not all dev in Digium use \r\n // .Trim() kill \r lock (((ICollection) lineQueue).SyncRoot) - while (!string.IsNullOrEmpty(mrReader.lineBuffer) && (idx = mrReader.lineBuffer.IndexOf("\n")) >= 0) + while (!string.IsNullOrEmpty(mrReader.lineBuffer) && (idx = mrReader.lineBuffer.IndexOf('\n')) >= 0) { line = idx > 0 ? mrReader.lineBuffer.Substring(0, idx).Trim() : string.Empty; mrReader.lineBuffer = (idx + 1 < mrReader.lineBuffer.Length From f193dd87481633fe4f3e338192f13db84c591f03 Mon Sep 17 00:00:00 2001 From: Craig Roberts Date: Mon, 20 Aug 2018 22:12:16 -0400 Subject: [PATCH 03/11] spelling error spelling error --- Asterisk.2013/Asterisk.NET/Manager/Event/BridgeEvent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/BridgeEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/BridgeEvent.cs index c26b8259..65c665f2 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/BridgeEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/BridgeEvent.cs @@ -22,7 +22,7 @@ public enum BridgeStates public enum BridgeTypes { - Unknnown, + Unknown, /// A channel.c bridge BRIDGE_TYPE_CORE, /// An RTP peer-2-peer bridge (NAT support only). From acd9e885cc454009b112836741fa515cc8772e23 Mon Sep 17 00:00:00 2001 From: Deantwo <2676134+Deantwo@users.noreply.github.com> Date: Tue, 21 Jan 2020 10:47:48 +0100 Subject: [PATCH 04/11] Extended AsteriskVersion Enum Added an "Unknown" option. Added Asterisk version up to 17. Added a "Newer" option. --- .../Asterisk.NET/Manager/AsteriskVersion.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/AsteriskVersion.cs b/Asterisk.2013/Asterisk.NET/Manager/AsteriskVersion.cs index 7877fdce..a3e00b47 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/AsteriskVersion.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/AsteriskVersion.cs @@ -1,7 +1,11 @@ namespace AsterNET.Manager { + /// + /// Asterisk Version + /// public enum AsteriskVersion { + Unknown = 0, ASTERISK_1_0 = 10, ASTERISK_1_2 = 12, ASTERISK_1_4 = 14, @@ -10,6 +14,11 @@ public enum AsteriskVersion ASTERISK_10 = 100, ASTERISK_11 = 110, ASTERISK_12 = 120, - ASTERISK_13 = 130 + ASTERISK_13 = 130, + ASTERISK_14 = 140, + ASTERISK_15 = 150, + ASTERISK_16 = 160, + ASTERISK_17 = 170, + ASTERISK_Newer = 999 } -} \ No newline at end of file +} From 3adadb1c6355754c6928c63c43ac0e919253ef86 Mon Sep 17 00:00:00 2001 From: Deantwo <2676134+Deantwo@users.noreply.github.com> Date: Tue, 21 Jan 2020 12:33:47 +0100 Subject: [PATCH 05/11] Added new AsteriskVersions to determineVersion() Added up to Asterisk v17. Added an attempt at getting newer versions too. --- .../Asterisk.NET/Manager/ManagerConnection.cs | 104 +++++++++++------- 1 file changed, 66 insertions(+), 38 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index daf82bbc..e94bd2cc 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -167,7 +167,7 @@ public class ManagerConnection /// Default Slow Reconnect interval in milliseconds. private int reconnectIntervalMax = 10000; - public char[] VAR_DELIMITER = { '|' }; + public char[] VAR_DELIMITER = { '|' }; #endregion @@ -1646,43 +1646,68 @@ protected internal AsteriskVersion determineVersion() if (m.Groups.Count >= 2) { version = m.Groups[1].Value; - if (version.StartsWith("1.4.")) - { - VAR_DELIMITER = new char[] { '|' }; - return AsteriskVersion.ASTERISK_1_4; - } - else if (version.StartsWith("1.6.")) - { - VAR_DELIMITER = new char[] { '|' }; - return Manager.AsteriskVersion.ASTERISK_1_6; - } - else if (version.StartsWith("1.8.")) - { - VAR_DELIMITER = new char[] { '|' }; - return Manager.AsteriskVersion.ASTERISK_1_8; - } - else if (version.StartsWith("10.")) - { - VAR_DELIMITER = new char[] { '|' }; - return Manager.AsteriskVersion.ASTERISK_10; - } - else if (version.StartsWith("11.")) - { - VAR_DELIMITER = new char[] { ',' }; - return Manager.AsteriskVersion.ASTERISK_11; - } - else if (version.StartsWith("12.")) - { - VAR_DELIMITER = new char[] { ',' }; - return Manager.AsteriskVersion.ASTERISK_12; - } - else if (version.StartsWith("13.")) - { - VAR_DELIMITER = new char[] { ',' }; - return Manager.AsteriskVersion.ASTERISK_13; - } - else - throw new ManagerException("Unknown Asterisk version " + version); + if (version.StartsWith("1.4.")) + { + VAR_DELIMITER = new char[] { '|' }; + return AsteriskVersion.ASTERISK_1_4; + } + else if (version.StartsWith("1.6.")) + { + VAR_DELIMITER = new char[] { '|' }; + return Manager.AsteriskVersion.ASTERISK_1_6; + } + else if (version.StartsWith("1.8.")) + { + VAR_DELIMITER = new char[] { '|' }; + return Manager.AsteriskVersion.ASTERISK_1_8; + } + else if (version.StartsWith("10.")) + { + VAR_DELIMITER = new char[] { '|' }; + return Manager.AsteriskVersion.ASTERISK_10; + } + else if (version.StartsWith("11.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_11; + } + else if (version.StartsWith("12.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_12; + } + else if (version.StartsWith("13.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_13; + } + else if (version.StartsWith("14.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_14; + } + else if (version.StartsWith("15.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_15; + } + else if (version.StartsWith("16.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_16; + } + else if (version.StartsWith("17.")) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_17; + } + else if (version.IndexOf('.') >= 2) + { + VAR_DELIMITER = new char[] { ',' }; + return Manager.AsteriskVersion.ASTERISK_Newer; + } + else + throw new ManagerException("Unknown Asterisk version " + version); } } } @@ -1697,7 +1722,10 @@ protected internal AsteriskVersion determineVersion() string line1; line1 = (string)showVersionFilesResult[0]; if (line1 != null && line1.StartsWith("File")) + { + VAR_DELIMITER = new char[] { '|' }; return AsteriskVersion.ASTERISK_1_2; + } } } return AsteriskVersion.ASTERISK_1_0; From efc6a4d025a192b47fd4ab154da27484256bc8cb Mon Sep 17 00:00:00 2001 From: Deantwo <2676134+Deantwo@users.noreply.github.com> Date: Tue, 21 Jan 2020 12:34:57 +0100 Subject: [PATCH 06/11] Fixed possible Regex error --- Asterisk.2013/Asterisk.NET/Common.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Asterisk.2013/Asterisk.NET/Common.cs b/Asterisk.2013/Asterisk.NET/Common.cs index e88a0efb..cfc8e43f 100644 --- a/Asterisk.2013/Asterisk.NET/Common.cs +++ b/Asterisk.2013/Asterisk.NET/Common.cs @@ -18,7 +18,7 @@ public static class Common /// Line separator public const string LINE_SEPARATOR = "\r\n"; - public static Regex ASTERISK_VERSION = new Regex( "^Asterisk\\s+\\D*([0-9]+.[0-9]+.[0-9]+|[1-9][0-9]-r[0-9]+|[0-9]+.[0-9]+-cert[0-9]).*$", + public static Regex ASTERISK_VERSION = new Regex( "^Asterisk\\s+\\D*([0-9]+\\.[0-9]+\\.[0-9]+|[1-9][0-9]-r[0-9]+|[0-9]+\\.[0-9]+-cert[0-9]).*$", RegexOptions.Compiled | RegexOptions.IgnoreCase ); public static Regex SHOW_VERSION_FILES_PATTERN = new Regex("^([\\S]+)\\s+Revision: ([0-9\\.]+)"); From 26b8e610f9f663812cee0c31a55e7449d2d3ec16 Mon Sep 17 00:00:00 2001 From: brook2006 Date: Tue, 25 Aug 2020 15:24:24 +0100 Subject: [PATCH 07/11] Update ManagerConnection.cs I was getting a PlatformNotSupported exception with .Net Core 3.1 saying "Operation is not supported on this platform". This code change fixes that and maintains functionality. --- Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index 54c23eb5..c3253f89 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -2049,7 +2049,7 @@ private void fireEvent(ManagerEvent e) { if (enableEvents && internalEvent != null) if (UseASyncEvents) - internalEvent.BeginInvoke(this, e, new AsyncCallback(eventComplete), null); + Task.Run(() => internalEvent.Invoke(this, e)).ContinueWith(eventComplete); else internalEvent.Invoke(this, e); } From ad6cdc6e2109a817e04e20e54eb231b9df76be55 Mon Sep 17 00:00:00 2001 From: Marian Ionita Date: Mon, 14 Sep 2020 12:46:16 +0300 Subject: [PATCH 08/11] Added RecordFile property to ConfbridgeStartRecordAction. --- .../Asterisk.NET/Manager/Action/ConfbridgeStartRecordAction.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Asterisk.2013/Asterisk.NET/Manager/Action/ConfbridgeStartRecordAction.cs b/Asterisk.2013/Asterisk.NET/Manager/Action/ConfbridgeStartRecordAction.cs index 1caff0c2..86670ff5 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Action/ConfbridgeStartRecordAction.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Action/ConfbridgeStartRecordAction.cs @@ -26,6 +26,8 @@ public ConfbridgeStartRecordAction(string conference) public string Conference { get; set; } + public string RecordFile { get; set; } + public override string Action { get { return "ConfbridgeStartRecord"; } From 3667c2d115180f305364b47c14fe0dafc514c80d Mon Sep 17 00:00:00 2001 From: "Chen, Mei" Date: Wed, 16 Sep 2020 17:14:03 +0200 Subject: [PATCH 09/11] Fix: Invalid Cast Exception #194 --- Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs index 2f33f400..5766855e 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerReader.cs @@ -273,11 +273,10 @@ internal void Run() if (processingCommandResult) { string lineLower = line.ToLower(Helper.CultureInfo); - if (lineLower == "--end command--") + if (lineLower == "--end command--" || lineLower == "") { var commandResponse = new CommandResponse(); Helper.SetAttributes(commandResponse, packet); - commandList.Add(line); commandResponse.Result = commandList; processingCommandResult = false; packet.Clear(); @@ -308,11 +307,11 @@ internal void Run() mrConnector.DispatchEvent(connectEvent); continue; } - if (line.Trim().ToLower(Helper.CultureInfo) == "response: follows") + if (line.Trim().ToLower(Helper.CultureInfo) == "response: follows" + || line.Trim().ToLower(Helper.CultureInfo).EndsWith("command output follows")) { - // Switch to wait "--END COMMAND--" mode + // Switch to wait "--END COMMAND--"/"" mode processingCommandResult = true; - packet.Clear(); commandList.Clear(); Helper.AddKeyValue(packet, line); continue; From efb10600f32478c4a2664894bf949ee2139fb49a Mon Sep 17 00:00:00 2001 From: Gert Dreyer Date: Thu, 27 May 2021 11:48:38 +0200 Subject: [PATCH 10/11] Fix Version Regex to handle with Output Prefix correctly --- Asterisk.2013/Asterisk.NET/Common.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Common.cs b/Asterisk.2013/Asterisk.NET/Common.cs index cfc8e43f..93a62e18 100644 --- a/Asterisk.2013/Asterisk.NET/Common.cs +++ b/Asterisk.2013/Asterisk.NET/Common.cs @@ -18,8 +18,8 @@ public static class Common /// Line separator public const string LINE_SEPARATOR = "\r\n"; - public static Regex ASTERISK_VERSION = new Regex( "^Asterisk\\s+\\D*([0-9]+\\.[0-9]+\\.[0-9]+|[1-9][0-9]-r[0-9]+|[0-9]+\\.[0-9]+-cert[0-9]).*$", - RegexOptions.Compiled | RegexOptions.IgnoreCase ); + public static Regex ASTERISK_VERSION = new Regex("^(?:Output: ){0,1}Asterisk\\s+\\D*([0-9]+\\.[0-9]+\\.[0-9]+|[1-9][0-9]-r[0-9]+|[0-9]+\\.[0-9]+-cert[0-9]).*$", + RegexOptions.Compiled | RegexOptions.IgnoreCase ); public static Regex SHOW_VERSION_FILES_PATTERN = new Regex("^([\\S]+)\\s+Revision: ([0-9\\.]+)"); public static char[] RESPONSE_KEY_VALUE_SEPARATOR = {':'}; From 134108aca78225485e79121d9eb3a9e5c4e27c80 Mon Sep 17 00:00:00 2001 From: Stoyan Dimov Date: Mon, 18 Jul 2022 15:02:20 +0200 Subject: [PATCH 11/11] Fire user events --- Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index 8c42d952..acea6221 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -719,9 +719,10 @@ internal Thread CallerThread private void internalEventHandler(object sender, ManagerEvent e) { int eventHash = e.GetType().Name.GetHashCode(); - if (registeredEventHandlers.ContainsKey(eventHash)) + int userEventHash = typeof(UserEvent).Name.GetHashCode(); + if (registeredEventHandlers.TryGetValue(eventHash, out var currentEvent) + || (registeredEventHandlers.TryGetValue(userEventHash, out currentEvent) && typeof(UserEvent).IsAssignableFrom(e.GetType()))) { - var currentEvent = registeredEventHandlers[eventHash]; if (currentEvent(e)) { return;