protected void HandleFailedDomain(string operationName, EhfDomainItem domain, DomainResponseInfo response, ref int transientFailureCount, ref int permanentFailureCount)
        {
            if (response.Status == ResponseStatus.TransientFailure)
            {
                transientFailureCount++;
            }
            else
            {
                permanentFailureCount++;
            }
            string       responseTargetValuesString = EhfProvisioningService.GetResponseTargetValuesString(response);
            EdgeSyncDiag diagSession   = base.DiagSession;
            string       messageFormat = "Failed to {0}: FaultId={1}; FaultType={2}; FaultDetail={3}; Target={4}; TargetValues=({5}); DN=({6}); Name={7}; AD-GUID=({8}); EHF-GUID=({9}); EHF-Company-ID={10}";

            object[] array = new object[11];
            array[0] = operationName;
            array[1] = response.Fault.Id;
            array[2] = response.Status;
            array[3] = (response.Fault.Detail ?? "null");
            array[4] = response.Target;
            array[5] = responseTargetValuesString;
            array[6] = domain.DistinguishedName;
            array[7] = domain.Name;
            array[8] = domain.GetDomainGuid();
            object[] array2     = array;
            int      num        = 9;
            Guid?    domainGuid = response.DomainGuid;

            array2[num] = ((domainGuid != null) ? domainGuid.GetValueOrDefault() : "null");
            array[10]   = domain.Domain.CompanyId;
            domain.AddSyncError(diagSession.LogAndTraceError(messageFormat, array));
        }
Exemple #2
0
        private void HandleFailedCompany(string operationName, EhfCompanyItem company, CompanyResponseInfo response, ref int transientFailureCount, ref int permanentFailureCount)
        {
            if (response.Status == ResponseStatus.TransientFailure)
            {
                transientFailureCount++;
            }
            else
            {
                permanentFailureCount++;
            }
            string       text = (company.Company != null) ? company.Company.Name : "not available";
            string       responseTargetValuesString = EhfProvisioningService.GetResponseTargetValuesString(response);
            EdgeSyncDiag diagSession   = base.DiagSession;
            string       messageFormat = "Failed to {0}: FaultId={1}; FaultType={2}; FaultDetail={3}; Target={4}; TargetValues=({5}); DN=({6}); AD-Name={7}; EHF-Name={8}; AD-GUID=({9}); EHF-GUID=({10}); EHF-ID={11}";

            object[] array = new object[12];
            array[0] = operationName;
            array[1] = response.Fault.Id;
            array[2] = response.Status;
            array[3] = (response.Fault.Detail ?? "null");
            array[4] = response.Target;
            array[5] = responseTargetValuesString;
            array[6] = company.DistinguishedName;
            array[7] = text;
            array[8] = (response.CompanyName ?? "null");
            array[9] = company.GetCompanyGuid();
            object[] array2      = array;
            int      num         = 10;
            Guid?    companyGuid = response.CompanyGuid;

            array2[num] = ((companyGuid != null) ? companyGuid.GetValueOrDefault() : "null");
            array[11]   = response.CompanyId;
            company.AddSyncError(diagSession.LogAndTraceError(messageFormat, array));
        }
Exemple #3
0
        protected override void InternalProcessRecord()
        {
            ITopologyConfigurationSession session = this.CreateSession();
            EhfTargetServerConfig         config  = Utils.CreateEhfTargetConfig(session, this.ConnectorId, this);

            using (EhfProvisioningService ehfProvisioningService = new EhfProvisioningService(config))
            {
                Exception ex = null;
                try
                {
                    this.InvokeWebService(session, config, ehfProvisioningService);
                }
                catch (FaultException <ServiceFault> faultException)
                {
                    ServiceFault detail = faultException.Detail;
                    if (detail.Id == FaultId.UnableToConnectToDatabase)
                    {
                        ex = new InvalidOperationException("ServiceFault: EHF is unable to connect to its database", faultException);
                    }
                    else
                    {
                        ex = faultException;
                    }
                }
                catch (MessageSecurityException ex2)
                {
                    switch (EhfProvisioningService.DecodeMessageSecurityException(ex2))
                    {
                    case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure:
                        ex = new InvalidOperationException("MessageSecurityException: EHF is unable to connect to its database", ex2.InnerException);
                        goto IL_A4;

                    case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials:
                        ex = new InvalidOperationException("MessageSecurityException: EHF connector contains invalid credentials", ex2.InnerException);
                        goto IL_A4;
                    }
                    ex = ex2;
                    IL_A4 :;
                }
                catch (CommunicationException ex3)
                {
                    ex = ex3;
                }
                catch (TimeoutException ex4)
                {
                    ex = ex4;
                }
                catch (EhfProvisioningService.ContractViolationException ex5)
                {
                    ex = ex5;
                }
                if (ex != null)
                {
                    base.WriteError(ex, ErrorCategory.InvalidOperation, null);
                }
            }
        }
Exemple #4
0
        protected void InvokeProvisioningService(string operationName, EhfSynchronizer.ProvisioningServiceCall serviceCall, int numberOfEntries)
        {
            ExEventLog.EventTuple eventTuple = default(ExEventLog.EventTuple);
            Exception             ex         = null;

            EhfProvisioningService.MessageSecurityExceptionReason messageSecurityExceptionReason = EhfProvisioningService.MessageSecurityExceptionReason.Other;
            this.DiagSession.Tracer.TraceDebug <string>((long)this.DiagSession.GetHashCode(), "Executing EHF provisioning operation {0}", operationName);
            int  transientExceptionRetryCount = this.Config.EhfSyncAppConfig.TransientExceptionRetryCount;
            bool flag = true;

            do
            {
                if (ex != null)
                {
                    this.LogAndTraceException(operationName, ex, messageSecurityExceptionReason.ToString(), transientExceptionRetryCount + 1);
                }
                try
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    serviceCall();
                    stopwatch.Stop();
                    this.ehfConnection.PerfCounterHandler.OnOperationSuccessfullyCompleted(operationName, stopwatch.ElapsedMilliseconds, numberOfEntries);
                    this.DiagSession.LogAndTraceInfo(EdgeSyncLoggingLevel.High, "Successfully executed EHF provisioning operation {0}", new object[]
                    {
                        operationName
                    });
                    return;
                }
                catch (FaultException <ServiceFault> faultException)
                {
                    ex = faultException;
                    ServiceFault detail = faultException.Detail;
                    if (detail.Id == FaultId.UnableToConnectToDatabase)
                    {
                        eventTuple = EdgeSyncEventLogConstants.Tuple_EhfTransientFailure;
                        this.ehfConnection.PerfCounterHandler.OnOperationTransientFailure(operationName);
                    }
                    else
                    {
                        eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure;
                        this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName);
                    }
                }
                catch (MessageSecurityException ex2)
                {
                    messageSecurityExceptionReason = EhfProvisioningService.DecodeMessageSecurityException(ex2);
                    switch (messageSecurityExceptionReason)
                    {
                    case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure:
                        ex         = ex2.InnerException;
                        eventTuple = EdgeSyncEventLogConstants.Tuple_EhfTransientFailure;
                        this.ehfConnection.PerfCounterHandler.OnOperationTransientFailure(operationName);
                        goto IL_186;

                    case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials:
                        ex         = ex2.InnerException;
                        eventTuple = EdgeSyncEventLogConstants.Tuple_EhfInvalidCredentials;
                        this.ehfConnection.PerfCounterHandler.OnOperationInvalidCredentialsFailure(operationName);
                        flag = false;
                        goto IL_186;
                    }
                    ex         = ex2;
                    eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure;
                    this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName);
                    IL_186 :;
                }
                catch (CommunicationException ex3)
                {
                    ex         = ex3;
                    eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure;
                    this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName);
                }
                catch (TimeoutException ex4)
                {
                    ex         = ex4;
                    eventTuple = EdgeSyncEventLogConstants.Tuple_EhfOperationTimedOut;
                    this.ehfConnection.PerfCounterHandler.OnOperationTimeoutFailure(operationName);
                    flag = false;
                }
                catch (EhfProvisioningService.ContractViolationException ex5)
                {
                    ex         = ex5;
                    eventTuple = EdgeSyncEventLogConstants.Tuple_EhfServiceContractViolation;
                    this.ehfConnection.PerfCounterHandler.OnOperationContractViolationFailure(operationName);
                    flag = false;
                }
            }while (flag && transientExceptionRetryCount-- > 0);
            if (ex != null)
            {
                this.EventLogAndTraceException(operationName, eventTuple, ex, messageSecurityExceptionReason.ToString());
                this.ehfConnection.AbortSyncCycle(ex);
            }
        }
Exemple #5
0
 internal override void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService)
 {
     IPAddress[] array  = null;
     IPAddress[] array2 = null;
     if (this.dnsServerIPAddresses != null && this.fqdnTemplate != null)
     {
         ADSite site = null;
         ADNotificationAdapter.TryRunADOperation(delegate()
         {
             site = ((ITopologyConfigurationSession)session).GetLocalSite();
         });
         if (site == null)
         {
             base.WriteError(new InvalidOperationException("Unable to find ADSite object"), ErrorCategory.InvalidOperation, null);
         }
         Dns dns = new Dns();
         dns.Timeout    = TimeSpan.FromSeconds(30.0);
         dns.ServerList = new DnsServerList();
         dns.ServerList.Initialize(this.dnsServerIPAddresses.ToArray());
         array = this.ResolveInboundVirtualIPs(dns, site.PartnerId, this.fqdnTemplate);
     }
     if (this.outboundIPAddresses != null && this.outboundIPAddresses.Count > 0)
     {
         array2 = this.outboundIPAddresses.ToArray();
     }
     if (array != null || array2 != null)
     {
         CompanyResponseInfo companyResponseInfo = provisioningService.UpdateReseller(config.ResellerId, array, array2);
         if (companyResponseInfo.Status != ResponseStatus.Success)
         {
             this.HandleFailure(companyResponseInfo);
         }
     }
 }
        internal override void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService)
        {
            Company          reseller = provisioningService.GetReseller(config.ResellerId);
            List <IPAddress> list     = new List <IPAddress>();

            if (reseller.Settings.InboundIPList != null && reseller.Settings.InboundIPList.IPList != null && reseller.Settings.InboundIPList.IPList.Length == 1 && reseller.Settings.InboundIPList.IPList[0].IPList != null)
            {
                SmtpProfileEntry[] iplist = reseller.Settings.InboundIPList.IPList[0].IPList;
                foreach (SmtpProfileEntry smtpProfileEntry in iplist)
                {
                    IPAddress item;
                    if (IPAddress.TryParse(smtpProfileEntry.IP, out item))
                    {
                        list.Add(item);
                    }
                    else
                    {
                        this.WriteWarning(new LocalizedString("Unable to parse inbound IP address: " + smtpProfileEntry.IP));
                    }
                }
            }
            List <IPAddress> list2 = new List <IPAddress>();

            if (reseller.Settings.OutboundIPList != null && reseller.Settings.OutboundIPList.IPList != null)
            {
                foreach (string text in reseller.Settings.OutboundIPList.IPList)
                {
                    IPAddress item2;
                    if (IPAddress.TryParse(text, out item2))
                    {
                        list2.Add(item2);
                    }
                    else
                    {
                        this.WriteWarning(new LocalizedString("Unable to parse outbound IP address: " + text));
                    }
                }
            }
            base.WriteObject(new DCPerimeterConfig(list.ToArray(), list2.ToArray()));
        }
Exemple #7
0
 internal abstract void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService);
        private EhfCompanyRecord CreateEhfCompanyRecord(SyncedPerimeterConfig perimeterConfig)
        {
            EhfCompanyRecord result = null;
            Exception        ex     = null;

            try
            {
                Company company = null;
                int     companyId;
                if (!this.ehfService.TryGetCompanyByGuid(perimeterConfig.Guid, out company) && int.TryParse(perimeterConfig.PerimeterOrgId, out companyId))
                {
                    company = this.ehfService.GetCompany(companyId);
                }
                if (company != null)
                {
                    Domain[] allDomains = this.ehfService.GetAllDomains(company.CompanyId);
                    result = new EhfCompanyRecord(company, allDomains);
                }
            }
            catch (FaultException <ServiceFault> faultException)
            {
                ServiceFault detail = faultException.Detail;
                if (detail.Id == FaultId.UnableToConnectToDatabase)
                {
                    ex = new InvalidOperationException("ServiceFault: EHF is unable to connect to its database", faultException);
                }
                else
                {
                    if (detail.Id == FaultId.CompanyDoesNotExist)
                    {
                        return(null);
                    }
                    ex = faultException;
                }
            }
            catch (MessageSecurityException ex2)
            {
                switch (EhfProvisioningService.DecodeMessageSecurityException(ex2))
                {
                case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure:
                    ex = new InvalidOperationException("MessageSecurityException: EHF is unable to connect to its database", ex2.InnerException);
                    goto IL_E6;

                case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials:
                    ex = new InvalidOperationException("MessageSecurityException: EHF connector contains invalid credentials", ex2.InnerException);
                    goto IL_E6;
                }
                ex = ex2;
                IL_E6 :;
            }
            catch (CommunicationException ex3)
            {
                ex = ex3;
            }
            catch (TimeoutException ex4)
            {
                ex = ex4;
            }
            catch (EhfProvisioningService.ContractViolationException ex5)
            {
                ex = ex5;
            }
            if (ex != null)
            {
                base.WriteError(ex, ErrorCategory.InvalidOperation, null);
            }
            return(result);
        }