LicFileLicenseProvider.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / CompMod / System / ComponentModel / LicFileLicenseProvider.cs / 1 / LicFileLicenseProvider.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.ComponentModel { 
    using System; 
    using System.ComponentModel.Design;
    using System.Diagnostics; 
    using System.Globalization;
    using System.IO;
    using System.Reflection;
    using System.Runtime.Remoting; 
    using System.Security.Permissions;
 
    ///  
    /// 
    /// Provides an implementation of a . The provider works in 
    ///    a similar fashion to Microsoft .NET Framework standard licensing module.
    /// 
    [HostProtection(SharedState = true)]
    public class LicFileLicenseProvider : LicenseProvider { 

        ///  
        ///  
        /// Determines if the key retrieved by the  method is valid
        ///    for the specified type. 
        /// 
        protected virtual bool IsKeyValid(string key, Type type) {
            if (key != null) {
                return key.StartsWith(GetKey(type)); 
            }
            return false; 
        } 

        ///  
        /// 
        ///    Creates a key for the specified type.
        /// 
        protected virtual string GetKey(Type type) { 
            // This string should not be localized.
            // 
            return string.Format(CultureInfo.InvariantCulture, "{0} is a licensed component.", type.FullName); 
        }
 
        /// 
        /// 
        ///    Gets a license for the instance of the component and determines if it is valid.
        ///  
        public override License GetLicense(LicenseContext context, Type type, object instance, bool allowExceptions) {
            LicFileLicense lic = null; 
 
            Debug.Assert(context != null, "No context provided!");
            if (context != null) { 
                if (context.UsageMode == LicenseUsageMode.Runtime) {
                    string key = context.GetSavedLicenseKey(type, null);
                    if (key != null && IsKeyValid(key, type)) {
                        lic = new LicFileLicense(this, key); 
                    }
                } 
 
                if (lic == null) {
                    string modulePath = null; 

                    if (context != null) {
                        ITypeResolutionService resolver = (ITypeResolutionService)context.GetService(typeof(ITypeResolutionService));
                        if (resolver != null) { 
                            modulePath = resolver.GetPathOfAssembly(type.Assembly.GetName());
                        } 
                    } 

                    if (modulePath == null) { 
                        modulePath = type.Module.FullyQualifiedName;
                    }

                    string moduleDir = Path.GetDirectoryName(modulePath); 
                    string licenseFile = moduleDir + "\\" + type.FullName + ".lic";
 
                    Debug.WriteLine("Looking for license in: " + licenseFile); 
                    if (File.Exists(licenseFile)) {
                        Stream licStream = new FileStream(licenseFile, FileMode.Open, FileAccess.Read, FileShare.Read); 
                        StreamReader sr = new StreamReader(licStream);
                        string s = sr.ReadLine();
                        sr.Close();
                        if (IsKeyValid(s, type)) { 
                            lic = new LicFileLicense(this, GetKey(type));
                        } 
                    } 

                    if (lic != null) { 
                        context.SetSavedLicenseKey(type, lic.LicenseKey);
                    }
                }
 
            }
            return lic; 
        } 

        private class LicFileLicense : License { 
            private LicFileLicenseProvider owner;
            private string key;

            public LicFileLicense(LicFileLicenseProvider owner, string key) { 
                this.owner = owner;
                this.key = key; 
            } 
            public override string LicenseKey {
                get { 
                    return key;
                }
            }
            public override void Dispose() { 
            }
        } 
    } 

} 


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK