Beispiel #1
0
        /// <summary>
        /// Gets the package size information.
        /// </summary>
        /// <returns>Package size information.</returns>
        /// <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
        /// <since_tizen> 3 </since_tizen>
        public async Task <PackageSizeInformation> GetSizeInformationAsync()
        {
            TaskCompletionSource <PackageSizeInformation> tcs = new TaskCompletionSource <PackageSizeInformation>();

            Interop.PackageManager.PackageManagerSizeInfoCallback sizeInfoCb = (pkgId, sizeInfoHandle, userData) =>
            {
                if (sizeInfoHandle != IntPtr.Zero && Id == pkgId)
                {
                    var pkgSizeInfo = PackageSizeInformation.GetPackageSizeInformation(sizeInfoHandle);
                    tcs.TrySetResult(pkgSizeInfo);
                }

                lock (_packageManagerSizeInfoCallbackDict)
                {
                    _packageManagerSizeInfoCallbackDict.Remove(userData);
                }
            };

            IntPtr callbackId;

            lock (_packageManagerSizeInfoCallbackDict)
            {
                callbackId = (IntPtr)_callbackId++;
                _packageManagerSizeInfoCallbackDict[callbackId] = sizeInfoCb;
            }

            Interop.PackageManager.ErrorCode err = Interop.PackageManager.PackageManagerGetSizeInfo(Id, sizeInfoCb, callbackId);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                tcs.TrySetException(PackageManagerErrorFactory.GetException(err, "Failed to get total package size info of " + Id));
            }
            return(await tcs.Task.ConfigureAwait(false));
        }
Beispiel #2
0
        /// <summary>
        /// Retrieves all the application IDs of this package.
        /// </summary>
        /// <param name="type">Optional: AppType enumeration value.</param>
        /// <returns>Returns a dictionary containing all the application information for a given application type.</returns>
        /// <since_tizen> 3 </since_tizen>
        public IEnumerable <ApplicationInfo> GetApplications(ApplicationType type)
        {
            List <ApplicationInfo> appInfoList = new List <ApplicationInfo>();

            Interop.Package.PackageInfoAppInfoCallback cb = (Interop.Package.AppType appType, string appId, IntPtr userData) =>
            {
                appInfoList.Add(new ApplicationInfo(appId));
                return(true);
            };

            IntPtr packageInfoHandle;

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoCreate(Id, out packageInfoHandle);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to create native handle for package info of {0}. err = {1}", Id, err));
            }

            err = Interop.Package.PackageInfoForeachAppInfo(packageInfoHandle, (Interop.Package.AppType)type, cb, IntPtr.Zero);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to application info of {0}. err = {1}", Id, err));
            }

            err = Interop.Package.PackageInfoDestroy(packageInfoHandle);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to destroy native handle for package info of {0}. err = {1}", Id, err));
            }
            return(appInfoList);
        }
Beispiel #3
0
        internal static Package GetPackage(IntPtr packageInfoHandle)
        {
            String packageId;

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoGetPackage(packageInfoHandle, out packageId);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                throw PackageManagerErrorFactory.GetException(err, "Failed to get package id for given package handle.");
            }
            return(CreatePackage(packageInfoHandle, packageId));
        }
Beispiel #4
0
        /// <summary>
        /// Compares the certificate information with the given package ID.
        /// </summary>
        /// <param name="packageId">ID of the package.</param>
        /// <returns>Certificate comparison result.</returns>
        /// <exception cref="ArgumentException">Thrown when a failed input package ID is invalid.</exception>
        /// <exception cref="System.IO.IOException">Thrown when the method failed due to an internal I/O error.</exception>
        /// <since_tizen> 3 </since_tizen>
        public CertCompareResultType CompareCertInfo(string packageId)
        {
            Interop.PackageManager.CertCompareResultType compareResult;
            Interop.PackageManager.ErrorCode             err = Interop.PackageManager.PackageManagerCompareCertInfo(Id, packageId, out compareResult);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                throw PackageManagerErrorFactory.GetException(err, "Failed to compare package cert info");
            }

            return((CertCompareResultType)compareResult);
        }
Beispiel #5
0
        internal static PackageDrm GenerateLicenseRequest(string responseData)
        {
            string requestData;
            string licenseUrl;

            Interop.PackageManager.ErrorCode err = Interop.PackageManager.PackageManagerDrmGenerateLicenseRequest(responseData, out requestData, out licenseUrl);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                throw PackageManagerErrorFactory.GetException(err, "Failed to generate license request");
            }

            PackageDrm packageDrm = CreateDrmRequest(responseData, requestData, licenseUrl);

            return(packageDrm);
        }
Beispiel #6
0
        private static List <PackageDependencyInformation> GetPackageDependencyDependsOn(IntPtr packageInfoHandle)
        {
            List <PackageDependencyInformation> dependencies = new List <PackageDependencyInformation>();

            Interop.Package.PackageInfoDependencyInfoCallback dependencyInfoCb = (from, to, type, requiredVersion, userData) =>
            {
                dependencies.Add(PackageDependencyInformation.GetPackageDependencyInformation(from, to, type, requiredVersion));
                return(true);
            };

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachDependencyInfoDependsOn(packageInfoHandle, dependencyInfoCb, IntPtr.Zero);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to get dependency info. err = {0}", err));
            }
            return(dependencies);
        }
Beispiel #7
0
        private static List <string> GetPackagePrivilegeInformation(IntPtr packageInfoHandle)
        {
            List <string> privileges = new List <string>();

            Interop.Package.PackageInfoPrivilegeInfoCallback privilegeInfoCb = (privilege, userData) =>
            {
                privileges.Add(privilege);
                return(true);
            };

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachPrivilegeInfo(packageInfoHandle, privilegeInfoCb, IntPtr.Zero);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to get privilage info. err = {0}", err));
            }
            return(privileges);
        }
Beispiel #8
0
        internal static Package GetPackage(string packageId)
        {
            IntPtr packageInfoHandle;

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoCreate(packageId, out packageInfoHandle);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                throw PackageManagerErrorFactory.GetException(err, string.Format("Failed to create native handle for package info of {0}", packageId));
            }

            Package package = CreatePackage(packageInfoHandle, packageId);

            err = Interop.Package.PackageInfoDestroy(packageInfoHandle);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to destroy native handle for package info of {0}. err = {1}", packageId, err));
            }
            return(package);
        }
Beispiel #9
0
        internal static IReadOnlyDictionary <CertificateType, PackageCertificate> GetPackageCertificates(IntPtr packageInfoHandle)
        {
            Dictionary <Interop.Package.CertificateType, string> nativeCertificates = new Dictionary <Interop.Package.CertificateType, string>();

            Interop.Package.PackageInfoCertificateInfoCallback certificateInfoCb = (handle, certType, certValue, userData) =>
            {
                if (certValue == null)
                {
                    certValue = string.Empty;
                }
                nativeCertificates.Add(certType, certValue);
                return(true);
            };

            Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachCertificateInfo(packageInfoHandle, certificateInfoCb, IntPtr.Zero);
            if (err != Interop.PackageManager.ErrorCode.None)
            {
                Log.Warn(LogTag, string.Format("Failed to get certificate info. err = {0}", err));
            }

            Dictionary <CertificateType, PackageCertificate> certificates = new Dictionary <CertificateType, PackageCertificate>();
            string authorRootCertificate         = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorRootCertificate);
            string authorIntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorIntermediateCertificate);
            string aurthorSignerCertificate      = GetValue(nativeCertificates, Interop.Package.CertificateType.AuthorSignerCertificate);

            certificates.Add(CertificateType.Author, new PackageCertificate(authorRootCertificate, authorIntermediateCertificate, aurthorSignerCertificate));

            string distRootCertificate         = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorRootCertificate);
            string distIntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorIntermediateCertificate);
            string distSignerCertificate       = GetValue(nativeCertificates, Interop.Package.CertificateType.DistributorSignerCertificate);

            certificates.Add(CertificateType.Distributor, new PackageCertificate(distRootCertificate, distIntermediateCertificate, distSignerCertificate));

            string dist2RootCertificate         = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
            string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2IntermediateCertificate);
            string dist2SignerCertificate       = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2SignerCertificate);

            certificates.Add(CertificateType.Distributor2, new PackageCertificate(dist2RootCertificate, dist2IntermediateCertificate, dist2SignerCertificate));

            return(certificates);
        }