internal InvalidSharingRecipientsException(InvalidRecipient[] invalidRecipients, InvalidSharingRecipientsResolution resolution) : base(ServerStrings.InvalidSharingRecipientsException) { this.InvalidRecipients = invalidRecipients; this.InvalidRecipientsResolution = resolution; }
private void PerformInvitation() { Dictionary <SharingProvider, ValidRecipient[]> dictionary = new Dictionary <SharingProvider, ValidRecipient[]>(); List <ValidRecipient> list = new List <ValidRecipient>(); SharingProvider fallbackSharingProvider = this.SharingContext.FallbackSharingProvider; using (FolderPermissionContext current = FolderPermissionContext.GetCurrent(this.MailboxSession, this.SharingContext)) { bool flag = false; try { foreach (KeyValuePair <SharingProvider, CheckRecipientsResults> keyValuePair in this.SharingContext.AvailableSharingProviders) { SharingProvider key = keyValuePair.Key; CheckRecipientsResults value = keyValuePair.Value; if (this.FallbackEnabled && key == fallbackSharingProvider) { if (value != null) { list.AddRange(value.ValidRecipients); } } else if (value != null) { PerformInvitationResults performInvitationResults = key.PerformInvitation(this.MailboxSession, this.SharingContext, value.ValidRecipients, this.FrontEndLocator); ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, SharingProvider, PerformInvitationResults>((long)this.GetHashCode(), "{0}: Performed invitation by provider {1}. Result = {2}", this.MailboxSession.MailboxOwner, key, performInvitationResults); if (performInvitationResults.Result == PerformInvitationResultType.Failed || performInvitationResults.Result == PerformInvitationResultType.PartiallySuccess) { if (!this.FallbackEnabled) { StoreObjectId folderId = this.SharingContext.FolderId; InvalidSharingRecipientsResolution invalidSharingRecipientsResolution; if (!this.CanUseFallback) { invalidSharingRecipientsResolution = new InvalidSharingRecipientsResolution(folderId); } else { using (Folder folder = Folder.Bind(this.MailboxSession, folderId)) { this.SharingContext.PopulateUrls(folder); } invalidSharingRecipientsResolution = new InvalidSharingRecipientsResolution(this.BrowseUrl, this.ICalUrl); } ExTraceGlobals.SharingTracer.TraceError <IExchangePrincipal, InvalidSharingRecipientsResolution>((long)this.GetHashCode(), "{0}: No fall back for these invalid recipients. Resolution = {1}", this.MailboxSession.MailboxOwner, invalidSharingRecipientsResolution); throw new InvalidSharingRecipientsException(performInvitationResults.FailedRecipients, invalidSharingRecipientsResolution); } ValidRecipient[] array = Array.ConvertAll <InvalidRecipient, ValidRecipient>(performInvitationResults.FailedRecipients, (InvalidRecipient invalidRecipient) => new ValidRecipient(invalidRecipient.SmtpAddress, null)); ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, SharingProvider, int>((long)this.GetHashCode(), "{0}: Fall back on provider {1} for these {2} failed recipients.", this.MailboxSession.MailboxOwner, fallbackSharingProvider, array.Length); list.AddRange(array); dictionary.Add(key, performInvitationResults.SucceededRecipients); } } } if (this.FallbackEnabled) { foreach (KeyValuePair <SharingProvider, ValidRecipient[]> keyValuePair2 in dictionary) { SharingProvider key2 = keyValuePair2.Key; ValidRecipient[] value2 = keyValuePair2.Value; this.SharingContext.AvailableSharingProviders[key2] = new CheckRecipientsResults(value2); } this.SharingContext.AvailableSharingProviders[fallbackSharingProvider] = new CheckRecipientsResults(list.ToArray()); PerformInvitationResults performInvitationResults2 = fallbackSharingProvider.PerformInvitation(this.MailboxSession, this.SharingContext, list.ToArray(), this.FrontEndLocator); ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, SharingProvider, PerformInvitationResults>((long)this.GetHashCode(), "{0}: Performed invitation by fallback provider {1}. Result = {2}", this.MailboxSession.MailboxOwner, fallbackSharingProvider, performInvitationResults2); if (performInvitationResults2.Result == PerformInvitationResultType.Failed || performInvitationResults2.Result == PerformInvitationResultType.PartiallySuccess) { throw new InvalidOperationException("The fallback provider should never fail."); } } flag = true; } finally { if (!flag) { current.Disable(); } } } }