Example #1
0
        /// <summary>
        /// Sets everything up to load the plugins, creating the seperate appdomin and permission requirements
        /// </summary>
        public void SetupProtocolFactory(IProtocolAssemblyMetadata meta) {
            AppDomainSetup setup = this.CreateAppDomainSetup();

            PermissionSet permissions = this.CreatePermissionSet(meta);

            // Create the app domain and the plugin factory in the new domain.
            this.AppDomainSandbox = AppDomain.CreateDomain(String.Format("Potato.Protocols.{0}", this.ConnectionModel != null ? this.ConnectionModel.ConnectionGuid.ToString() : String.Empty), null, setup, permissions);

            this.ProtocolFactory = (ISandboxProtocolController)this.AppDomainSandbox.CreateInstanceAndUnwrap(typeof(ISandboxProtocolController).Assembly.FullName, typeof(SandboxProtocolController).FullName);

            this.AssignProtocolEvents();
        }
Example #2
0
        /// <summary>
        /// Sets up the factory, then attempts to load a specific type into the protocol appdomain.
        /// </summary>
        public bool SetupProtocol(IProtocolAssemblyMetadata meta, IProtocolType type, ProtocolSetup setup) {
            if (this.ProtocolFactory == null) {
                this.SetupProtocolFactory(meta);
            }

            if (this.ProtocolFactory.Create(meta.Assembly.FullName, type) == true) {
                this.Protocol = this.ProtocolFactory;

                this.Protocol.Setup(setup);
            }

            return this.Protocol != null;
        }
Example #3
0
        /// <summary>
        /// Creates the permissions set to apply to the app domain.
        /// </summary>
        /// <returns></returns>
        public PermissionSet CreatePermissionSet(IProtocolAssemblyMetadata meta) {
            PermissionSet permissions = new PermissionSet(PermissionState.None);

            permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

            permissions.AddPermission(new DnsPermission(PermissionState.Unrestricted));
            permissions.AddPermission(new WebPermission(PermissionState.Unrestricted));
            permissions.AddPermission(new SocketPermission(NetworkAccess.Connect, TransportType.All, "*.*.*.*", SocketPermission.AllPorts));

            permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery, AppDomain.CurrentDomain.BaseDirectory));
            permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, meta.Directory.FullName));

            DirectoryInfo coreSharedPackageDirectory = Defines.PackageContainingPath(Defines.PackageMyrconPotatoSharedLibNet40.FullName);

            if (coreSharedPackageDirectory != null) {
                permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, coreSharedPackageDirectory.FullName));
            }

            return permissions;
        }