diff --git a/Asterisk.2013/Asterisk.2013.sln b/Asterisk.2013/Asterisk.2013.sln index 49cc63e..7a10dbe 100644 --- a/Asterisk.2013/Asterisk.2013.sln +++ b/Asterisk.2013/Asterisk.2013.sln @@ -10,9 +10,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asterisk.NET", "Asterisk.NE EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asterisk.NET.WinForm", "Asterisk.NET.WinForm\Asterisk.NET.WinForm.csproj", "{03687626-613A-4E41-8F60-7C7839D6DD5D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asterisk.NET.Test", "..\..\dfd\Asterisk.NET.1.6.3.1\Asterisk.NET.Test\Asterisk.NET.Test.csproj", "{B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08}" +EndProject Global GlobalSection(TeamFoundationVersionControl) = preSolution - SccNumberOfProjects = 3 + SccNumberOfProjects = 4 SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs33 SccLocalPath0 = . @@ -22,6 +24,9 @@ Global SccProjectUniqueName2 = Asterisk.NET\\Asterisk.NET.csproj SccProjectName2 = Asterisk.NET SccLocalPath2 = Asterisk.NET + SccProjectUniqueName3 = ..\\..\\dfd\\Asterisk.NET.1.6.3.1\\Asterisk.NET.Test\\Asterisk.NET.Test.csproj + SccProjectName3 = Asterisk.NET.Test/Asterisk.NET.Test + SccLocalPath3 = ..\\..\\dfd\\Asterisk.NET.1.6.3.1\\Asterisk.NET.Test EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -36,6 +41,10 @@ Global {03687626-613A-4E41-8F60-7C7839D6DD5D}.Debug|Any CPU.Build.0 = Debug|Any CPU {03687626-613A-4E41-8F60-7C7839D6DD5D}.Release|Any CPU.ActiveCfg = Release|Any CPU {03687626-613A-4E41-8F60-7C7839D6DD5D}.Release|Any CPU.Build.0 = Release|Any CPU + {B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj new file mode 100644 index 0000000..7ec0b45 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj @@ -0,0 +1,113 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B82B8EBF-8180-401D-8D3A-4BF7CFDB7A08} + Exe + Properties + Asterisk.NET.Test + Asterisk.NET.Test + false + v4.5 + + + + + 2.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.10 + false + true + + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + TRACE;DEBUG;TIMEOUT + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + fastagi-mapping.Designer.cs + Designer + + + + + {bc6e7dba-c05a-45fe-a2a3-b1637ce16274} + Asterisk.NET + + + + + + + + + + + + \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj.vspscc b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj.vspscc new file mode 100644 index 0000000..feffdec --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Asterisk.NET.Test.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/CustomIVR.cs b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/CustomIVR.cs new file mode 100644 index 0000000..f1dc197 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/CustomIVR.cs @@ -0,0 +1,118 @@ +using System; +using Asterisk.NET.FastAGI; + +namespace Asterisk.NET.Test +{ + public class CustomIVR : AGIScript + { + private string escapeKeys = "0123456789*#"; + /* + * Call -> play "wellcome" -> wait digit 5 seconds -> press 1 -> play "press-1" -> wait digit -> press * ----------------------------\ + * ^ ^ ^ -> press 4 -> play "press-4" -------\ | + * | | | -> press any -> play "bad" "digit" -+ | + * | | \-----------------------------------------/ | + * | | -> press # or timeout -\ | + * | | | | + * | | -> press # or timeout -> play "goodbye" -> Hangup | | + * | | ^ | | + * | | \-----------------------------------+ | + * | | | | + * | | | | + * | | -> press 2 -> play "press-1" -> wait digit -> press # or timeout -/ | + * | | ^ -> press * ----------------------------+ + * | | | -> press 4 -> play "press-4" -------\ | + * | | | -> press any -> play "bad" "digit" -+ | + * | | \-----------------------------------------/ | + * | | | + * | | -> press other -> play "bad" "digit" -\ | + * | \--------------------------------------------------/ | + * \-------------------------------------------------------------------------------------------------------------------/ + */ + + public override void Service(AGIRequest request, AGIChannel channel) + { + Answer(); + int submenu = 0; + char key = '\0'; + bool welcome = true; + + while (true) + { + if (welcome) + { + key = StreamFile("welcome", escapeKeys); + welcome = false; + submenu = 0; + } + if (key == '\0') + { + key = WaitForDigit(5000); + if (key == '\0' || key == '#') + { + StreamFile("goodbye"); + break; + } + } + char newKey = '\0'; + switch (submenu) + { + case 0: + switch (key) + { + case '1': + newKey = StreamFile("press-1", escapeKeys); + submenu = 1; + break; + case '2': + newKey = StreamFile("press-2", escapeKeys); + submenu = 2; + break; + case '3': + newKey = StreamFile("press-3", escapeKeys); + break; + default: + newKey = StreamFile("bad", escapeKeys); + if(newKey == '\0') + newKey = StreamFile("digit", escapeKeys); + break; + } + break; + case 1: + switch (key) + { + case '*': + welcome = true; + break; + case '4': + newKey = StreamFile("press-4", escapeKeys); + break; + default: + newKey = StreamFile("bad", escapeKeys); + if (newKey == '\0') + newKey = StreamFile("digit", escapeKeys); + break; + } + break; + case 2: + switch (key) + { + case '*': + welcome = true; + break; + case '5': + newKey = StreamFile("press-5", escapeKeys); + break; + default: + newKey = StreamFile("bad", escapeKeys); + if (newKey == '\0') + newKey = StreamFile("digit", escapeKeys); + break; + } + break; + } + key = newKey; + } + Hangup(); + } + } +} diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Program.cs b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Program.cs new file mode 100644 index 0000000..1562e20 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Program.cs @@ -0,0 +1,466 @@ +using System; + +using Asterisk.NET.Manager; +using Asterisk.NET.Manager.Action; +using Asterisk.NET.Manager.Response; +using Asterisk.NET.FastAGI; +using Asterisk.NET.Manager.Event; + +namespace Asterisk.NET.Test +{ + class Program + { + const string DEV_HOST = "192.168.2.34"; + const int ASTERISK_PORT = 5038; + const string ASTERISK_HOST = "192.168.2.39"; + const string ASTERISK_LOGINNAME = "admin"; + const string ASTERISK_LOGINPWD = "amp111"; + + const string ORIGINATE_CONTEXT = "from-internal"; + const string ORIGINATE_CHANNEL = "IAX2/100"; + const string ORIGINATE_EXTRA_CHANNEL = "SIP/101"; + const string ORIGINATE_EXTRA_EXTEN = "101"; + const string ORIGINATE_EXTEN = "101"; + const string ORIGINATE_CALLERID = "Asterisk.NET"; + const int ORIGINATE_TIMEOUT = 15000; + + [STAThread] + static void Main() + { + checkManagerAPI(); + checkFastAGI(); + } + + #region checkFastAGI() + private static void checkFastAGI() + { + Console.WriteLine(@" +Add next lines to your extension.conf file + exten => 200,1,agi(agi://" + DEV_HOST + @"/customivr) + exten => 200,2,Hangup() +reload Asterisk and dial 200 from phone. +Also enter 'agi debug' from Asterisk console to more information. +See CustomIVR.cs and fastagi-mapping.resx to detail. + +Ctrl-C to exit"); + AsteriskFastAGI agi = new AsteriskFastAGI(); + agi.Start(); + } + #endregion + + private static ManagerConnection manager; + private static string monitorChannel = null; + private static string transferChannel = null; + + #region displayQueue() + private static void displayQueue() + { + manager = new ManagerConnection(ASTERISK_HOST, ASTERISK_PORT, ASTERISK_LOGINNAME, ASTERISK_LOGINPWD); + + try + { +#if NOTIMEOUT + manager.Connection.DefaultTimeout = 0; + manager.Connection.DefaultEventTimeout = 0; +#endif + manager.Login(); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + Console.WriteLine("Press ENTER to next test or CTRL-C to exit."); + Console.ReadLine(); + return; + } + + ResponseEvents re; + try + { + re = manager.SendEventGeneratingAction(new QueueStatusAction()); + } + catch (EventTimeoutException e) + { + // this happens with Asterisk 1.0.x as it doesn't send a QueueStatusCompleteEvent + re = e.PartialResult; + } + + foreach (ManagerEvent e in re.Events) + { + if (e is QueueParamsEvent) + { + QueueParamsEvent qe = (QueueParamsEvent)e; + Console.WriteLine("QueueParamsEvent" + "\n\tQueue:\t\t" + qe.Queue + "\n\tServiceLevel:\t" + qe.ServiceLevel); + } + else if (e is QueueMemberEvent) + { + QueueMemberEvent qme = (QueueMemberEvent)e; + Console.WriteLine("QueueMemberEvent" + "\n\tQueue:\t\t" + qme.Queue + "\n\tLocation:\t" + qme.Location); + } + else if (e is QueueEntryEvent) + { + QueueEntryEvent qee = (QueueEntryEvent)e; + Console.WriteLine("QueueEntryEvent" + "\n\tQueue:\t\t" + qee.Queue + "\n\tChannel:\t" + qee.Channel + "\n\tPosition:\t" + qee.Position); + } + } + Console.WriteLine("Press ENTER to next test or CTRL-C to exit."); + Console.ReadLine(); + } + #endregion + + #region checkManagerAPI() + private static void checkManagerAPI() + { + manager = new ManagerConnection(ASTERISK_HOST, ASTERISK_PORT, ASTERISK_LOGINNAME, ASTERISK_LOGINPWD); + + // Register user event class + manager.RegisterUserEventClass(typeof(UserAgentLoginEvent)); + + // Add or Remove events + manager.UserEvents += new UserEventHandler(dam_UserEvents); + + // Dont't display this event + manager.NewExten += new NewExtenEventHandler(manager_IgnoreEvent); + + // Display all other + manager.UnhandledEvent += new ManagerEventHandler(dam_Events); + + // +++ Only to debug purpose + manager.FireAllEvents = true; + // manager.DefaultEventTimeout = 0; + // manager.DefaultResponseTimeout = 0; + manager.PingInterval = 0; + // +++ + try + { + manager.Login(); // Login only (fast) + + Console.WriteLine("Asterisk version : " + manager.Version); + } + catch (Exception ex) + { + Console.WriteLine(ex); + Console.ReadLine(); + manager.Logoff(); + return; + } + + { + Console.WriteLine("\nGetConfig action"); + ManagerResponse response = manager.SendAction(new GetConfigAction("manager.conf")); + if (response.IsSuccess()) + { + GetConfigResponse responseConfig = (GetConfigResponse)response; + foreach (int key in responseConfig.Categories.Keys) + { + Console.WriteLine(string.Format("{0}:{1}", key, responseConfig.Categories[key])); + foreach (int keyLine in responseConfig.Lines(key).Keys) + { + Console.WriteLine(string.Format("\t{0}:{1}", keyLine, responseConfig.Lines(key)[keyLine])); + } + } + } + else + Console.WriteLine(response); + } + + { + Console.WriteLine("\nUpdateConfig action"); + UpdateConfigAction config = new UpdateConfigAction("manager.conf", "manager.conf"); + config.AddCommand(UpdateConfigAction.ACTION_NEWCAT, "testadmin"); + config.AddCommand(UpdateConfigAction.ACTION_APPEND, "testadmin", "secret", "blabla"); + ManagerResponse response = manager.SendAction(config); + Console.WriteLine(response); + } + + // Originate call example + Console.WriteLine("\nPress ENTER key to originate call.\n" + + "Start phone (or connect) or make a call to see events.\n" + + "After all events press a key to originate call."); + Console.ReadLine(); + + OriginateAction oc = new OriginateAction(); + oc.Context = ORIGINATE_CONTEXT; + oc.Priority = 1; + oc.Channel = ORIGINATE_CHANNEL; + oc.CallerId = ORIGINATE_CALLERID; + oc.Exten = ORIGINATE_EXTEN; + oc.Timeout = ORIGINATE_TIMEOUT; + // oc.Variable = "VAR1=abc|VAR2=def"; + // oc.SetVariable("VAR3", "ghi"); + ManagerResponse originateResponse = manager.SendAction(oc, oc.Timeout); + Console.WriteLine("Response:"); + Console.WriteLine(originateResponse); + + Console.WriteLine("Press ENTER key to next test."); + Console.ReadLine(); + + // + // Display result of Show Queues command + // + { + CommandAction command = new CommandAction(); + CommandResponse response = new CommandResponse(); + if (manager.AsteriskVersion == AsteriskVersion.ASTERISK_1_6) + command.Command = "queue show"; + else + command.Command = "show queues"; + try + { + response = (CommandResponse)manager.SendAction(command); + Console.WriteLine("Result of " + command.Command); + foreach (string str in response.Result) + Console.WriteLine("\t" + str); + } + catch (Exception err) + { + Console.WriteLine("Response error: " + err); + } + Console.WriteLine("Press ENTER to next test or CTRL-C to exit."); + Console.ReadLine(); + } + // + // Display Queues and Members + // + ResponseEvents re; + try + { + re = manager.SendEventGeneratingAction(new QueueStatusAction()); + } + catch (EventTimeoutException e) + { + // this happens with Asterisk 1.0.x as it doesn't send a QueueStatusCompleteEvent + re = e.PartialResult; + } + + foreach (ManagerEvent e in re.Events) + { + if (e is QueueParamsEvent) + { + QueueParamsEvent qe = (QueueParamsEvent)e; + Console.WriteLine("QueueParamsEvent" + "\n\tQueue:\t\t" + qe.Queue + "\n\tServiceLevel:\t" + qe.ServiceLevel); + } + else if (e is QueueMemberEvent) + { + QueueMemberEvent qme = (QueueMemberEvent)e; + Console.WriteLine("QueueMemberEvent" + "\n\tQueue:\t\t" + qme.Queue + "\n\tLocation:\t" + qme.Location); + } + else if (e is QueueEntryEvent) + { + QueueEntryEvent qee = (QueueEntryEvent)e; + Console.WriteLine("QueueEntryEvent" + "\n\tQueue:\t\t" + qee.Queue + "\n\tChannel:\t" + qee.Channel + "\n\tPosition:\t" + qee.Position); + } + } + + Console.WriteLine("Press ENTER to next test or CTRL-C to exit."); + Console.ReadLine(); + + // + // To test create 3 extensions: + // 1 - SIP/4012 w/o voicemail (with eyeBeam softphone) + // 2 - IAX2/4008 w/o voicemail (with iaxComm softphone) + // 3 - SIP/4010 w/ voicemal but no phone connect + + // RedirectCall: call from IAX2/4008 to SIP/4012 + // Don't answer on SIP/4012 and call must redirect to SIP/4010 (to voicemail really) + // Dial event used to define redirect channel + + Console.WriteLine("Redirect Call from " + ORIGINATE_CHANNEL + " to " + ORIGINATE_EXTRA_CHANNEL + " or press ESC."); + // Wait for Dial Event from ORIGINATE_CHANNEL + DialEventHandler de = new DialEventHandler(dam_Dial); + manager.Dial += de; + while (transferChannel == null) + { + System.Threading.Thread.Sleep(100); + if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape) + break; + } + manager.Dial -= de; + + // Now send Redirect action + RedirectAction ra = new RedirectAction(); + ra.Channel = transferChannel; + ra.ExtraChannel = ORIGINATE_EXTRA_CHANNEL; + ra.Context = ORIGINATE_CONTEXT; + ra.Exten = ORIGINATE_EXTRA_EXTEN; + ra.Priority = 1; + try + { + ManagerResponse mr = manager.SendAction(ra, 10000); + Console.WriteLine("Transfer Call" + + "\n\tResponse:" + mr.Response + + "\n\tMessage:" + mr.Message + ); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + // Monitor call. + // Call from IA2/4008 to SIP/4012 + // Link event used to define monitor channel + Console.WriteLine("Monitor call. Please call " + ORIGINATE_CHANNEL + " and answer or press ESC."); + // Wait for Link event + LinkEventHandler le = new LinkEventHandler(dam_Link); + manager.Link += le; + while (monitorChannel == null) + { + System.Threading.Thread.Sleep(100); + if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape) + break; + } + manager.Link -= le; + // Now send Monitor action + MonitorAction ma = new MonitorAction(); + ma.Channel = monitorChannel; + ma.File = "voicefile"; + ma.Format = "gsm"; + ma.Mix = true; + try + { + ManagerResponse mr = manager.SendAction(ma, 10000); + Console.WriteLine("Monitor Call" + + "\n\tResponse:" + mr.Response); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + manager.Logoff(); + } + + static void manager_IgnoreEvent(object sender, NewExtenEvent e) + { + // Ignore this event. + } + + #endregion + + #region Event handlers + static void dam_Events(object sender, ManagerEvent e) + { + Console.WriteLine(e); + } + + static void dam_Reload(object sender, ReloadEvent e) + { + Console.WriteLine(string.Format("\nReload Event: {0}", e.Message)); + } + + static void dam_Link(object sender, LinkEvent e) + { + Console.WriteLine("Link Event" + + "\n\tChannel1:\t" + e.Channel1 + + "\n\tChannel2:\t" + e.Channel2 + ); + if (e.Channel1.StartsWith(ORIGINATE_CHANNEL) || e.Channel2.StartsWith(ORIGINATE_CHANNEL)) + monitorChannel = e.Channel1; + } + + static void dam_ExtensionStatus(object sender, ExtensionStatusEvent e) + { + Console.WriteLine("ExtensionStatus Event" + + "\n\tContext\t\t" + e.Context + + "\n\tExten\t\t" + e.Exten + + "\n\tStatus\t\t" + e.Status + ); + } + + static void dam_Dial(object sender, DialEvent e) + { + Console.WriteLine( + "Dial Event" + + "\n\tCallerId\t" + e.CallerId + + "\n\tCallerIdName\t" + e.CallerIdName + + "\n\tDestination\t" + e.Destination + + "\n\tDestUniqueId\t" + e.DestUniqueId + + "\n\tSrc\t\t" + e.Src + + "\n\tSrcUniqueId\t" + e.SrcUniqueId + ); + if (e != null && e.Destination != null && e.Destination.StartsWith(ORIGINATE_CHANNEL)) + transferChannel = e.Src; + } + + static void dam_Hangup(object sender, HangupEvent e) + { + Console.WriteLine("Hangup Event" + + "\n\tChannel\t\t" + e.Channel + + "\n\tUniqueId\t" + e.UniqueId + ); + } + + static void dam_NewExten(object sender, NewExtenEvent e) + { + Console.WriteLine( + "New Extension Event" + + "\n\tChannel\t\t" + e.Channel + + "\n\tExtension\t" + e.Extension + + "\n\tContext\t\t" + e.Context + + "\n\tDateReceived\t" + e.DateReceived.ToString() + + "\n\tPriority\t" + e.Priority.ToString() + + "\n\tPrivilege\t" + e.Privilege + + "\n\tUniqueId\t" + e.UniqueId + + "\n\tAppData\t\t" + e.AppData + + "\n\tApplication\t" + e.Application + ); + } + + static void dam_NewChannel(object sender, NewChannelEvent e) + { + Console.WriteLine("New channel Event" + + "\n\tChannel\t\t" + e.Channel + + "\n\tUniqueId\t" + e.UniqueId + + "\n\tCallerId\t" + e.CallerId + + "\n\tCallerIdName\t" + e.CallerIdName + + "\n\tState\t\t" + e.State + + "\n\tDateReceived\t" + e.DateReceived.ToString() + ); + } + + static void dam_PeerStatus(object sender, PeerStatusEvent e) + { + Console.WriteLine("Peer Status Event" + + "\n\tPeer\t\t" + e.Peer + + "\n\tStatus\t\t" + e.PeerStatus + + "\n\tDateReceived\t" + e.DateReceived.ToString() + ); + } + + static void dam_UserEvents(object sender, UserEvent e) + { + if (e is UserAgentLoginEvent) + { + Console.WriteLine("User Event - AgentLogin:" + + "\n\tAgent\t\t" + ((UserAgentLoginEvent)e).Agent + ); + } + else + { + Console.WriteLine("User Event:" + + "\n\tUserEventName\t\t" + e.UserEventName + ); + foreach (System.Collections.Generic.KeyValuePair pair in e.Attributes) + { + Console.WriteLine(String.Format("\t{0}\t{1}", pair.Key, pair.Value)); + } + } + } + #endregion + } + + public class UserAgentLoginEvent : UserEvent + { + private string agent; + public string Agent + { + get { return agent; } + set { agent = value; } + } + + public UserAgentLoginEvent(ManagerConnection source) + : base(source) + { + } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Properties/AssemblyInfo.cs b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5757316 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Asterisk.NET.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("x893")] +[assembly: AssemblyProduct("Asterisk.NET.Test")] +[assembly: AssemblyCopyright("Copyright © 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: Guid("1a245924-e504-4cb4-9885-67a39085196a")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.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 +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/app.config b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/app.config new file mode 100644 index 0000000..b7a7ef1 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/app.config @@ -0,0 +1,3 @@ + + + diff --git a/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/fastagi-mapping.resx b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/fastagi-mapping.resx new file mode 100644 index 0000000..46050b4 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/fastagi-mapping.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Asterisk.NET.Test.CustomIVR, Asterisk.NET.Test + + + Asterisk.NET.FastAGI.Scripts.AGINoAction, Asterisk.NET + + \ No newline at end of file diff --git a/Asterisk.2013/ChangeLog.txt b/Asterisk.2013/ChangeLog.txt index 39bd59e..9bad93d 100644 --- a/Asterisk.2013/ChangeLog.txt +++ b/Asterisk.2013/ChangeLog.txt @@ -2,6 +2,8 @@ Re-homed project to CodePlex with TFS Support Upgraded Project to .NET 4.5 Allow connection to Asterisk 1.8.x - Still uses the 1.6.x logic, so any 1.8 changes are not yet implemented. <- TODO + Readded the Test Project, upgraded to .NET 4.5 and post build fix. + Removed "@"%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe" "$(ProjectDir)fastagi-mapping.resx" fastagi-mapping.resources" for now until I know what it does 09.06.2009