private SharingMessageItem TryGetOriginalMessage() { byte[] valueOrDefault = base.GetValueOrDefault <byte[]>(SharingMessageItemSchema.SharingOriginalMessageEntryId, null); if (valueOrDefault == null) { ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal>((long)this.GetHashCode(), "{0}: SharingOriginalMessageEntryId was not found", this.MailboxSession.MailboxOwner); return(null); } StoreObjectId storeObjectId = null; try { storeObjectId = StoreObjectId.FromProviderSpecificId(valueOrDefault, StoreObjectType.Message); } catch (CorruptDataException) { ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal>((long)this.GetHashCode(), "{0}: SharingOriginalMessageEntryId is invalid", this.MailboxSession.MailboxOwner); return(null); } SharingMessageItem result; try { result = SharingMessageItem.Bind(this.MailboxSession, storeObjectId); } catch (ObjectNotFoundException) { ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, StoreObjectId>((long)this.GetHashCode(), "{0}: Original sharing request message was not found {1}", this.MailboxSession.MailboxOwner, storeObjectId); result = null; } return(result); }
protected override void OnBeforeSend() { base.CoreItem.SaveRecipients(); CheckRecipientsResults checkRecipientsResults = this.CheckRecipients(); if (checkRecipientsResults.InvalidRecipients != null && checkRecipientsResults.InvalidRecipients.Length > 0) { throw new InvalidSharingRecipientsException(checkRecipientsResults.InvalidRecipients, new RecipientNotSupportedByAnyProviderException()); } this.PerformInvitation(); this.SharingContext.SerializeToMessage(this); this.AddBodyPrefix(this.CreateBodyPrefix()); this.isSending = true; if (this.SharingMessageType.IsResponseToRequest) { SharingMessageItem sharingMessageItem = this.TryGetOriginalMessage(); if (sharingMessageItem != null) { try { SharingResponseType responseTypeFromMessageType = SharingMessageItem.GetResponseTypeFromMessageType(this.SharingMessageType); sharingMessageItem.PostResponded(responseTypeFromMessageType); } finally { sharingMessageItem.Dispose(); } } } this[MessageItemSchema.RecipientReassignmentProhibited] = !this.IsPublishing; base.OnBeforeSend(); }
public static SharingMessageItem CreateWithSpecficProvider(MailboxSession session, StoreId destFolderId, StoreId folderIdToShare, SharingProvider provider, bool force) { if (provider == null) { throw new ArgumentNullException("provider"); } SharingMessageItem sharingMessageItem = SharingMessageItem.InternalCreate(session, destFolderId, folderIdToShare, provider); if (force) { sharingMessageItem.ForceSharingProvider = provider; } return(sharingMessageItem); }
private SharingMessageItem CreateRequestResponseMessage(SharingResponseType responseType, StoreId destFolderId) { if (base.IsDraft) { throw new InvalidOperationException("Cannot response on draft message."); } if (!this.SharingMessageType.IsRequest) { throw new InvalidOperationException("Only can response to a request message."); } StoreId defaultFolderId = this.MailboxSession.GetDefaultFolderId(this.SharedFolderType); SharingMessageItem sharingMessageItem = SharingMessageItem.InternalCreate(this.MailboxSession, destFolderId, defaultFolderId, this.GetTargetSharingProvider()); sharingMessageItem.SharingMessageType = SharingMessageItem.GetMessageTypeFromResponseType(responseType); sharingMessageItem.Recipients.Add(base.From); sharingMessageItem[SharingMessageItemSchema.SharingOriginalMessageEntryId] = HexConverter.HexStringToByteArray(base.StoreObjectId.ToHexEntryId()); sharingMessageItem[InternalSchema.NormalizedSubject] = this[InternalSchema.NormalizedSubject]; sharingMessageItem[InternalSchema.SubjectPrefix] = SharingMessageItem.GetSubjectPrefixFromResponseType(responseType).ToString(this.MailboxSession.InternalPreferedCulture); return(sharingMessageItem); }
private static SharingMessageItem InternalCreate(MailboxSession mailboxSession, StoreId destFolderId, StoreId folderIdToShare, SharingProvider provider) { Util.ThrowOnNullArgument(mailboxSession, "mailboxSession"); Util.ThrowOnNullArgument(destFolderId, "destFolderId"); Util.ThrowOnNullArgument(folderIdToShare, "folderIdToShare"); SharingMessageItem result; using (DisposeGuard disposeGuard = default(DisposeGuard)) { SharingMessageItem sharingMessageItem = ItemBuilder.CreateNewItem <SharingMessageItem>(mailboxSession, destFolderId, ItemCreateInfo.SharingMessageItemInfo, CreateMessageType.Normal); disposeGuard.Add <SharingMessageItem>(sharingMessageItem); sharingMessageItem[InternalSchema.ItemClass] = "IPM.Sharing"; using (Folder folder = Folder.Bind(mailboxSession, folderIdToShare)) { sharingMessageItem.SharingContext = new SharingContext(folder, provider); } disposeGuard.Success(); result = sharingMessageItem; } return(result); }
public new static SharingMessageItem Bind(StoreSession session, StoreId messageId) { return(SharingMessageItem.Bind(session, messageId, null)); }
public static SharingMessageItem CreateForPublishing(MailboxSession session, StoreId destFolderId, StoreId folderIdToShare) { return(SharingMessageItem.InternalCreate(session, destFolderId, folderIdToShare, SharingProvider.SharingProviderPublish)); }
public static SharingMessageItem Create(MailboxSession session, StoreId destFolderId, StoreId folderIdToShare) { return(SharingMessageItem.InternalCreate(session, destFolderId, folderIdToShare, null)); }