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=\"&lt;&gt;&amp;\"/></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);
        }
Beispiel #3
0
        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()));
            }
        }