public void ChallengeNineProof() { IRoutingDomain domain = new RoutingDomain(_routeRepositoryMock.Object); var distance = domain.GetShortestDistance('B', 'B', 10); Assert.Equal(9, distance); }
public void ChallengeTenProof() { IRoutingDomain domain = new RoutingDomain(_routeRepositoryMock.Object); var count = domain.GetCountOfRoutesThatLoop('C', 'C', 30); Assert.Equal(7, count); }
public void ChallengeSevenProof() { IRoutingDomain domain = new RoutingDomain(_routeRepositoryMock.Object); var count = domain.GetNumberOfStopsWithEqualCount('A', 'C', 4, 50); Assert.Equal(3, count); }
public void ChallengeFiveProof() { IRoutingDomain domain = new RoutingDomain(_routeRepositoryMock.Object); var request = new LinkedList <char>(); request.AddLast('A'); request.AddLast('E'); request.AddLast('D'); Assert.Throws <Core.Exceptions.RouteNotFoundException>(() => domain.GetSpeicificRoutesDistance(request, 50)); }
public void ChallengeTwoProof() { IRoutingDomain domain = new RoutingDomain(_routeRepositoryMock.Object); var request = new LinkedList <char>(); request.AddLast('A'); request.AddLast('D'); int distance = domain.GetSpeicificRoutesDistance(request, 20); Assert.Equal(5, distance); }
public bool IsInternal(string domainName) { bool result; try { RoutingDomain domain = new RoutingDomain(domainName); result = this.isInternalResolver.IsInternal(domain); } catch (FormatException) { result = false; } return(result); }
void SCPRoutingAgent_OnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs e) { try { WriteLine("Start SCPRoutingAgent_OnResolvedMessage"); WriteLine("\tFromAddress: " + e.MailItem.FromAddress.ToString()); WriteLine("\tSubject: " + e.MailItem.Message.Subject.ToString()); WriteLine("\tMapiMessageClass: " + e.MailItem.Message.MapiMessageClass.ToString()); MimeDocument mdMimeDoc = e.MailItem.Message.MimeDocument; HeaderList hlHeaderlist = mdMimeDoc.RootPart.Headers; Header mhProcHeader = hlHeaderlist.FindFirst("X-SCP"); if (mhProcHeader == null) { WriteLine("\tTouched: " + "No"); if (!e.MailItem.Message.IsSystemMessage) { bool touched = false; if (e.MailItem.FromAddress.DomainPart != null) { foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower()); WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); string[] tmpTo = recp.Address.ToString().Split('@'); if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain); RoutingDomain myRoutingDomain = new RoutingDomain(tmpTo[1].ToLower() + routingDomain); RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain); source.SetRoutingOverride(recp, myRoutingOverride); touched = true; } } } else { if ((e.MailItem.Message.MapiMessageClass.ToString() == "IPM.Note.Rules.OofTemplate.Microsoft") & blockInternalInterTenantOOF) { WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress); if (e.MailItem.Message.From.SmtpAddress.Contains("@")) { string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); string[] tmpTo = recp.Address.ToString().Split('@'); if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { WriteLine("\t\tRemove: " + tmpTo[1].ToLower()); e.MailItem.Recipients.Remove(recp); } } } } } if (touched) { MimeNode lhLasterHeader = hlHeaderlist.LastChild; TextHeader nhNewHeader = new TextHeader("X-SCP", "Logged00"); hlHeaderlist.InsertBefore(nhNewHeader, lhLasterHeader); } } else { WriteLine("\tSystem Message"); } } else { WriteLine("\tTouched: " + "Yes"); } } catch (Exception ex) { WriteLine("\t[Error] Error :" + ex.Message); LogErrorToEventLog("[Error] [OnResolvedMessage] Error :" + ex.Message); } WriteLine("End SCPRoutingAgent_OnResolvedMessage"); }
public bool IsInternal(RoutingDomain domain) { return(domain.IsValid() && this.IsInternal(domain.Domain)); }
public static bool IsInternal(RoutingDomain routingDomain, OrganizationId organizationId) { return(routingDomain.IsValid() && IsInternalResolver.IsInternal(routingDomain.Domain, organizationId)); }
void WSPRoutingAgent_OnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs e) { try { WriteLine("Start WSPRoutingAgent_OnResolvedMessage"); WriteLine("\tFromAddress: " + e.MailItem.FromAddress.ToString()); WriteLine("\tSubject: " + e.MailItem.Message.Subject.ToString()); WriteLine("\tMapiMessageClass: " + e.MailItem.Message.MapiMessageClass.ToString()); MimeDocument mdMimeDoc = e.MailItem.Message.MimeDocument; HeaderList hlHeaderlist = mdMimeDoc.RootPart.Headers; Header mhProcHeader = hlHeaderlist.FindFirst("X-WSP"); if (mhProcHeader == null) { WriteLine("\tTouched: " + "No"); if (!e.MailItem.Message.IsSystemMessage) { bool touched = false; if (e.MailItem.FromAddress.DomainPart != null) { foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower()); WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); string[] tmpTo = recp.Address.ToString().Split('@'); if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain); RoutingDomain myRoutingDomain = new RoutingDomain(tmpTo[1].ToLower() + routingDomain); RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain); source.SetRoutingOverride(recp, myRoutingOverride); touched = true; } } } else { if ((e.MailItem.Message.MapiMessageClass.ToString() == "IPM.Note.Rules.OofTemplate.Microsoft") & blockInternalInterTenantOOF) { WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress); if (e.MailItem.Message.From.SmtpAddress.Contains("@")) { string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@'); foreach (EnvelopeRecipient recp in e.MailItem.Recipients) { WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); string[] tmpTo = recp.Address.ToString().Split('@'); if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower())) { WriteLine("\t\tRemove: " + tmpTo[1].ToLower()); e.MailItem.Recipients.Remove(recp); } } } } } if (touched) { MimeNode lhLasterHeader = hlHeaderlist.LastChild; TextHeader nhNewHeader = new TextHeader("X-WSP", "Logged00"); hlHeaderlist.InsertBefore(nhNewHeader, lhLasterHeader); } } else WriteLine("\tSystem Message"); } else WriteLine("\tTouched: " + "Yes"); } catch (Exception ex) { WriteLine("\t[Error] Error :" + ex.Message); LogErrorToEventLog("[Error] [OnResolvedMessage] Error :" + ex.Message); } WriteLine("End WSPRoutingAgent_OnResolvedMessage"); }
static void Main(string[] args) { string fileName = "input.txt"; string path = GetFilePath(fileName); //Instantiate Repository IRouteRepository repository = new RouteTextAdapterRepository(path); //Inject repository into domain IRoutingDomain domain = new RoutingDomain(repository); int defaultMaxDistance = 30; #region Output 1 var outputOneRequest = new LinkedList <char>(); outputOneRequest.AddLast('A'); outputOneRequest.AddLast('B'); outputOneRequest.AddLast('C'); try { var abcRouteDistance = domain.GetSpeicificRoutesDistance(outputOneRequest, defaultMaxDistance); Console.WriteLine($"Output #01: {abcRouteDistance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #01: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 2 var outputTwoRequest = new LinkedList <char>(); outputTwoRequest.AddLast('A'); outputTwoRequest.AddLast('D'); try { var adRouteDistance = domain.GetSpeicificRoutesDistance(outputTwoRequest, defaultMaxDistance); Console.WriteLine($"Output #02: {adRouteDistance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #02: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 3 var outputThreeRequest = new LinkedList <char>(); outputThreeRequest.AddLast('A'); outputThreeRequest.AddLast('D'); outputThreeRequest.AddLast('C'); try { var adcRouteDistance = domain.GetSpeicificRoutesDistance(outputThreeRequest, defaultMaxDistance); Console.WriteLine($"Output #03: {adcRouteDistance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #03: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 4 var outputFourRequest = new LinkedList <char>(); outputFourRequest.AddLast('A'); outputFourRequest.AddLast('E'); outputFourRequest.AddLast('B'); outputFourRequest.AddLast('C'); outputFourRequest.AddLast('D'); try { var aebcdRouteDistance = domain.GetSpeicificRoutesDistance(outputFourRequest, defaultMaxDistance); Console.WriteLine($"Output #04: {aebcdRouteDistance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #04: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 5 var outputFiveRequest = new LinkedList <char>(); outputFiveRequest.AddLast('A'); outputFiveRequest.AddLast('E'); outputFiveRequest.AddLast('D'); try { var aedcdRouteDistance = domain.GetSpeicificRoutesDistance(outputFiveRequest, defaultMaxDistance); Console.WriteLine($"Output #05: {aedcdRouteDistance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #05: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 6 try { var count = domain.GetCountOfRoutesThatLoop('C', 3, 50); Console.WriteLine($"Output #06: {count}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #06: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 7 try { var count = domain.GetNumberOfStopsWithEqualCount('A', 'C', 4, 50); Console.WriteLine($"Output #07: {count}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #07: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 8 try { var distance = domain.GetShortestDistance('A', 'C', 10); Console.WriteLine($"Output #08: {distance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #08: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 9 try { var distance = domain.GetShortestDistance('B', 'B', 10); Console.WriteLine($"Output #09: {distance}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #09: {exc.StandardRouteNotFoundUserMessage}"); } #endregion #region Output 10 try { var count = domain.GetCountOfRoutesThatLoop('C', 'C', 30); Console.WriteLine($"Output #10: {count}"); } catch (Core.Exceptions.RouteNotFoundException exc) { Console.WriteLine($"Output #10: {exc.StandardRouteNotFoundUserMessage}"); } #endregion Console.ReadLine(); }