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); } }
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); } }
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); } }
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); } }