using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Xml;
using WHC.OrderWater.Commons;
using MOKA_Factory_Tools;
public class Xmlconfig
{
public static bool ReadXmlnode(string str,string node,string value,out object result)
{
result = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
var b = xml.SelectSingleNode(node);
result = xml.SelectSingleNode(node).SelectSingleNode(value).InnerText;
return true;
}
catch(Exception ex)
{
result = ex.Message;
return false;
}
}
public static bool WriteXmlnode(string path, string node, string value, out object result)
{
result = "";
try
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
xml.SelectSingleNode(node).InnerText = value;
return true;
}
catch (Exception ex)
{
result = ex.Message;
return false;
}
}
public static bool KeyCountXml(string str, string node, string node2,out string code,out string desc,out string value)
{
code = "";
value = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if(code=="200")
{
value = xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("value").InnerText;
return true;
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool AutoKeyStatusXml(string str, string node, out string code, out string desc)
{
code = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
return true;
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool GetDIDKeyXml(string str, string node, string node2, out string code, out string desc, out string value)
{
code = "";
value = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
value = xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("deviceid").InnerText;
string CRC32= xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("crc32").InnerText;
if (CrcUtils.CRC32(value) ==Convert.ToUInt32(CRC32, 16))
{
return true;
}
else
{
desc = "CRC32 error";
return false;
}
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool GetOthersKeyXml(string str, string node, string node2, out string code, out string desc, out string value, out string md5)
{
md5 = "";
code = "";
value = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
value = xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("value").InnerText;
if (xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("md5value") != null)
md5 = xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("md5value").InnerText;
string CRC32 = xml.SelectSingleNode(node + "//" + node2).Attributes.GetNamedItem("crc32").InnerText;
if (CrcUtils.CRC32(value) == Convert.ToUInt32(CRC32, 16))
{
return true;
}
else
{
desc = "CRC32 error";
return false;
}
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
///
/// 解析并获取返回2个key的xml.
///
///
public static bool Get2KeyInfoFromXml(string str, string dataKey, string toolKey, out string code, out string desc, out string acaskey_data, out string acaskey_datamd5, out string acaskey_tool, out string acaskey_toolmd5)
{
acaskey_data = "";
acaskey_tool = "";
code = "";
acaskey_datamd5 = "";
acaskey_toolmd5 = "";
try
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(str);
code = xml.SelectSingleNode("response").Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode("response").Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
acaskey_data = xml.SelectSingleNode("response//" + dataKey).Attributes.GetNamedItem("value").InnerText;
if (xml.SelectSingleNode("response//" + dataKey).Attributes.GetNamedItem("md5value") != null)
acaskey_datamd5 = xml.SelectSingleNode("response//" + dataKey).Attributes.GetNamedItem("md5value").InnerText;
bool bCRC321 = false;
string CRC321 = "";
if (xml.SelectSingleNode("response//" + dataKey).Attributes.GetNamedItem("crc32") != null)
{
bCRC321 = true;
CRC321 = xml.SelectSingleNode("response//" + dataKey).Attributes.GetNamedItem("crc32").InnerText;
}
acaskey_tool = xml.SelectSingleNode("response//" + toolKey).Attributes.GetNamedItem("value").InnerText;
if (xml.SelectSingleNode("response//" + toolKey).Attributes.GetNamedItem("md5value") != null)
acaskey_toolmd5 = xml.SelectSingleNode("response//" + toolKey).Attributes.GetNamedItem("md5value").InnerText;
bool bCRC322 = false;
string CRC322 = "";
if (xml.SelectSingleNode("response//" + toolKey).Attributes.GetNamedItem("crc32") != null)
{
bCRC322 = true;
CRC322 = xml.SelectSingleNode("response//" + toolKey).Attributes.GetNamedItem("crc32").InnerText;
}
if (bCRC321)
{
if (CrcUtils.CRC32(acaskey_data) != Convert.ToUInt32(CRC321, 16))
{
desc = "CRC32 error";
return false;
}
}
if (bCRC322)
{
if (CrcUtils.CRC32(acaskey_tool) != Convert.ToUInt32(CRC322, 16))
{
desc = "CRC32 error";
return false;
}
}
}
return true;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool GetWidevineAndAttestationKeyXml(string str,
string node,
out string code,
out string desc,
out bool isAndroidTV,
out string WidevineKey,
out string AttestationKey,
out string AttestationMd5)
{
code = "";
isAndroidTV = false;
WidevineKey = "";
AttestationKey = "";
AttestationMd5 = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
isAndroidTV = !xml.SelectSingleNode(node).Attributes.GetNamedItem("androidtv").InnerText.Equals("1");
if (code == "200")
{
WidevineKey = xml.SelectSingleNode(node + "//widevine").Attributes.GetNamedItem("value").InnerText;
string CRC32 = xml.SelectSingleNode(node + "//widevine").Attributes.GetNamedItem("crc32").InnerText;
if (CrcUtils.CRC32(WidevineKey) != Convert.ToUInt32(CRC32, 16))
{
desc = "widevine CRC32 error";
return false;
}
if (isAndroidTV)
{
#if false
// 判断节点是否存在;
if (xml.GetElementsByTagName("attestation") == null)
{
desc = "isAndroidTV: but attestation node is Null";
return false;
}
#endif
AttestationKey = xml.SelectSingleNode(node + "//attestation").Attributes.GetNamedItem("value").InnerText;
CRC32 = xml.SelectSingleNode(node + "//attestation").Attributes.GetNamedItem("crc32").InnerText;
if (CrcUtils.CRC32(AttestationKey) != Convert.ToUInt32(CRC32, 16))
{
desc = "attestation CRC32 error";
return false;
}
else
{
AttestationMd5 = xml.SelectSingleNode(node + "//attestation").Attributes.GetNamedItem("md5value").InnerText;
}
}
return true;
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool ReportXml(string str, string node, out string code, out string desc)
{
code = "";
try
{
XmlDocument xml = new XmlDocument();
//xml.Load(path);
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
return true;
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
public static bool GetDSNXml(string str, string node, out string code, out string desc, out string value)
{
code = "";
value = "";
try
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(str);
code = xml.SelectSingleNode(node).Attributes.GetNamedItem("code").InnerText;
desc = xml.SelectSingleNode(node).Attributes.GetNamedItem("desc").InnerText;
if (code == "200")
{
value = xml.SelectSingleNode(node + "//" + "firetvDsn").Attributes.GetNamedItem("dsn").InnerText;
return true;
}
return false;
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
}
#region G客户NTF统计功能
public static bool GetMaInfoXml(string str, out MaInfo maInfo, out string desc)
{
desc = "";
maInfo = null;
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
XmlNamespaceManager nsp = new XmlNamespaceManager(doc.NameTable);
nsp.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
XmlNode node = doc.SelectSingleNode("//soap:Envelope//soap:Body", nsp);
if ( node != null)
{
JObject jObject = JObject.Parse(node.InnerText);
if ( jObject["IsSuccess"].Value() )
{
maInfo = JsonConvert.DeserializeObject(jObject["Msg"].ToString());
}
else
{
return false;
}
}
}
catch (Exception ex)
{
desc = ex.Message;
return false;
}
return true;
}
#endregion
}