// Token: 0x06000BED RID: 3053 RVA: 0x00031178 File Offset: 0x0002F378
        internal bool CacheSatisfiesRequest(UpdateRequestAsset requestAsset, List <ExtensionData> updates)
        {
            bool result = false;
            ExtensionsCacheEntry extensionsCacheEntry = null;

            if (this.extensionsCache.TryGetEntry(requestAsset.MarketplaceAssetID, out extensionsCacheEntry) && requestAsset.Version <= extensionsCacheEntry.Version && extensionsCacheEntry.Manifest != null)
            {
                if (requestAsset.ExtensionID != extensionsCacheEntry.ExtensionID)
                {
                    GetUpdates.Tracer.TraceError <string, string, string>(0L, "GetUpdates.CacheSatisfiesRequest: Asset {0} extension ID {1} does not match the cache entry {2}", requestAsset.MarketplaceAssetID, requestAsset.ExtensionID, extensionsCacheEntry.ExtensionID);
                    ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MismatchedCacheMailboxExtensionId, requestAsset.MarketplaceAssetID, new object[]
                    {
                        "ProcessUpdates",
                        this.GetLoggedMailboxIdentifier(),
                        requestAsset.MarketplaceAssetID,
                        requestAsset.ExtensionID,
                        extensionsCacheEntry.ExtensionID
                    });
                    result = true;
                }
                else if (requestAsset.Version == extensionsCacheEntry.Version)
                {
                    GetUpdates.Tracer.TraceDebug <string>(0L, "GetUpdates.CacheSatisfiesRequest: Asset {0} version matches the cache entry", requestAsset.MarketplaceAssetID);
                    result = true;
                }
                else if (requestAsset.Version < extensionsCacheEntry.Version && extensionsCacheEntry.Manifest != null)
                {
                    if (ExtensionData.CompareCapabilities(extensionsCacheEntry.RequestedCapabilities.Value, requestAsset.RequestedCapabilities) > 0)
                    {
                        GetUpdates.Tracer.TraceDebug <string, RequestedCapabilities, RequestedCapabilities>(0L, "GetUpdates.CacheSatisfiesRequest: Asset cache entry requires more capabilities than installed asset.  Asset ID: {0} Update: {1} Installed: {2}", requestAsset.MarketplaceAssetID, extensionsCacheEntry.RequestedCapabilities.Value, requestAsset.RequestedCapabilities);
                        ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MoreCapabilitiesSkipUpdate, requestAsset.MarketplaceAssetID, new object[]
                        {
                            "ProcessUpdates",
                            this.GetLoggedMailboxIdentifier(),
                            requestAsset.MarketplaceAssetID,
                            requestAsset.RequestedCapabilities,
                            extensionsCacheEntry.RequestedCapabilities.Value
                        });
                        result = true;
                    }
                    else if (!GetUpdates.IsValidUpdateState(new OmexConstants.AppState?(extensionsCacheEntry.State)))
                    {
                        GetUpdates.Tracer.TraceDebug <string, OmexConstants.AppState>(0L, "GetUpdates.CacheSatisfiesRequest: Asset {0} cache entry AppState {1} is not valid for updates", requestAsset.MarketplaceAssetID, extensionsCacheEntry.State);
                        ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_InvalidStateSkipUpdate, requestAsset.MarketplaceAssetID, new object[]
                        {
                            "ProcessUpdates",
                            this.GetLoggedMailboxIdentifier(),
                            requestAsset.MarketplaceAssetID,
                            extensionsCacheEntry.State
                        });
                        result = true;
                    }
                    else
                    {
                        GetUpdates.Tracer.TraceDebug <string>(0L, "GetUpdates.CacheSatisfiesRequest: Asset {0} will be updated from the cache", requestAsset.MarketplaceAssetID);
                        ExtensionData updatedExtension = null;
                        Exception     ex = InstalledExtensionTable.RunClientExtensionAction(delegate
                        {
                            updatedExtension = ExtensionData.ParseOsfManifest(extensionsCacheEntry.Manifest, extensionsCacheEntry.Manifest.Length, requestAsset.MarketplaceAssetID, requestAsset.MarketplaceContentMarket, ExtensionType.MarketPlace, requestAsset.Scope, requestAsset.Enabled, requestAsset.DisableReason, string.Empty, requestAsset.Etoken);
                        });
                        if (ex == null)
                        {
                            updates.Add(updatedExtension);
                            result = true;
                        }
                        else
                        {
                            GetUpdates.Tracer.TraceError <string, Exception>(0L, "GetUpdates.CacheSatisfiesRequest: Parse of manifest failed for extension {0}. Exception: {1}", requestAsset.MarketplaceAssetID, ex);
                            ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_CachedManifestParseFailed, requestAsset.MarketplaceAssetID, new object[]
                            {
                                "ProcessUpdates",
                                requestAsset.MarketplaceAssetID,
                                ExtensionDiagnostics.GetLoggedExceptionString(ex)
                            });
                        }
                    }
                }
            }
            return(result);
        }
        // Token: 0x06000BF4 RID: 3060 RVA: 0x00031770 File Offset: 0x0002F970
        internal bool IsValidUpdate(ExtensionData extensionData, Uri downloadAppUri, out UpdateRequestAsset requestAsset)
        {
            bool flag  = false;
            bool flag2 = false;
            UpdateRequestAsset updateRequestAsset = null;

            if (!this.updateRequestAssets.TryGetValue(extensionData.MarketplaceAssetID, out updateRequestAsset))
            {
                GetUpdates.Tracer.TraceError <string, string>(0L, "GetUpdates.IsValidUpdate: Asset returned in AppState response will not be downloaded. Asset ID does not match any value requested.  Response Asset ID: {0} Response Extension ID: {1}", extensionData.MarketplaceAssetID, extensionData.ExtensionId);
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_InvalidAssetIDReturnedInDownload, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.MarketplaceAssetID,
                    downloadAppUri
                });
            }
            else if (extensionData.ExtensionId != updateRequestAsset.ExtensionID)
            {
                GetUpdates.Tracer.TraceError <string, string, string>(0L, "GetUpdates.IsValidUpdate: Asset returned in download response will not be installed. Extension ID does not match expected value.  Asset ID: {0} Response: {1} Expected: {2}", extensionData.MarketplaceAssetID, extensionData.ExtensionId, updateRequestAsset.ExtensionID);
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MismatchedExtensionIDReturnedInDownload, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.MarketplaceAssetID,
                    downloadAppUri,
                    updateRequestAsset.ExtensionID,
                    extensionData.ExtensionId
                });
            }
            else if (extensionData.Version == null || extensionData.Version <= updateRequestAsset.Version)
            {
                GetUpdates.Tracer.TraceError <string, string, Version>(0L, "GetUpdates.IsValidUpdate: Asset returned in download response will not be installed. Version is not newer.  Asset ID: {0} Response: {1} Request: {2}", extensionData.MarketplaceAssetID, extensionData.VersionAsString, updateRequestAsset.Version);
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_OldVersionReturnedInDownload, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.MarketplaceAssetID,
                    downloadAppUri,
                    updateRequestAsset.Version,
                    extensionData.VersionAsString
                });
            }
            else if (ExtensionData.CompareCapabilities(extensionData.RequestedCapabilities.Value, updateRequestAsset.RequestedCapabilities) > 0)
            {
                GetUpdates.Tracer.TraceError <string, RequestedCapabilities?, RequestedCapabilities>(0L, "GetUpdates.IsValidUpdate: Asset update requires more capabilities than installed asset.  Asset ID: {0} Update: {1} Installed: {2}", extensionData.MarketplaceAssetID, extensionData.RequestedCapabilities, updateRequestAsset.RequestedCapabilities);
                flag2 = true;
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MoreCapabilitiesReturnedInDownload, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.MarketplaceAssetID,
                    downloadAppUri,
                    updateRequestAsset.RequestedCapabilities,
                    extensionData.RequestedCapabilities.Value
                });
            }
            else if (!InstalledExtensionTable.ValidateAndRemoveManifestSignature(extensionData.Manifest, extensionData.ExtensionId, false))
            {
                GetUpdates.Tracer.TraceError <string>(0L, "GetUpdates.IsValidUpdate: Asset doesn't have valid Signature. Asset ID: {0}.", extensionData.MarketplaceAssetID);
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_InvalidAssetSignatureReturnedInDownload, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.MarketplaceAssetID,
                    downloadAppUri
                });
            }
            else if (!ExtensionData.ValidateManifestSize((long)extensionData.Manifest.OuterXml.Length, false))
            {
                GetUpdates.Tracer.TraceError <string>(0L, "GetUpdates.IsValidUpdate: Asset exceeds the allowed maximum size. Asset ID: {0}.", extensionData.MarketplaceAssetID);
                ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_ManifestExceedsAllowedSize, extensionData.MarketplaceAssetID, new object[]
                {
                    "ProcessUpdates",
                    this.GetLoggedMailboxIdentifier(),
                    extensionData.Manifest.OuterXml.Length,
                    256
                });
            }
            else
            {
                flag = true;
            }
            if (!flag)
            {
                string value = "1.0";
                if (flag2)
                {
                    value = "1.1";
                }
                this.appStatuses[extensionData.ExtensionId] = value;
            }
            requestAsset = (flag ? updateRequestAsset : null);
            return(flag);
        }
Beispiel #3
0
        internal bool TryGetExtensionUpdate(ExtensionData extensionData, out byte[] manifestBytes)
        {
            manifestBytes = null;
            this.CleanupCache();
            ExtensionsCacheEntry extensionsCacheEntry = null;

            if (this.extensionsDictionary.TryGetValue(extensionData.MarketplaceAssetID, out extensionsCacheEntry))
            {
                if (extensionData.ExtensionId != extensionsCacheEntry.ExtensionID)
                {
                    ExtensionsCache.Tracer.TraceError <string, string, string>(0L, "ExtensionsCache.TryGetExtensionUpdate: Extension {0} ExtensionID property {1} does not match cache entry value {2}.", extensionData.MarketplaceAssetID, extensionData.ExtensionId, extensionsCacheEntry.ExtensionID);
                    ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MismatchedCacheMailboxExtensionId, extensionData.MarketplaceAssetID, new object[]
                    {
                        "ProcessUpdates",
                        extensionData.MarketplaceAssetID,
                        extensionData.ExtensionId,
                        extensionsCacheEntry.ExtensionID
                    });
                }
                else if (extensionData.Version != null && extensionsCacheEntry.RequestedCapabilities != null && extensionsCacheEntry.Manifest != null && extensionData.Version < extensionsCacheEntry.Version && ExtensionData.CompareCapabilities(extensionsCacheEntry.RequestedCapabilities.Value, extensionData.RequestedCapabilities.Value) <= 0 && GetUpdates.IsValidUpdateState(new OmexConstants.AppState?(extensionsCacheEntry.State)))
                {
                    manifestBytes = extensionsCacheEntry.Manifest;
                }
            }
            return(manifestBytes != null);
        }