]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_managed: support per-module references directory
authorArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:32:30 +0000 (00:32 +0300)
committerArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:32:30 +0000 (00:32 +0300)
src/mod/languages/mod_managed/managed/Loader.cs

index a3d48fd1d1ea26b56f445c44691197a80fece0e6..cee7af86c24377af3cf5f25bad72b39052533d7a 100644 (file)
@@ -229,11 +229,38 @@ namespace FreeSWITCH {
                 setup.ConfigurationFile = fileName + ".config";\r
             }\r
             setup.ApplicationBase = Native.freeswitch.SWITCH_GLOBAL_dirs.mod_dir;\r
-            setup.ShadowCopyDirectories = managedDir + ";";\r
             setup.LoaderOptimization = LoaderOptimization.MultiDomainHost; // TODO: would MultiDomain work better since FreeSWITCH.Managed isn't gac'd?\r
             setup.CachePath = shadowDir;\r
             setup.ShadowCopyFiles = "true";\r
-            setup.PrivateBinPath = "managed";\r
+\r
+            // computing private bin path\r
+            var binPath = setup.PrivateBinPath ?? string.Empty;\r
+\r
+            var binPaths = binPath.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries)\r
+                .Select(x => x.Trim())\r
+                .ToList();\r
+\r
+            // adding "managed" (modules) directory\r
+            if (!binPaths.Contains("managed", StringComparer.OrdinalIgnoreCase))\r
+            {\r
+                binPaths.Add("managed");\r
+            }\r
+\r
+            // adding "managed/<modulename>" directory for per-module references support\r
+            var moduleRefsDir = Path.GetFileName(fileName);\r
+            moduleRefsDir = Path.GetFileNameWithoutExtension(moduleRefsDir);\r
+\r
+            if (moduleRefsDir != null && moduleRefsDir.Trim() != "")\r
+            {\r
+                moduleRefsDir = Path.Combine("managed", moduleRefsDir);\r
+                if (!binPaths.Contains(moduleRefsDir, StringComparer.OrdinalIgnoreCase))\r
+                {\r
+                    binPaths.Add(moduleRefsDir);\r
+                }\r
+            }\r
+\r
+            // bringing all together\r
+            setup.PrivateBinPath = string.Join(";", binPaths);\r
 \r
             // Create domain and load PM inside\r
             System.Threading.Interlocked.Increment(ref appDomainCount);\r