private DirectorySearchResponse Search(ServiceSoap1 service, DirectorySearchRequest request, IAccount account) { var count = service.MaxResults > request.MaxResults ? request.MaxResults : service.MaxResults; string givenName, givenEmail; if (request.SearchTerms.TryGetValue(@"givenName", out givenName) == false) { givenName = string.Empty; } if (request.SearchTerms.TryGetValue(@"givenEmail", out givenEmail) == false) { givenEmail = string.Empty; } var result = new List <DirectorySearchItem>(count); var moreAvailable = false; for (int i = 0; i < userz.Count; i++) { if (Search(account, userz[i], givenName, givenEmail, count, result)) { moreAvailable = true; break; } } return(new DirectorySearchResponse() { Items = result, MoreAvailable = moreAvailable, }); }
public void ParseTest() { string xml1 = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body><m:directorySearch xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\"><m:filter m:href=\"#searchArray\"/><m:maxResults>100</m:maxResults></m:directorySearch><m:Array xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\" m:id=\"searchArray\"><m:row m:attrib=\"givenName\" m:value=\"n\"/><m:row m:attrib=\"givenEmail\" m:value=\"e\"/><m:row m:attrib=\"ltgtamp\" m:value=\"<>&\"/></m:Array></SOAP-ENV:Body></SOAP-ENV:Envelope>"; string xml2 = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body><m:directorySearch xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\"><m:filter m:href=\"#searchArray\"/><m:maxResults>100</m:maxResults></m:directorySearch><m:Array xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\" m:id=\"searchArray\"/></SOAP-ENV:Body></SOAP-ENV:Envelope>"; var request1 = DirectorySearchRequest.Parse(CreateXmlReader(xml1)); Assert.AreEqual(100, request1.MaxResults); Assert.AreEqual(3, request1.SearchTerms.Count); Assert.AreEqual("n", request1.SearchTerms["givenName"]); Assert.AreEqual("e", request1.SearchTerms["givenEmail"]); Assert.AreEqual("<>&", request1.SearchTerms["ltgtamp"]); var request2 = DirectorySearchRequest.Parse(CreateXmlReader(xml2)); Assert.AreEqual(100, request2.MaxResults); Assert.AreEqual(0, request2.SearchTerms.Count); }
public OutContent ProcessRequest <T>(ArraySegment <byte> content, SearchDelegate <T> searchHandler, T param) { try { List <DirectorySearchItem> foundItems = null; bool moreAvailable = false; var request = DirectorySearchRequest.Parse(CreateXmlReader(content)); int maxResults = Math.Min(MaxResults, request.MaxResults); foreach (var searchTerm in request.SearchTerms) { const string testPrefix = @"TESTJDOE"; if (searchTerm.Key == @"givenName" && string.Compare(searchTerm.Value, 0, testPrefix, 0, testPrefix.Length) == 0) { int requestedResults; if (int.TryParse(searchTerm.Value.Substring(testPrefix.Length), out requestedResults)) { foundItems = new List <DirectorySearchItem>(); for (int i = 0; i < maxResults && i < requestedResults; i++) { foundItems.Add(new DirectorySearchItem() { Uri = string.Format(@"jdoe{0}@officesip.local", i), DisplayName = string.Format(@"Joe Doe {0}", i), Title = string.Format(@"Title {0}", i), Office = string.Format(@"#{0}", i), Phone = string.Format(@"+1 111 111 1111 ext.{0}", i), Company = string.Format(@"Company #{0}", i), City = string.Format(@"City{0}", i), State = string.Format(@"State{0}", i), Country = string.Format(@"Country{0}", i), Email = string.Format(@"jdoe{0}@officesip.com", i), }); } moreAvailable = (maxResults < requestedResults); } break; } } DirectorySearchResponse response = null; if (foundItems == null && searchHandler != null) { response = searchHandler(this, request, param); } else { response = new DirectorySearchResponse() { Items = foundItems, MoreAvailable = moreAvailable, }; } return(new OutContent(response, new object())); } catch (Exception) { return(new OutContent( new DirectorySearchResponse() { Items = new List <DirectorySearchItem>(), }, new object())); } }