Example #1
0
        private void DiscoverCapabilities()
        {
            var requestIq = new IQ();
            var request = new ServiceQuery();

            request.Node = Capabilities.DiscoveryInfoNode;
            requestIq.From = session.UserId;
            requestIq.ID = XmppIdentifierGenerator.Generate();
            requestIq.To = ResourceId;
            requestIq.Type = IQType.Get;

            requestIq.Items.Add(request);

            pendingMessages.Add(requestIq.ID);

            session.Send(requestIq);
        }
        protected override void OnServiceDiscoveryMessage(IQ message)
        {
            // Answers to Entity Capabilities and service discovery info requests
            if (message.Type == IQType.Get)
            {
                if (message.Items[0] is ServiceQuery)
                {
                    var query = (ServiceQuery) message.Items[0];
                    var response = new ServiceQuery
                                       {
                                           Node = ((!String.IsNullOrEmpty(query.Node)) ? DiscoveryInfoNode : null)
                                       };

                    var responseIq = new IQ
                                         {
                                             From = session.UserId,
                                             ID = message.ID,
                                             To = message.From,
                                             Type = IQType.Result
                                         };

                    foreach (XmppServiceIdentity identity in Identities)
                    {
                        var supportedIdentity = new ServiceIdentity
                                                    {
                                                        Name = identity.Name,
                                                        Category = identity.Category.ToString().ToLower(),
                                                        Type = identity.Type
                                                    };

                        response.Identities.Add(supportedIdentity);
                    }

                    foreach (XmppServiceFeature supportedFeature in Features)
                    {
                        var feature = new ServiceFeature
                                          {
                                              Name = supportedFeature.Name
                                          };

                        response.Features.Add(feature);
                    }

                    responseIq.Items.Add(response);

                    session.Send(responseIq);

                    //// Error response
                    //IQ errorIq = new IQ();
                    //ServiceQuery response = new ServiceQuery();
                    //Error error = new Error();

                    //errorIq.From = this.session.UserId.ToString();
                    //errorIq.ID = e.QueryResult.ID;
                    //errorIq.To = e.QueryResult.From;
                    //errorIq.Type = IQType.Error;
                    //errorIq.Error = error;
                    //response.Node = query.Node;
                    //error.Type = ErrorType.Cancel;
                    //error.ItemNotFound = "";

                    //errorIq.Items.Add(response);

                    //this.session.Send(errorIq);
                }
            }
        }