public static PkData GetAccountInfo(string accountId, string credentials) { object[] val; IPkService proxy = XmlRpcProxyGen.Create <IPkService>(); try { val = proxy.get_account_info(accountId, credentials, ""); } catch (Exception e) { PkLogging.Logger(PkLogging.Level.Error, "Unable to connect to the Pagekite Service" + Environment.NewLine + "Exception: " + e.Message, true); val = null; } if (val == null) { return(null); } string ok = val[0].ToString(); if (!ok.Equals("ok")) { PkLogging.Logger(PkLogging.Level.Error, "Unable to update account information"); return(null); } XmlRpcStruct serviceStruct = (XmlRpcStruct)val[1]; PkData data = new PkData(); XmlRpcStruct serviceData = (XmlRpcStruct)serviceStruct["data"]; data.ServiceInfo.Secret = serviceData["_ss"].ToString(); data.ServiceInfo.DaysLeft = "unknown"; data.ServiceInfo.MbLeft = "unknown"; if (serviceData.Contains("days_left")) { data.ServiceInfo.DaysLeft = serviceData["days_left"].ToString(); } if (serviceData.Contains("quota_mb_left")) { data.ServiceInfo.MbLeft = serviceData["quota_mb_left"].ToString(); } object[] serviceKites = (object[])serviceData["kites"]; foreach (XmlRpcStruct serviceKite in serviceKites) { PkKite kite = new PkKite(); kite.Domain = serviceKite["domain"].ToString(); kite.Secret = serviceKite["ssecret"].ToString(); data.Kites.Add(kite.Domain, kite); } return(data); }
public object ParseHashtable(XmlNode node, ParseStack parseStack) { var retObj = new XmlRpcStruct(); parseStack.Push("class mapped to XmlRpcStruct"); try { var members = node.SelectChildNodes("member"); foreach (var member in members) { var(nameNode, hasMultipleNameNodes) = member.SelectPossibleDoupletteNode("name"); var(valueNode, hasMultipleValueNodes) = member.SelectPossibleDoupletteNode("value"); if (nameNode == null || nameNode.FirstChild == null) { throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType + " contains a member with missing name" + " " + parseStack.Dump()); } if (hasMultipleNameNodes) { throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType + " contains member with more than one name element" + " " + parseStack.Dump()); } var rpcName = nameNode.FirstChild.Value; if (valueNode == null) { throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType + " contains class member " + rpcName + " with missing value " + " " + parseStack.Dump()); } if (hasMultipleValueNodes) { throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType + " contains member with more than one value element" + " " + parseStack.Dump()); } if (retObj.Contains(rpcName)) { if (_config.IgnoreDuplicateMembers()) { continue; } throw new XmlRpcInvalidXmlRpcException(parseStack.ParseType + " contains class value with duplicate member " + nameNode.FirstChild.Value + " " + parseStack.Dump()); } parseStack.Push($"member {rpcName}"); try { var vvNode = valueNode.SelectValueNode(); var valObj = ParseValue(vvNode, null, parseStack); retObj.Add(rpcName, valObj); } finally { parseStack.Pop(); } } } finally { parseStack.Pop(); } return(retObj); }