//transform text in utf8 format to string
function u2str(text)
{
return unescape(text.replace(/&#x/g,'%u').replace(/;/g,''));
}
function str2u(text)
{
return escape(text).replace(/(%u)(\w{4})/gi, "&#x$2;");
}
function utf8CodeToChineseChar(strUtf8)
{
var iCode, iCode1, iCode2;
iCode = parseInt("0x" + strUtf8.substr(1, 2));
iCode1 = parseInt("0x" + strUtf8.substr(4, 2));
iCode2 = parseInt("0x" + strUtf8.substr(7, 2));
return String.fromCharCode(((iCode & 0x0F) << 12) | ((iCode1 & 0x3F) << 6) | (iCode2 & 0x3F));
}
function chineseFromUtf8Url(strUtf8)
{
var bstr = "";
var nOffset = 0;
if ( strUtf8 == "" )
return "";
strUtf8 = strUtf8.toLowerCase();
nOffset = strUtf8.indexOf("%e");
if (nOffset == -1 )
return strUtf8;
while (nOffset != -1)
{
bstr += strUtf8.substr(0, nOffset);
strUtf8 = strUtf8.substr(nOffset, strUtf8.length - nOffset);
if (strUtf8 == "" || strUtf8.length < 9 )
return bstr;
bstr += utf8CodeToChineseChar(strUtf8.substr(0, 9));
strUtf8 = strUtf8.substr(9, strUtf8.length - 9);
nOffset = strUtf8.indexOf("%e");
}
return bstr + strUtf8;
}
function toUnicode(data)
{
var str ='';
for(var i=0;i<data.length;i++)
{
if (parseInt(data[i].charCodeAt(0),10) <= 127 )
{
str += data[i];
}
else
{
str+='&#x'+parseInt(data[i].charCodeAt(0),10).toString(16)+';';
}
}
return str;
}
function convertToUtf8_1(data)
{
var str = data.replace(/&#x/g,'%').replace(/;/g,'');
str = chineseFromUtf8Url(str);
return toUnicode(str);
}
function convertToUtf8(data)
{
var str = data.replace(/&#x/g,'%').replace(/;/g,'');
str = chineseFromUtf8Url(str);
str = toUnicode(str);
return u2str(str);
}
//------------getDeviceInfo ------------------
var manu = cpe.Inform.DeviceId.Manufacturer;
var oui = cpe.Inform.DeviceId.OUI;
var sn = cpe.Inform.DeviceId.SerialNumber;
var name;
var area;
var ipaddr;
var monObj;
var monReg;
var monFxoPot;
var monFxoSta;
var monFxsPot;
var monFxsSta;
for( i=0; i < cpe.Inform.ParameterList.length; i++ )
{
switch ( cpe.Inform.ParameterList[i].Name )
{
case 'InternetGatewayDevice.DeviceInfo.ProductName':
name = cpe.Inform.ParameterList[i].Value;
name = convertToUtf8_1(name);
name = convertToUtf8(name);
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorArea':
area = cpe.Inform.ParameterList[i].Value;
area = convertToUtf8_1(area );
area = convertToUtf8(area );
break;
case 'InternetGatewayDevice.ManagementServer.ConnectionRequestURL':
var url = cpe.Inform.ParameterList[i].Value;
var re = /\d+\.\d+\.\d+\.\d+/;
ipaddr = re.exec(url);
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.MonitorObj':
monObj = cpe.Inform.ParameterList[i].Value;
monObj = convertToUtf8_1(monObj );
monObj = convertToUtf8(monObj );
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.RegisterNumber':
monReg = cpe.Inform.ParameterList[i].Value;
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.FXOPort':
monFxoPot = cpe.Inform.ParameterList[i].Value;
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.FXOState':
monFxoSta = cpe.Inform.ParameterList[i].Value;
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.FXSPort':
monFxsPot = cpe.Inform.ParameterList[i].Value;
break;
case 'InternetGatewayDevice.DeviceInfo.MonitorObject.1.FXSState':
monFxsSta = cpe.Inform.ParameterList[i].Value;
break;
default:
break;
}
}
try
{
var sql= "SELECT OUI,SerialNumber FROM DeviceInfo WHERE OUI = '" + oui +"' and SerialNumber = '" + sn + "'";
var rs = db.Query(sql);
if (rs == "")
{
sql = "INSERT INTO DeviceInfo (OUI, SerialNumber, Manufacturer, ProductName, ProductIPAddr, MonitorArea, MonitorObject, RegisterNumber, FXONum, FXOState, FXSNum, FXSState, Flag) VALUES ('"+ oui +"','"+ sn +"','"+ manu +"','"+ name +"','"+ ipaddr +"','"+ area +"','"+ monObj +"','"+ monReg +"','"+ monFxoPot +"','"+ monFxoSta +"','"+ monFxsPot +"','"+ monFxsSta +"',0)";
rs = db.Update (sql);
}
else
{
sql = "UPDATE DeviceInfo SET Manufacturer='"+ manu +"',ProductName='"+ name +"',ProductIPAddr='"+ ipaddr +"',MonitorArea='"+ area +"',MonitorObject='"+ monObj +"',RegisterNumber='"+ monReg +"',FXONum='"+ monFxoPot +"',FXOState='"+ monFxoSta +"',FXSNum='"+ monFxsPot +"',FXSState='"+ monFxsSta +"',Flag=0, Time=NOW() WHERE OUI = '" + oui +"' and SerialNumber = '" + sn + "'";
rs = db.Update (sql);
}
}
catch (e)
{
logger ("=========DS exception:"+e.message);
}
//-----------------getAlarm------------------
var event;
var eventstr;
var alarmstr;
var alarm;
var id;
var caller;
var callee;
var addition;
var flag;
for( i=0; i<=cpe.Inform.Event.length-1; i++ )
{
event = cpe.Inform.Event[i].EventCode;
if (event.indexOf('X ') == 0)
{
eventstr = event.split(" ");
alarmstr = eventstr[2];
alarm = alarmstr.split(":");
id = alarm[0];
switch ( id )
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
level = 1;
break;
case 7:
case 8:
level = 0;
break;
default:
level = 1;
break;
}
caller = alarm[1];
callee = alarm[2];
addition = alarm[3];
if (caller == "" && callee == "") flag = 0;
else if (caller != "" && callee == "") flag = 1;
else if (caller == "" && callee != "") flag = 2;
else flag = 3;
try
{
var sql = "INSERT INTO RealTimeAlarm (ProductName, MonitorArea, MonitorObject, RegisterNumber, AlarmId, Level, CallFlag, Caller, Callee, Additional) VALUES ('"+ name +"','"+ area +"','"+ monObj +"','"+ monReg +"','"+ id +"','"+ level +"','"+ flag +"','"+ caller +"','"+ callee +"','"+ addition +"')";
var rs = db.Update (sql);
}
catch (e)
{
logger ("------------DS exception:"+e.message);
}
}
}