Beispiel #1
0
 public static void ProcessMoveRequestCreatedNotification(Guid requestGuid, Guid mdbGuid)
 {
     using (RequestJobProvider requestJobProvider = new RequestJobProvider(mdbGuid))
     {
         RequestStatisticsBase moveRequest = (RequestStatisticsBase)requestJobProvider.Read <RequestStatisticsBase>(new RequestJobObjectId(requestGuid, mdbGuid, null));
         if (moveRequest != null && !(moveRequest.ValidationResult != RequestJobBase.ValidationResultEnum.Valid))
         {
             if (moveRequest.RequestStyle == RequestStyle.CrossOrg && moveRequest.RequestType == MRSRequestType.Move)
             {
                 CommonUtils.CatchKnownExceptions(delegate
                 {
                     Guid physicalMailboxGuid            = moveRequest.ArchiveOnly ? (moveRequest.ArchiveGuid ?? Guid.Empty) : moveRequest.ExchangeGuid;
                     ProxyControlFlags proxyControlFlags = ProxyControlFlags.DoNotApplyProxyThrottling | moveRequest.GetProxyControlFlags();
                     IMailbox mailbox;
                     MailboxType mbxType;
                     Guid mdbGuid2;
                     if (moveRequest.Direction == RequestDirection.Pull)
                     {
                         if ((moveRequest.Flags & RequestFlags.RemoteLegacy) != RequestFlags.None)
                         {
                             mailbox = new MapiSourceMailbox(LocalMailboxFlags.None);
                             mailbox.ConfigADConnection(moveRequest.SourceDCName, moveRequest.SourceDCName, moveRequest.SourceCredential);
                         }
                         else
                         {
                             mailbox = new RemoteSourceMailbox(moveRequest.RemoteHostName, moveRequest.RemoteOrgName, moveRequest.RemoteCredential, proxyControlFlags, null, true, LocalMailboxFlags.None);
                         }
                         mbxType  = MailboxType.SourceMailbox;
                         mdbGuid2 = Guid.Empty;
                     }
                     else
                     {
                         if ((moveRequest.Flags & RequestFlags.RemoteLegacy) != RequestFlags.None)
                         {
                             mailbox = new MapiDestinationMailbox(LocalMailboxFlags.None);
                             mailbox.ConfigADConnection(moveRequest.TargetDCName, moveRequest.TargetDCName, moveRequest.TargetCredential);
                         }
                         else
                         {
                             mailbox = new RemoteDestinationMailbox(moveRequest.RemoteHostName, moveRequest.RemoteOrgName, moveRequest.RemoteCredential, proxyControlFlags, null, true, LocalMailboxFlags.None);
                         }
                         mbxType  = MailboxType.DestMailboxCrossOrg;
                         mdbGuid2 = ((moveRequest.ArchiveOnly ? moveRequest.RemoteArchiveDatabaseGuid : moveRequest.RemoteDatabaseGuid) ?? Guid.Empty);
                     }
                     using (mailbox)
                     {
                         mailbox.Config(null, moveRequest.ExchangeGuid, physicalMailboxGuid, null, mdbGuid2, mbxType, null);
                         mailbox.Connect(MailboxConnectFlags.None);
                         mailbox.UpdateRemoteHostName(moveRequest.UserOrgName);
                         mailbox.Disconnect();
                     }
                 }, null);
             }
         }
     }
 }