4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / sdk.js JS
document.write(unescape('%3Cscript src="js/libs/jquery.cookie.min.js?' + Math.random() + '"%3E%3C/script%3E'));
document.write(unescape('%3Cscript src="js/crypto-js.js?' + Math.random() + '"%3E%3C/script%3E'));
document.write(unescape('%3Cscript src="js/md5.js?' + Math.random() + '"%3E%3C/script%3E'));

//---------------- global ---------------------------------------
/* API result */
var API_RESULT_SUCCESS = 0;
var API_RESULT_FAIL = 1;

/*login state*/
var LOGIN_STATE_LOGOUT = 0;
var LOGIN_STATE_SUCCESS = 1;
var LOGIN_STATE_LOGIN_TIMES_USEDOUT = 2;
var LOGIN_STATE_PASSWORD_WRONG = 3;
var LOGIN_STATE_SOME_ONE_LOGINED = 4;

/*sim card state***/
var MACRO_UIM_STATE_UNKNOWN = 0; //show no card
var MACRO_UIM_STATE_DETECTED = 1; //show sim card error
var MACRO_UIM_STATE_PIN1_OR_UPIN_REQ = 2; //need pin
var MACRO_UIM_STATE_PUK1_OR_PUK_REQ = 3; //need puk
var MACRO_UIM_STATE_PERSON_CHECK_REQ = 4; //need simlock
var MACRO_UIM_STATE_PIN1_PERM_BLOCKED = 5; //puk block, sim card invalid
var MACRO_UIM_STATE_ILLEGAL = 6; //invalidSimCard
var MACRO_UIM_STATE_READY = 7; //sim ready
var MACRO_UIM_STATE_INITING = 11; //sim card initing

/*SIM card PIN state*/
var MACRO_UIM_PIN_STATE_UNKNOWN = 0; //no pin
var MACRO_UIM_PIN_STATE_ENABLED_NOT_VERIFIED = 1; //sim need pin, pin enable
var MACRO_UIM_PIN_STATE_ENABLED_VERIFIED = 2; //sim card ready and pin enable
var MACRO_UIM_PIN_STATE_DISABLED = 3; //pin disable
var MACRO_UIM_PIN_STATE_BLOCKED = 4; // puk block
var MACRO_UIM_PIN_STATE_PERMANENTLY_BLOCKED = 5; //puk block

/***************SIM Lock Status**********************/
var SIMLOCK_PERSO_NONE_REQUIRED = -1; /*no sim lock/sim lock unlock*/
var SIMLOCK_PERSO_NET_PIN_REQUIRED = 0; /*nck*/
var SIMLOCK_PERSO_NETSUB_PIN_REQUIRED = 1; /*nsck*/
var SIMLOCK_PERSO_SP_PIN_REQUIRED = 2; /*spck*/
var SIMLOCK_PERSO_CORP_PIN_REQUIRED = 3; /*cck*/
var SIMLOCK_PERSO_PH_FSIM_PIN_REQUIRED = 4; /*pck*/

var SIMLOCK_PERSO_NET_PUK_REQUIRED = 15; /*rck*/
var SIMLOCK_PERSO_NETSUB_PUK_REQUIRED = 16;
var SIMLOCK_PERSO_SP_PUK_REQUIRED = 17;
var SIMLOCK_PERSO_CORP_PUK_REQUIRED = 18;
var SIMLOCK_PERSO_PH_FSIM_PUK_REQUIRED = 19;
var SIMLOCK_PERSO_RCK_FORBID = 30; /*rck forbid*/

/****auto pin state *****/
var SIM_AUTO_PIN_DISABLE = 0;
var SIM_AUTO_PIN_ENABLE = 1;

/** unlock pin return data****/
var SIM_UNLOCK_PIN_SUCCESS = 0;
var SIM_UNLOCK_PIN_FAILED = 1;
var SIM_UNLOCK_PIN_FORMAT_ERROR = 2;

/** unlock puk return data****/
var SIM_UNLOCK_PUK_SUCCESS = 0;
var SIM_UNLOCK_PUK_FAILED = 1;
var SIM_UNLOCK_PUK_FORMAT_ERROR = 2;
var SIM_UNLOCK_PUK_PIN_ERROR = 3;

/** change pin code return data****/
var SIM_CHANGE_PIN_CODE_SUCCESS = 0;;
var SIM_CHANGE_PIN_CODE_FAILED = 1;
var SIM_CHANGE_PIN_CODE_CURRNPIN_ERROR = 2;
var SIM_CHANGE_PIN_CODE_NEWPIN_ERROR = 3;

/** disable/enable pin return data****/
var SIM_CHANGE_PIN_STATE_SUCCESS = 0;
var SIM_CHANGE_PIN_STATE_FAILED = 1;
var SIM_CHANGE_PIN_STATE_PINCODE_ERROR = 2;

/** save pin operation return data****/
var SIM_SET_AUTOVAL_PIN_SUCCESS = 0;
var SIM_SET_AUTOVAL_PIN_FAILED = 1;
var SIM_SET_AUTOVAL_PIN_PINCODE_ERROR = 2;

/****unlock simlock return data****/
var SIM_UNLOCK_SIMLOCK_SUCCESS = 0;
var SIM_UNLOCK_SIMLOCK_FAILED = 1;
var SIM_UNLOCK_SIMLOCK_FORMAT_ERROR = 2;

/*--Network--*/
var G_SDK_TIMER_GET_NETWORK_SEARCH_RESULT = null;
var G_SDK_TIMER_GET_NETWORK_REGISTER_RESULT = null;

/*--searching state--*/
var NW_NONE_SELECT = 0;
var NW_SELECTING = 1;
var NW_SELECT_SUCCESS = 2;
var NW_SELECT_FAILURE = 3;

var NW_REGIST_NONE = 0;
var NW_REGISTING = 1;
var NW_REGIST_SUCCESS = 2;
var NW_REGIST_FAILURE = 3;
/*--network mode--*/
var NETWORK_MODE_AUTOMATIC = 4;
var NETWORK_MODE_GSM_ONLY = 13;
var NETWORK_MODE_WCDMA_ONLY = 14;

/*--network select mode--*/
var SEL_MODE_AUTOMATIC = 0;
var SEL_MODE_MANUAL = 1;

/*--network type--*/
var NW_TYPE_GSM = 1;
var NW_TYPE_UMTS = 2;
var NW_TYPE_LTE = 3;
var NW_TYPE_TD_SCDMA = 9;

/*--network state--*/
var NW_STATE_AVAILABLE = 1;
var NW_STATE_CURRENT = 2;
var NW_STATE_FORBIDDEN = 3;

var NW_REG_STAT_REGISTRATING = 2;
/*--end Network--*/

/*---Profile operation return data---*/
var PROFILE_OPERATE_NEW = 1;
var PROFILE_OPERATE_EDIT = 0;
var PROFILE_USER_LEN = 15;
var PROFILE_TYPE_USER_DEFINE = 1;
var PROFILE_TYPE_BUILD_IN = 0;

/*******change password return data***************/
var USER_CHANGE_PASSWORD_SUCCESS = 0;
var USER_CHANGE_PASSWORD_FAILED = 1;
var USER_CURRENT_PASSWORD_ERROR = 2;
var USER_CHANGE_PASSWORD_PARAM_ERROR = 3;

/****SMS Opertation error*****/
/** get sms contact list return data****/
var SMS_CONTACT_LIST_PAGENUM_FORMAT_ERROR = 2;

/****get sms init status****/
var SMS_INIT_STATUS_COMPLETE = 0; //sms init complete
var SMS_INIT_STATUS_INITING = 1; //sms is initing

/****get sms type****/
var SMS_LIST_SMS_TYPE_READ = 0; // read
var SMS_LIST_SMS_TYPE_UNREAD = 1; // unread
var SMS_LIST_SMS_TYPE_SENT = 2; // sent
var SMS_LIST_SMS_TYPE_SENT_FAILED = 3; // sent failed
var SMS_LIST_SMS_TYPE_REPORT = 4; // report
var SMS_LIST_SMS_TYPE_FLASH = 5; // flash
var SMS_LIST_SMS_TYPE_DRAFT = 6; // draft

/****delete sms type****/
var SMS_DELETE_FLAG_ALL = 0; //delete all SMS
var SMS_DELETE_FLAG_Contact = 1; // delete one record in Contact SMS list 
var SMS_DELETE_FLAG_Content = 2; //delete one record in Content  SMS list

/****send & save sms id****/
var SMS_SEND_SAVE_NEW = -1; //-1 means send or save a new sms.

/****get sms send status***/
var SMS_SEND_STATUS_NONE = 0; // none
var SMS_SEND_STATUS_SENDING = 1; // sending
var SMS_SEND_STATUS_SUCCESS = 2; // success
var SMS_SEND_STATUS_FAIL_SENDING = 3; // failstill sending last message
var SMS_SEND_STATUS_FULL = 4; // fail with Memory full
var SMS_SEND_STATUS_FAILED = 5; // fail

/****sms setting************/
var SMS_SETTING_REPORT_DISABLE = 0; //report disable
var SMS_SETTING_REPORT_ENABLE = 1; //report enable
var SMS_SETTING_STORE_SIM = 0; //sms store in sim card
var SMS_SETTING_STORE_DEVICE = 1; //sms store in device

/*---------singal---------*/
var MACRO_BATTERY_CHARGING = 0;
var MACRO_BATTERY_COMPLATE = 1;
var MACRO_BATTERY_NOCHARGE = 2;

/*-------set Wps PIN status-------*/
var SET_WPS_WRONG = 1;
var SET_WPS_FAILD = 2;
var SET_WPS_PIN_WRONG = 3;

/***********Connected Devices Type**************/
var CONNDEVICE_LOGINED_DEVICE = 0;
var CONNDEVICE_CONNECTEDONLY_DEVICE = 1;

/***********Connected Devices ConnectMode**************/
var CONNDEVICE_USB_DEVICE = 0;
var CONNDEVICE_WIFI_DEVICE = 1;

/***********Connected Devices change name type**************/
var CONNDEVICE_SAVE_CONNECTED_NAME = 1;

/***********Online update**************/
var VERSION_CHECKING = 0;
var VERSION_NEW_YES = 1;
var VERSION_NEW_NO = 2
var VERSION_NO_CONNECT = 3;
var VERSION_NO_SERVICE = 4;
var VERSION_CHECK_ERROR = 5;

var FOTA_DOWNLOAD_STATE_FREE = 0;
var FOTA_DOWNLOAD_STATE_DOWNLOADING = 1;
var FOTA_DOWNLOAD_STATE_COMPLETED = 2;


var FOTA_BATTERY_STATE_ON_ENOUGH = 0;
var FOTA_BATTERY_STATE_ENOUGH = 1;

/*usage setting*/
var USAGE_TIME_LIMIT_ENABLE = 1;
var USAGE_TIME_LIMIT_DISABLE = 0;

var USAGE_AUTO_DISCONN_ENABLE = 1;
var USAGE_AUTO_DISCONN_DISABLE = 0;

/*sms time type*/
var sms_time_type_ymd = 0;
var sms_time_type_dmy = 1;
var sms_time_type_mdy = 2;
var sms_time_type = 3;
var sms_time_type_five_dmy= 5
/*login username val*/
var userNameFixedGray = 1;
var userNameEditable = 2
var userNameHide = 3;
//var userNameOnlyDisplayOnLogin = 4;
var userNameOnlyEditOnLogin = 5;

/*connected dial condition val,only homepage have dial btn*/
var connectedNoDial = 0;
var connectedDial = 1;

/***********common function for data verify start ************/
function isNumber(str) {
    return /^[0-9]+$/.test(str);
}

function isInterger(str) {
    return /^-?[0-9]+$/.test(str);
}

function checkStringInvalid(str) {
    if (str == null || str == "") {
        return false;
    } else {
        return true;
    }
}

function validatePin(pinCode) {
    return !(pinCode == "" || pinCode.length < 4 || pinCode.length > 8 || !isNumber(pinCode))
}

function validatePuk(pukCode) {
    return !(pukCode == "" || pukCode.length != 8 || !isNumber(pukCode));
}

function validateSimlock(simlockCode) {

    return !(simlockCode == "" || simlockCode.length != config.isSimlockNckDigit || !isNumber(simlockCode));
}
/***********common function for data verify start ************/

function setCookie(cname, cvalue, exdays) {
    $.cookie(cname,cvalue,{ expires: exdays||30 })
    /*
    var exday = exdays || 30;
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
    */
}
//get cookie  
function getCookie(cname) {
    return $.cookie(cname)||""
    /*
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return "";
    */
}
var SDK = (function() {

    //common fn start


    function encrypt(str) {
        if (str == "" || str == undefined) {
            return "";
        }
        //var key = $("[name='header-meta']").attr("content");
        var key = "e5dl12XYVggihggafXWf0f2YSf2Xngd1";
        var str1 = [];
        var encryStr = "";
        for (var i = 0; i < str.length; i++) {
            var char_i = str.charAt(i);
            var num_char_i = char_i.charCodeAt();
            str1[2 * i] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i & 0xf) ^ (key[i % key.length].charCodeAt() & 0xf));
            str1[2 * i + 1] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i >> 4) ^ (key[i % key.length].charCodeAt() & 0xf));
        }
        for (var i = 0; i < str1.length; i++) {
            encryStr += String.fromCharCode(str1[i]);
        }
        return encryStr;
    }
    function encrypt_md(str){
        if (str == "" || str == undefined) {
            return "";
        }
        var key = "e5dl12XYVggihggafXWf0f2YSf2Xngd1";
        var str1 = [];
        var encryStr = "";
        for (var i = 0; i < str.length; i++) {
            var char_i = str.charAt(i);
            var num_char_i = char_i.charCodeAt();
            str1[2 * i] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i & 0xf) ^ (key[i % key.length].charCodeAt() & 0xf));
            str1[2 * i + 1] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i >> 4) ^ (key[i % key.length].charCodeAt() & 0xf));
        }
        for (var i = 0; i < str1.length; i++) {
            encryStr += String.fromCharCode(str1[i]);
        }
        return encrypt_u(encryStr);
    }
    function encrypt_u(i_p){
        // var m_d= crypto.createHash('md5');
        // m_d.update(i_p);
        // var ui_p= m_d.digest('hex');
        // md5(i_p)
        return md5(i_p)
    }
    function encrypt_c(str_t,ui_k,ui_i){
         if (str_t == "" || str_t == undefined) {
            return "";
        }
        var key = "e5dl12XYVggihggafXWf0f2YSf2Xngd1";
        var str1 = [];
        var encryStr = "";
        for (var i = 0; i < str_t.length; i++) {
            var char_i = str_t.charAt(i);
            var num_char_i = char_i.charCodeAt();
            str1[2 * i] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i & 0xf) ^ (key[i % key.length].charCodeAt() & 0xf));
            str1[2 * i + 1] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i >> 4) ^ (key[i % key.length].charCodeAt() & 0xf));
        }
        for (var i = 0; i < str1.length; i++) {
            encryStr += String.fromCharCode(str1[i]);
        }
        return ens_a(encryStr,ui_k,ui_i);
    }
    function ens_a(ui_w,ui_k,ui_i){
        // if((ui_k == "" || ui_k == undefined)&&(ui_i == "" || ui_i == undefined)){
        //     return ""
        // }
        // var cipher= crypto.createCipheriv('aes-128-cbc', String(ui_k),String(ui_i))
        // var crypted= cipher.update(String(ui_w),'utf8','binary')
        // crypted += cipher.final('binary');
        // crypted = new Buffer(crypted, 'binary').toString('base64');
         if((ui_k == "" || ui_k == undefined)&&(ui_i == "" || ui_i == undefined)){
                return ""
            }
            var ui_k  = CryptoJS.enc.Utf8.parse(ui_k);
            var ui_i   = CryptoJS.enc.Utf8.parse(ui_i);
            var encrypted =CryptoJS.AES.encrypt(ui_w,ui_k,
                {
                    iv:ui_i,
                    mode:CryptoJS.mode.CBC,
                    padding:CryptoJS.pad.Pkcs7
                });
      return encrypted.toString();
        // return crypted
    }
    function newEncrypt(str,key) {
        if (str == "" || str == undefined) {
            return "null";
        }
        str = String(str)
        var key = key||"e5dl12XYVggihggafXWf0f2YSf2Xngd1";
        var str1 = [];
        var encryStr = "";
        for (var i = 0; i < str.length; i++) {
            var char_i = str.charAt(i);
            var num_char_i = char_i.charCodeAt();
            str1[2 * i] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i & 0xf) ^ (key[i % key.length].charCodeAt() & 0xf));
            str1[2 * i + 1] = (key[i % key.length].charCodeAt() & 0xf0) | ((num_char_i >> 4) ^ (key[i % key.length].charCodeAt() & 0xf));
        }
        for (var i = 0; i < str1.length; i++) {
            encryStr += String.fromCharCode(str1[i]);
        }
        return encryStr;
    }

    function uiencrypt(str){
        return newEncrypt(str,"e5dlfsdfsddsfdafXWf0f2YSf2Xngd1")
    }

    function uidecrypt(str) {
        if (str == "" || str == undefined) {
          return "";
        }
        var jrd_key = "e5dlfsdfsddsfdafXWf0f2YSf2Xngd1";
        var key_len = jrd_key.length;
        var tmp_str = [];
        var new_i;
        for (i = 0; i < str.length; i++) {
          if (i == 0) {
            new_i = 0;
          } else {
            new_i = i / 2;
          }
          tmp_str[new_i] = ((str[i + 1].charCodeAt() ^ jrd_key[new_i % key_len].charCodeAt()) << 4) | ((str[i].charCodeAt() ^ jrd_key[new_i % key_len].charCodeAt()) & 0xf);
          i++;
        }
        var dencryStr = "";
        for (var i = 0; i < tmp_str.length; i++) {
          dencryStr += String.fromCharCode(tmp_str[i]);
        }
        return dencryStr;
      }

    var headers = {};

    function getToken(tokenApi, apiName) {
        var token = "74623918"
        if ($.inArray(apiName, config.whiteListApi) == -1) {
            try {
                $.ajax({
                    type: "post",
                    url: "/jrd/webapi",
                    dataType: "text",
                    headers: {
                        '_TclRequestVerificationToken': encrypt(token)
                    },
                    async: false,
                    data: JSON2.stringify({
                        "jsonrpc": "2.0",
                        "method": tokenApi,
                        "params": {},
                        "id": 1
                    }),
                    success: function(data) {
                        token = jQuery.parseJSON(data).result.token
                    }
                })
            } catch (err) {
                return encrypt(token)
            }
        }
        return encrypt(token.toString())
    }

    function getHeaders(apiName) {
        var headers = {};
        let tk = getCookie("loginToken") || '';
        if (config.IsVerifyToken) {
            if (apiName == 'Login' || apiName == "ForceLogin") {
                headers['_TclRequestVerificationToken'] = getToken("GetLoginToken", apiName);
            } else {
                headers['_TclRequestVerificationToken'] = getToken("GetToken", apiName);
            }
        }
        if(tk.slice(32)!=""){
            headers['_TclRequestVerificationToken'] = tk.slice(32) || "null";
        }
        try {
            headers['_TclRequestVerificationKey'] = "KSDHSDFOGQ5WERYTUIQWERTYUISDFG1HJZXCVCXBN2GDSMNDHKVKFsVBNf";
            
        } catch (err) {

        }

        return headers;
    }

    function requestJsonRpcAsync(method, params, id, callback) {
        var postData = {
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
            "id": id
        };
        var postDataStr = JSON2.stringify(postData); //need use json2.js on ie6,ie7,ie8 compatibility
        $.ajax({
            type: "post",
            url: "/jrd/webapi?api=" + method,
            dataType: "text",
            data: postDataStr,
            headers: getHeaders(method),
            success: function(datas) {
                var data = jQuery.parseJSON(datas);
                if (data.hasOwnProperty("result") && !data.hasOwnProperty("error")) {
                    callback(data.result);
                } else {
                    callback(data);
                }
            },
            error: function() {
                callback();
            }
        })
    }

    function requestJsonRpcSync(method, params, id) {
        var postData = {
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
            "id": id
        };
        var postDataStr = JSON2.stringify(postData); //need use json2.js on ie6,ie7,ie8 compatibility
        var returnData;
        $.ajax({
            type: "post",
            url: "/jrd/webapi?api=" + method,
            dataType: "text",
            async: false,
            headers: getHeaders(method),
            data: postDataStr,
            success: function(data) {
                returnData = jQuery.parseJSON(data);
            }
        })
        return returnData;
    }

    function requestJsonRpcIsOk(result) {
        return result.hasOwnProperty("result") && !result.hasOwnProperty("error");
    }

    function requestJsonRpcIsAbsoluteOk(result) {
        return null != result && result.hasOwnProperty("result") && !result.hasOwnProperty("error");
    }

    function callbackCode(error) {
        return {
            "error": error
        };
    }

    function stopTimer(timer) {
        if (timer != null) {
            clearTimeout(timer);
            timer = null;
        }
    }

    //common fn end

    var User, SIM, Connection, Network, Wlan, SMS, Statistics, USSD, Update, Firewall, LAN, ConnectionDevices, System, Sharing, Profile, phonebook, TR069;
    //User start
    User = {
        Login: function(Username, Password) {
            if (!checkStringInvalid(Username) || !checkStringInvalid(Password)) {
                return LOGIN_STATE_PASSWORD_WRONG;
            }

            var params = {
                "UserName": Username,
                "Password": Password
            }
            if (config.IsEncryptionAndToken) {
                params = {
                    "UserName": encrypt(Username),
                    "Password": encrypt_md(Password)
                }
            }
            var result = requestJsonRpcSync("Login", params, "1.1");

            if (requestJsonRpcIsOk(result)) {
                try {
                    if (result.result.hasOwnProperty("token")) {
                        // setCookie("loginToken", newEncrypt(result.result.token))
                        // console.log(encrypt_c(String(result.result.token),String(result.result.param0),String(result.result.param1)),'ppppppppppp')
                        setCookie("loginToken","1D4B9765B16C3A64AD97489B1610498B"+ encrypt_c(String(result.result.token),String(result.result.param0),String(result.result.param1)))
                    } else {
                        setCookie("loginToken", "null")
                    }
                } catch (err) {
                    setCookie("loginToken", "null")
                }

                return LOGIN_STATE_SUCCESS;
            } else {
                var errorCode = result.error.code;

                if (errorCode == "010101") {
                    // Username or Password is not correct.
                    return LOGIN_STATE_PASSWORD_WRONG;

                } else if (errorCode == "010102") {
                    // login failed
                    return LOGIN_STATE_SOME_ONE_LOGINED;

                } else {
                    return LOGIN_STATE_LOGIN_TIMES_USEDOUT;
                }
            }
        },

        Logout: function() {
            var result = requestJsonRpcSync("Logout", null, "1.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;

            } else {
                return API_RESULT_FAIL;
            }
        },

        GetLoginState: function() {
            var result = requestJsonRpcSync("GetLoginState", null, "1.3");

            if (requestJsonRpcIsOk(result)) {
                return result.result.State;
            } else {
                return 0;
            }
        },

        ChangePassword: function(username, currPassword, newPassword) {
            if (!checkStringInvalid(username) || !checkStringInvalid(currPassword) || !checkStringInvalid(currPassword)) {
                return USER_CHANGE_PASSWORD_PARAM_ERROR;
            }

            //newEncrypt
            var params = {
                "UserName": username,
                "CurrPassword": currPassword,
                "NewPassword": newPassword
            }
            if (config.IsEncryptionAndToken) {
                params = {
                    "UserName": encrypt(username),
                    "CurrPassword": encrypt(currPassword),
                    "NewPassword": encrypt(newPassword)
                }
            }
            var result = requestJsonRpcSync("ChangePassword", params, "1.4");

            if (requestJsonRpcIsOk(result)) {
                return USER_CHANGE_PASSWORD_SUCCESS;

            } else {
                var errorCode = result.error.code;
                if (errorCode == "010401") {
                    return USER_CHANGE_PASSWORD_FAILED;
                } else if (errorCode == "010402") {
                    return USER_CURRENT_PASSWORD_ERROR;
                } else {
                    return USER_CHANGE_PASSWORD_FAILED;
                }
            }
        },

        HeartBeat: function() {
            var result = requestJsonRpcSync("HeartBeat", null, "1.5");
            try {
                if (result.error.code == "-32698" || result.error.code == "-32699") {
                    var State = SDK.User.GetLoginState();
                    if (State == 1) {
                        SDK.User.Logout();
                        location.reload();
                    }
                }
            } catch (err) {}

        },

        ForceLogin: function(Username, Password) {
            if (!checkStringInvalid(Username) || !checkStringInvalid(Password)) {
                return LOGIN_STATE_PASSWORD_WRONG;
            }
            var result = requestJsonRpcSync("ForceLogin", {
                "UserName": Username,
                "Password": Password
            }, "1.6");

            if (requestJsonRpcIsOk(result)) {
                return LOGIN_STATE_SUCCESS;
            } else {
                var errorCode = result.error.code;

                if (errorCode == "010601") {
                    // Username or Password is not correct.
                    return LOGIN_STATE_PASSWORD_WRONG;

                } else {
                    return LOGIN_STATE_LOGIN_TIMES_USEDOUT;
                }
            }
        },
        SetPasswordChangeFlag: function(choiceVal) {
            var result = requestJsonRpcSync("SetPasswordChangeFlag", {
                "change_flag": choiceVal
            }, "1.7");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetPasswordChangeFlag: function() {
            var result = requestJsonRpcSync("GetPasswordChangeFlag", null, "1.8");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "change_flag": 0
                }
            }
        },
        GetAutoRemenberPassword: function() {
            try{
                var data = uidecrypt(getCookie("mifiObj"));
                if(data!==""){
                    data = $.parseJSON(data)
                }
                //$.parseJSON
                var mifiObj ={
                    "save_flag": data.f,
                }
                mifiObj.username = uidecrypt(data.u)
                mifiObj.password = uidecrypt(data.p)
                
               return mifiObj
            }catch(err){
                return {
                    "save_flag": "0",
                    "username": "",
                    "password": ""
                }
            }
            /*
            var result = requestJsonRpcSync("GetAutoRemenberPassword", null, "1.9");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "save_flag": "0",
                    "username": "admin",
                    "password": "admin"
                }
            }*/
        },
        SetAutoRemenberPassword: function(remenberPWVal, UserName, Password) {
            try{
                var mifiObj =  {
                 "f": remenberPWVal,
                 "u": uiencrypt(UserName)
                } 
                if(remenberPWVal==1){
                    //mifiObj.u = uiencrypt(UserName);
                    mifiObj.p = uiencrypt(Password)
                }
                setCookie("mifiObj",uiencrypt(JSON.stringify(mifiObj)))
             }catch(err){
 
             }
            /*
            var result = requestJsonRpcSync("SetAutoRemenberPassword", {
                "save_flag": remenberPWVal,
                "username": UserName,
                "password": Password
            }, "1.10");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
            */
        }
    };
    //User end

    //SIM start
    SIM = {
        GetSimStatus: function() {
            var result = requestJsonRpcSync("GetSimStatus", null, "2.1");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SIMState": 0,
                    "PinState": 1,
                    "PinRemainingTimes": 3,
                    "PukRemainingTimes": 10,
                    "SIMLockState": 1,
                    "SIMLockRemainingTimes": 1,
                    "PLMN": ""
                };
            }
        },

        UnlockPin: function(pinCode) {
            if (!validatePin(pinCode)) {
                return SIM_UNLOCK_PIN_FORMAT_ERROR; //pin code format error
            }

            var result = requestJsonRpcSync("UnlockPin", {
                "Pin": pinCode
            }, "2.2");
            if (requestJsonRpcIsOk(result)) {
                return SIM_UNLOCK_PIN_SUCCESS;
            } else {
                return SIM_UNLOCK_PIN_FAILED;
            }

        },

        UnlockPuk: function(pukCode, newPin) {

            if (!validatePuk(pukCode)) {
                return SIM_UNLOCK_PUK_FORMAT_ERROR; //puk code format error
            }
            if (!validatePin(newPin)) {
                return SIM_UNLOCK_PUK_PIN_ERROR; //new Pin code format error
            }

            var result = requestJsonRpcSync("UnlockPuk", {
                "Puk": pukCode,
                "Pin": newPin
            }, "2.3");
            if (requestJsonRpcIsOk(result)) {
                return SIM_UNLOCK_PUK_SUCCESS;
            } else {
                return SIM_UNLOCK_PUK_FAILED; //unlock Puk failed
            }
        },

        ChangePinCode: function(currentPin, newPin) {

            if (!validatePin(currentPin)) {
                return SIM_CHANGE_PIN_CODE_CURRNPIN_ERROR; //current pin code format error
            }
            if (!validatePin(newPin)) {
                return SIM_CHANGE_NEWPIN_FORMAT_ERROR; //new pin code format error
            }

            var result = requestJsonRpcSync("ChangePinCode", {
                "CurrentPin": currentPin,
                "NewPin": newPin
            }, "2.4");

            if (requestJsonRpcIsOk(result)) {
                return SIM_CHANGE_PIN_CODE_SUCCESS;
            } else {
                return SIM_CHANGE_PIN_CODE_NEWPIN_ERROR; //change pin failed
            }
        },

        ChangePinState: function(state, pin) {
            var returnData;
            if (!validatePin(pin)) {
                return SIM_CHANGE_PIN_STATE_PINCODE_ERROR; //pin code format error
            }
            /* if(state != G_SDK_PIN_SET_STATE_DISABLE && state != G_SDK_PIN_SET_STATE_ENABLE){
                return callbackCode(2);//pin state error
            }*/

            var result = requestJsonRpcSync("ChangePinState", {
                "State": state,
                "Pin": pin
            }, "2.5");

            if (requestJsonRpcIsOk(result)) {
                return SIM_CHANGE_PIN_STATE_SUCCESS;
            } else {
                return SIM_CHANGE_PIN_STATE_FAILED; //change pin state failed
            }
        },

        GetAutoEnterPinState: function() {
            var result = requestJsonRpcSync("GetAutoValidatePinState", null, "2.6");
            if (requestJsonRpcIsOk(result)) {
                return result.result.State;
            } else {
                return 0;
            }
        },

        SetAutoEnterPinState: function(state, pinCode) {
            if (!validatePin(pinCode)) {
                return SIM_SET_AUTOVAL_PIN_PINCODE_ERROR; //pin code format error
            }
            /* if(state != G_SDK_PIN_AUTO_ENTER_STATE_DISABLE && state != G_SDK_PIN_AUTO_ENTER_STATE_ENABLE){
                return callbackCode(2)//Auto enter pin state error
            }*/
            var result = requestJsonRpcSync("SetAutoValidatePinState", {
                "Pin": pinCode,
                "State": state
            }, "2.7");
            if (requestJsonRpcIsOk(result)) {
                return SIM_SET_AUTOVAL_PIN_SUCCESS;
            } else {
                return SIM_SET_AUTOVAL_PIN_FAILED; //change pin auto enter state failed
            }

        },

        UnlockSimlock: function(type, simlockCode) {

            if (!validateSimlock(simlockCode)) {
                return SIM_UNLOCK_SIMLOCK_FORMAT_ERROR; //simlock code format error
            }
            var result = requestJsonRpcSync("UnlockSimlock", {
                "SIMLockState": type,
                "SIMLockCode": simlockCode
            }, "2.8");

            if (requestJsonRpcIsOk(result)) {
                return SIM_UNLOCK_SIMLOCK_SUCCESS;
            } else {
                return SIM_UNLOCK_SIMLOCK_FAILED;
            }
        }
    };
    //SIM end
    // NAT

    NAT = {
        GetNATType: function() {
            var result = requestJsonRpcSync("GetNATType", null, "2.6");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return 1;
            }
        },

        SetNATType: function(NATType) {
            var result = requestJsonRpcSync("SetNATType", {
                "NATType": NATType
            }, "2.7");
            if (requestJsonRpcIsOk(result)) {
                return SIM_SET_AUTOVAL_PIN_SUCCESS;
            } else {
                return SIM_SET_AUTOVAL_PIN_FAILED; 
            }
        },
    };
    //Connection start
    Connection = {
        GetConnectionState: function() {
            var result = requestJsonRpcSync("GetConnectionState", null, "3.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "ConnectionStatus": "0",
                    "ConnectProfile": "china unicom",
                    "UlRate": "",
                    "DlRate": "",
                    "UlBytes": "",
                    "DlBytes": "",
                    "IPv4Adrress": "",
                    "IPv6Adrress": "",
                    "ConnectionTime": "",
                    "ClearCode": 0,
                    "mPdpRejectCount": 0
                };
            }
        },

        Connect: function() {
            var result = requestJsonRpcSync("Connect", null, "3.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        DisConnect: function() {
            var result = requestJsonRpcSync("DisConnect", null, "3.3");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetConnectionSettings: function() {
            var result = requestJsonRpcSync("GetConnectionSettings", null, "3.4");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "PdpType": 0,
                    "RoamingConnect": 0,
                    "ConnectMode": 1
                };
            }
        },

        SetConnectionSettings: function(PdpType, RoamingConnect, ConnectMode) {
            var result = requestJsonRpcSync("SetConnectionSettings", {
                "PdpType": PdpType,
                "RoamingConnect": RoamingConnect,
                "ConnectMode": ConnectMode
            }, "3.5");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }

        },
        SetRoamConnectionWarnTipsFlag: function(warnTipsFlag) {
            var result = requestJsonRpcSync("SetRoamConnectionWarnTipsFlag", {
                "WarnTipsFlag": warnTipsFlag
            }, "3.6");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetRoamConnectionWarnTipsFlag: function() {
            var result = requestJsonRpcSync("GetRoamConnectionWarnTipsFlag", null, "3.7");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "WarnTipsFlag":0
                };
            }
        }
    };
    //Connection end

    //Network start
    Network = {
        GetNetworkInfo: function() {
            var result = requestJsonRpcSync("GetNetworkInfo", null, "4.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "PLMN": "26202",
                    "NetworkType": 1,
                    "NetworkName": "",
                    "SpnName": "",
                    "LAC": "",
                    "CellId": "",
                    "RncId": "",
                    "Roaming": 0,
                    "SignalStrength": 1

                };
            }
        },

        SearchNetwork: function() {
            var result = requestJsonRpcSync("SearchNetwork", null, "4.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SearchNetworkResult: function() {
            var result = requestJsonRpcSync("SearchNetworkResult", null, "4.3");
            if (requestJsonRpcIsOk(result)) {
                return result.ListNetworkItem;
            } else {
                return {
                    "SearchState": 0,
                    "ListNetworkItem": [{
                        "NetworkID": 12,
                        "State": 0,
                        "Numberic": "46001",
                        "Rat": "",
                        "FullName": "",
                        "ShortName": ""
                    }]
                }
            }
        },

        RegisterNetwork: function(NetworkID) {
            var result = requestJsonRpcSync("RegisterNetwork", {
                "NetworkID": NetworkID
            }, "4.4");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetNetworkRegisterState: function() {
            var result = requestJsonRpcSync("GetNetworkRegisterState", null, "4.5");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "State": 0
                };
            }
        },

        GetNetworkSettings: function() {
            var result = requestJsonRpcSync("GetNetworkSettings", null, "4.6");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "NetworkMode": "0",
                    "NetselectionMode": "0",
                    "NetworkBand": "0"
                };
            }
        },

        SetNetworkSettings: function(NetworkMode, NetselectionMode) {
            var result = requestJsonRpcSync("SetNetworkSettings", {
                "NetworkMode": NetworkMode,
                "NetselectionMode": NetselectionMode
                //"NetworkBand": NetworkBand
            }, "4.7");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }

    };
    //Network end

    //Wlan start
    Wlan = {
        GetWlanState: function() {
            var result = requestJsonRpcSync("GetWlanState", null, "5.1");

            if (requestJsonRpcIsAbsoluteOk(result)) {
                return result.result;
            } else {
                return {
                    "WlanState": 1
                };
            }
        },

        SetWlanOff: function() {
            var result = requestJsonRpcSync("SetWlanOff", null, "5.2");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetWlanOn: function() {
            var result = requestJsonRpcSync("SetWlanOn", null, "5.3");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetWlanSettings: function() {
            var result = requestJsonRpcSync("GetWlanSettings", null, "5.4");
            if (requestJsonRpcIsOk(result)) {
                var wifi2gInfo = $.grep(result.result.APList, function(n, i) {
                    if (config.BandSupport == 1) {
                        return n.WlanAPID == 1;
                    } else {
                        return n.WlanAPID == 0;
                    }

                })[0];
                var wifi5gInfo = $.grep(result.result.APList, function(n, i) {
                    if (config.BandSupport == 1 || config.BandSupport == 2 || config.BandSupport == 3) {
                        return n.WlanAPID == 1;
                    } else {
                        return n.WlanAPID == 0;
                    }

                })[0];
                var wifiInfo = {
                    "WlanAPMode": result.result.WlanAPMode,
                    "WiFiMode": result.result.WiFiMode,
                    "WiFiOffTime": result.result.WiFiOffTime,
                    "Ssid": wifi2gInfo.Ssid,
                    "SsidHidden": wifi2gInfo.SsidHidden,
                    "CountryCode": wifi2gInfo.CountryCode,
                    "SecurityMode": wifi2gInfo.SecurityMode,
                    "WpaType": wifi2gInfo.WpaType,
                    "WpaKey": wifi2gInfo.WpaKey,
                    "WepType": wifi2gInfo.WepType,
                    "WepKey": wifi2gInfo.WepKey,
                    "Channel": wifi2gInfo.Channel,
                    "CurChannel": wifi2gInfo.CurChannel,
                    "ApIsolation": wifi2gInfo.ApIsolation,
                    "WMode": wifi2gInfo.WMode,
                    "max_numsta": wifi2gInfo.max_numsta,
                    "curr_num": wifi2gInfo.curr_num,
                    "Ssid_5G": wifi5gInfo.Ssid,
                    "SsidHidden_5G": wifi5gInfo.SsidHidden,
                    "SecurityMode_5G": wifi5gInfo.SecurityMode,
                    "WpaType_5G": wifi5gInfo.WpaType,
                    "WpaKey_5G": wifi5gInfo.WpaKey,
                    "WepType_5G": wifi5gInfo.WepType,
                    "WepKey_5G": wifi5gInfo.WepKey,
                    "Channel_5G": wifi5gInfo.Channel,
                    "ApIsolation_5G": wifi5gInfo.ApIsolation,
                    "WMode_5G": wifi5gInfo.WMode,
                    "max_numsta_5G": wifi5gInfo.max_numsta
                };
                if (wifiInfo.WMode == 0) {
                    wifiInfo.WMode = 3
                }
                return wifiInfo;
            } else {
                return {
                    "Ssid": "",
                    "SsidHidden": 1,
                    "CountryCode": "it",
                    "SecurityMode": 1,
                    "WpaType ": 1,
                    "WpaKey ": "",
                    "WepType ": 1,
                    "WepKey": "",
                    "Channel": 5,
                    "ApIsolation": 1,
                    "WMode": 1,
                    "max_numsta": 10,
                    "curr_num": 3
                };
            }
        },

        SetWlanSettings: function(sendData) {
            var postData = {
                "WlanAPMode": sendData.WlanAPMode,
                "WiFiOffTime": sendData.WiFiOffTime,
                "WiFiMode": sendData.WiFiMode,
                "APList": [{
                    "WlanAPID": 0,
                    "ApStatus": sendData.WlanAPMode == 0 ? 1 : 0,
                    "WMode": sendData.WMode,
                    "Ssid": sendData.Ssid,
                    "SsidHidden": sendData.SsidHidden,
                    "Channel": sendData.Channel,
                    "SecurityMode": sendData.SecurityMode,
                    "WepType": sendData.WepType,
                    "WepKey": sendData.WepKey,
                    "WpaType": sendData.WpaType,
                    "WpaKey": sendData.WpaKey,
                    "CountryCode": sendData.CountryCode,
                    "ApIsolation": sendData.ApIsolation,
                    "max_numsta": sendData.max_numsta
                }]
            };
            if (config.BandSupport != 0) {
                postData.APList.push({
                    "WlanAPID": 1,
                    "ApStatus": sendData.WlanAPMode == 1 ? 1 : 0,
                    "WMode": sendData.WMode_5G,
                    "Ssid": sendData.Ssid_5G,
                    "SsidHidden": sendData.SsidHidden_5G,
                    "Channel": sendData.Channel_5G,
                    "SecurityMode": sendData.SecurityMode_5G,
                    "WepType": sendData.WepType_5G,
                    "WepKey": sendData.WepKey_5G,
                    "WpaType": sendData.WpaType_5G,
                    "WpaKey": sendData.WpaKey_5G,
                    "CountryCode": sendData.CountryCode,
                    "ApIsolation": sendData.ApIsolation_5G,
                    "max_numsta": sendData.max_numsta_5G
                })
            }
            var result = requestJsonRpcSync("SetWlanSettings", postData, "5.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }

        },

        SetWPSPin: function(WpsPin) {
            var result = requestJsonRpcSync("SetWPSPin", {
                "WpsPin": WpsPin
            }, "5.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                var errorCode = result.error.code;
                if (errorCode == "050601") {
                    // Set WPS PIN mode failed.
                    return SET_WPS_FAILD;

                } else if (errorCode == "050602") {
                    // WPS PIN code wrong
                    return SET_WPS_PIN_WRONG;

                } else {
                    return SET_WPS_FAILD;
                }

            }
        },

        SetWPSPbc: function() {
            var result = requestJsonRpcSync("SetWPSPbc", null, "5.7");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetWlanSupportMode: function() {
            var result = requestJsonRpcSync("GetWlanSupportMode", null, "5.8");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "WlanAPMode": 0
                };
            }
        }
    };
    //Wlan end

    //SMS start
    SMS = {
        GetSMSInitStatus: function() {
            var result = requestJsonRpcSync("getSmsInitState", null, "6.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result.state;
            } else {
                return {
                    state: 0 //initing
                }
            }
        },

        GetSMSContactList: function(pageNum) {
            if (!isNumber(pageNum)) {
                return SMS_CONTACT_LIST_PAGENUM_FORMAT_ERROR; //page number format error
            }
            var result = requestJsonRpcSync("GetSMSContactList", {
                "Page": pageNum
            }, "6.2");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SMSContactList": [],
                    "Page": pageNum
                }; //if get contact list error,return null list format.
            }
        },

        GetSMSContentList: function(pageNum, contactId) {
            if (!isNumber(pageNum)) {
                return SMS_CONTACT_LIST_PAGENUM_FORMAT_ERROR; //page number format error
            }
            var result = requestJsonRpcSync("GetSMSContentList", {
                "Page": pageNum,
                "ContactId": contactId
            }, "6.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SMSContentList": [],
                    "Page": pageNum,
                    "ContactId": contactId,
                    "PhoneNumber": []
                };
                //if get content list error,return null list format.
            }
        },

        GetSMSStorageState: function() {
            var result = requestJsonRpcSync("GetSMSStorageState", null, "6.4");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "LeftCount": 0,
                    "TUseCount": 0,
                    "UnreadSMSCount": 0
                };
            }
        },

        DeleteSMS: function(delFlag, contactId, smsId) {
            var result = requestJsonRpcSync("DeleteSMS", {
                "DelFlag": delFlag,
                "ContactId": contactId,
                "SMSId": smsId
            }, "6.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SendSMS: function(smsId, smsContent, phoneNumber, smsTime) {
            var result = requestJsonRpcSync("SendSMS", {
                "SMSId": smsId,
                "SMSContent": smsContent,
                "PhoneNumber": phoneNumber,
                "SMSTime": smsTime
            }, "6.6");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetSendSMSResult: function() {
            var result = requestJsonRpcSync("GetSendSMSResult", null, "6.7");

            if (requestJsonRpcIsOk(result)) {
                return result.result.SendStatus;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SaveSMS: function(smsId, smsContent, phoneNumber, smsTime) {
            var result = requestJsonRpcSync("SaveSMS", {
                "SMSId": smsId,
                "SMSContent": smsContent,
                "PhoneNumber": phoneNumber,
                "SMSTime": smsTime
            }, "6.8");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetSMSSettings: function() {
            var result = requestJsonRpcSync("GetSMSSettings", null, "6.9");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SMSCenter": "+8613800270500",
                    "StoreFlag": 1
                };
            }
        },

        SetSMSSettings: function(smsReportFlag, storeFlag, smsCenter) {
            var result = requestJsonRpcSync("SetSMSSettings", {
                "SMSReportFlag": smsReportFlag,
                "StoreFlag": storeFlag,
                "SMSCenter": smsCenter
            }, "6.10");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetSingleSMS: function(smsId) {
            var result = requestJsonRpcSync("GetSingleSMS", {
                "SMSId": smsId,
            }, "6.11");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SMSContent": ""
                };
            }
        },
        SetSmsEncodingOptimization: function(SmsEncodingFlag) {
            var result = requestJsonRpcSync("SetSmsEncodingOptimization", {
                "SmsEncodingOptimization": SmsEncodingFlag
            }, "6.12");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetSmsEncodingOptimization: function() {
            var result = requestJsonRpcSync("GetSmsEncodingOptimization", null, "6.13");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SmsEncodingOptimization": 0
                };
            }
        }
    }
    //SMS end

    //Statistics start
    Statistics = {
        GetUsageRecord: function() {
            var result = requestJsonRpcSync("GetUsageRecord", {
                current_time: getSystemTime()
            }, "7.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "HUseData": 0,
                    "HCurrUseUL": 0,
                    "HCurrUseDL": 0,
                    "RoamUseData": 0,
                    "RCurrUseUL": 0,
                    "RCurrUseDL": 0,
                    "TConnTimes": 0,
                    "CurrConnTimes": 0,
                    "MonthlyPlan": 0
                }
            }
        },

        SetUsageRecordClear: function(clearTime) {
            var result = requestJsonRpcSync("SetUsageRecordClear", {
                clear_time: clearTime
            }, "7.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetUsageSettings: function() {
            var result = requestJsonRpcSync("GetUsageSettings", null, "7.3");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "BillingDay": 1,
                    "MonthlyPlan": 500,
                    "UsedData": 300,
                    "TimeLimitFlag": 1,
                    "TimeLimitTimes": 1,
                    "UsedTimes": 1,
                    "AutoDisconnFlag": 1,
                    "Unit": 0
                };
            }
        },

        SetUsageSettings: function(params) {
            var result = requestJsonRpcSync("SetUsageSettings", params, "7.4");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    }
    //Statistics end  

    //USSD start
    USSD = {
        SendUSSD: function(ussdContent, ussdType) {
            var result = requestJsonRpcSync("SendUSSD", {
                "UssdContent": ussdContent,
                "UssdType": ussdType
            }, "8.1");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetUSSDSendResult: function() {
            var result = requestJsonRpcSync("GetUSSDSendResult", null, "8.2");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "UssdContent": "",
                    "UssdType": 0,
                    "SendState": 0,
                    "UssdContentLen": 0
                };
            }
        },

        SetUSSDEnd: function() {
            var result = requestJsonRpcSync("SetUSSDEnd", null, "8.3");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    }
    //USSD end

    //Update start
    Update = {
        GetDeviceNewVersion: function() {
            var result = requestJsonRpcSync("GetDeviceNewVersion", null, "9.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "State": "0",
                    "Version": ""
                };
            }
        },

        SetFOTAStartDownload: function() {
            var result = requestJsonRpcSync("SetFOTAStartDownload", null, "9.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetDeviceUpgradeState: function() {
            var result = requestJsonRpcSync("GetDeviceUpgradeState", null, "9.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "Status": 0,
                    "Process": 0
                };
            }
        },

        SetDeviceUpdateStop: function() {
            var result = requestJsonRpcSync("SetDeviceUpdateStop", null, "9.4");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetCheckNewVersion: function() {
            var result = requestJsonRpcSync("SetCheckNewVersion", null, "9.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetDeviceStartUpdate: function() {
            var result = requestJsonRpcSync("SetDeviceStartUpdate", null, "9.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        SetFotaUpdatedNotification: function(FotaUpdatedState) {
            var result = requestJsonRpcSync("SetFotaUpdatedNotification", {
                "FotaUpdatedNotification": FotaUpdatedState
            }, "9.7");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    }
    //Update end

    //Firewall start
    Firewall = {
        GetMacFilterSettings: function() {
            var result = requestJsonRpcSync("GetMacFilterSettings", null, "10.1");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "filter_policy": 1,
                    "MacAllowList": [],
                    "MacDenyList": []
                };
            }
        },
        SetMacFilterSettings: function(filterPolicy, macAllowList, macDenyList) {
            var result = requestJsonRpcSync("SetMacFilterSettings", {
                "filter_policy": filterPolicy,
                "MacAllowList": macAllowList,
                "MacDenyList": macDenyList
            }, "10.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetPortFwding: function() {
            var result = requestJsonRpcSync("getPortFwding", null, "10.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "total_num": 0,
                    "portfwd_list": []
                };
            }
        },
        AddPortFwding: function(sendData) {
            var result = requestJsonRpcSync("addPortFwding", sendData, "10.4");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        DeletePortFwding: function(sendData) {
            var result = requestJsonRpcSync("deletePortFwding", sendData, "10.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        EditPortFwding: function(sendData) {
            var result = requestJsonRpcSync("editPortFwding", sendData, "10.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetDMZSettings: function() {
            var result = requestJsonRpcSync("getDMZInfo", null, "10.8");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "dmz_status": 0,
                    "dmz_ip": ""
                };
            }
        },
        SetDMZSettings: function(sendData) {
            var result = requestJsonRpcSync("setDMZInfo", sendData, "10.9");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetIPFilterList: function() {
            var result = requestJsonRpcSync("getIPFilterList", null, "10.10");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "total_num": 0,
                    "ipFilter_list": []
                };
            }
        },
        AddIPFilter: function(sendData) {
            var result = requestJsonRpcSync("addIPFilter", sendData, "10.11");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        DeleteIPFilter: function(sendData) {
            var result = requestJsonRpcSync("deleteIPFilter", sendData, "10.12");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        EditIPFilter: function(sendData) {
            var result = requestJsonRpcSync("editIPFilter", sendData, "10.13");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetFirewallSwitch: function() {
            var result = requestJsonRpcSync("getFirewallSwitch", null, "10.14");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "firewall_status": 0,
                    "ipflt_status": "",
                    "wan_ping_status": 0,
                    "port_forward_status": 0
                };
            }
        },
        SetFirewallSwitch: function(sendData) {
            var result = requestJsonRpcSync("setFirewallSwitch", sendData, "10.15");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetUrlFilterSettings: function() {
            var result = requestJsonRpcSync("getUrlFilterSettings", null, "10.19");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "filter_policy": 1,
                    "UrlAllowList": [],
                    "UrlDenyList": []
                };
            }
        },
        SetUrlFilterSettings: function(filterPolicy, urlAllowList, urlDenyList) {
            var result = requestJsonRpcSync("SetUrlFilterSettings", {
                "filter_policy": filterPolicy,
                "UrlAllowList": urlAllowList,
                "UrlDenyList": urlDenyList
            }, "10.20");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };
    //Firewall end

    //LAN start
    LAN = {
        GetLanSettings: function() {
            var result = requestJsonRpcSync("GetLanSettings", null, "11.1");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "IPv4IPAddress": "192.168.1.1",
                    "SubnetMask": "255.255.255.0",
                    "DHCPServerStatus": "0",
                    "StartIPAddress": "192.168.1.3",
                    "EndIPAddress": "192.168.1.99",
                    "DHCPLeaseTime": "12",
                    "MacAddress": "",
                    "DNSMode": "",
                    "DNSAddress1": "",
                    "DNSAddress2": ""
                };
            }
        },

        SetLanSettings: function(iPv4IPAddress, subnetMask, dHCPServerStatus, startIPAddress, endIPAddress, dHCPLeaseTime, macAddress, DNSServerStatus, preDNSAddress, secDNSAddress) {
            var result = requestJsonRpcSync("SetLanSettings", {
                "IPv4IPAddress": iPv4IPAddress,
                "SubnetMask": subnetMask,
                "DHCPServerStatus": dHCPServerStatus,
                "StartIPAddress": startIPAddress,
                "EndIPAddress": endIPAddress,
                "DHCPLeaseTime": dHCPLeaseTime,
                "MacAddress": macAddress,
                "DNSMode": DNSServerStatus,
                "DNSAddress1": preDNSAddress,
                "DNSAddress2": secDNSAddress
            }, "11.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };
    //LAN end

    //ConnectionDevices start
    ConnectionDevices = {
        GetConnectedDeviceList: function() {
            var result = requestJsonRpcSync("GetConnectedDeviceList", null, "12.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "id": 0,
                    "DeviceName": "d1-orange-link",
                    "MacAddress": "98:FC:D2:99:EF",
                    "IPAddress": "192.168.1.100",
                    "AssociationTime": 100,
                    "DeviceType": 1,
                    "ConnectMode": 0
                };
            }
        },

        GetBlockDeviceList: function() {
            var result = requestJsonRpcSync("GetBlockDeviceList", null, "12.2");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "id": 0,
                    "DeviceName": "d1-orange-link",
                    "MacAddress": "98:FC:D2:99:EF",
                    "IPAddress": "192.168.1.100",
                    "AssociationTime": 100,
                    "DeviceType": 1,
                    "ConnectMode": 0
                };
            }
        },

        SetConnectedDeviceBlock: function(DeviceName, MacAddress) {
            var result = requestJsonRpcSync("SetConnectedDeviceBlock", {
                "DeviceName": DeviceName,
                "MacAddress": MacAddress
            }, "12.3");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                var errorCode = result.error.code;

                if (errorCode == "120301") {
                    // Set device block failed..
                    return API_RESULT_FAIL;
                }
            }
        },

        SetDeviceUnlock: function(DeviceName, MacAddress) {
            var result = requestJsonRpcSync("SetDeviceUnlock", {
                "DeviceName": DeviceName,
                "MacAddress": MacAddress
            }, "12.4");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                var errorCode = result.error.code;

                if (errorCode == "120401") {
                    // Set device block failed..
                    return API_RESULT_FAIL;
                }
            }
        },

        SetDeviceName: function(DeviceName, MacAddress, DeviceType, ConnectMode) {

            var result = requestJsonRpcSync("SetDeviceName", {
                "DeviceName": DeviceName,
                "MacAddress": MacAddress,
                "DeviceType": DeviceType,
                "ConnectMode": ConnectMode
            }, "12.5");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                var errorCode = result.error.code;

                if (errorCode == "120501") {
                    // Set device name failed..
                    return API_RESULT_FAIL;
                }
            }
        }
    };
    //ConnectionDevices end

    //System start
    System = {
        GetSystemInfo: function() {
            var result = requestJsonRpcSync("GetSystemInfo", null, "13.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return result.error;
            }
        },

        SetLanguage: function(Language) {
            var result = requestJsonRpcSync("SetLanguage", {
                "Language": Language
            }, "13.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetLanguage: function() {
            var result = requestJsonRpcSync("GetCurrentLanguage", null, "13.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result.Language;
            } else {
                return "en";
            }
        },

        GetCurrentLanguage: function() {
            var result = requestJsonRpcSync("GetCurrentLanguage", null, "13.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "Language": "en"
                }
            }
        },

        GetSystemStatus: function() {
            var result = requestJsonRpcSync("GetSystemStatus", null, "13.4");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "NetworkType": 1,
                    "SignalStrength": 1,
                    "WlanState": 1,
                    "ConnectionStatus": 1,
                    "SmsState": 1,
                    "chg_state": 1,
                    "bat_cap": 50,
                    "bat_level": 1,
                    "Roaming": 0,
                    "curr_num": 4,
                    "NetworkName": "CMCC",
                    "TotalConnNum": 5
                }
            }
        },
        GetAsyncSystemStatus: function(callback) {
            requestJsonRpcAsync("GetSystemStatus", null, "13.4", function(result) {
                callback(result);
            });
        },
        SetDeviceReboot: function() {
            var result = requestJsonRpcSync("SetDeviceReboot", null, "13.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetDeviceReset: function() {
            var result = requestJsonRpcSync("SetDeviceReset", null, "13.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetDeviceBackup: function() {
            var result = requestJsonRpcSync("SetDeviceBackup", null, "13.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        SetDeviceRestore: function() {
            var result = requestJsonRpcSync("SetDeviceRestore", null, "13.4");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "filename": ""
                };
            }
        },
        GetUpnpSettings: function() {
            var result = requestJsonRpcSync("GetUpnpSettings", null, "13.16");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "upnp_switch": 0
                };
            }
        },
        SetUpnpSettings: function(sendData) {
            var result = requestJsonRpcSync("SetUpnpSettings", sendData, "13.17");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        getNewPageFlagSemaphore: function() {
            var result = requestJsonRpcSync("getNewPageFlagSemaphore", null, "13.18");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "flag_state": 1
                };
            }
        },
        setNewPageFlagSemaphore: function(sendData) {
            var result = requestJsonRpcSync("setNewPageFlagSemaphore", sendData, "13.19");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        SendPingURL: function(sendData) {
            var result = requestJsonRpcSync("SendPingURL", {
                "PingURL": sendData
            }, "13.24");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        SetMyNumber: function(sendData) {
            var result = requestJsonRpcSync("SetMyNumber", sendData, "13.25");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        getDNSInfo: function() {
            var result = requestJsonRpcSync("getDNSInfo", null, "12.1");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "DNSMode": "",
                    "DNSAddress1": "",
                    "DNSAddress2": ""
                };
            }
        },
        setDNSInfo: function(DNSServerStatus, preDNSAddress, secDNSAddress) {
            var result = requestJsonRpcSync("setDNSInfo", {
                "DNSMode": DNSServerStatus,
                "DNSAddress1": preDNSAddress,
                "DNSAddress2": secDNSAddress
            }, "12.1");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetWanAccess: function() { //ping function enable or disable.
            var result = requestJsonRpcSync("GetWanAccess", null, "13.16");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "disableWanAcess": 0
                };
            }
        },
        SetWanAccess: function(sendData) { /*0表示开启ping wan侧访问, 1表示关闭ping wan侧访问*/
            var result = requestJsonRpcSync("SetWanAccess", sendData, "13.17");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        GetProfilePromptFlag: function() {
            var result = requestJsonRpcSync("GetProfilePromptFlag", null, "15.6");
            //result={"jsonrpc":"2.0","result":{"prom_flag":1},"id":"1.3"};
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "prom_flag": 0
                };
            }
        },
        SetProfilePre: function(profile_pre) {
            var result = requestJsonRpcSync("SetProfilePre", {
                "profile_pre": profile_pre
            }, "15.7");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        setLogDownoad:function(){
            var result = requestJsonRpcSync("setLogDownoad", null, "15.8");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    }
    //System end

    //Sharing start
    Sharing = {
        GetDLNASettings: function() {
            var result = requestJsonRpcSync("GetDLNASettings", null, "14.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "DlnaStatus": 0,
                    "DlnaName": ""
                };
            }
        },

        SetDLNASettings: function(dlnaStatus, dlnaName) {
            var result = requestJsonRpcSync("SetDLNASettings", {
                "DlnaStatus": dlnaStatus,
                "DlnaName": dlnaName
            }, "14.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetSambaStatus: function() {
            var result = requestJsonRpcSync("GetSambaStatus", null, "14.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SambaStatus": 0
                };
            }
        },

        SetSambaStatus: function(sambaStatus) {
            var result = requestJsonRpcSync("SetSambaStatus", {
                "SambaStatus": sambaStatus
            }, "14.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetFtpStatus: function() {
            var result = requestJsonRpcSync("GetFtpStatus", null, "14.5");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "FtpStatus": 0
                };
            }
        },

        SetFtpStatus: function(ftpStatus) {
            var result = requestJsonRpcSync("SetFtpStatus", {
                "FtpStatus": ftpStatus
            }, "14.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetUsbcardStatus: function() {
            var result = requestJsonRpcSync("GetUsbcardStatus", null, "14.10");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "UsbcardStatus": 0
                };
            }
        },

        SetUsbcardStatus: function(usbcardStatus) {
            var result = requestJsonRpcSync("SetUsbcardStatus", {
                "UsbcardStatus": usbcardStatus
            }, "14.11");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        GetSDCardSpace: function() {
            var result = requestJsonRpcSync("GetSDCardSpace", null, "14.7");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "TotalSpace": 0,
                    "UsedSpace": 0
                };
            }
        },

        GetSDFileList: function(path, page) {
            var result = requestJsonRpcSync("GetSDFileList", {
                "Path": path,
                "Page": page
            }, "14.8");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "FileList": [],
                    "Path": "",
                    "TotalPage": 0,
                    "Page": 0
                };
            }
        },

        GetSDcardStatus: function() {
            var result = requestJsonRpcSync("GetSDcardStatus", null, "14.9");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SDcardStatus": 0,
                };
            }
        }
    }
    //Sharing end

    //Profile start
    Profile = {
        GetProfileList: function() {
            var result = requestJsonRpcSync("GetProfileList", null, "15.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result.ProfileList;
            } else {
                return {
                    "ProfileID": 1,
                    "ProfileName": "China Unicom",
                    "APN": "3gnet",
                    "AuthType": 0,
                    "DailNumber": "*99#",
                    "UserName": "china",
                    "Password": "1234",
                    "Default": 1,
                    "IsPredefine": 1,
                    "IPAdrress": ""
                };
            }
        },
        AddNewProfile: function(sendData) {
            var result = requestJsonRpcSync("AddNewProfile", sendData, "15.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }

        },
        EditProfile: function(sendData) {
            var result = requestJsonRpcSync("EditProfile", sendData, "15.3");

            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        DeleteProfile: function(ProfileID) {
            var result = requestJsonRpcSync("DeleteProfile", {
                "ProfileID": ProfileID
            }, "15.4");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },
        SetDefaultProfile: function(ProfileID) {
            var result = requestJsonRpcSync("SetDefaultProfile", {
                "ProfileID": ProfileID
            }, "15.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }

    };
    //Profile end
    //phonebook start
    PhoneBook = {
        getPhoneBookInitState: function() {
            var result = requestJsonRpcSync("getPhoneBookInitState", null, "19.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "pb_init_state": 1
                };
            }
        },

        getPhoneBooklistInfo: function(typeNum) {
            var result = requestJsonRpcSync("getPhoneBooklistInfo", {
                "pb_type": typeNum
            }, "19.2");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                // return {
                if (typeNum == "sim") {
                    return {
                        "current_num": 1,
                        "totle_num": 1,
                        "data": [{
                            "pb_id": 1,
                            "pb_name": "jeck",
                            "phone_number": "88888888"
                        }]
                    };

                } else if (typeNum == "local") {
                    return {
                        "data": [{
                            "pb_id": 1,
                            "pb_name": "jeck",
                            "phone_number": "88888888"
                        }]
                    };
                }
                // };
            }

        },

        getPhoneBookInfo: function(typeNum) {
            var result = requestJsonRpcSync("getPhoneBookInfo", {
                "pb_type": typeNum
            }, "19.3");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                //return {
                if (typeNum == "sim") {
                    return {
                        "current_num": 1,
                        "totle_num": 1,
                        "name_length": "12",
                        "number_length": "32"
                    };
                } else if (typeNum == "local") {
                    return {
                        "current_num": 1,
                        "totle_num": 1,
                        "name_length": "12",
                        "number_length": "22"
                    };
                }
                //};
            }
        },

        getPhoneBookSingle: function(typeNum, id) {
            var result = requestJsonRpcSync("getPhoneBookSingle", {
                "pb_id": id,
                "pb_type": typeNum
            }, "19.4");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                // return {
                if (typeNum == "sim") {
                    return {
                        "pb_id": 1,
                        "pb_name": "jeck",
                        "phone_number": "88888888"
                    };
                } else if (typeNum == "local") {
                    return {
                        "pb_id": 2,
                        "pb_name": "jeck",
                        "phone_number": "88888888"
                    };
                }
                // };
            }
        },
        deletePhoneBook: function(params) {
            var result = requestJsonRpcSync("deletePhoneBook", params, "19.5");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        addPhoneBook: function(params) {
            var result = requestJsonRpcSync("addPhoneBook", params, "19.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        },

        editPhoneBook: function(params) {
            var result = requestJsonRpcSync("editPhoneBook", params, "19.7");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };

    //phonebook end
    //TR069 start
    TR069 = {

        GetClientConfiguration: function() {
            var result = requestJsonRpcSync("GetClientConfiguration", null, "18.1");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "Inform": 0,
                    "InformInterval": 100,
                    "AcsUrl": "http://192.168.1.1 ",
                    "AcsUserName": "freecwmp",
                    "AcsUserPassword": " freecwmp ",
                    "ConReqAuthent": 1,
                    "ConReqUserName": "username",
                    "ConReqUserPassword": "userpassword"
                };

            }
        },

        SetClientConfiguration: function(params) {
            var result = requestJsonRpcSync("SetClientConfiguration", params, "18.2");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };

    //Power start
    Power = {
        GetPowerSavingMode: function() {
            var result = requestJsonRpcSync("GetPowerSavingMode", null, "16.2");
            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "SmartMode": 0,
                    "WiFiMode": 0
                };
            }
        },
        SetPowerSavingMode: function(sendData) {
            var result = requestJsonRpcSync("SetPowerSavingMode", sendData, "16.3");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };
    //Power end

    //PDP Timer start
    PDPTimer = {
        GetFDTimer: function() {
            var result = requestJsonRpcSync("GetFDTimer", null, "7.5");

            if (requestJsonRpcIsOk(result)) {
                return result.result;
            } else {
                return {
                    "FDTimer": 0
                };
            }
        },
        SetFDTimer: function(fdTimer) {
            var result = requestJsonRpcSync("SetFDTimer", {
                "FDTimer": fdTimer
            }, "7.6");
            if (requestJsonRpcIsOk(result)) {
                return API_RESULT_SUCCESS;
            } else {
                return API_RESULT_FAIL;
            }
        }
    };
    //PDP Timer end

    return {
        requestJsonRpcAsync: requestJsonRpcAsync,
        requestJsonRpcSync: requestJsonRpcSync,
        requestJsonRpcIsOk: requestJsonRpcIsOk,
        User: User,
        SIM: SIM,
        Connection: Connection,
        Network: Network,
        Wlan: Wlan,
        SMS: SMS,
        Statistics: Statistics,
        USSD: USSD,
        Update: Update,
        Firewall: Firewall,
        LAN: LAN,
        ConnectionDevices: ConnectionDevices,
        System: System,
        Sharing: Sharing,
        Profile: Profile,
        PhoneBook: PhoneBook,
        TR069: TR069,
        Power: Power,
        PDPTimer: PDPTimer,
        NAT:NAT
    };

})()