Пример #1
0
        internal static MailboxData DiscoverPublicFolderTestMailbox(IIdentityParameter identity, IConfigurationSession configurationSession, IRecipientSession recipientSession, ADServerSettings serverSettings, DataAccessHelper.CategorizedGetDataObjectDelegate getDataObject, Task.TaskVerboseLoggingDelegate writeVerbose, Task.ErrorLoggerDelegate writeError)
        {
            if (identity == null)
            {
                Organization orgContainer = configurationSession.GetOrgContainer();
                if (orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid != default(Guid))
                {
                    identity = new MailboxIdParameter(orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid.ToString());
                }
                else
                {
                    writeError(new MigrationPermanentException(Strings.ErrorUnableToFindValidPublicFolderMailbox), ExchangeErrorCategory.Client, null);
                }
            }
            ADUser aduser = RequestTaskHelper.ResolveADUser(recipientSession, recipientSession, serverSettings, identity, new OptionalIdentityData(), null, getDataObject, writeVerbose, writeError, true);

            if (aduser.RecipientTypeDetails != RecipientTypeDetails.PublicFolderMailbox)
            {
                writeError(new MigrationPermanentException(Strings.ErrorNotPublicFolderMailbox(identity.RawIdentity)), ExchangeErrorCategory.Client, null);
            }
            return(MailboxData.CreateFromADUser(aduser));
        }
Пример #2
0
        public override IAsyncResult BeginProxyWebRequest(IService service, MailboxData[] mailboxArray, AsyncCallback callback, object asyncState)
        {
            MailTipsApplication.GetMailTipsTracer.TraceFunction((long)this.traceId, "Entering MailTipsApplication.BeginProxyWebRequest");
            if (Testability.WebServiceCredentials != null)
            {
                service.Credentials = Testability.WebServiceCredentials;
                ServicePointManager.ServerCertificateValidationCallback = ((object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true);
            }
            GetMailTipsType getMailTipsType = new GetMailTipsType();

            getMailTipsType.SendingAs = new EmailAddressType();
            getMailTipsType.SendingAs.EmailAddress = this.sendingAs.AddressString;
            getMailTipsType.SendingAs.RoutingType  = this.sendingAs.Prefix.PrimaryPrefix;
            getMailTipsType.Recipients             = new EmailAddressType[mailboxArray.Length];
            for (int i = 0; i < mailboxArray.Length; i++)
            {
                MailboxData mailboxData = mailboxArray[i];
                getMailTipsType.Recipients[i] = new EmailAddressType();
                getMailTipsType.Recipients[i].EmailAddress = mailboxData.Email.Address;
                getMailTipsType.Recipients[i].RoutingType  = mailboxData.Email.RoutingType;
            }
            getMailTipsType.MailTipsRequested = (MailTipTypes)this.mailTipTypes;
            return(service.BeginGetMailTips(getMailTipsType, callback, asyncState));
        }
 // Token: 0x0600109E RID: 4254 RVA: 0x00061657 File Offset: 0x0005F857
 public GroupMetricsGeneratorTaskContext(MailboxData mailboxData, TimeBasedDatabaseJob job, Queue <TaskQueueItem> taskQueue, AssistantStep step, TaskStatus taskStatus, RunData runData, IList <DirectoryProcessorBaseTask> deferredFinalizeTasks) : base(mailboxData, job, taskQueue, step, taskStatus, runData, deferredFinalizeTasks)
 {
 }
 // Token: 0x060011AB RID: 4523 RVA: 0x000677EE File Offset: 0x000659EE
 public InferenceTrainingTaskContext(MailboxData mailboxData, TimeBasedDatabaseJob job, AssistantStep step, MailboxTrainingState mailboxTrainingState, MailboxTruthLoggingState mailboxTruthLoggingState) : base(mailboxData, job, null)
 {
     base.Step = step;
     this.MailboxTrainingState     = mailboxTrainingState;
     this.MailboxTruthLoggingState = mailboxTruthLoggingState;
 }
Пример #5
0
        private void TestPstImportSubscription(IMigrationDataProvider dataProvider, PSTImportEndpoint endpoint, MailboxData targetMailbox)
        {
            PSTJobItemSubscriptionSettings jobItemSettings = PSTJobItemSubscriptionSettings.CreateFromProperties(this.FilePath);
            PSTImportAccessor pstimportAccessor            = new PSTImportAccessor(dataProvider, null);

            pstimportAccessor.TestCreateSubscription(endpoint, null, jobItemSettings, targetMailbox, "PSTImport");
        }
Пример #6
0
        internal static void VerifyPublicFolderConnection(IMigrationDataProvider dataProvider, PublicFolderEndpoint publicFolderEndpoint, string sourceMailboxLegacyDn, string publicFolderDatabaseServerLegacyDn, MailboxData mailboxData)
        {
            MrsPublicFolderAccessor mrsPublicFolderAccessor = new MrsPublicFolderAccessor(dataProvider, "TestMigrationServerAvailability");

            using (Stream stream = new MemoryStream())
            {
                using (StreamWriter streamWriter = new StreamWriter(stream))
                {
                    streamWriter.WriteLine("\"{0}\",\"{1}\"", "FolderPath", "TargetMailbox");
                    streamWriter.WriteLine("\"\\\",\"{0}\"", mailboxData.Name);
                    streamWriter.Flush();
                    stream.Seek(0L, SeekOrigin.Begin);
                    mrsPublicFolderAccessor.TestCreateSubscription(publicFolderEndpoint, mailboxData, stream);
                }
            }
        }
Пример #7
0
        internal static bool VerifyExchangeOutlookAnywhereConnection(IMigrationDataProvider dataProvider, ExchangeOutlookAnywhereEndpoint outlookAnywhereEndpoint, string emailAddress, string sourceMailboxLegacyDN, MailboxData targetMailbox, bool discoverAdminPrivilege)
        {
            string mailboxDN;

            if (!string.IsNullOrEmpty(sourceMailboxLegacyDN))
            {
                mailboxDN = sourceMailboxLegacyDN;
            }
            else if (!string.IsNullOrEmpty(emailAddress) && (!outlookAnywhereEndpoint.UseAutoDiscover || outlookAnywhereEndpoint.AutodiscoverResponse == null))
            {
                NspiMigrationDataReader nspiDataReader       = outlookAnywhereEndpoint.GetNspiDataReader(null);
                IMigrationDataRow       recipient            = nspiDataReader.GetRecipient(emailAddress);
                NspiMigrationDataRow    nspiMigrationDataRow = recipient as NspiMigrationDataRow;
                if (nspiMigrationDataRow == null)
                {
                    LocalizedString localizedErrorMessage = LocalizedString.Empty;
                    InvalidDataRow  invalidDataRow        = recipient as InvalidDataRow;
                    if (invalidDataRow != null && invalidDataRow.Error != null)
                    {
                        LocalizedString localizedErrorMessage2 = invalidDataRow.Error.LocalizedErrorMessage;
                        localizedErrorMessage = invalidDataRow.Error.LocalizedErrorMessage;
                    }
                    throw new MigrationPermanentException(localizedErrorMessage);
                }
                mailboxDN = nspiMigrationDataRow.Recipient.GetPropertyValue <string>(PropTag.EmailAddress);
            }
            else
            {
                mailboxDN = outlookAnywhereEndpoint.AutodiscoverResponse.MailboxDN;
            }
            ExchangeJobItemSubscriptionSettings subscriptionSettings = ExchangeJobItemSubscriptionSettings.CreateFromProperties(mailboxDN, outlookAnywhereEndpoint.ExchangeServer, outlookAnywhereEndpoint.ExchangeServer, outlookAnywhereEndpoint.RpcProxyServer);
            bool flag = false;

            try
            {
IL_C3:
                MRSMergeRequestAccessor mrsmergeRequestAccessor = new MRSMergeRequestAccessor(dataProvider, null, false);
                mrsmergeRequestAccessor.TestCreateSubscription(outlookAnywhereEndpoint, null, subscriptionSettings, targetMailbox, null, false);
            }
            catch (LocalizedException ex)
            {
                if (discoverAdminPrivilege && !flag && CommonUtils.GetExceptionSide(ex) == ExceptionSide.Source)
                {
                    Exception ex2 = ex;
                    while (ex2.InnerException != null)
                    {
                        ex2 = ex2.InnerException;
                    }
                    if (CommonUtils.ExceptionIs(ex2, new WellKnownException[]
                    {
                        WellKnownException.MapiLogonFailed
                    }))
                    {
                        if (outlookAnywhereEndpoint.MailboxPermission == MigrationMailboxPermission.Admin)
                        {
                            outlookAnywhereEndpoint.MailboxPermission = MigrationMailboxPermission.FullAccess;
                        }
                        else
                        {
                            outlookAnywhereEndpoint.MailboxPermission = MigrationMailboxPermission.Admin;
                        }
                        flag = true;
                        goto IL_C3;
                    }
                }
                throw;
            }
            return(flag);
        }
        /// <summary>
        /// Gets the free/busy status appointment information for User2 (as specified in ptfconfig) through testUserName's account.
        /// </summary>
        /// <param name="testUserName">The user who gets the free/busy status information.</param>
        /// <param name="password">The testUserName's password.</param>
        /// <returns>
        /// <para>"0": means "FreeBusy", which indicates brief information about the appointments on the calendar;</para>
        /// <para>"1": means "Detailed", which indicates detailed information about the appointments on the calendar;</para>
        /// <para>"2": means the appointment free/busy information can't be viewed or error occurs, which indicates the user has no permission to get information about the appointments on the calendar;</para>
        /// </returns>
        public string GetUserFreeBusyStatus(string testUserName, string password)
        {
            // Use the specified user for the web service client authentication
            string domain = Common.GetConfigurationPropertyValue("Domain", this.Site);

            this.availability.Credentials = new NetworkCredential(testUserName, password, domain);

            GetUserAvailabilityRequestType availabilityRequest = new GetUserAvailabilityRequestType();

            SerializableTimeZone timezone = new SerializableTimeZone()
            {
                Bias         = 480,
                StandardTime = new SerializableTimeZoneTime()
                {
                    Bias = 0, Time = "02:00:00", DayOrder = 5, Month = 10, DayOfWeek = "Sunday"
                },
                DaylightTime = new SerializableTimeZoneTime()
                {
                    Bias = -60, Time = "02:00:00", DayOrder = 1, Month = 4, DayOfWeek = "Sunday"
                }
            };

            availabilityRequest.TimeZone = timezone;

            // Specifies the mailbox to query for availability information.
            string       user         = Common.GetConfigurationPropertyValue("User2Name", this.Site);
            EmailAddress emailAddress = new EmailAddress()
            {
                Address = string.IsNullOrEmpty(user) ? string.Empty : user + "@" + domain
            };

            MailboxData mailboxData = new MailboxData()
            {
                Email        = emailAddress,
                AttendeeType = MeetingAttendeeType.Organizer,
            };

            availabilityRequest.MailboxDataArray = new MailboxData[] { mailboxData };

            // Identify the time to compare free/busy information.
            FreeBusyViewOptionsType freeBusyViewOptions = new FreeBusyViewOptionsType()
            {
                TimeWindow = new Duration()
                {
                    StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(3)
                },
                RequestedView          = FreeBusyViewType.Detailed,
                RequestedViewSpecified = true
            };

            availabilityRequest.FreeBusyViewOptions = freeBusyViewOptions;

            GetUserAvailabilityResponseType availabilityInfo = null;

            try
            {
                availabilityInfo = this.availability.GetUserAvailability(availabilityRequest);
            }
            catch (SoapException exception)
            {
                Site.Assert.Fail("Error occurs when getting free/busy status: {0}", exception.Message);
            }

            string freeBusyStatus = "3";

            FreeBusyResponseType[] freeBusyArray = availabilityInfo.FreeBusyResponseArray;
            if (freeBusyArray != null)
            {
                foreach (FreeBusyResponseType freeBusy in freeBusyArray)
                {
                    ResponseClassType responseClass = freeBusy.ResponseMessage.ResponseClass;
                    if (responseClass == ResponseClassType.Success)
                    {
                        // If the response FreeBusyViewType value is FreeBusy or Detailed, the freeBusyStatus is Detailed.
                        // If all the response FreeBusyViewType values are FreeBusy, the freeBusyStatus is FreeBusy;
                        if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.Detailed)
                        {
                            freeBusyStatus = "1";
                        }
                        else if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.FreeBusy)
                        {
                            if (freeBusyStatus != "1")
                            {
                                freeBusyStatus = "0";
                            }
                        }
                    }
                    else if (responseClass == ResponseClassType.Error)
                    {
                        if (freeBusy.ResponseMessage.ResponseCode == ResponseCodeType.ErrorNoFreeBusyAccess)
                        {
                            return("2");
                        }
                        else
                        {
                            Site.Assert.Fail("Error occurs when getting free/busy status. ErrorCode: {0}; ErrorMessage: {1}.", freeBusy.ResponseMessage.ResponseCode, freeBusy.ResponseMessage.MessageText);
                        }
                    }
                }
            }

            return(freeBusyStatus);
        }
Пример #9
0
        public static List <CalendarObject> GetCalendarData(DateTime lookupDate)
        {
            List <CalendarObject> calendarObjects = new List <CalendarObject>();

            //umdemo.dnsalias.com explicit credentials
            ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();

            ICredentials creds = new NetworkCredential(user, password, "um.test.com");

            exchangeServer.Credentials = creds;
            exchangeServer.Url         = @"http://um.test.com/ews/exchange.asmx";

            GetUserAvailabilityRequestType request = new GetUserAvailabilityRequestType();

            MailboxData[] mailboxes = new MailboxData[1];
            mailboxes[0] = new MailboxData();

            // Identify the user mailbox to review their Free/Busy data
            EmailAddress emailAddress = new EmailAddress();

            emailAddress.Address = "*****@*****.**";

            emailAddress.Name = String.Empty;

            mailboxes[0].Email = emailAddress;

            request.MailboxDataArray = mailboxes;

            //Set TimeZone
            request.TimeZone                        = new SerializableTimeZone();
            request.TimeZone.Bias                   = 480;
            request.TimeZone.StandardTime           = new SerializableTimeZoneTime();
            request.TimeZone.StandardTime.Bias      = 0;
            request.TimeZone.StandardTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
            request.TimeZone.StandardTime.DayOrder  = 1;
            request.TimeZone.StandardTime.Month     = 11;
            request.TimeZone.StandardTime.Time      = "02:00:00";
            request.TimeZone.DaylightTime           = new SerializableTimeZoneTime();
            request.TimeZone.DaylightTime.Bias      = -60;
            request.TimeZone.DaylightTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
            request.TimeZone.DaylightTime.DayOrder  = 2;
            request.TimeZone.DaylightTime.Month     = 3;
            request.TimeZone.DaylightTime.Time      = "02:00:00";


            // Identify the time to compare if the user is Free/Busy
            Duration duration = new Duration();

            duration.StartTime = lookupDate;
            duration.EndTime   = lookupDate.AddDays(1);

            // Identify the options for comparing F/B
            FreeBusyViewOptionsType viewOptions = new FreeBusyViewOptionsType();

            viewOptions.TimeWindow = duration;

            viewOptions.RequestedView          = FreeBusyViewType.Detailed;
            viewOptions.RequestedViewSpecified = true;


            request.FreeBusyViewOptions = viewOptions;

            GetUserAvailabilityResponseType response = exchangeServer.GetUserAvailability(request);

            foreach (FreeBusyResponseType responseType in response.FreeBusyResponseArray)
            {
                if (responseType.FreeBusyView.CalendarEventArray.Length > 0)
                {
                    foreach (CalendarEvent calendar in responseType.FreeBusyView.CalendarEventArray)
                    {
                        CalendarObject calendarObject = new CalendarObject();

                        calendarObject.Location  = calendar.CalendarEventDetails.Location;
                        calendarObject.Subject   = calendar.CalendarEventDetails.Subject;
                        calendarObject.StartDate = calendar.StartTime;
                        calendarObject.EndDate   = calendar.EndTime;
                        calendarObject.IsMeeting = calendar.CalendarEventDetails.IsMeeting;

                        calendarObjects.Add(calendarObject);
                    }
                }
            }

            return(calendarObjects);
        }
Пример #10
0
 // Token: 0x0600146F RID: 5231 RVA: 0x0007618F File Offset: 0x0007438F
 public InferenceDataCollectionTaskContext(MailboxData mailboxData, TimeBasedDatabaseJob job, AssistantStep step, IMailboxProcessingState mailboxProcessingState) : base(mailboxData, job, null)
 {
     base.Step = step;
     this.MailboxProcessingState = mailboxProcessingState;
 }
 // Token: 0x060000E0 RID: 224 RVA: 0x0000574C File Offset: 0x0000394C
 public virtual AssistantTaskContext InitializeContext(MailboxData mailbox, TimeBasedDatabaseJob job)
 {
     return(new AssistantTaskContext(mailbox, job, null));
 }
 // Token: 0x060015A2 RID: 5538 RVA: 0x0007A827 File Offset: 0x00078A27
 public override AssistantTaskContext InitializeContext(MailboxData data, TimeBasedDatabaseJob job)
 {
     this.TraceDebugExecuting(ExTraceGlobals.ProbeTimeBasedAssistantTracer.IsTraceEnabled(TraceType.DebugTrace) ? MethodBase.GetCurrentMethod().Name : string.Empty);
     return(base.InitializeContext(data, job));
 }
Пример #13
0
        protected override void InternalValidate()
        {
            base.InternalValidate();
            bool          flag         = false;
            MigrationType endpointType = this.DataObject.EndpointType;

            if (endpointType <= MigrationType.ExchangeOutlookAnywhere)
            {
                if (endpointType == MigrationType.IMAP)
                {
                    this.WriteParameterErrorIfSet("Credentials");
                    this.WriteParameterErrorIfSet("MailboxPermission");
                    this.WriteParameterErrorIfSet("ExchangeServer");
                    this.WriteParameterErrorIfSet("RPCProxyServer");
                    this.WriteParameterErrorIfSet("NspiServer");
                    this.WriteParameterErrorIfSet("PublicFolderDatabaseServerLegacyDN");
                    this.WriteParameterErrorIfSet("TestMailbox", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("SourceMailboxLegacyDN", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("EmailAddress", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    goto IL_2B4;
                }
                if (endpointType == MigrationType.ExchangeOutlookAnywhere)
                {
                    this.WriteParameterErrorIfSet("Port");
                    this.WriteParameterErrorIfSet("Security");
                    this.WriteParameterErrorIfSet("PublicFolderDatabaseServerLegacyDN");
                    goto IL_2B4;
                }
            }
            else
            {
                if (endpointType == MigrationType.ExchangeRemoteMove)
                {
                    this.WriteParameterErrorIfSet("ExchangeServer");
                    this.WriteParameterErrorIfSet("RPCProxyServer");
                    this.WriteParameterErrorIfSet("Port");
                    this.WriteParameterErrorIfSet("MailboxPermission");
                    this.WriteParameterErrorIfSet("Authentication");
                    this.WriteParameterErrorIfSet("Security");
                    this.WriteParameterErrorIfSet("NspiServer");
                    this.WriteParameterErrorIfSet("PublicFolderDatabaseServerLegacyDN");
                    this.WriteParameterErrorIfSet("TestMailbox", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("SourceMailboxLegacyDN", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("EmailAddress", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    goto IL_2B4;
                }
                if (endpointType == MigrationType.PSTImport)
                {
                    this.WriteParameterErrorIfSet("ExchangeServer");
                    this.WriteParameterErrorIfSet("RPCProxyServer");
                    this.WriteParameterErrorIfSet("Port");
                    this.WriteParameterErrorIfSet("MailboxPermission");
                    this.WriteParameterErrorIfSet("Authentication");
                    this.WriteParameterErrorIfSet("Security");
                    this.WriteParameterErrorIfSet("NspiServer");
                    this.WriteParameterErrorIfSet("PublicFolderDatabaseServerLegacyDN");
                    this.WriteParameterErrorIfSet("TestMailbox", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("SourceMailboxLegacyDN", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    this.WriteParameterErrorIfSet("EmailAddress", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    goto IL_2B4;
                }
                if (endpointType == MigrationType.PublicFolder)
                {
                    this.WriteParameterErrorIfSet("RemoteServer");
                    this.WriteParameterErrorIfSet("ExchangeServer");
                    this.WriteParameterErrorIfSet("Port");
                    this.WriteParameterErrorIfSet("MailboxPermission");
                    this.WriteParameterErrorIfSet("Security");
                    this.WriteParameterErrorIfSet("NspiServer");
                    this.WriteParameterErrorIfSet("EmailAddress", new LocalizedString?(Strings.ErrorInvalidEndpointParameterReasonUsedForConnectionTest));
                    goto IL_2B4;
                }
            }
            base.WriteError(new InvalidEndpointTypeException(this.Identity.RawIdentity, this.DataObject.EndpointType.ToString()));
IL_2B4:
            if (base.IsFieldSet("MaxConcurrentMigrations") || base.IsFieldSet("MaxConcurrentIncrementalSyncs"))
            {
                Unlimited <int> unlimited  = base.IsFieldSet("MaxConcurrentMigrations") ? this.MaxConcurrentMigrations : this.DataObject.MaxConcurrentMigrations;
                Unlimited <int> unlimited2 = base.IsFieldSet("MaxConcurrentIncrementalSyncs") ? this.MaxConcurrentIncrementalSyncs : this.DataObject.MaxConcurrentIncrementalSyncs;
                if (unlimited2 > unlimited)
                {
                    base.WriteError(new MigrationMaxConcurrentIncrementalSyncsVerificationFailedException(unlimited2, unlimited));
                }
            }
            if (base.IsFieldSet("MaxConcurrentMigrations") && !this.MaxConcurrentMigrations.Equals(this.DataObject.MaxConcurrentMigrations))
            {
                this.DataObject.MaxConcurrentMigrations = this.MaxConcurrentMigrations;
                this.changed = true;
            }
            if (base.IsFieldSet("MaxConcurrentIncrementalSyncs") && !this.MaxConcurrentIncrementalSyncs.Equals(this.DataObject.MaxConcurrentIncrementalSyncs))
            {
                this.DataObject.MaxConcurrentIncrementalSyncs = this.MaxConcurrentIncrementalSyncs;
                this.changed = true;
            }
            if (base.IsFieldSet("Credentials") && (this.Credentials == null || !this.Credentials.Equals(this.DataObject.Credentials)))
            {
                this.DataObject.Credentials = this.Credentials;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("MailboxPermission") && this.MailboxPermission != this.DataObject.MailboxPermission)
            {
                this.DataObject.MailboxPermission = this.MailboxPermission;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("ExchangeServer") && !this.ExchangeServer.Equals(this.DataObject.ExchangeServer))
            {
                this.DataObject.ExchangeServer = this.ExchangeServer;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("RPCProxyServer") && !this.RpcProxyServer.Equals(this.DataObject.RpcProxyServer))
            {
                this.DataObject.RpcProxyServer = this.RpcProxyServer;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("Port") && !this.Port.Equals(this.DataObject.Port))
            {
                this.DataObject.Port = new int?(this.Port);
                this.changed         = true;
                flag = true;
            }
            if (base.IsFieldSet("Authentication") && !this.Authentication.Equals(this.DataObject.Authentication))
            {
                this.DataObject.Authentication = new AuthenticationMethod?(this.Authentication);
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("Security") && !this.Security.Equals(this.DataObject.Security))
            {
                this.DataObject.Security = new IMAPSecurityMechanism?(this.Security);
                this.changed             = true;
                flag = true;
            }
            if (base.IsFieldSet("RemoteServer") && !this.RemoteServer.Equals(this.DataObject.RemoteServer))
            {
                this.DataObject.RemoteServer = this.RemoteServer;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("NspiServer") && !this.NspiServer.Equals(this.DataObject.NspiServer))
            {
                this.DataObject.NspiServer = this.NspiServer;
                this.changed = true;
                flag         = true;
            }
            if (this.DataObject.EndpointType == MigrationType.PublicFolder && base.IsFieldSet("SourceMailboxLegacyDN") && !this.SourceMailboxLegacyDN.Equals(this.DataObject.SourceMailboxLegacyDN))
            {
                if (!LegacyDN.IsValidLegacyDN(this.SourceMailboxLegacyDN))
                {
                    base.WriteError(new InvalidLegacyExchangeDnValueException("SourceMailboxLegacyDN"));
                }
                this.DataObject.SourceMailboxLegacyDN = this.SourceMailboxLegacyDN;
                this.changed = true;
                flag         = true;
            }
            if (base.IsFieldSet("PublicFolderDatabaseServerLegacyDN") && !this.PublicFolderDatabaseServerLegacyDN.Equals(this.DataObject.PublicFolderDatabaseServerLegacyDN))
            {
                if (!LegacyDN.IsValidLegacyDN(this.PublicFolderDatabaseServerLegacyDN))
                {
                    base.WriteError(new InvalidLegacyExchangeDnValueException("PublicFolderDatabaseServerLegacyDN"));
                }
                this.DataObject.PublicFolderDatabaseServerLegacyDN = this.PublicFolderDatabaseServerLegacyDN;
                this.changed = true;
                flag         = true;
            }
            if (flag)
            {
                this.DataObject.LastModifiedTime = (DateTime)ExDateTime.UtcNow;
            }
            if (!this.SkipVerification)
            {
                MigrationEndpointBase migrationEndpointBase = MigrationEndpointBase.CreateFrom(this.DataObject);
                migrationEndpointBase.VerifyConnectivity();
                if (this.DataObject.EndpointType == MigrationType.ExchangeOutlookAnywhere)
                {
                    ExchangeOutlookAnywhereEndpoint exchangeOutlookAnywhereEndpoint = (ExchangeOutlookAnywhereEndpoint)migrationEndpointBase;
                    if (!string.IsNullOrEmpty(this.SourceMailboxLegacyDN) || this.EmailAddress != SmtpAddress.Empty || !string.IsNullOrEmpty(exchangeOutlookAnywhereEndpoint.EmailAddress))
                    {
                        MailboxData targetMailbox = TestMigrationServerAvailability.DiscoverTestMailbox(this.TestMailbox, ((MigrationADProvider)this.DataProvider.ADProvider).RecipientSession, base.ServerSettings, new DataAccessHelper.CategorizedGetDataObjectDelegate(base.GetDataObject <ADUser>), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerDelegate(base.WriteError));
                        string      text          = (string)this.EmailAddress;
                        if (string.IsNullOrEmpty(text))
                        {
                            text = exchangeOutlookAnywhereEndpoint.EmailAddress;
                        }
                        TestMigrationServerAvailability.VerifyExchangeOutlookAnywhereConnection(this.DataProvider, exchangeOutlookAnywhereEndpoint, text, this.SourceMailboxLegacyDN, targetMailbox, false);
                        return;
                    }
                }
                else if (this.DataObject.EndpointType == MigrationType.PublicFolder)
                {
                    MailboxData mailboxData = TestMigrationServerAvailability.DiscoverPublicFolderTestMailbox(this.TestMailbox, this.ConfigurationSession, ((MigrationADProvider)this.DataProvider.ADProvider).RecipientSession, base.ServerSettings, new DataAccessHelper.CategorizedGetDataObjectDelegate(base.GetDataObject <ADUser>), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerDelegate(base.WriteError));
                    TestMigrationServerAvailability.VerifyPublicFolderConnection(this.DataProvider, (PublicFolderEndpoint)migrationEndpointBase, this.SourceMailboxLegacyDN, this.PublicFolderDatabaseServerLegacyDN, mailboxData);
                }
            }
        }
 // Token: 0x060012A6 RID: 4774 RVA: 0x0006CF0B File Offset: 0x0006B10B
 private OABGeneratorTaskContext(MailboxData mailboxData, TimeBasedDatabaseJob job) : base(mailboxData, job, null)
 {
     this.returnStep = new Stack <AssistantStep>(5);
 }
        // Token: 0x0600310C RID: 12556 RVA: 0x0012096C File Offset: 0x0011EB6C
        public static void RenderSuggestions(TextWriter output, Suggestion[] meetingSuggestions, MailboxData[] mailboxDataArray, SchedulingRecipientInfo[] schedulingRecipientInfos, UserContext userContext)
        {
            ExTraceGlobals.CalendarCallTracer.TraceDebug(0L, "SchedulingTabRenderingUtilities.RenderSuggestions");
            UserOptions userOptions = UserContextManager.GetUserContext().UserOptions;

            foreach (Suggestion suggestion in meetingSuggestions)
            {
                int[]         array          = new int[suggestion.AvailableRoomsCount];
                int           num            = 0;
                int           num2           = suggestion.RequiredAttendeeCount - suggestion.RequiredAttendeeConflictCount;
                int           num3           = suggestion.OptionalAttendeeCount - suggestion.OptionalAttendeeConflictCount;
                StringBuilder stringBuilder  = new StringBuilder();
                StringBuilder stringBuilder2 = new StringBuilder();
                StringBuilder stringBuilder3 = new StringBuilder();
                StringBuilder stringBuilder4 = new StringBuilder();
                int           j = 0;
                while (j < mailboxDataArray.Length)
                {
                    AttendeeConflictData attendeeConflictData = suggestion.AttendeeConflictDataArray[j];
                    MeetingAttendeeType  meetingAttendeeType  = MeetingAttendeeType.Required;
                    StringBuilder        stringBuilder5       = null;
                    string value = string.Empty;
                    if (attendeeConflictData is IndividualAttendeeConflictData)
                    {
                        IndividualAttendeeConflictData individualAttendeeConflictData = (IndividualAttendeeConflictData)attendeeConflictData;
                        if (individualAttendeeConflictData.Attendee.AttendeeType == MeetingAttendeeType.Room && !individualAttendeeConflictData.AttendeeHasConflict)
                        {
                            array[num++] = j;
                        }
                        else
                        {
                            if (individualAttendeeConflictData.AttendeeHasConflict)
                            {
                                meetingAttendeeType = individualAttendeeConflictData.Attendee.AttendeeType;
                                value = schedulingRecipientInfos[j].DisplayName;
                                goto IL_1F5;
                            }
                            if (individualAttendeeConflictData.IsMissingFreeBusyData)
                            {
                                stringBuilder5 = stringBuilder4;
                                value          = schedulingRecipientInfos[j].DisplayName;
                                goto IL_1F5;
                            }
                        }
                    }
                    else
                    {
                        if (attendeeConflictData is UnknownAttendeeConflictData)
                        {
                            stringBuilder5 = stringBuilder4;
                            value          = schedulingRecipientInfos[j].DisplayName;
                            goto IL_1F5;
                        }
                        if (attendeeConflictData is TooBigGroupAttendeeConflictData)
                        {
                            stringBuilder5 = stringBuilder4;
                            value          = schedulingRecipientInfos[j].DisplayName;
                            goto IL_1F5;
                        }
                        if (attendeeConflictData is GroupAttendeeConflictData)
                        {
                            GroupAttendeeConflictData groupAttendeeConflictData = (GroupAttendeeConflictData)attendeeConflictData;
                            if (0 < groupAttendeeConflictData.NumberOfMembersWithNoData)
                            {
                                if (0 < stringBuilder4.Length)
                                {
                                    stringBuilder4.Append(", ");
                                }
                                stringBuilder4.AppendFormat(LocalizedStrings.GetNonEncoded(-1170293090), schedulingRecipientInfos[j].DisplayName, groupAttendeeConflictData.NumberOfMembersWithNoData);
                            }
                            if (groupAttendeeConflictData.NumberOfMembersWithConflict != 0)
                            {
                                MailboxData mailboxData = mailboxDataArray[j];
                                meetingAttendeeType = mailboxData.AttendeeType;
                                value = string.Format(LocalizedStrings.GetNonEncoded(-1505134519), schedulingRecipientInfos[j].DisplayName, groupAttendeeConflictData.NumberOfMembersWithConflict, groupAttendeeConflictData.NumberOfMembers);
                                goto IL_1F5;
                            }
                        }
                    }
IL_24B:
                    j++;
                    continue;
IL_1F5:
                    if (stringBuilder5 == null)
                    {
                        switch (meetingAttendeeType)
                        {
                        case MeetingAttendeeType.Organizer:
                        case MeetingAttendeeType.Required:
                            stringBuilder5 = stringBuilder;
                            break;

                        case MeetingAttendeeType.Optional:
                            stringBuilder5 = stringBuilder2;
                            break;

                        case MeetingAttendeeType.Room:
                        case MeetingAttendeeType.Resource:
                            stringBuilder5 = stringBuilder3;
                            break;
                        }
                    }
                    if (0 < stringBuilder5.Length)
                    {
                        stringBuilder5.Append(", ");
                    }
                    stringBuilder5.Append(value);
                    goto IL_24B;
                }
                output.Write("<div class=\"sug\" st=");
                output.Write(suggestion.MeetingTime.TimeOfDay.TotalMinutes);
                output.Write(" title=\"");
                if (0 < suggestion.RequiredAttendeeConflictCount || 0 < suggestion.OptionalAttendeeConflictCount || 0 < suggestion.ResourceAttendeeConflictCount)
                {
                    output.Write(LocalizedStrings.GetHtmlEncoded(-1917590199));
                    if (0 < stringBuilder.Length)
                    {
                        output.Write("\n");
                        output.Write(LocalizedStrings.GetHtmlEncoded(-1709254790));
                        output.Write(" ");
                        Utilities.HtmlEncode(stringBuilder.ToString(), output);
                    }
                    if (0 < stringBuilder2.Length)
                    {
                        output.Write("\n");
                        output.Write(LocalizedStrings.GetHtmlEncoded(-98673561));
                        output.Write(" ");
                        Utilities.HtmlEncode(stringBuilder2.ToString(), output);
                    }
                    if (0 < stringBuilder3.Length)
                    {
                        output.Write("\n");
                        output.Write(LocalizedStrings.GetHtmlEncoded(-294537986));
                        output.Write(" ");
                        Utilities.HtmlEncode(stringBuilder3.ToString(), output);
                    }
                    if (0 < stringBuilder4.Length)
                    {
                        output.Write("\n");
                        output.Write(LocalizedStrings.GetHtmlEncoded(608956012));
                        output.Write(" ");
                        Utilities.HtmlEncode(stringBuilder4.ToString(), output);
                    }
                }
                output.Write("\">");
                output.Write("<div class=\"");
                output.Write(SchedulingTabRenderingUtilities.SuggestionQualityStyles[(int)suggestion.SuggestionQuality]);
                output.Write("\"></div><div class=\"suggestDetail\">");
                output.Write("<div class=\"when\"><span>");
                output.Write(suggestion.MeetingTime.ToString(userOptions.TimeFormat));
                if (0 < suggestion.RoomCount)
                {
                    output.Write(" - ");
                    output.Write((suggestion.RoomCount == 1) ? LocalizedStrings.GetHtmlEncoded(-1595764264) : LocalizedStrings.GetHtmlEncoded(-1962164027), suggestion.AvailableRoomsCount);
                }
                output.Write("</span></div>");
                output.Write("<div class=\"atndcnt\">");
                if (0 < suggestion.RequiredAttendeeCount)
                {
                    output.Write("<span nowrap>");
                    userContext.RenderThemeImage(output, ThemeFileId.RequiredAttendee);
                    output.Write(LocalizedStrings.GetHtmlEncoded(1026164821), num2, suggestion.RequiredAttendeeCount);
                    output.Write("</span>");
                }
                if (0 < suggestion.OptionalAttendeeCount)
                {
                    output.Write(" <span nowrap>");
                    userContext.RenderThemeImage(output, ThemeFileId.OptionalAttendee);
                    output.Write(LocalizedStrings.GetHtmlEncoded(1026164821), num3, suggestion.OptionalAttendeeCount);
                    output.Write("</span>");
                }
                output.Write("</div>");
                if (0 < suggestion.AvailableRoomsCount)
                {
                    output.Write("<div id=rooms style=\"display:none\">");
                    foreach (int num4 in array)
                    {
                        output.Write("<div nowrap rm=\"");
                        Utilities.HtmlEncode(schedulingRecipientInfos[num4].ID, output);
                        output.Write("\">");
                        Utilities.HtmlEncode(schedulingRecipientInfos[num4].DisplayName, output);
                        output.Write("</div>");
                    }
                    output.Write("</div>");
                }
                output.Write("</div></div>");
            }
        }