Exemple #1
0
        public PublicFolderSession GetPublicFolderSession(Guid publicFolderMailboxGuid)
        {
            PublicFolderSession result;

            using (this.CheckDisposed("GetPublicFolderSession"))
            {
                ExTraceGlobals.SessionTracer.TraceDebug((long)this.GetHashCode(), "PublicFolderSessionCache.GetPublicFolderContentSession called");
                if (publicFolderMailboxGuid == PublicFolderSession.HierarchyMailboxGuidAlias)
                {
                    publicFolderMailboxGuid = this.GetHierarchyMailboxGuidForUser();
                }
                PublicFolderSession publicFolderSession;
                if (this.openedSessions.TryGetValue(publicFolderMailboxGuid, out publicFolderSession))
                {
                    result = publicFolderSession;
                }
                else
                {
                    lock (this.lockObject)
                    {
                        if (this.openedSessions.TryGetValue(publicFolderMailboxGuid, out publicFolderSession))
                        {
                            return(publicFolderSession);
                        }
                        if (this.openSessionAsAdmin)
                        {
                            publicFolderSession = PublicFolderSession.OpenAsAdmin(this.organizationId, this.connectAsPrincipal, publicFolderMailboxGuid, (this.clientSecurityContext == null) ? null : new WindowsPrincipal(this.clientSecurityContext.Identity), this.cultureInfo, this.clientInfoString, this.budget);
                        }
                        else
                        {
                            publicFolderSession = PublicFolderSession.Open(this.connectAsPrincipal, publicFolderMailboxGuid, this.clientSecurityContext, this.cultureInfo, this.clientInfoString);
                            publicFolderSession.AccountingObject = this.budget;
                        }
                        if (this.timeZone != null)
                        {
                            publicFolderSession.ExTimeZone = this.timeZone;
                        }
                        if (this.firstPublicFolderSession == null)
                        {
                            this.firstPublicFolderSession = publicFolderSession;
                        }
                        this.openedSessions.Add(publicFolderSession.MailboxGuid, publicFolderSession);
                    }
                    result = publicFolderSession;
                }
            }
            return(result);
        }