Exemple #1
0
        private void CanControlParameterResponse(CanControlEventArgs e)
        {
            object[]          P         = (object[])e.State;
            string            From      = (string)P [0];
            Session           Session   = (Session)P [1];
            IControlParameter Parameter = (IControlParameter)P [2];
            string            Name      = (string)P [3];
            string            Value     = (string)P [4];

            if (e.Result && Array.IndexOf <string> (e.Parameters, Name) >= 0)
            {
                string Msg = Parameter.Import(Value);

                if (Msg == null)
                {
                    this.client.SendMessage(From, Name + "=" + Value, MessageType.Chat);
                }
                else
                {
                    this.SendErrorMessage(From, Msg, Session);
                }
            }
            else
            {
                this.SendErrorMessage(From, "Request rejected by provisioning server.", Session);
            }
        }
Exemple #2
0
        private async void ProvisioningClient_CanControlQuestion(object Sender, CanControlEventArgs e)
        {
            try
            {
                CanControlQuestion Question = await Database.FindFirstDeleteRest <CanControlQuestion>(new FilterAnd(
                                                                                                          new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID)));

                if (Question == null)
                {
                    Question = new CanControlQuestion()
                    {
                        Created         = DateTime.Now,
                        Key             = e.Key,
                        JID             = e.JID,
                        RemoteJID       = e.RemoteJID,
                        ProvisioningJid = this.provisioningClient.ProvisioningServerAddress,
                        ServiceTokens   = e.ServiceTokens,
                        DeviceTokens    = e.DeviceTokens,
                        UserTokens      = e.UserTokens,
                        ParameterNames  = e.Parameters,
                        NodeId          = e.NodeId,
                        SourceId        = e.SourceId,
                        Partition       = e.Partition
                    };

                    await Database.Insert(Question);

                    await MainWindow.currentInstance.NewQuestion(Question);
                }
            }
            catch (Exception ex)
            {
                Log.Critical(ex);
            }
        }
Exemple #3
0
        private async Task ProvisioningClient_CanControlQuestion(object Sender, CanControlEventArgs e)
        {
            CanControlQuestion Question = await Database.FindFirstDeleteRest <CanControlQuestion>(new FilterAnd(
                                                                                                      new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID)));

            if (Question is null)
            {
                Question = new CanControlQuestion()
                {
                    Created         = DateTime.Now,
                    Key             = e.Key,
                    JID             = e.JID,
                    RemoteJID       = e.RemoteJID,
                    OwnerJID        = XmppClient.GetBareJID(e.To),
                    ProvisioningJID = this.provisioningClient.ProvisioningServerAddress,
                    ServiceTokens   = e.ServiceTokens,
                    DeviceTokens    = e.DeviceTokens,
                    UserTokens      = e.UserTokens,
                    ParameterNames  = e.Parameters,
                    NodeId          = e.NodeId,
                    SourceId        = e.SourceId,
                    Partition       = e.Partition
                };

                await Database.Insert(Question);

                MainWindow.UpdateGui(() =>
                                     MainWindow.currentInstance.NewQuestion(this.Account, this.provisioningClient, Question));
            }
        }
        private void CanControlGetFormResponse(CanControlEventArgs e)
        {
            object[] P            = (object[])e.State;
            string   LanguageCode = (string)P [0];
            string   From         = (string)P [1];
            string   Id           = (string)P [2];

            if (e.Result)
            {
                StringBuilder sb = new StringBuilder();
                XmlWriter     w  = XmlWriter.Create(sb, XmlUtilities.GetXmlWriterSettings(false, true, true));

                w.WriteStartElement("x", "jabber:x:data");
                w.WriteElementString("title", "Control Form");

                foreach (IControlParameter Parameter in this.parameters)
                {
                    Parameter.Export(w);
                }

                w.WriteEndElement();
                w.Flush();

                this.client.IqResult(sb.ToString(), From, Id, "Control Form Response");
            }
            else
            {
                this.RequestRejected(From, Id, "Control rejected by provisioning server.", "cancel", "forbidden", "urn:ietf:params:xml:ns:xmpp-stanzas", string.Empty);
            }
        }
        private async void ProvisioningClient_CanControlQuestion(object Sender, CanControlEventArgs e)
        {
            try
            {
                CanControlQuestion Question = await Database.FindFirstDeleteRest <CanControlQuestion>(new FilterAnd(
                                                                                                          new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID)));

                if (Question is null)
                {
                    Question = new CanControlQuestion()
                    {
                        Created         = DateTime.Now,
                        Key             = e.Key,
                        JID             = e.JID,
                        RemoteJID       = e.RemoteJID,
                        OwnerJID        = XmppClient.GetBareJID(e.To),
                        ProvisioningJID = this.provisioningClient.ProvisioningServerAddress,
                        ServiceTokens   = e.ServiceTokens,
                        DeviceTokens    = e.DeviceTokens,
                        UserTokens      = e.UserTokens,
                        ParameterNames  = e.Parameters,
                        NodeId          = e.NodeId,
                        SourceId        = e.SourceId,
                        Partition       = e.Partition
                    };

                    await Database.Insert(Question);

                    DispatcherOperation Op = MainWindow.currentInstance.Dispatcher.BeginInvoke(new ThreadStart(() =>
                                                                                                               MainWindow.currentInstance.NewQuestion(this.Account, this.provisioningClient, Question)));
                }
            }
            catch (Exception ex)
            {
                Log.Critical(ex);
            }
        }
Exemple #6
0
        private void CanControlListParametersResponse(CanControlEventArgs e)
        {
            object[] P       = (object[])e.State;
            string   From    = (string)P [0];
            Session  Session = (Session)P [1];

            if (e.Result)
            {
                StringBuilder     Text = new StringBuilder();
                StringBuilder     Html = null;
                IControlParameter Parameter;

                foreach (string ParameterName in e.Parameters)
                {
                    Parameter = this.control [ParameterName];
                    if (Parameter == null)
                    {
                        continue;
                    }

                    Text.Append(Parameter.Name);
                    Text.Append('=');
                    Text.Append(Parameter.ValueString);
                    Text.Append('\t');
                    Text.Append(Parameter.Title.Replace(":", "."));
                    Text.Append('\t');
                    Text.Append(Parameter.Description);
                    Text.AppendLine();
                }

                if (Session.Html)
                {
                    Html = new StringBuilder();

                    Html.Append("<html xmlns=\"http://jabber.org/protocol/xhtml-im\"><body xmlns=\"http://www.w3.org/1999/xhtml\">");
                    Html.Append("<table cellspacing=\"0\" cellpadding=\"3\" border=\"0\">");

                    foreach (string ParameterName in e.Parameters)
                    {
                        Parameter = this.control [ParameterName];
                        if (Parameter == null)
                        {
                            continue;
                        }

                        Html.Append("<tr><th>");
                        Html.Append(Parameter.Name);
                        Html.Append('=');
                        Html.Append(XmlUtilities.Escape(Parameter.ValueString));
                        Html.Append("</th><td>");
                        Html.Append(XmlUtilities.Escape(Parameter.Title.Replace(":", ".")));
                        Html.Append("</td><td>");
                        Html.Append(XmlUtilities.Escape(Parameter.Description));
                        Html.Append("</td></tr>");
                    }

                    Html.Append("</table></body></html>");
                }

                this.client.SendMessage(From, Text.ToString(), MessageType.Chat, Html == null ? null : Html.ToString());
            }
            else
            {
                this.SendErrorMessage(From, "Request rejected by provisioning server.", Session);
            }
        }
        private void CanControlResponse(CanControlEventArgs e)
        {
            object[]   P            = (object[])e.State;
            string     LanguageCode = (string)P [0];
            string     From         = (string)P [1];
            string     Id           = (string)P [2];
            XmlElement Element      = (XmlElement)P [3];

            if (e.Result)
            {
                try
                {
                    XmlElement        E, E2;
                    string            Name;
                    string            Error;
                    IControlParameter Parameter;

                    foreach (XmlNode Node in Element.ChildNodes)
                    {
                        E = Node as XmlElement;
                        if (E == null)
                        {
                            continue;
                        }

                        switch (E.LocalName)
                        {
                        case "boolean":
                        case "color":
                        case "date":
                        case "dateTime":
                        case "double":
                        case "duration":
                        case "int":
                        case "long":
                        case "string":
                        case "time":
                            Name = XmlUtilities.GetAttribute(E, "name", string.Empty);
                            if (!this.parameterByName.TryGetValue(Name, out Parameter))
                            {
                                this.RequestRejected(From, Id, "Parameter not recognized.", "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", Name);
                                return;
                            }

                            Error = Parameter.Import(XmlUtilities.GetAttribute(E, "value", string.Empty));
                            if (!string.IsNullOrEmpty(Error))
                            {
                                this.RequestRejected(From, Id, Error, "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", Name);
                                return;
                            }

                            break;

                        case "x":
                            foreach (XmlNode Node2 in E.ChildNodes)
                            {
                                if (Node2.LocalName == "field" && (E2 = Node2 as XmlElement) != null)
                                {
                                    Name = XmlUtilities.GetAttribute(E2, "var", string.Empty);
                                    if (!this.parameterByName.TryGetValue(Name, out Parameter))
                                    {
                                        this.RequestRejected(From, Id, "Parameter not recognized.", "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", Name);
                                        return;
                                    }

                                    E2 = E2 ["value"];
                                    if (E2 == null)
                                    {
                                        this.RequestRejected(From, Id, "Parameter value missing.", "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", Name);
                                        return;
                                    }

                                    Error = Parameter.Import(E2.InnerText);
                                    if (!string.IsNullOrEmpty(Error))
                                    {
                                        this.RequestRejected(From, Id, Error, "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", Name);
                                        return;
                                    }
                                }
                            }
                            break;
                        }
                    }

                    if (!string.IsNullOrEmpty(Id))
                    {
                        this.client.IqResult("<setResponse xmlns='urn:xmpp:iot:control'/>", From, Id, "Control operation executed.");
                    }
                } catch (Exception ex)
                {
                    this.RequestRejected(From, Id, ex.Message, "modify", "bad-request", "urn:ietf:params:xml:ns:xmpp-stanzas", string.Empty);
                }
            }
            else
            {
                this.RequestRejected(From, Id, "Control rejected by provisioning server.", "cancel", "forbidden", "urn:ietf:params:xml:ns:xmpp-stanzas", string.Empty);
            }
        }