├── webui ├── README.md ├── res │ ├── body_bg.gif │ ├── main_bg.gif │ ├── plmn_3.gif │ ├── wan_901.gif │ ├── wan_902.gif │ ├── header_bg.png │ ├── signal_5.gif │ └── unread_message.gif ├── js │ ├── messagesetting.js │ ├── pincodemanagement.js │ ├── systemsettings.js │ ├── ping.js │ ├── changelang.js │ ├── checklogin.js │ ├── nat.js │ ├── upnp.js │ ├── sipalgsettings.js │ ├── firewallswitch.js │ ├── table.js │ ├── dmzsettings.js │ ├── deviceinformation.js │ ├── country.js │ ├── redirect.js │ ├── modifypassword.js │ ├── dhcp.js │ ├── wlanadvanced.js │ ├── mobileconnection.js │ ├── statistic.js │ ├── virtualserver.js │ ├── wlanmacfilter.js │ └── validation.js ├── html │ ├── smsinbox.html │ ├── mobileconnection.html │ ├── ussd.html │ ├── update.html │ └── home.html └── lib │ └── log4javascript_lite.js ├── image.jpg ├── webui.png ├── scripts ├── hilink.conf ├── hilink_status ├── hilink_notifications ├── hilink_sms_count ├── hilink_device_information ├── hilink_traffic_stats ├── hilink_disconnect ├── hilink_connect ├── hilink_ussd_get ├── hilink_ussd_send ├── hilink_sms_list ├── hilink_sms_send └── E3372.sh ├── etc ├── network │ └── interfaces └── nginx │ └── sites-enabled │ └── hi.link └── README.md /webui/README.md: -------------------------------------------------------------------------------- 1 | # This is the internals of the Huawei web interface 2 | -------------------------------------------------------------------------------- /image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/image.jpg -------------------------------------------------------------------------------- /webui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui.png -------------------------------------------------------------------------------- /webui/res/body_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/body_bg.gif -------------------------------------------------------------------------------- /webui/res/main_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/main_bg.gif -------------------------------------------------------------------------------- /webui/res/plmn_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/plmn_3.gif -------------------------------------------------------------------------------- /webui/res/wan_901.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/wan_901.gif -------------------------------------------------------------------------------- /webui/res/wan_902.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/wan_902.gif -------------------------------------------------------------------------------- /webui/res/header_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/header_bg.png -------------------------------------------------------------------------------- /webui/res/signal_5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/signal_5.gif -------------------------------------------------------------------------------- /webui/js/messagesetting.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/js/messagesetting.js -------------------------------------------------------------------------------- /webui/js/pincodemanagement.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/js/pincodemanagement.js -------------------------------------------------------------------------------- /webui/res/unread_message.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rohan-molloy/sms-gateway/HEAD/webui/res/unread_message.gif -------------------------------------------------------------------------------- /scripts/hilink.conf: -------------------------------------------------------------------------------- 1 | HILINK_PROTO=http 2 | HILINK_HOST=192.168.1.1 3 | HILINK_PORT=80 4 | HILINK_USER=user 5 | HILINK_PASSWORD=password 6 | -------------------------------------------------------------------------------- /webui/js/systemsettings.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /etc/network/interfaces: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/network/interfaces configuration for my RaspberryPi 3 | # Change eth0's values to suit your own 4 | # The only relevant option is the "post-up" that runs usb modeswitch 5 | # 6 | 7 | auto eth0 8 | iface eth0 inet static 9 | address 10.0.0.2 10 | netmask 255.255.255.0 11 | gateway 10.0.0.1 12 | dns-nameserver 127.0.0.1 13 | post-up usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000' 14 | 15 | # 16 | # Now we have the huawei card 17 | # 18 | allow-hotplug eth1 19 | iface eth1 inet static 20 | address 192.168.1.2 21 | netmask 255.255.255.252 22 | -------------------------------------------------------------------------------- /scripts/hilink_status: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | source ~/.config/hilink.conf 6 | 7 | SesTokInfo=$(curl -s \ 8 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 9 | --header "Host:$HILINK_HOST" \ 10 | --user "$HILINK_USER:$HILINK_PASSWORD" 11 | ) 12 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 13 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 14 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/monitoring/status" \ 15 | --header "Host:$HILINK_HOST" \ 16 | --header "Cookie:$HILINK_COOKIE" \ 17 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 18 | --user "$HILINK_USER:$HILINK_PASSWORD" 19 | -------------------------------------------------------------------------------- /scripts/hilink_notifications: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 3 | 4 | source ~/.config/hilink.conf 5 | 6 | SesTokInfo=$(curl -s \ 7 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 8 | --header "Host:$HILINK_HOST" \ 9 | --user "$HILINK_USER:$HILINK_PASSWORD" 10 | ) 11 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 12 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 13 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/monitoring/check-notifications" \ 14 | --header "Host:$HILINK_HOST" \ 15 | --header "Cookie:$HILINK_COOKIE" \ 16 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 17 | --user "$HILINK_USER:$HILINK_PASSWORD" 18 | -------------------------------------------------------------------------------- /scripts/hilink_sms_count: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | 16 | 17 | curl -fSs $HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/sms/sms-count \ 18 | --header "Host:$HILINK_HOST" \ 19 | --header "Cookie:$HILINK_COOKIE" \ 20 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 21 | --user "$HILINK_USER:$HILINK_PASSWORD" 22 | -------------------------------------------------------------------------------- /scripts/hilink_device_information: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | 16 | curl -fSs $HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/device/information \ 17 | --header "Host:$HILINK_HOST" \ 18 | --header "Cookie:$HILINK_COOKIE" \ 19 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 20 | --user "$HILINK_USER:$HILINK_PASSWORD" 21 | -------------------------------------------------------------------------------- /scripts/hilink_traffic_stats: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/monitoring/traffic-statistics" \ 16 | --header "Host:$HILINK_HOST" \ 17 | --header "Cookie:$HILINK_COOKIE" \ 18 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 19 | --user "$HILINK_USER:$HILINK_PASSWORD" 20 | -------------------------------------------------------------------------------- /scripts/hilink_disconnect: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | source ~/.config/hilink.conf 6 | 7 | SesTokInfo=$(curl -s \ 8 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 9 | --header "Host:$HILINK_HOST" \ 10 | --user "$HILINK_USER:$HILINK_PASSWORD" 11 | ) 12 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 13 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 14 | 15 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/dialup/dial" \ 16 | --header "Host:$HILINK_HOST" \ 17 | --header "Cookie:$HILINK_COOKIE" \ 18 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 19 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 20 | --data "0" 21 | 22 | 23 | -------------------------------------------------------------------------------- /scripts/hilink_connect: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | 4 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 5 | 6 | 7 | source ~/.config/hilink.conf 8 | 9 | SesTokInfo=$(curl -s \ 10 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 11 | --header "Host:$HILINK_HOST" \ 12 | --user "$HILINK_USER:$HILINK_PASSWORD" 13 | ) 14 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 15 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 16 | 17 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/dialup/dial" \ 18 | --header "Host:$HILINK_HOST" \ 19 | --header "Cookie:$HILINK_COOKIE" \ 20 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 21 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 22 | --data "1" 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /etc/nginx/sites-enabled/hi.link: -------------------------------------------------------------------------------- 1 | server { 2 | server_name hi.link sms-gateway.xyz; 3 | listen 443; 4 | ssl on; 5 | ssl_certificate /etc/ssl/sms-gateway.xyz.pem; 6 | ssl_certificate_key /etc/ssl/sms-gateway.xyz.key; 7 | ssl_protocols TLSv1.2 TLSv1.1 TLSv1; 8 | ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; 9 | root /var/www/html/hi.link; 10 | # index.html contains 11 | # 12 | index index.html; 13 | error_page 404 = @hilink; 14 | location @hilink 15 | { 16 | proxy_pass http://192.168.1.1; 17 | proxy_set_header Host hi.link; 18 | proxy_set_header X-Forwarded-For $remote_addr; 19 | auth_basic "Restricted Content"; 20 | auth_basic_user_file /etc/nginx/.htpasswd; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /scripts/hilink_ussd_get: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | 16 | content=$1 17 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/ussd/get" \ 18 | --header "Host:$HILINK_HOST" \ 19 | --header "Cookie:$HILINK_COOKIE" \ 20 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 21 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 22 | --data "$content" 23 | 24 | 25 | -------------------------------------------------------------------------------- /scripts/hilink_ussd_send: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | 16 | content=$1 17 | curl -fSs "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/ussd/send" \ 18 | --header "Host:$HILINK_HOST" \ 19 | --header "Cookie:$HILINK_COOKIE" \ 20 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 21 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 22 | --data "$content" 23 | 24 | 25 | -------------------------------------------------------------------------------- /scripts/hilink_sms_list: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 3 | 4 | 5 | source ~/.config/hilink.conf 6 | 7 | SesTokInfo=$(curl -s \ 8 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 9 | --header "Host:$HILINK_HOST" \ 10 | --user "$HILINK_USER:$HILINK_PASSWORD" 11 | ) 12 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 13 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 14 | 15 | curl -fSs $HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/sms/sms-list \ 16 | --header "Host:$HILINK_HOST" \ 17 | --header "Cookie:$HILINK_COOKIE" \ 18 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 19 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 20 | --data "-1500000" 21 | 22 | -------------------------------------------------------------------------------- /scripts/hilink_sms_send: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | [[ ! -f ~/.config/hilink.conf ]] && printf "HILINK_PROTO=http\nHILINK_HOST=192.168.1.1\nHILINK_PORT=80\nHILINK_USER=user\nHILINK_PASSWORD=password\n" >~/.config/hilink.conf 3 | 4 | 5 | 6 | source ~/.config/hilink.conf 7 | 8 | SesTokInfo=$(curl -s \ 9 | --url "$HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/webserver/SesTokInfo" \ 10 | --header "Host:$HILINK_HOST" \ 11 | --user "$HILINK_USER:$HILINK_PASSWORD" 12 | ) 13 | HILINK_COOKIE=$(echo "$SesTokInfo"|grep SessionID=|cut -b 10-147) 14 | HILINK_TOKEN=$(echo "$SesTokInfo"|grep TokInfo|cut -b 10-41) 15 | 16 | CONTENT=$1 17 | PHONE=$2 18 | DATE=$(date '+%Y-%m-%d %T') 19 | LENGTH=${#CONTENT} 20 | 21 | curl -fSs $HILINK_PROTO://$HILINK_HOST:$HILINK_PORT/api/sms/send-sms \ 22 | --header "Host:$HILINK_HOST" \ 23 | --header "Cookie:$HILINK_COOKIE" \ 24 | --header "__RequestVerificationToken:$HILINK_TOKEN" \ 25 | --user "$HILINK_USER:$HILINK_PASSWORD" \ 26 | --data "1$PHONE0220227672$CONTENT$LENGTH1$DATE" 27 | 28 | 29 | -------------------------------------------------------------------------------- /webui/js/ping.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | var PING_TIMEOUT = 2000; 3 | 4 | var ping_bolIsTimeout; 5 | var ping_intStartTime; 6 | var ping_intTimerID; 7 | var ping_objIMG = new Image(); 8 | var ping_ipAddress = 0; 9 | 10 | function ping_timeout() 11 | { 12 | ping_bolIsTimeout = true; 13 | var strEnd = ping_objIMG.src.lastIndexOf("/"); 14 | ping_objIMG.src = ping_objIMG.src.substring(0, strEnd); 15 | ping(); 16 | } 17 | 18 | function ping() 19 | { 20 | /* 21 | * 发送请求 22 | */ 23 | ping_intStartTime = +new Date(); 24 | 25 | ping_objIMG.src = ping_objIMG.src + ping_intStartTime; 26 | ping_bolIsTimeout = false; 27 | 28 | /* 29 | * 超时计时 30 | */ 31 | ping_intTimerID = setTimeout(ping_timeout, PING_TIMEOUT); 32 | } 33 | 34 | function startPing() 35 | { 36 | ping_objIMG.src = "http://" + ping_ipAddress + "/"; 37 | ping_objIMG.onload = 38 | ping_objIMG.onerror = 39 | function() 40 | { 41 | /* 42 | * 有回应,取消超时计时 43 | */ 44 | clearTimeout(ping_intTimerID); 45 | 46 | if(ping_bolIsTimeout) 47 | { 48 | return; 49 | } 50 | gotoPageWithoutHistory("http://" + ping_ipAddress + "/html/index.html"); 51 | } 52 | ping(); 53 | } 54 | 55 | function ping_setPingAddress(ipAddress) 56 | { 57 | ping_ipAddress = ipAddress; 58 | } 59 | -------------------------------------------------------------------------------- /webui/js/changelang.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | var g_langList = ''; 3 | 4 | function creatLangList() { 5 | if (jQuery.isArray(LANGUAGE_DATA.supportted_languages)) { 6 | if (LANGUAGE_DATA.supportted_languages.length > 20) { 7 | $('#language_list').css({ 8 | 'overflow-x': 'hidden', 9 | 'overflow-y': 'scroll' 10 | }); 11 | } 12 | $.each(LANGUAGE_DATA.supportted_languages, function(n, value) { 13 | if (value.replace(/-/, '_') == LANGUAGE_DATA.current_language) { 14 | $('#lang').val(eval(value.replace(/-/, '_'))); 15 | } 16 | //langList += "" + eval(value.replace(/-/,"_")) + ""; 17 | g_langList += ''; 18 | }); 19 | } 20 | else if ('undefined' != typeof(LANGUAGE_DATA.supportted_languages)) { 21 | LANGUAGE_DATA.current_language = LANGUAGE_DATA.supportted_languages; 22 | var value = LANGUAGE_DATA.current_language; 23 | $('#lang').val(eval(LANGUAGE_DATA.supportted_languages.replace(/-/, '_'))); 24 | //g_langList += "" + eval(LANGUAGE_DATA.supportted_languages.replace(/-/,"_")) + ""; 25 | g_langList += ''; 26 | } 27 | else { 28 | log.error('Load language data failed'); 29 | } 30 | } 31 | 32 | $(function() { 33 | creatLangList(); 34 | }); -------------------------------------------------------------------------------- /webui/js/checklogin.js: -------------------------------------------------------------------------------- 1 | var LOGOUT_TIMEOUT = 300000; 2 | var g_stateLogin = false; 3 | var g_logoutTimer = null; 4 | function checklogin() { 5 | var myurl = '../api/user/state-login'; 6 | 7 | $.ajax({ 8 | async: false, 9 | //cache: false, 10 | type: 'GET', 11 | timeout: 3000, 12 | url: myurl, 13 | dataType: 'text', 14 | success: function(data) { 15 | var xml; 16 | if (typeof data == 'string' || typeof data == 'number') 17 | { 18 | if (!window.ActiveXObject) 19 | { 20 | var parser = new DOMParser(); 21 | xml = parser.parseFromString(data, 'text/xml'); 22 | } 23 | else 24 | { 25 | //IE 26 | xml = new ActiveXObject('Microsoft.XMLDOM'); 27 | xml.async = false; 28 | xml.loadXML(data); 29 | } 30 | } 31 | else 32 | { 33 | xml = data; 34 | } 35 | var $xml = $(xml); 36 | var $state = $xml.find('State'); 37 | if ($state) 38 | { 39 | g_stateLogin = (parseInt($state.text(), 10) == 0) ? true : false; 40 | if (!g_stateLogin) 41 | { 42 | window.location.replace('home.html'); 43 | } 44 | } 45 | } 46 | }); 47 | } 48 | 49 | function logout() 50 | { 51 | var request = { 52 | 'Logout' : 1 53 | }; 54 | 55 | var logoutXml = object2xml('request', request); 56 | saveAjaxData('api/user/logout', logoutXml, function($xml) { 57 | gotoPageWithoutHistory('home.html'); 58 | }); 59 | } 60 | /*function startLogoutTimer() 61 | { 62 | clearTimeout(g_logoutTimer); 63 | g_logoutTimer = setTimeout('logout()', LOGOUT_TIMEOUT); 64 | } 65 | 66 | function cancelLogoutTimer() 67 | { 68 | clearTimeout(g_logoutTimer); 69 | }*/ 70 | 71 | startLogoutTimer(); 72 | 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SMS Gateway (Huawei HiLink) 2 | 3 | ![](image.jpg) 4 | 5 | For more information visit https://etherarp.net/building-a-sms-gateway-from-a-huawei-usb-modem/ 6 | 7 | ## Scripts 8 | - Connect/Disconnect modem `hilink_connect, hilink_disconnect` 9 | - Query device information `hilink_device_information` 10 | - Query notifications `hilink_notifications` 11 | - Query device status `hilink_status` 12 | - Query traffic statistics `hilink_traffic_stats` 13 | - Query SMS Inbox `hilink_sms_list` 14 | - Send SMS message `hilink_sms_send $message $number` 15 | - Get/Send USSD `hilink_ussd_get $ussd` `hilink_ussd_send $ussd` 16 | 17 | ## What is this? 18 | An SMS-Gateway is a server that provides an API for sending and/or receiving SMS/Text messages. 19 | The E303 (and other Hauwei modems) provide a web GUI interface and an XML API for programmatic access. This contains a set of scripts to manage Hauwei modems, including sending/receiving SMS. It has been tested on the Hauwei E303 and E3372. 20 | 21 | 22 | ## IP Addresses 23 | 24 | Hilink E303 - http://192.168.1.1 25 | 26 | Hilink E3372 - http://192.168.8.1 27 | 28 | ![](/webui.png) 29 | 30 | ## Switching to CDC_Ether mode 31 | 32 | For API Access, the device needs to run in cdc_ether modem (which is the usual default) 33 | Occasionally, it will boot into a different mode and a modeswitch command will be required 34 | 35 | ``` 36 | # Change to cdc_ether mode 37 | usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000' 38 | ``` 39 | 40 | ## What if 192.168.1.0/24 clashes with my LAN 41 | This workaround is for Linux only. 42 | ``` 43 | # Create a network namespace for the HiLink 44 | sudo ip netns add sms 45 | # Add the hilink to the network namespace and bring it online 46 | sudo ip link dev enp0s29u1u6 47 | sudo ip netns exec sms ifconfig enp0s29u1u6 up 192.168.1.100/24 48 | 49 | # Run the hilink commands inside the network namespace 50 | sudo ip netns exec sms ./hilink_status 51 | 52 | ``` 53 | 54 | ## Reverse Proxy in Nginx 55 | ``` 56 | location / { 57 | auth_basic "Restricted"; 58 | auth_basic_user_file /etc/nginx/.htpasswd; 59 | proxy_pass http://192.168.1.1; 60 | proxy_set_header Host hi.link; 61 | add_header Host hi.link; 62 | } 63 | ``` -------------------------------------------------------------------------------- /webui/js/nat.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | /****************************************************nat (start)************************************/ 3 | 4 | var natStatus; 5 | var new_status; 6 | 7 | $(document).ready(function(){ 8 | button_enable("apply", "0"); 9 | $("#ck_enable").click(function(){ 10 | onRadioChange(); 11 | }); 12 | $("#ck_disable").click(function(){ 13 | onRadioChange(); 14 | }); 15 | $("#button_apply").click(function(){ 16 | onApply(); 17 | }); 18 | initPageData(); 19 | }); 20 | 21 | function initPageData() 22 | { 23 | getAjaxData("api/security/nat", function($xml){ 24 | var upnp_ret = xml2object($xml); 25 | natStatus = parseInt(upnp_ret.response.NATType, 10); 26 | if (natStatus == 0) 27 | { 28 | $("#ck_disable").get(0).checked = true; 29 | $("#ck_enable").get(0).checked = false; 30 | } 31 | else 32 | { 33 | $("#ck_disable").get(0).checked = false; 34 | $("#ck_enable").get(0).checked = true; 35 | } 36 | }); 37 | } 38 | 39 | 40 | function onRadioChange() 41 | { 42 | if ($("#ck_enable").get(0).checked) 43 | { 44 | new_status = 1; 45 | } 46 | else 47 | { 48 | new_status = 0; 49 | } 50 | if (new_status == natStatus) 51 | { 52 | button_enable("apply", "0"); 53 | } 54 | else 55 | { 56 | button_enable("apply", "1"); 57 | } 58 | } 59 | 60 | function onApply() 61 | { 62 | if (!isButtonEnable("apply")){ 63 | return; 64 | } 65 | 66 | natStatus = new_status; 67 | var request = { 68 | NATType: natStatus 69 | }; 70 | var xmlstr = object2xml("request", request); 71 | saveAjaxData("api/security/nat", xmlstr, function($xml){ 72 | var rsp = xml2object($xml); 73 | if(isAjaxReturnOK(rsp)) 74 | { 75 | button_enable("apply", "0"); 76 | showInfoDialog(common_success); 77 | } 78 | else 79 | { 80 | initPageData(); 81 | } 82 | }); 83 | } 84 | 85 | 86 | 87 | /****************************************************nat (end)************************************/ -------------------------------------------------------------------------------- /webui/js/upnp.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | /****************************************************upnp 3 | * (start)************************************/ 4 | /*global log,firewall_hint_port_number_valid_char,firewall_hint_port_empty,common_success,isAjaxReturnOK,saveAjaxData,object2xml,isButtonEnable,clearAllErrorLabel,firewall_label_dmz_ip_address_invalid,dialup_hint_ip_address_empty,showErrorUnderTextbox,$,button_enable,onRadioChange,getAjaxData,xml2object,isValidIpAddress,showErrorUnderTextbox,showInfoDialog*/ 5 | var g_upnpStatus; 6 | var g_new_status; 7 | 8 | function initPageData() { 9 | getAjaxData("api/security/upnp", function($xml) { 10 | var upnp_ret = xml2object($xml); 11 | if(upnp_ret.type == "response") { 12 | g_upnpStatus = parseInt(upnp_ret.response.UpnpStatus, 10); 13 | if(g_upnpStatus == 0) { 14 | $("#ck_disable").get(0).checked = true; 15 | $("#ck_enable").get(0).checked = false; 16 | } 17 | else { 18 | $("#ck_disable").get(0).checked = false; 19 | $("#ck_enable").get(0).checked = true; 20 | } 21 | } 22 | else { 23 | log.error("Error, no data"); 24 | } 25 | 26 | }); 27 | } 28 | 29 | function onRadioChange() { 30 | if($("#ck_enable").get(0).checked) { 31 | g_new_status = 1; 32 | } 33 | else { 34 | g_new_status = 0; 35 | } 36 | if(g_new_status == g_upnpStatus) { 37 | button_enable("apply", "0"); 38 | } 39 | else { 40 | button_enable("apply", "1"); 41 | } 42 | } 43 | 44 | function onApply() { 45 | if(!isButtonEnable("apply")) { 46 | return; 47 | } 48 | 49 | g_upnpStatus = g_new_status; 50 | var request = { 51 | UpnpStatus : g_upnpStatus 52 | }; 53 | var xmlstr = object2xml("request", request); 54 | saveAjaxData("api/security/upnp", xmlstr, function($xml) { 55 | var rsp = xml2object($xml); 56 | if(isAjaxReturnOK(rsp)) { 57 | button_enable("apply", "0"); 58 | showInfoDialog(common_success); 59 | } 60 | else { 61 | initPageData(); 62 | } 63 | }); 64 | } 65 | 66 | $(document).ready( function() { 67 | button_enable("apply", "0"); 68 | $("#ck_enable").click( function() { 69 | onRadioChange(); 70 | }); 71 | $("#ck_disable").click( function() { 72 | onRadioChange(); 73 | }); 74 | $("#apply").click( function() { 75 | onApply(); 76 | }); 77 | initPageData(); 78 | }); 79 | /****************************************************upnp 80 | * (end)************************************/ -------------------------------------------------------------------------------- /webui/js/sipalgsettings.js: -------------------------------------------------------------------------------- 1 | var g_sipData; 2 | /*global firewall_hint_port_number_valid_char,firewall_hint_port_empty,common_success,isAjaxReturnOK,saveAjaxData,object2xml,isButtonEnable,clearAllErrorLabel,firewall_label_dmz_ip_address_invalid,dialup_hint_ip_address_empty,showErrorUnderTextbox,$,button_enable,onRadioChange,getAjaxData,xml2object,isValidIpAddress,showErrorUnderTextbox,showInfoDialog*/ 3 | 4 | function checked_ck() { 5 | if ($('#enable_sip_alg').get(0).checked == true) { 6 | $('#sip_port').attr('disabled', ''); 7 | } 8 | else if ($('#enable_sip_alg').get(0).checked == false) { 9 | $('#sip_port').attr('disabled', 'disabled'); 10 | $('#sip_port').val(g_sipData.SipPort); 11 | } 12 | } 13 | 14 | function initPage() { 15 | getAjaxData('api/security/sip', function($xml) { 16 | var ret = xml2object($xml); 17 | g_sipData = ret.response; 18 | $('#enable_sip_alg').get(0).checked = (g_sipData.SipStatus == 1) ? true : false; 19 | $('#sip_port').val(g_sipData.SipPort); 20 | checked_ck(); 21 | }); 22 | } 23 | 24 | function validateSIP() { 25 | var ret = true; 26 | var sipEnable = $('#enable_sip_alg').get(0).checked ? 1 : 0; 27 | var sipPort = $('#sip_port').val(); 28 | if (sipEnable == 1) { 29 | if (isNaN(sipPort) || $.trim($('#sip_port').val()) == ''||$.trim($('#sip_port').val()).indexOf('.')>-1) { 30 | showErrorUnderTextbox('sip_port', firewall_hint_port_empty); 31 | $('#sip_port').focus(); 32 | ret = false; 33 | } 34 | else if ((sipPort < 1) || (sipPort > 65535)) { 35 | showErrorUnderTextbox('sip_port', firewall_hint_port_number_valid_char); 36 | $('#sip_port').focus(); 37 | ret = false; 38 | } 39 | } 40 | return ret; 41 | } 42 | 43 | function apply() { 44 | clearAllErrorLabel(); 45 | if (!isButtonEnable('apply_button')) { 46 | return; 47 | } 48 | 49 | if (validateSIP() == true) { 50 | g_sipData.SipStatus = $('#enable_sip_alg').get(0).checked ? 1 : 0; 51 | g_sipData.SipPort = $.trim($('#sip_port').val()); 52 | var xmlstr_sip = object2xml('request', g_sipData); 53 | saveAjaxData('api/security/sip', xmlstr_sip, function($xml) { 54 | var ret = xml2object($xml); 55 | if (isAjaxReturnOK(ret)) { 56 | button_enable('apply_button', '0'); 57 | $('#sip_port').val($.trim($('#sip_port').val())); 58 | showInfoDialog(common_success); 59 | } 60 | else 61 | { 62 | showInfoDialog(common_failed); 63 | setTimeout('initPage()', 3000); 64 | } 65 | }); 66 | } 67 | } 68 | 69 | $(document).ready(function() { 70 | 71 | initPage(); 72 | button_enable('apply_button', '0'); 73 | 74 | $('#apply_button').click(function() { 75 | apply(); 76 | }); 77 | $('#enable_sip_alg').click(function() { 78 | checked_ck(); 79 | }); 80 | $('input').bind('change input paste cut keydown', function() { 81 | button_enable('apply_button', '1'); 82 | }); 83 | }); 84 | -------------------------------------------------------------------------------- /webui/js/firewallswitch.js: -------------------------------------------------------------------------------- 1 | var g_firewallSwitchData; 2 | var isFirewallwanportpingswitch_enable = false; 3 | $(document).ready(function() { 4 | button_enable('apply_button', '0'); 5 | $("input[name='firewallswitch']").click(function() { 6 | button_enable('apply_button', '1'); 7 | checked_ck(); 8 | }); 9 | initPage(); 10 | }); 11 | 12 | function initPage() { 13 | getAjaxData('api/security/firewall-switch', function($xml) { 14 | var ret = xml2object($xml); 15 | if (ret.type == 'response') 16 | { 17 | g_firewallSwitchData = ret.response; 18 | $('#checkbox_FirewallMainSwitch').get(0).checked = (g_firewallSwitchData.FirewallMainSwitch == 1); 19 | $('#checkbox_FirewallIPFilterSwitch').get(0).checked = (g_firewallSwitchData.FirewallIPFilterSwitch == 1); 20 | $('#checkbox_FirewallWanPortPingSwitch').get(0).checked = (g_firewallSwitchData.FirewallWanPortPingSwitch == 0); 21 | checked_ck(); 22 | } 23 | }); 24 | 25 | setDisplay(); 26 | } 27 | function setDisplay() 28 | { 29 | getConfigData('config/firewall/config.xml', function($xml) { 30 | var ret = _xml2feature($xml); 31 | if('0' == ret.firewallwanportpingswitch_enable) 32 | { 33 | $('#firewallWanPortPingSwitch').hide(); 34 | } 35 | else { 36 | $('#firewallWanPortPingSwitch').show(); 37 | } 38 | }); 39 | 40 | 41 | } 42 | function apply() { 43 | clearAllErrorLabel(); 44 | if (!isButtonEnable('apply_button')) { 45 | return; 46 | } 47 | g_firewallSwitchData.FirewallMainSwitch = $('#checkbox_FirewallMainSwitch').get(0).checked ? 1 : 0; 48 | g_firewallSwitchData.FirewallIPFilterSwitch = $('#checkbox_FirewallIPFilterSwitch').get(0).checked ? 1 : 0; 49 | g_firewallSwitchData.FirewallWanPortPingSwitch = $('#checkbox_FirewallWanPortPingSwitch').get(0).checked ? 0 : 1; 50 | 51 | var xmlstr_security = object2xml('request', g_firewallSwitchData); 52 | saveAjaxData('api/security/firewall-switch', xmlstr_security, function($xml) { 53 | var ret = xml2object($xml); 54 | if (isAjaxReturnOK(ret)) 55 | { 56 | button_enable('apply_button', '0'); 57 | showInfoDialog(common_success); 58 | } 59 | else 60 | { 61 | initPage(); 62 | } 63 | }); 64 | } 65 | 66 | // 67 | function checked_ck() { 68 | if ($('#checkbox_FirewallMainSwitch').attr('checked') == true) 69 | { 70 | $('#checkbox_FirewallIPFilterSwitch').attr('disabled', ''); 71 | $('#checkbox_FirewallWanPortPingSwitch').attr('disabled', ''); 72 | $('#label_enable').css('color', '#000000'); 73 | $('#label_disable').css('color', '#000000'); 74 | } 75 | if ($('#checkbox_FirewallMainSwitch').attr('checked') == false) 76 | { 77 | $('#checkbox_FirewallIPFilterSwitch').attr('disabled', 'disabled'); 78 | $('#checkbox_FirewallWanPortPingSwitch').attr('disabled', 'disabled'); 79 | $('#label_enable').css('color', '#baaaaa'); 80 | $('#label_disable').css('color', '#baaaaa'); 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /webui/js/table.js: -------------------------------------------------------------------------------- 1 | var g_config_firewall = null; 2 | // delete item 3 | function deleteFilter(deleteIndex, item){ 4 | item.eq(deleteIndex).remove(); 5 | } 6 | //if there hasn't any add or delete button it won't work 7 | $(".button_delete_list").live("click", function(){ 8 | if($(".add_item_control:hidden").size() > 0 && $("#edit_item_ok").size() < 1){ 9 | var deleteIndex = $(".button_delete_list").index(this); 10 | call_dialog(common_delete, firewall_hint_delete_list_item, common_ok, "pop_OK", common_cancel, "pop_Cancel"); 11 | $("#pop_OK").click(function(){ 12 | deleteFilter(deleteIndex, $(".user_add_line")); 13 | clearDialog(); 14 | button_enable("apply", "1"); 15 | button_enable("add_item", "1"); 16 | }); 17 | } 18 | }); 19 | 20 | //function for add item 21 | //addFilter(insertNode,tdText1,tdText2,tdText3,...); 22 | function addFilter(insertNode){ 23 | var addLine = null; 24 | var i = 1; 25 | addLine = ""; 26 | for ( i = 1; i < arguments.length; i++ ) 27 | { 28 | addLine += "" + arguments[i] + ""; 29 | } 30 | addLine += "" + common_edit + "  " + common_delete + ""; 31 | 32 | var currentTrTotal = $(insertNode).size(); 33 | $(insertNode).eq(currentTrTotal - 2).after(addLine); 34 | } 35 | 36 | //show add item control 37 | function showAddItemControl(){ 38 | $(".add_item_control").show(); 39 | } 40 | 41 | //hide add item control 42 | function hideAddItemControl(){ 43 | $(".add_item_control").hide(); 44 | } 45 | 46 | function getDArrayElement( obj, item, which ){ 47 | var val = ""; 48 | if ( obj && $.isArray(obj) ) 49 | { 50 | $(obj).each( function(i){ 51 | if( "value" == which ) 52 | { 53 | if ( obj[i][0] == item ) 54 | { 55 | val = obj[i][1]; 56 | } 57 | } 58 | else if( "key" == which ) 59 | { 60 | if ( obj[i][1] == item ) 61 | { 62 | val = obj[i][0]; 63 | } 64 | } 65 | else 66 | { 67 | } 68 | }); 69 | } 70 | 71 | return val; 72 | } 73 | 74 | function createSelect( where, id, option ){ 75 | where.html(""); 76 | 77 | if( $.isArray(option) ) 78 | { 79 | $(option).each( function(n){ 80 | $("#"+ id).append(""); 81 | }); 82 | } 83 | } 84 | 85 | function initSelectOption( ids, dArray ){ 86 | var i=0; 87 | for (i=0; i < dArray.length; i++) { 88 | if( $.isArray(ids) ) 89 | { 90 | $(ids).each( function(n){ 91 | $("#" + ids[n]).append(""); 92 | }); 93 | } 94 | else 95 | { 96 | $("#" + ids).append(""); 97 | } 98 | } 99 | } 100 | 101 | function getFirewallConfigData(){ 102 | getConfigData('config/firewall/config.xml', function($xml) { 103 | g_config_firewall = _xml2feature($xml); 104 | }, 105 | { 106 | sync: true 107 | } 108 | ); 109 | } 110 | getFirewallConfigData(); 111 | 112 | -------------------------------------------------------------------------------- /webui/js/dmzsettings.js: -------------------------------------------------------------------------------- 1 | var g_dmzData; 2 | var g_dhcpData; 3 | /*global common_success,isAjaxReturnOK,saveAjaxData,object2xml,isButtonEnable,clearAllErrorLabel,firewall_label_dmz_ip_address_invalid,dialup_hint_ip_address_empty,showErrorUnderTextbox,$,button_enable,onRadioChange,getAjaxData,xml2object,isValidIpAddress,showErrorUnderTextbox,showInfoDialog*/ 4 | 5 | function updateDmzRadioStatus() { 6 | if ($("[name='dmz_status']:checked").val() == 0) { 7 | $('#dmz_ip_address').attr('disabled', 'disabled'); 8 | $('#dmz_ip_address').val(g_dmzData.DmzIPAddress); 9 | } 10 | else { 11 | $('#dmz_ip_address').attr('disabled', ''); 12 | } 13 | } 14 | 15 | function initPage() { 16 | getAjaxData('api/dhcp/settings', function($xml) { 17 | var ret = xml2object($xml); 18 | if (ret.type == 'response') { 19 | g_dhcpData = ret.response; 20 | } 21 | }); 22 | 23 | getAjaxData('api/security/dmz', function($xml) { 24 | var ret = xml2object($xml); 25 | if (ret.type == 'response') { 26 | g_dmzData = ret.response; 27 | $("input[name='dmz_status'][value=" + g_dmzData.DmzStatus + ']').attr('checked', true); 28 | $('#dmz_ip_address').val(g_dmzData.DmzIPAddress); 29 | updateDmzRadioStatus(); 30 | } 31 | }); 32 | } 33 | 34 | function isSameBeforThreeAddrs(ip1,ip2){ 35 | var addrParts1 = ip1.split("."); 36 | var addrParts2 = ip2.split("."); 37 | for (i = 0; i < 3; i++) 38 | { 39 | if ((Number(addrParts1[i])) != (Number(addrParts2[i])) ) 40 | { 41 | return false; 42 | } 43 | } 44 | return true; 45 | } 46 | function validateDmz() { 47 | var dmzIP = $('#dmz_ip_address').val(); 48 | var checkIPResult = isValidIpAddress(dmzIP); 49 | if (false == checkIPResult) { 50 | showErrorUnderTextbox('dmz_error', dialup_hint_ip_address_empty); 51 | $('#dmz_ip_address').focus(); 52 | return false; 53 | } 54 | if (false == isSameBeforThreeAddrs(dmzIP, g_dhcpData.DhcpIPAddress)) 55 | { 56 | showErrorUnderTextbox('dmz_ip_address', dialup_hint_ip_address_empty); 57 | $('#dmz_ip_address').focus(); 58 | return false; 59 | } 60 | if (false == isBroadcastOrNetworkAddress(dmzIP, g_dhcpData.DhcpLanNetmask)) { 61 | showErrorUnderTextbox('dmz_error', dialup_hint_ip_address_empty); 62 | $('#dmz_ip_address').focus(); 63 | return false; 64 | } 65 | if (dmzIP == g_dhcpData.DhcpIPAddress) { 66 | showErrorUnderTextbox('dmz_error', dialup_hint_ip_address_empty); 67 | $('#dmz_ip_address').focus(); 68 | return false; 69 | } 70 | return true; 71 | } 72 | 73 | function apply() { 74 | clearAllErrorLabel(); 75 | if (!isButtonEnable('apply_button')) 76 | { 77 | return; 78 | } 79 | 80 | if (validateDmz()) { 81 | g_dmzData.DmzStatus = $("[name='dmz_status']:checked").val(); 82 | g_dmzData.DmzIPAddress = $('#dmz_ip_address').val(); 83 | var xmlstr = object2xml('request', g_dmzData); 84 | button_enable('apply_button', '0'); 85 | saveAjaxData('api/security/dmz', xmlstr, function($xml) { 86 | var ret = xml2object($xml); 87 | if (isAjaxReturnOK(ret)) { 88 | showInfoDialog(common_success); 89 | } 90 | else { 91 | button_enable('apply_button', '1'); 92 | initPage(); 93 | } 94 | }); 95 | } 96 | } 97 | $(document).ready(function() { 98 | $('input').bind('change input paste cut keydown', function() { 99 | button_enable('apply_button', '1'); 100 | }); 101 | $("[name='dmz_status']").click(function() { 102 | updateDmzRadioStatus(); 103 | }); 104 | button_enable('apply_button', '0'); 105 | 106 | initPage(); 107 | }); -------------------------------------------------------------------------------- /scripts/E3372.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | 4 | webroot="http://192.168.8.1/api" 5 | curl_options="-fsSLH Host:hi.link" 6 | 7 | # 8 | # Get a cookie/session id 9 | # 10 | RESPONSE=`curl $curl_options -X GET $webroot/webserver/SesTokInfo` 11 | COOKIE=`echo "$RESPONSE"| grep SessionID=| cut -b 10-147` 12 | TOKEN=`echo "$RESPONSE"| grep TokInfo| cut -b 10-41` 13 | 14 | if [ -e /usr/bin/xml_pp ]; then 15 | pretty_print="/usr/bin/xml_pp"; 16 | else 17 | pretty_print="/usr/bin/tee"; 18 | fi 19 | 20 | case "$1" in 21 | connect) 22 | curl $curl_options \ 23 | -X POST "$webroot/dialup/dial" \ 24 | -H "Cookie:$COOKIE" \ 25 | -H "__RequestVerificationToken:$TOKEN" \ 26 | -d"1" | $pretty_print 27 | ;; 28 | disconnect) 29 | curl $curl_options \ 30 | -X POST "$webroot/dialup/dial" \ 31 | -H "Cookie:$COOKIE" \ 32 | -H "__RequestVerificationToken:$TOKEN" \ 33 | -d "1" | $pretty_print 34 | ;; 35 | send_sms) 36 | curl $curl_options \ 37 | -X POST "$webroot/sms/send-sms" \ 38 | -H "Cookie:$COOKIE" \ 39 | -H "__RequestVerificationToken:$TOKEN" \ 40 | -d "-1$2$sca$3${#3}1-1" 41 | ;; 42 | get_sms) 43 | curl $curl_options \ 44 | -X POST "$webroot/sms/sms-list" \ 45 | -H "Cookie:$COOKIE" \ 46 | -H "__RequestVerificationToken:$TOKEN" \ 47 | -d "1"${2:-1}"1001"|$pretty_print 48 | ;; 49 | sms_count) 50 | curl $curl_options \ 51 | -X GET "$webroot/sms/sms-count" \ 52 | -H "Cookie:$COOKIE" \ 53 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 54 | ;; 55 | traffic_statistics) 56 | curl $curl_options \ 57 | -X GET "$webroot/monitoring/traffic-statistics" \ 58 | -H "Cookie:$COOKIE" \ 59 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 60 | ;; 61 | check_notifications) 62 | curl $curl_options \ 63 | -X GET "$webroot/monitoring/check-notifications" \ 64 | -H "Cookie:$COOKIE" \ 65 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 66 | ;; 67 | status) 68 | curl $curl_options \ 69 | -X GET "$webroot/monitoring/status" \ 70 | -H "Cookie:$COOKIE" \ 71 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 72 | ;; 73 | dialup_connection) 74 | curl $curl_options \ 75 | -X GET "$webroot/dialup/connection" \ 76 | -H "Cookie:$COOKIE" \ 77 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 78 | ;; 79 | device_information) 80 | curl $curl_options \ 81 | -X GET "$webroot/device/information" \ 82 | -H "Cookie:$COOKIE" \ 83 | -H "__RequestVerificationToken:$TOKEN" | $pretty_print 84 | ;; 85 | 86 | send_ussd) 87 | curl $curl_options \ 88 | -X POST "$webroot/ussd/send" \ 89 | -H "Cookie:$COOKIE" \ 90 | -H "__RequestVerificationToken:$TOKEN" \ 91 | -d "$2CodeType"| $pretty_print; 92 | ;; 93 | get_ussd) 94 | curl $curl_options \ 95 | -X POST "$webroot/ussd/get" \ 96 | -H "Cookie: $COOKIE" \ 97 | -H "__RequestVerificationToken: $TOKEN" \ 98 | -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \ 99 | -d "$2CodeType"|$pretty_print; 100 | ;; 101 | *) 102 | cat >&2 << EOF 103 | ############################################# 104 | # HILINK E3372 TOOL (rohan@rmolloy.io) # 105 | ############################################# 106 | connect) 107 | Brings the modem online 108 | 109 | disconnect) 110 | Brings the modem offline 111 | 112 | send_sms) 113 | Send an sms message 114 | Usage: send_sms '\$mobile_number' '\$message' 115 | 116 | get_sms) 117 | Poll the sms inbox 118 | Usage: get_sms '\$count' 119 | 120 | sms_count) 121 | Query number of SMS message 122 | 123 | traffic_statistics) 124 | Report traffic statistics 125 | 126 | check_notifications) 127 | Poll for new notification 128 | 129 | status) 130 | Report device status 131 | 132 | dialup_connection) 133 | Report dialup connection 134 | 135 | device_information) 136 | Report device information 137 | 138 | send_ussd) 139 | Send a USSD request 140 | Usage: send_ussd '\$ussd_number' 141 | 142 | get_ussd) 143 | Query USSD response 144 | Usage: get_ussd '\$ussd_number' 145 | 146 | EOF 147 | ;; 148 | esac 149 | 150 | -------------------------------------------------------------------------------- /webui/html/smsinbox.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 | 24 |
25 |
26 |
27 |
28 |
29 |
30 | 35 |
36 |

37 |
38 |
39 |
40 | 41 | 42 | 43 |
44 | 45 | 46 | 49 | 54 | 59 | 64 | 65 |
47 | 48 | 50 | 53 | 55 | 58 | 60 | 63 |
66 | 67 | 68 | 99 | 100 |
69 |
70 | 71 | 72 |   73 | 74 | 75 |   76 | 77 | 78 | 79 |   80 | 81 | 82 |   83 | 84 | 85 | 86 | 88 | 89 | 93 | 94 | 95 | 96 | 97 |
98 |
101 |
102 | 103 |
104 | 105 |
106 | 107 | 109 |
110 |
111 |
112 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /webui/html/mobileconnection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |

30 | 31 |

32 |
33 |
34 |

35 | 39 |

40 | 41 | 42 | 48 | 54 | 55 | 56 | 57 | 65 | 66 | 67 | 73 | 76 | 77 |
43 | 47 | 49 | 50 | 52 | 53 |
78 |
79 | 80 |
81 |
82 |
83 |
84 |
85 | 87 |
88 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /webui/js/deviceinformation.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | var g_device_array = []; 3 | var g_device_config = {}; 4 | var g_device_info = {}; 5 | 6 | function getDeviceInfo() { 7 | getAjaxData('api/monitoring/status', function($xml) { 8 | var ret = xml2object($xml); 9 | if (ret.type == 'response') { 10 | G_MonitoringStatus = ret; 11 | } 12 | }, { 13 | sync: true 14 | }); 15 | getAjaxData('api/device/information', function($xml) { 16 | var device_ret = xml2object($xml); 17 | if (device_ret.type == 'response') { 18 | g_device_info = device_ret.response; 19 | g_device_info.WanIPAddress = G_MonitoringStatus.response.WanIPAddress; 20 | g_device_info.WanIPv6Address = G_MonitoringStatus.response.WanIPv6Address; 21 | } else { 22 | log.error('Error, no data'); 23 | } 24 | }, { 25 | sync: true 26 | }); 27 | } 28 | 29 | function getDeviceConfig() { 30 | getConfigData('config/deviceinformation/config.xml', function($xml) { 31 | var config_ret = _xml2feature($xml); 32 | if ('undefined' !== config_ret && null !== config_ret) 33 | { 34 | g_device_config = config_ret; 35 | } 36 | }, { 37 | sync: true 38 | }); 39 | } 40 | 41 | function createListForDevice(_name, _value) { 42 | var tdName = ''; 43 | var values = common_unknown; 44 | var row = ''; 45 | switch (_name) { 46 | case 'DeviceName': 47 | tdName = system_label_device_name; 48 | break; 49 | 50 | case 'SerialNumber': 51 | tdName = system_label_serial_number; 52 | break; 53 | 54 | case 'Imei': 55 | tdName = system_label_imei; 56 | break; 57 | 58 | case 'Imsi': 59 | tdName = device_information_imsi; 60 | break; 61 | 62 | case 'HardwareVersion': 63 | tdName = system_label_hardware_version; 64 | break; 65 | 66 | case 'SoftwareVersion': 67 | tdName = system_label_software_version; 68 | break; 69 | 70 | case 'WebUIVersion': 71 | tdName = system_label_webui_version; 72 | break; 73 | case 'MacAddress1': 74 | if (g_device_info.MacAddress2 == '') { 75 | tdName = wlan_label_mac_address; 76 | 77 | } else { 78 | tdName = IDS_common_mac_address_x.replace('%d', 1); 79 | } 80 | break; 81 | case 'MacAddress2': 82 | if (g_device_info.MacAddress2 != '') { 83 | tdName = IDS_common_mac_address_x.replace('%d', 2); 84 | 85 | } else { 86 | return row; 87 | } 88 | break; 89 | case 'Iccid': 90 | tdName = system_label_iccid; 91 | break; 92 | case 'Msisdn': 93 | tdName = system_label_my_number; 94 | break; 95 | case 'ProductFamily': 96 | tdName = system_label_product_family; 97 | break; 98 | case 'Classify': 99 | tdName = system_label_classify; 100 | break; 101 | case 'WanIPAddress': 102 | tdName = system_label_wanip_address; 103 | break; 104 | case 'Esn' : 105 | tdName = system_label_esn; 106 | break; 107 | case 'Meid' : 108 | if(g_device_info.Esn.charAt(0) == '8' && g_device_info.Esn.charAt(1) == '0' ) 109 | { 110 | tdName = system_label_meid; 111 | break; 112 | } 113 | else 114 | { 115 | return row; 116 | } 117 | case 'WanIPv6Address': 118 | tdName = system_label_wan_IPv6_addr; 119 | break; 120 | 121 | default: 122 | break; 123 | } 124 | if (tdName == system_label_my_number) 125 | { 126 | row = '' + tdName + common_colon + "" + (_value == '' ? values : _value) + ''; 127 | } 128 | else 129 | { 130 | row = '' + tdName + common_colon + "" + (_value == '' ? values : _value) + ''; 131 | } 132 | return row; 133 | } 134 | //Switch device info to display refrence device configuration xml 135 | function setDeviceDisplay(_device_config, _device_info) { 136 | var list_content = ''; 137 | var p = ''; 138 | for (p in _device_info) { 139 | if (_device_config[p.toLowerCase()]) { 140 | if (typeof(_device_info[p]) != 'undefinded') { 141 | list_content += createListForDevice(p, _device_info[p]); 142 | } 143 | else { 144 | log.error("device dosen't exsited"); 145 | } 146 | } 147 | } 148 | $('.diviceInfo_table').html(list_content); 149 | } 150 | 151 | getDeviceConfig(); 152 | 153 | $(document).ready(function() { 154 | getDeviceInfo(); 155 | setDeviceDisplay(g_device_config, g_device_info); 156 | }); -------------------------------------------------------------------------------- /webui/js/country.js: -------------------------------------------------------------------------------- 1 | var g_countryChannel = null; 2 | var countryArray = null; 3 | function getConfig(){ 4 | getConfigData('config/wifi/countryChannel.xml', function($xml) { 5 | var i = 0; 6 | g_countryChannel = _xml2feature($xml); 7 | countryArray = [ 8 | ['AL', g_countryChannel.al, wlan_country_al], 9 | ['DZ', g_countryChannel.dz, wlan_country_dz], 10 | ['AR', g_countryChannel.ar, wlan_country_ar], 11 | ['AM', g_countryChannel.am, wlan_country_am], 12 | ['AU', g_countryChannel.au, wlan_country_au], 13 | ['AT', g_countryChannel.at, wlan_country_at], 14 | ['AZ', g_countryChannel.az, wlan_country_az], 15 | ['BH', g_countryChannel.bh, wlan_country_bh], 16 | ['BY', g_countryChannel.by, wlan_country_by], 17 | ['BE', g_countryChannel.be, wlan_country_be], 18 | ['BZ', g_countryChannel.bz, wlan_country_bz], 19 | ['BO', g_countryChannel.bo, wlan_country_bo], 20 | ['BR', g_countryChannel.br, wlan_country_br], 21 | ['BN', g_countryChannel.bn, wlan_country_bn], 22 | ['BG', g_countryChannel.bg, wlan_country_bg], 23 | ['CA', g_countryChannel.ca, wlan_country_ca], 24 | ['CL', g_countryChannel.cl, wlan_country_cl], 25 | ['CN', g_countryChannel.cn, wlan_country_cn], 26 | ['CO', g_countryChannel.co, wlan_country_co], 27 | ['CR', g_countryChannel.cr, wlan_country_cr], 28 | ['HR', g_countryChannel.hr, wlan_country_hr], 29 | ['CY', g_countryChannel.cy, wlan_country_cy], 30 | ['CZ', g_countryChannel.cz, wlan_country_cz], 31 | ['DK', g_countryChannel.dk, wlan_country_dk], 32 | ['DO', g_countryChannel.doy, wlan_country_do], 33 | ['EC', g_countryChannel.ec, wlan_country_ec], 34 | ['EG', g_countryChannel.eg, wlan_country_eg], 35 | ['SV', g_countryChannel.sv, wlan_country_sv], 36 | ['EE', g_countryChannel.ee, wlan_country_ee], 37 | ['FI', g_countryChannel.fi, wlan_country_fi], 38 | ['FR', g_countryChannel.fr, wlan_country_fr], 39 | ['DE', g_countryChannel.de, wlan_country_de], 40 | ['GE', g_countryChannel.ge, wlan_country_ge], 41 | ['GR', g_countryChannel.gr, wlan_country_gr], 42 | ['GT', g_countryChannel.gt, wlan_country_gt], 43 | ['HN', g_countryChannel.hn, wlan_country_hn], 44 | ['HK', g_countryChannel.hk, wlan_country_hk], 45 | ['HU', g_countryChannel.hu, wlan_country_hu], 46 | ['IS', g_countryChannel.is, wlan_country_is], 47 | ['IN', g_countryChannel.ind, wlan_country_in], 48 | ['ID', g_countryChannel.id, wlan_country_id], 49 | ['IR', g_countryChannel.ir, wlan_country_ir], 50 | ['IE', g_countryChannel.ie, wlan_country_ie], 51 | ['IL', g_countryChannel.il, wlan_country_il], 52 | ['IT', g_countryChannel.it, wlan_country_it], 53 | ['JP', g_countryChannel.jr, wlan_country_jp], 54 | ['JO', g_countryChannel.jo, wlan_country_jo], 55 | ['KZ', g_countryChannel.kz, wlan_country_kz], 56 | ['KR', g_countryChannel.kr, wlan_country_kr], 57 | ['KP', g_countryChannel.kp, wlan_country_kp], 58 | ['KW', g_countryChannel.kw, wlan_country_kw], 59 | ['LB', g_countryChannel.lb, wlan_country_lb], 60 | ['LV', g_countryChannel.lv, wlan_country_lv], 61 | ['LI', g_countryChannel.li, wlan_country_li], 62 | ['LT', g_countryChannel.lt, wlan_country_lt], 63 | ['LU', g_countryChannel.lu, wlan_country_lu], 64 | ['MA', g_countryChannel.ma, wlan_country_ma], 65 | ['MK', g_countryChannel.mk, wlan_country_mk], 66 | ['MY', g_countryChannel.my, wlan_country_my], 67 | ['MO', g_countryChannel.mo, wlan_country_mo], 68 | ['MX', g_countryChannel.mx, wlan_country_mx], 69 | ['MC', g_countryChannel.mc, wlan_country_mc], 70 | ['NL', g_countryChannel.nl, wlan_country_nl], 71 | ['NZ', g_countryChannel.nz, wlan_country_nz], 72 | ['NO', g_countryChannel.no, wlan_country_no], 73 | ['OM', g_countryChannel.om, wlan_country_om], 74 | ['PK', g_countryChannel.pk, wlan_country_pk], 75 | ['PA', g_countryChannel.pa, wlan_country_pa], 76 | ['PE', g_countryChannel.pe, wlan_country_pe], 77 | ['PH', g_countryChannel.ph, wlan_country_ph], 78 | ['PL', g_countryChannel.pl, wlan_country_pl], 79 | ['PT', g_countryChannel.pt, wlan_country_pt], 80 | ['PR', g_countryChannel.pr, wlan_country_pr], 81 | ['QA', g_countryChannel.qa, wlan_country_qa], 82 | ['RO', g_countryChannel.ro, wlan_country_ro], 83 | ['RU', g_countryChannel.ru, wlan_country_ru], 84 | ['SA', g_countryChannel.sa, wlan_country_sa], 85 | ['SG', g_countryChannel.sg, wlan_country_sg], 86 | ['SK', g_countryChannel.sk, wlan_country_sk], 87 | ['SI', g_countryChannel.si, wlan_country_si], 88 | ['ZA', g_countryChannel.za, wlan_country_za], 89 | ['ES', g_countryChannel.es, wlan_country_es], 90 | ['SE', g_countryChannel.se, wlan_country_se], 91 | ['CH', g_countryChannel.ch, wlan_country_ch], 92 | ['SY', g_countryChannel.sy, wlan_country_sy], 93 | ['TW', g_countryChannel.tw, wlan_country_tw], 94 | ['TH', g_countryChannel.th, wlan_country_th], 95 | ['TT', g_countryChannel.tt, wlan_country_tt], 96 | ['TN', g_countryChannel.tn, wlan_country_tn], 97 | ['TR', g_countryChannel.tr, wlan_country_tr], 98 | ['UA', g_countryChannel.ua, wlan_country_ua], 99 | ['AE', g_countryChannel.ae, wlan_country_ae], 100 | ['GB', g_countryChannel.gb, wlan_country_gb], 101 | ['US', g_countryChannel.us, wlan_country_us], 102 | ['UY', g_countryChannel.uy, wlan_country_uy], 103 | ['UZ', g_countryChannel.uz, wlan_country_uz], 104 | ['VE', g_countryChannel.ve, wlan_country_ve], 105 | ['VN', g_countryChannel.vn, wlan_country_vn], 106 | ['YE', g_countryChannel.ye, wlan_country_ye], 107 | ['ZW', g_countryChannel.zw, wlan_country_zw] 108 | ]; 109 | for(i;i < countryArray.length;i++) 110 | { 111 | if(typeof(countryArray[i][1]) == 'undefined') 112 | { 113 | countryArray.splice(i,1); 114 | i--; 115 | } 116 | } 117 | }, { 118 | sync: true 119 | }); 120 | } 121 | getConfig(); 122 | -------------------------------------------------------------------------------- /webui/js/redirect.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | /**************Constant for check SIM card, PIN, [PUK]***************/ 3 | //sim 4 | var MACRO_SAVE_PIN_ENABLED = "1"; 5 | var MACRO_SAVE_PIN_DISABLED = "0"; 6 | var SIM_PIN_TIMES_DEFAULT = "3"; 7 | var SIM_SAVE_PIN_SCID = "0"; 8 | var SIM_SAVE_PIN_DEFAULT = "0"; 9 | var SIM_PUK_TIMES_DEFAULT = "10"; 10 | var MACRO_SIM_LOCK_ENABLE = "1"; 11 | var MACRO_SIM_REMAIN_TIMES = "10"; 12 | var MACRO_SIM_PLOCK_ENABLE = "0"; 13 | var MACRO_NETOWRK_SERVICE_AVAILABILITY = 2; 14 | var g_config_ota = null; 15 | var OTA_STATUS_DISABLED = 0; 16 | /***********************/ 17 | 18 | //Create object for store the Ajax response from simcard and pincode 19 | var simlock_status = { 20 | SimLockEnable: "", 21 | SimLockRemainTimes: "", 22 | pSimLockEnable: "", 23 | pSimLockRemainTimes: "" 24 | }; 25 | 26 | var pin_status = { 27 | SimState: "", 28 | PinOptState: "", 29 | SimPinTimes: "", 30 | SimPukTimes: "" 31 | }; 32 | 33 | function redirectOnCondition(prefix, postfix) { 34 | //get SIM status 35 | var ret = false; 36 | var url_prefix = ""; 37 | var g_special_redirect = "0"; 38 | if ("string" == typeof(prefix)) { 39 | url_prefix = prefix; 40 | } 41 | if("string" == typeof(postfix)) { 42 | postfix = "?" + postfix; 43 | } 44 | else { 45 | postfix=""; 46 | } 47 | getAjaxData("config/global/config.xml", function($xml) { 48 | var config_ret = xml2object($xml); 49 | g_special_redirect = config_ret.config.special_redirect; 50 | } 51 | , { 52 | sync : true 53 | } 54 | ); 55 | if("0" === g_special_redirect ){ 56 | return ret; 57 | } 58 | //get PIN status 59 | getAjaxData("api/pin/status", function($xml) { 60 | var pinstatus_ret = xml2object($xml); 61 | if ("response" == pinstatus_ret.type) { 62 | pin_status.SimState = pinstatus_ret.response.SimState; 63 | pin_status.PinOptState = pinstatus_ret.response.PinOptState; 64 | pin_status.SimPinTimes = pinstatus_ret.response.SimPinTimes; 65 | pin_status.SimPukTimes = pinstatus_ret.response.SimPukTimes; 66 | 67 | log.debug("REDIRECT : SimState is " + pin_status.SimState); 68 | //Judgement pin status 69 | if (MACRO_NO_SIM_CARD == pin_status.SimState) { 70 | log.debug("REDIRECT : SimState == MACRO_NO_SIM_CARD, redirect to nocard.html"); 71 | gotoPageWithoutHistory(url_prefix + "nocard.html" + postfix); 72 | ret = true; 73 | } 74 | else if (MACRO_CPIN_FAIL == pin_status.SimState) { 75 | log.debug("REDIRECT : SimState == MACRO_CPIN_FAIL, redirect to nocard.html"); 76 | gotoPageWithoutHistory(url_prefix + "nocard.html"); 77 | ret = true; 78 | 79 | } 80 | else if (MACRO_PIN_REQUIRED == pin_status.SimState) { 81 | log.debug("REDIRECT : SimState == MACRO_PIN_REQUIRED, redirect to pincoderequired.html"); 82 | 83 | if ((typeof(G_StateLogin)!="undefined") && G_StateLogin) { 84 | gotoPageWithoutHistory(url_prefix + "pincodemanagement.html"); 85 | ret = true; 86 | } 87 | else { 88 | gotoPageWithoutHistory(url_prefix + "pincoderequired.html" + postfix); 89 | ret = true; 90 | } 91 | } 92 | else if (MACRO_PUK_REQUIRED == pin_status.SimState) { 93 | log.debug("REDIRECT : SimState == MACRO_PUK_REQUIRED, redirect to pukrequired.html"); 94 | 95 | if ((typeof(G_StateLogin)!="undefined") && G_StateLogin) { 96 | gotoPageWithHistory(url_prefix + "pukrequired_login.html"); 97 | ret = true; 98 | } 99 | else { 100 | gotoPageWithoutHistory(url_prefix + "pukrequired.html" + postfix); 101 | ret = true; 102 | } 103 | } 104 | } 105 | else { 106 | log.error("REDIRECT : Load api/pin/status file failed"); 107 | } 108 | }, { 109 | sync : true 110 | } 111 | ); 112 | 113 | if (ret) { 114 | return true; 115 | } 116 | // get simlock 117 | getAjaxData("api/pin/simlock", function($xml) { 118 | var simlock_ret = xml2object($xml); 119 | if (simlock_ret.type == "response") { 120 | simlock_status.SimLockEnable = simlock_ret.response.SimLockEnable; 121 | simlock_status.SimLockRemainTimes = simlock_ret.response.SimLockRemainTimes; 122 | simlock_status.pSimLockEnable = simlock_ret.response.pSimLockEnable; 123 | simlock_status.pSimLockRemainTimes = simlock_ret.response.pSimLockRemainTimes; 124 | //Judgement sim status 125 | log.debug("REDIRECT : SimLockEnable is " + simlock_status.SimLockEnable); 126 | if (MACRO_SIM_LOCK_ENABLE == simlock_status.SimLockEnable) { 127 | log.debug("REDIRECT : redirect to simlock page."); 128 | gotoPageWithoutHistory(url_prefix + "simlockrequired.html" + postfix); 129 | ret = true; 130 | } 131 | } 132 | else { 133 | log.error("REDIRECT : get api/pin/simlock failed"); 134 | } 135 | }, { 136 | sync : true 137 | } 138 | ); 139 | if (ret) { 140 | return true; 141 | } 142 | getConfigData('config/ota/config.xml', function($xml) { 143 | g_config_ota = xml2object($xml); 144 | }, { 145 | sync: true 146 | }); 147 | if (g_config_ota == null || g_config_ota.type == "unknown") 148 | { 149 | return ret; 150 | } 151 | if (g_config_ota != null && parseInt(g_config_ota.config.enable,10) && postfix != '?ota') { 152 | //get ota status 153 | getAjaxData("api/ota/status", function($xml) { 154 | var ota_ret = xml2object($xml); 155 | if (ota_ret.type == "response") { 156 | ota_status = ota_ret.response; 157 | if (OTA_STATUS_DISABLED ==ota_status.OtaStatus) { 158 | gotoPageWithoutHistory('ota.html'); 159 | ret = true; 160 | } 161 | } else { 162 | log.error("REDIRECT : api/ota/status failed"); 163 | } 164 | }, { 165 | sync : true 166 | } 167 | ); 168 | }; 169 | return ret; 170 | } 171 | 172 | //redirectOnCondition(); -------------------------------------------------------------------------------- /webui/js/modifypassword.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 4 | var base64DecodeChars = new Array( 5 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 8 | 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, 9 | -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 10 | 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, 11 | -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 12 | 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); 13 | 14 | function base64encode(str) { 15 | var out, i, len; 16 | var c1, c2, c3; 17 | 18 | len = str.length; 19 | i = 0; 20 | out = ''; 21 | while (i < len) 22 | { 23 | c1 = str.charCodeAt(i++) & 0xff; 24 | if (i == len) 25 | { 26 | out += base64EncodeChars.charAt(c1 >> 2); 27 | out += base64EncodeChars.charAt((c1 & 0x3) << 4); 28 | out += '=='; 29 | break; 30 | } 31 | c2 = str.charCodeAt(i++); 32 | if (i == len) 33 | { 34 | out += base64EncodeChars.charAt(c1 >> 2); 35 | out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 36 | out += base64EncodeChars.charAt((c2 & 0xF) << 2); 37 | out += '='; 38 | break; 39 | } 40 | c3 = str.charCodeAt(i++); 41 | out += base64EncodeChars.charAt(c1 >> 2); 42 | out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 43 | out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); 44 | out += base64EncodeChars.charAt(c3 & 0x3F); 45 | } 46 | return out; 47 | } 48 | 49 | function vilidatePassword() { 50 | clearAllErrorLabel(); 51 | var currenPassword = $('#current_password').val(); 52 | var newPassword = $('#new_password').val(); 53 | var confirmPassword = $('#confirm_password').val(); 54 | if ('' == currenPassword) 55 | { 56 | showErrorUnderTextbox('current_password', system_hint_current_password_empty); 57 | $('#current_password').focus(); 58 | return false; 59 | } 60 | else if (checkInputChar(currenPassword) == false) 61 | { 62 | showErrorUnderTextbox('current_password', dialup_hint_password_valid_char); 63 | $('#current_password').focus(); 64 | return false; 65 | } 66 | else if ('' == newPassword) 67 | { 68 | showErrorUnderTextbox('new_password', system_hint_new_password_empty); 69 | $('#new_password').focus(); 70 | return false; 71 | } 72 | else if ('' == confirmPassword) 73 | { 74 | showErrorUnderTextbox('confirm_password', system_hint_confirm_password_empty); 75 | $('#confirm_password').focus(); 76 | return false; 77 | } 78 | /* // These code seems meanless at all, so, elimanite it. 79 | else if ((currenPassword <= '') || (currenPassword >= '')) 80 | { 81 | showErrorUnderTextbox("current_password", system_hint_current_pwd_valid_char); 82 | $("#current_password").focus(); 83 | return false; 84 | } */ 85 | else if (true == hasSpaceOrTabAtHead(newPassword))//((newPassword <= '') || (newPassword >= '')) 86 | { 87 | showErrorUnderTextbox('new_password', input_cannot_begin_with_space); 88 | $('#new_password').focus(); 89 | return false; 90 | } 91 | else if (true == hasSpaceOrTabAtHead(confirmPassword))//((confirmPassword <= '') || (confirmPassword >= '')) 92 | { 93 | showErrorUnderTextbox('confirm_password', input_cannot_begin_with_space); 94 | $('#confirm_password').focus(); 95 | return false; 96 | } 97 | else if (newPassword != confirmPassword) 98 | { 99 | showErrorUnderTextbox('new_password', system_hint_new_and_confirm_pwd_same); 100 | $('#new_password').focus(); 101 | return false; 102 | } 103 | else if (checkInputChar(newPassword) == false) 104 | { 105 | showErrorUnderTextbox('new_password', dialup_hint_password_valid_char); 106 | $('#new_password').focus(); 107 | return false; 108 | } 109 | else 110 | { 111 | return true; 112 | } 113 | } 114 | 115 | function apply() { 116 | if (!isButtonEnable('apply_button')) 117 | { 118 | return; 119 | } 120 | 121 | var bValid = vilidatePassword(); 122 | if (bValid) 123 | { 124 | var username = 'admin'; 125 | var currentPassword = $('#current_password').val(); 126 | var newPassword = $('#new_password').val(); 127 | currentPassword = base64encode(currentPassword); 128 | newPassword = base64encode(newPassword); 129 | var request = { 130 | Username: username, 131 | CurrentPassword: currentPassword, 132 | NewPassword: newPassword 133 | }; 134 | var xmlstr = object2xml('request', request); 135 | saveAjaxData('api/user/password', xmlstr, function($xml) { 136 | var ret = xml2object($xml); 137 | if (isAjaxReturnOK(ret)) 138 | { 139 | button_enable('apply_button', '0'); 140 | $('#current_password').val(''); 141 | $('#new_password').val(''); 142 | $('#confirm_password').val(''); 143 | showInfoDialog(common_success); 144 | setTimeout('userOut()', 1000); 145 | } 146 | else if (ret.type == 'error') 147 | { 148 | showErrorUnderTextbox('current_password', system_hint_wrong_password); 149 | $('#current_password').val(''); 150 | $('#current_password').focus(); 151 | } 152 | }); 153 | } 154 | } 155 | $(document).ready(function() { 156 | $('#apply_button').click(function() { 157 | apply(); 158 | }); 159 | button_enable('apply_button', '0'); 160 | 161 | $('input').bind('change input paste cut keydown', function() { 162 | button_enable('apply_button', '1'); 163 | }); 164 | $('#current_password').focus(); 165 | }); 166 | -------------------------------------------------------------------------------- /webui/html/ussd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 |
23 | 25 |
26 |
27 |

28 | 29 |

30 |
31 |
32 | 46 | 47 |
48 |

49 | 51 |

52 |

53 | 55 |

56 | 57 | 58 | 64 | 65 | 66 |
59 |
60 | 62 |
63 |
67 |
68 | 69 |
70 |

71 | 73 |

74 |

75 | 77 |

78 | 79 | 80 | 83 | 84 | 85 | 86 | 89 | 90 |
81 | 82 |
87 | 88 |
91 |
92 | 93 |
94 |

95 | 97 |

98 |
99 | 100 | 101 | 107 | 108 | 109 | 113 | 114 | 115 | 118 | 119 | 120 | 121 | 124 | 125 |
102 |
103 | 104 |
105 |
106 |
110 | 112 |
116 | 117 |
122 | 123 |
126 |
127 |
128 | 129 |
130 | 132 |
133 |
134 |
135 |
136 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /webui/html/update.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | 29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 52 | 53 | 54 | 55 | 56 | 57 |
48 |
49 |
50 |
51 |
58 |
59 |
60 | 63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | 76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | 84 |
85 |
86 |

87 |
88 |
89 | 90 |
91 |
92 |
93 | 94 |
95 |
96 | 97 |
98 |
99 |
100 | 103 |
104 |
105 | 106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |

114 |
115 | 116 |
117 |
118 | 119 | 120 | 121 | 122 | 123 |
124 |
125 |
126 | 129 |
130 |
131 | 132 |
133 |
134 |
135 |
136 | 137 |
138 | 139 |
140 | 141 | 142 |
143 | 144 |
145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /webui/js/dhcp.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | /***********************************************dhcp (start)**********************/ 3 | 4 | var dhcp_value = null; 5 | var g_DHCP_SERVER_ENABLE = 1; 6 | var g_DHCP_SERVER_DISABLE = 0; 7 | var DHCP_PING_INTERVA = 50000; 8 | var DHCP_MIN_LEASE_TIME = 86400; 9 | var DHCP_MAX_LEASE_TIME = 604800; 10 | var DHCP_DEFAULT_LEASE_TIME = 86400; 11 | 12 | function enableDHCP() { 13 | var dhcpStartIPAddressTmp = ''; 14 | var dhcpEndIPAddressTmp = ''; 15 | var dhcpLeaseTimeTmp = ''; 16 | if ('' != dhcp_value.DhcpStartIPAddress && '0' != dhcp_value.DhcpStartIPAddress && '0.0.0.0' != dhcp_value.DhcpStartIPAddress) 17 | { 18 | dhcpStartIPAddressTmp = dhcp_value.DhcpStartIPAddress; 19 | } 20 | else 21 | { 22 | dhcpStartIPAddressTmp = dhcp_value.DhcpIPAddress.slice(0, dhcp_value.DhcpIPAddress.lastIndexOf('.')) + '.100'; 23 | } 24 | if ('' != dhcp_value.DhcpEndIPAddress && '0' != dhcp_value.DhcpEndIPAddress && '0.0.0.0' != dhcp_value.DhcpEndIPAddress) 25 | { 26 | dhcpEndIPAddressTmp = dhcp_value.DhcpEndIPAddress; 27 | } 28 | else 29 | { 30 | dhcpEndIPAddressTmp = dhcp_value.DhcpIPAddress.slice(0, dhcp_value.DhcpIPAddress.lastIndexOf('.')) + '.200'; 31 | } 32 | if ('' != dhcp_value.DhcpLeaseTime && '0' != dhcp_value.DhcpLeaseTime) 33 | { 34 | dhcpLeaseTimeTmp = dhcp_value.DhcpLeaseTime; 35 | } 36 | else 37 | { 38 | dhcpLeaseTimeTmp = 'DHCP_DEFAULT_LEASE_TIME'; 39 | } 40 | $('#input_dhcp_startip').val(dhcpStartIPAddressTmp).attr('disabled', false); 41 | $('#input_dhcp_endip').val(dhcpEndIPAddressTmp).attr('disabled', false); 42 | $('#input_dhcp_leasetime').val(dhcpLeaseTimeTmp).attr('disabled', false); 43 | $('#input_dhcp_startip').val(dhcp_value.DhcpStartIPAddress); 44 | $('#input_dhcp_endip').val(dhcp_value.DhcpEndIPAddress); 45 | $('#input_dhcp_leasetime').val(dhcp_value.DhcpLeaseTime); 46 | } 47 | 48 | function disabledDHCP() { 49 | $('#input_dhcp_startip').val('').attr('disabled', true); 50 | $('#input_dhcp_endip').val('').attr('disabled', true); 51 | $('#input_dhcp_leasetime').val('').attr('disabled', true); 52 | } 53 | 54 | function initPageData() { 55 | getAjaxData('api/dhcp/settings', function($xml) { 56 | var ret; 57 | ret = xml2object($xml); 58 | log.debug('type= ' + ret.type); 59 | if (ret.type == 'response') 60 | { 61 | dhcp_value = ret.response; 62 | dhcp_value.DhcpStatus = parseInt(dhcp_value.DhcpStatus, 10); 63 | $('#input_dhcp_ipaddr').val(dhcp_value.DhcpIPAddress); 64 | $('#input_dhcp_submark').val(dhcp_value.DhcpLanNetmask); 65 | $("input[name='radio_dhcp_status'][value=" + dhcp_value.DhcpStatus + ']').attr('checked', true); 66 | if (g_DHCP_SERVER_ENABLE == dhcp_value.DhcpStatus) 67 | { 68 | enableDHCP(); 69 | } 70 | else 71 | { 72 | disabledDHCP(); 73 | } 74 | } 75 | }); 76 | } 77 | 78 | function postData() { 79 | dhcp_value.DhcpIPAddress = $('#input_dhcp_ipaddr').val(); 80 | dhcp_value.DhcpLanNetmask = $('#input_dhcp_submark').val(); 81 | dhcp_value.DhcpStatus = $("input[name='radio_dhcp_status']:checked").val(); 82 | dhcp_value.DhcpStartIPAddress = $('#input_dhcp_startip').val(); 83 | dhcp_value.DhcpEndIPAddress = $('#input_dhcp_endip').val(); 84 | dhcp_value.DhcpLeaseTime = $.trim($('#input_dhcp_leasetime').val()); 85 | dhcp_value.PrimaryDns = '0.0.0.0'; 86 | dhcp_value.SecondaryDns = '0.0.0.0'; 87 | 88 | var xmlstr = object2xml('request', dhcp_value); 89 | saveAjaxData('api/dhcp/settings', xmlstr, function($xml) { 90 | var ret = xml2object($xml); 91 | if (isAjaxReturnOK(ret)) 92 | { 93 | showWaitingDialog(common_waiting, sd_hint_wait_a_few_moments, function() { 94 | }); 95 | ping_setPingAddress(dhcp_value.DhcpIPAddress); 96 | setTimeout(startPing, DHCP_PING_INTERVA); 97 | } 98 | else 99 | { 100 | initPageData(); 101 | } 102 | }); 103 | } 104 | 105 | function isBetweenStartIPAndEndIP(ipAddress, startIP, endIP) { 106 | var num = 0; 107 | var numStart = 0; 108 | var numEnd = 0; 109 | var maskParts = ipAddress.split('.'); 110 | var maskStartIPParts = startIP.split('.'); 111 | var maskEndIPParts = endIP.split('.'); 112 | 113 | num = parseInt(maskParts[3], 10); 114 | numStart = parseInt(maskStartIPParts[3], 10); 115 | numEnd = parseInt(maskEndIPParts[3], 10); 116 | if ((num >= numStart) && (num <= numEnd)) 117 | { 118 | return true; 119 | } 120 | else 121 | { 122 | return false; 123 | } 124 | } 125 | 126 | function verifyUserInput() { 127 | var dhcpIPAddresss = $('#input_dhcp_ipaddr').val(); 128 | var dhcpLanNetmask = $('#input_dhcp_submark').val(); 129 | var dhcpStatus = $("input[name='radio_dhcp_status']:checked").val(); 130 | var dhcpStartIPAddress = $('#input_dhcp_startip').val(); 131 | var dhcpEndIPAddress = $('#input_dhcp_endip').val(); 132 | var dhcpLeaseTime = $('#input_dhcp_leasetime').val(); 133 | 134 | clearAllErrorLabel(); 135 | if (!isValidIpAddress(dhcpIPAddresss)) 136 | { 137 | showErrorUnderTextbox('input_dhcp_ipaddr', dialup_hint_ip_address_empty); 138 | $('#input_dhcp_ipaddr').focus(); 139 | return false; 140 | } 141 | 142 | if (!isValidSubnetMask(dhcpLanNetmask)) 143 | { 144 | showErrorUnderTextbox('input_dhcp_submark', dhcp_hint_subnet_mask_invalid); 145 | $('#input_dhcp_submark').focus(); 146 | return false; 147 | } 148 | 149 | if (!isBroadcastOrNetworkAddress(dhcpIPAddresss, dhcpLanNetmask)) 150 | { 151 | showErrorUnderTextbox('input_dhcp_ipaddr', dialup_hint_ip_address_empty); 152 | $('#input_dhcp_ipaddr').focus(); 153 | return false; 154 | } 155 | //enable DHCP server 156 | if (1 == dhcpStatus) 157 | { 158 | if ((!isValidIpAddress(dhcpStartIPAddress)) || (dhcpIPAddresss == dhcpStartIPAddress)) 159 | { 160 | showErrorUnderTextbox('input_dhcp_startip', dhcp_hint_start_ip_address_invalid); 161 | $('#input_dhcp_startip').focus(); 162 | return false; 163 | } 164 | if (!isBroadcastOrNetworkAddress(dhcpStartIPAddress, dhcpLanNetmask)) 165 | { 166 | showErrorUnderTextbox('input_dhcp_startip', dhcp_hint_start_ip_address_invalid); 167 | $('#input_dhcp_startip').focus(); 168 | return false; 169 | } 170 | if ((!isValidIpAddress(dhcpEndIPAddress)) || (dhcpIPAddresss == dhcpEndIPAddress)) 171 | { 172 | showErrorUnderTextbox('input_dhcp_endip', dhcp_hint_end_ip_address_invalid); 173 | $('#input_dhcp_endip').focus(); 174 | return false; 175 | } 176 | if (!isBroadcastOrNetworkAddress(dhcpEndIPAddress, dhcpLanNetmask)) 177 | { 178 | showErrorUnderTextbox('input_dhcp_endip', dhcp_hint_end_ip_address_invalid); 179 | $('#input_dhcp_endip').focus(); 180 | return false; 181 | } 182 | if (!isSameSubnetAddrs(dhcpStartIPAddress, dhcpIPAddresss, dhcpLanNetmask)) 183 | { 184 | showErrorUnderTextbox('input_dhcp_startip', dhcp_hint_start_ip_address_same_subnet); 185 | $('#input_dhcp_startip').focus(); 186 | return false; 187 | } 188 | if (!isSameSubnetAddrs(dhcpEndIPAddress, dhcpIPAddresss, dhcpLanNetmask)) 189 | { 190 | showErrorUnderTextbox('input_dhcp_endip', dhcp_hint_end_ip_address_same_subnet); 191 | $('#input_dhcp_endip').focus(); 192 | return false; 193 | } 194 | if (!compareStartIpAndEndIp(dhcpStartIPAddress, dhcpEndIPAddress)) 195 | { 196 | showErrorUnderTextbox('input_dhcp_endip', dhcp_hint_end_ip_greater_start_ip); 197 | $('#input_dhcp_endip').focus(); 198 | return false; 199 | } 200 | if (-1 != dhcpLeaseTime.indexOf('.')) 201 | { 202 | showErrorUnderTextbox('input_dhcp_leasetime', dhcp_hint_dhcp_lease_time_integer); 203 | $('#input_dhcp_leasetime').focus(); 204 | return false; 205 | } 206 | else if (true == isNaN(dhcpLeaseTime)) 207 | { 208 | showErrorUnderTextbox('input_dhcp_leasetime', dhcp_hint_dhcp_lease_time_number); 209 | $('#input_dhcp_leasetime').focus(); 210 | return false; 211 | } 212 | else if ((0 == dhcpLeaseTime.indexOf('0')) && (0 != dhcpLeaseTime)) 213 | { 214 | showErrorUnderTextbox('input_dhcp_leasetime', dhcp_hint_dhcp_lease_time_invalid); 215 | $('#input_dhcp_leasetime').focus(); 216 | return false; 217 | } 218 | else if ((dhcpLeaseTime < DHCP_MIN_LEASE_TIME) || (dhcpLeaseTime > DHCP_MAX_LEASE_TIME)) 219 | { 220 | showErrorUnderTextbox('input_dhcp_leasetime', dhcp_hint_dhcp_lease_time_range); 221 | $('#input_dhcp_leasetime').focus(); 222 | return false; 223 | } 224 | else if (isBetweenStartIPAndEndIP(dhcpIPAddresss, dhcpStartIPAddress, dhcpEndIPAddress)) 225 | { 226 | showErrorUnderTextbox('input_dhcp_ipaddr', dhcp_message_ip_address_in_start_end); 227 | $('#input_dhcp_ipaddr').focus(); 228 | return false; 229 | } 230 | } 231 | return true; 232 | } 233 | 234 | function onApply() { 235 | if (!isButtonEnable('apply')) 236 | { 237 | return; 238 | } 239 | if (verifyUserInput()) 240 | { 241 | showConfirmDialog(dhcp_hint_operation_restart_device, postData, function() {}); 242 | } 243 | } 244 | 245 | 246 | $(document).ready(function() { 247 | $('input').bind('change input paste cut keydown', function() { 248 | button_enable('apply', '1'); 249 | }); 250 | button_enable('apply', '0'); 251 | 252 | $('#apply').click(function() { 253 | onApply(); 254 | }); 255 | 256 | initPageData(); 257 | }); 258 | -------------------------------------------------------------------------------- /webui/js/wlanadvanced.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | /****************************************************wlanadvanced (start)************************************/ 3 | var WLAN_CHANNEL_AUTO = '0'; 4 | var g_wlan_basicSetting = ''; //Data of WiFi Basic Setting 5 | 6 | function wlanadvanced_initChannel(channel_max) { 7 | $('#select_WifiChannel').unbind('click'); 8 | $('#select_WifiChannel').empty(); 9 | $('#select_WifiChannel').append("'); 10 | var i = 0; 11 | for (i = 1; i <= channel_max; i++) 12 | { 13 | $('#select_WifiChannel').append(''); 14 | } 15 | } 16 | 17 | function wifiCountry_channel(country) { 18 | $.each(countryArray, function(n, value) 19 | { 20 | if (value[0] == country) 21 | { 22 | wlanadvanced_initChannel(value[1]); 23 | if ($('#select_WifiChannel').val() > value[1]) 24 | { 25 | $('#select_WifiChannel').val(WLAN_CHANNEL_AUTO); 26 | } 27 | return; 28 | } 29 | }); 30 | } 31 | 32 | function wlanadvanced_initCountry() { 33 | $('#select_WifiChannel').unbind('click'); 34 | $('#select_WifiCountry').empty(); 35 | var i = 0; 36 | for (i = 0; i < countryArray.length; i++) 37 | { 38 | $('#select_WifiCountry').append(''); 39 | } 40 | } 41 | 42 | function wlanadvanced_initCountry_for_Idevice() { 43 | var $countryList = $('#select_WifiCountry_for_Idevice')[0].options; 44 | $.each(countryArray, function(n, value) 45 | { 46 | $countryList.add(new Option(value[2], value[0])); 47 | }); 48 | } 49 | 50 | function wlanadvanced_ifWifioffenable(enable) { 51 | var disable = ''; 52 | ('0' == enable) ? disable = 'disabled' : disable = ''; 53 | $('#select_WifiAutooffTime').attr('disabled', disable); 54 | } 55 | 56 | function setDataToComponentIE6() 57 | { 58 | // set wifi channel 59 | setTimeout(function() { 60 | $('#select_WifiChannel').val( g_wlan_basicSetting.WifiChannel ); 61 | }, 1); 62 | 63 | // set wifi Mode 64 | setTimeout(function() { 65 | $('#select_WifiMode').val( g_wlan_basicSetting.WifiMode ); 66 | }, 1); 67 | 68 | // set wifi Isolate 69 | if( g_module.multi_ssid_enabled ) 70 | { 71 | setTimeout(function() { 72 | $('#select_WifiIsolate_between').val( g_wlan_basicSetting.WifiIsolationBetween ); 73 | }, 1); 74 | } 75 | else 76 | { 77 | setTimeout(function() { 78 | $('#select_WifiIsolate_between').val( g_wlan_basicSetting.WifiIsolate ); 79 | }, 1); 80 | } 81 | 82 | //set wifi wifioffenable 83 | setTimeout(function() { 84 | $('#select_WifiAutooffStatus').val( g_wlan_basicSetting.Wifioffenable ); 85 | }, 1); 86 | setTimeout(function() { 87 | $('#select_WifiAutooffTime').val( g_wlan_basicSetting.Wifiofftime ); 88 | }, 1); 89 | setTimeout(function() { 90 | wlanadvanced_ifWifioffenable(g_wlan_basicSetting.Wifioffenable); 91 | }, 1); 92 | } 93 | 94 | function wlanadvanced_initPage() { 95 | if ($.browser.ipad) 96 | { 97 | $('#select_WifiCountry_for_Idevice').show(); 98 | wlanadvanced_initCountry_for_Idevice(); 99 | } 100 | else 101 | { 102 | $('#select_WifiCountry').show(); 103 | wlanadvanced_initCountry(); 104 | } 105 | var strUrl = 'api/wlan/basic-settings'; 106 | 107 | if (g_module.multi_ssid_enabled) 108 | { 109 | strUrl = 'api/wlan/multi-security-settings'; 110 | } 111 | 112 | getAjaxData(strUrl, function($xml) { 113 | var ret = xml2object($xml); 114 | if (ret.type != 'response') 115 | { 116 | return; 117 | } 118 | g_wlan_basicSetting = ret.response; 119 | 120 | // set country 121 | if ($.browser.ipad) 122 | { 123 | setTimeout(function() { 124 | $('#select_WifiCountry_for_Idevice').val(g_wlan_basicSetting.WifiCountry); 125 | }, 1); 126 | var country = g_wlan_basicSetting.WifiCountry; 127 | 128 | wifiCountry_channel(country); 129 | 130 | $('#select_WifiCountry_for_Idevice').bind('change', function() 131 | { 132 | country = $('#select_WifiCountry_for_Idevice').val(); 133 | wifiCountry_channel(country); 134 | button_enable('apply_button', '1'); 135 | }); 136 | } 137 | else 138 | { 139 | var i = 0; 140 | setTimeout(function() { 141 | $('#select_WifiCountry').val(g_wlan_basicSetting.WifiCountry); 142 | }, 1); 143 | for (i = 0; i < countryArray.length; i++) 144 | { 145 | if (countryArray[i][0] == g_wlan_basicSetting.WifiCountry) 146 | { 147 | wlanadvanced_initChannel(countryArray[i][1]); 148 | break; 149 | } 150 | } 151 | } 152 | if(($.browser.msie) && ($.browser.version == 6.0)) 153 | { 154 | setDataToComponentIE6(); 155 | } 156 | else 157 | { 158 | // set wifi channel 159 | $('#select_WifiChannel').val(g_wlan_basicSetting.WifiChannel); 160 | 161 | // set wifi Mode 162 | $('#select_WifiMode').val(g_wlan_basicSetting.WifiMode); 163 | 164 | // set wifi Isolate 165 | if (g_module.multi_ssid_enabled) 166 | { 167 | $('#select_WifiIsolate_between').val(g_wlan_basicSetting.WifiIsolationBetween); 168 | } 169 | else 170 | { 171 | $('#select_WifiIsolate_between').val(g_wlan_basicSetting.WifiIsolate); 172 | } 173 | 174 | //set wifi wifioffenable 175 | $('#select_WifiAutooffStatus').val(g_wlan_basicSetting.Wifioffenable); 176 | $('#select_WifiAutooffTime').val(g_wlan_basicSetting.Wifiofftime); 177 | 178 | wlanadvanced_ifWifioffenable(g_wlan_basicSetting.Wifioffenable); 179 | } 180 | }); 181 | } 182 | 183 | function wlanadvanced_changeChannel() { 184 | var i = 0; 185 | var wifiCountry = $.trim($('#select_WifiCountry').val()); 186 | var channelIndex = 0; 187 | for (i = 0; i < countryArray.length; i++) 188 | { 189 | log.debug('country:' + countryArray[i][2]); 190 | if (countryArray[i][0] == wifiCountry) 191 | { 192 | channelIndex = countryArray[i][1]; 193 | break; 194 | } 195 | } 196 | 197 | if ($('#select_WifiChannel').val() > channelIndex) 198 | { 199 | $('#select_WifiChannel').val(WLAN_CHANNEL_AUTO); 200 | } 201 | 202 | wlanadvanced_initChannel(channelIndex); 203 | } 204 | 205 | function ifWifioffenable_apply() { 206 | if (!isButtonEnable('apply_button')) 207 | { 208 | return; 209 | } 210 | 211 | // set wifi country 212 | if ($.browser.ipad) 213 | { 214 | g_wlan_basicSetting.WifiCountry = $('#select_WifiCountry_for_Idevice').val(); 215 | } 216 | else 217 | { 218 | g_wlan_basicSetting.WifiCountry = $('#select_WifiCountry').val(); 219 | } 220 | 221 | g_wlan_basicSetting.WifiChannel = $('#select_WifiChannel').val(); 222 | 223 | // set wifi mode 224 | g_wlan_basicSetting.WifiMode = $('#select_WifiMode').val(); 225 | 226 | // set wifi auto off enable status 227 | g_wlan_basicSetting.Wifioffenable = $('#select_WifiAutooffStatus').val(); 228 | 229 | // set WiFi AP isolate 230 | if (g_module.multi_ssid_enabled) 231 | { 232 | g_wlan_basicSetting.WifiIsolationBetween = $('#select_WifiIsolate_between').val(); 233 | } 234 | else 235 | { 236 | g_wlan_basicSetting.WifiIsolate = $('#select_WifiIsolate_between').val(); 237 | } 238 | 239 | // set wifi auto off time 240 | g_wlan_basicSetting.Wifiofftime = $('#select_WifiAutooffTime').val(); 241 | 242 | // post data 243 | var strUrl = 'api/wlan/basic-settings'; 244 | 245 | if (g_module.multi_ssid_enabled) 246 | { 247 | strUrl = 'api/wlan/multi-security-settings'; 248 | } 249 | g_wlan_basicSetting.WifiRestart = 1; 250 | var xmlstr = object2xml('request', g_wlan_basicSetting); 251 | saveAjaxData(strUrl, xmlstr, function($xml) { 252 | var ret = xml2object($xml); 253 | if (isAjaxReturnOK(ret)) 254 | { 255 | button_enable('apply_button', '0'); 256 | showInfoDialog(common_success); 257 | } 258 | else 259 | { 260 | wlanadvanced_initPage(); 261 | } 262 | }); 263 | } 264 | function setDisplay () { 265 | 266 | if (g_feature.battery_enabled) { 267 | $('#wifiAutooffStatus').show(); 268 | $('#wifiAutooffTime').show(); 269 | } 270 | else { 271 | $('#wifiAutooffStatus').hide(); 272 | $('#wifiAutooffTime').hide(); 273 | } 274 | } 275 | function getStatus(){ 276 | if(G_MonitoringStatus.type=='response') 277 | { 278 | if(G_MonitoringStatus.response.WifiConnectionStatus == '901') 279 | { 280 | $('#select_WifiCountry').attr('disabled', 'disabled'); 281 | $('#select_WifiChannel').attr('disabled', 'disabled'); 282 | $('#select_WifiMode').removeAttr('disabled'); 283 | $('#select_WifiIsolate_between').removeAttr('disabled'); 284 | $('#select_WifiAutooffStatus').removeAttr('disabled'); 285 | } 286 | else 287 | { 288 | $('#select_WifiCountry').removeAttr('disabled'); 289 | $('#select_WifiChannel').removeAttr('disabled'); 290 | $('#select_WifiMode').removeAttr('disabled'); 291 | $('#select_WifiIsolate_between').removeAttr('disabled'); 292 | $('#select_WifiAutooffStatus').removeAttr('disabled'); 293 | } 294 | } 295 | } 296 | 297 | $(document).ready(function() { 298 | wlanadvanced_initPage(); 299 | addStatusListener('getStatus()'); 300 | button_enable('apply_button', '0'); 301 | $('input').bind('change input paste cut keydown', function() { 302 | button_enable('apply_button', '1'); 303 | }); 304 | 305 | $('#select_WifiCountry').change(function() { 306 | button_enable('apply_button', '1'); 307 | wlanadvanced_changeChannel(); 308 | }); 309 | 310 | $('#select_WifiChannel, #select_WifiMode, #select_WifiIsolate_between, #select_WifiAutooffTime, #select_WifiRate').live('change', function() { 311 | button_enable('apply_button', '1'); 312 | }); 313 | 314 | $('#select_WifiAutooffStatus').change(function() { 315 | button_enable('apply_button', '1'); 316 | wlanadvanced_ifWifioffenable(this.value); 317 | }); 318 | 319 | setDisplay(); 320 | }); 321 | 322 | -------------------------------------------------------------------------------- /webui/js/mobileconnection.js: -------------------------------------------------------------------------------- 1 | var MIN_IDLE_TIME = 30; 2 | var MAX_IDLE_TIME = 7200; 3 | var MACRO_DISPLAY = 1; 4 | var g_connectionData = null; 5 | var g_profileData = null; 6 | 7 | var CONNECTMODE_AUTO = 0; 8 | var CONNECTMODE_MANUAL = 1; 9 | var CONNECTMODE_ONDEMAND = 2; 10 | 11 | var IDLE_TIME_ENABLE = 1; 12 | var IDLE_TIME_DISABLE = 0; 13 | 14 | var g_connect_config = ''; 15 | var g_idle_time_enable = 0; 16 | var g_quicksetup_saveDataOK = false; 17 | 18 | redirectOnCondition(null, 'mobileconnection'); 19 | 20 | function setConnectionStatus() { 21 | if (CONNECTMODE_MANUAL == $('#select_connection_mode').val()) { 22 | $('#roam_open').hide(); 23 | $('#ondemand_connect').hide(); 24 | $('#input_max_idle_time').attr('disabled', 'disabled'); 25 | $('input[name=enable_roam_startup]').attr('disabled', 'disabled'); 26 | $('#input_max_idle_time').val(g_connectionData.MaxIdelTime); 27 | if (1 == g_connectionData.RoamAutoConnectEnable) { 28 | $('input[name=enable_roam_startup]').attr('checked', 'checked'); 29 | } 30 | else 31 | { 32 | $('input[name=enable_roam_startup]').attr('checked', ''); 33 | } 34 | } else if (CONNECTMODE_ONDEMAND == $('#select_connection_mode').val()) { 35 | $('#input_max_idle_time').removeAttr('disabled'); 36 | $('input[name=enable_roam_startup]').removeAttr('disabled'); 37 | $('#roam_open').show(); 38 | $('#ondemand_connect').show(); 39 | $('#input_max_idle_time').val(g_connectionData.MaxIdelTime); 40 | if (1 == g_connectionData.RoamAutoConnectEnable) { 41 | $('input[name=enable_roam_startup]').attr('checked', 'checked'); 42 | } 43 | else 44 | { 45 | $('input[name=enable_roam_startup]').attr('checked', ''); 46 | } 47 | } else if (CONNECTMODE_AUTO == $('#select_connection_mode').val()) { 48 | /* 49 | $('#roam_open').show(); 50 | $('#ondemand_connect').hide(); 51 | $('#input_max_idle_time').attr('disabled', 'disabled'); 52 | $('input[name=enable_roam_startup]').removeAttr('disabled'); 53 | $('#input_max_idle_time').val(g_connectionData.MaxIdelTime); 54 | if (1 == g_connectionData.RoamAutoConnectEnable) { 55 | $('input[name=enable_roam_startup]').attr('checked', 'checked'); 56 | } 57 | else 58 | { 59 | $('input[name=enable_roam_startup]').attr('checked', ''); 60 | } 61 | */ 62 | $('#input_max_idle_time').removeAttr('disabled'); 63 | $('input[name=enable_roam_startup]').removeAttr('disabled'); 64 | $('#roam_open').show(); 65 | if(IDLE_TIME_ENABLE == g_idle_time_enable) 66 | { 67 | $('#ondemand_connect').show(); 68 | } 69 | else 70 | { 71 | $('#ondemand_connect').hide(); 72 | } 73 | $('#input_max_idle_time').val(g_connectionData.MaxIdelTime); 74 | if (1 == g_connectionData.RoamAutoConnectEnable) { 75 | $('input[name=enable_roam_startup]').attr('checked', 'checked'); 76 | } 77 | else 78 | { 79 | $('input[name=enable_roam_startup]').attr('checked', ''); 80 | } 81 | } 82 | } 83 | 84 | //function for set auto connection roam visibility 85 | function setRoamStatus(_enable) { 86 | if (1 == _enable) { 87 | $('input[name=enable_roam_startup]').attr('checked', 'checked'); 88 | } 89 | setConnectionStatus(); 90 | } 91 | 92 | function initPage() { 93 | getConfigData('config/dialup/connectmode.xml', function($xml) { 94 | var ret = xml2object($xml); 95 | if ('config' == ret.type) { 96 | $('#select_connection_mode').empty(); 97 | g_idle_time_enable = ret.config.idle_time_enabled; 98 | g_connect_config = ret.config.ConnectMode; 99 | if (1 == g_connect_config.Auto) { 100 | $('#select_connection_mode').append("'); 101 | } 102 | if (1 == g_connect_config.Mannual) { 103 | $('#select_connection_mode').append("'); 104 | } 105 | /* 106 | if (1 == g_connect_config.AsRequired) { 107 | $('#select_connection_mode').append("'); 108 | } 109 | */ 110 | } 111 | }, { 112 | sync: true 113 | }); 114 | 115 | // get dialup connection 116 | getAjaxData('api/dialup/connection', function($xml) { 117 | var ret = xml2object($xml); 118 | if (ret.type == 'response') { 119 | g_connectionData = ret.response; 120 | if(MACRO_DISPLAY == g_connect_config.Auto) { 121 | if(MACRO_DISPLAY == g_connect_config.Mannual) { 122 | $('#select_connection_mode').val(g_connectionData.ConnectMode); 123 | } else { 124 | $('#select_connection_mode').val(CONNECTMODE_AUTO); 125 | } 126 | }else{ 127 | if(MACRO_DISPLAY == g_connect_config.Mannual) { 128 | $('#select_connection_mode').val(CONNECTMODE_MANUAL); 129 | } else { 130 | $('#select_connection_mode').attr('disabled', 'disabled'); 131 | } 132 | } 133 | } 134 | 135 | $('#input_max_idle_time').val(g_connectionData.MaxIdelTime); 136 | setRoamStatus(g_connectionData.RoamAutoConnectEnable); 137 | $(document).ready(function() { 138 | //Judgement if the profile can be edit 139 | $('#select_connection_mode li').click(function() { 140 | button_enable('apply', '1'); 141 | }); 142 | $('#auto_connection').click(function() { 143 | button_enable('apply', '1'); 144 | }); 145 | $('input,select').bind('change input paste cut keydown', function() { 146 | button_enable('apply', '1'); 147 | }); 148 | }); 149 | }, { 150 | sync: true 151 | }); 152 | $('#select_connection_mode').bind('change', function() { 153 | setConnectionStatus(); 154 | }); 155 | } 156 | 157 | function validateConnection() { 158 | //if (CONNECTMODE_ONDEMAND == $('#select_connection_mode').val()) { 159 | if (CONNECTMODE_AUTO == $('#select_connection_mode').val()) { 160 | var idletime = $('#input_max_idle_time').val(); 161 | if (true == isNaN(idletime)) { 162 | showErrorUnderTextbox('input_max_idle_time', dialup_hint_max_idle_time_number); 163 | $('#input_max_idle_time').focus(); 164 | return false; 165 | }else if ((idletime.indexOf('0') == 0) && (idletime != 0)) { 166 | showErrorUnderTextbox('input_max_idle_time', dialup_hint_max_idle_time_invalid); 167 | $('#input_max_idle_time').focus(); 168 | return false; 169 | }else if (idletime.indexOf('.') != -1) { 170 | showErrorUnderTextbox('input_max_idle_time', dialup_hint_max_idle_time_integer); 171 | $('#input_max_idle_time').focus(); 172 | return false; 173 | }else if ((idletime < MIN_IDLE_TIME) || (idletime > MAX_IDLE_TIME)) { 174 | showErrorUnderTextbox('input_max_idle_time', dialup_hint_max_idle_time_range); 175 | $('#input_max_idle_time').focus(); 176 | return false; 177 | } 178 | } 179 | return true; 180 | } 181 | 182 | function postData() { 183 | g_quicksetup_saveDataOK = true; 184 | 185 | 186 | g_connectionData.ConnectMode = $('#select_connection_mode').val(); 187 | g_connectionData.RoamAutoConnectEnable = ($('.auto_connect_roam :checked').size() > 0) ? 1 : 0; 188 | g_connectionData.MaxIdelTime = $.trim($('#input_max_idle_time').val()); 189 | if (g_module.ap_station_enabled && CONNECTMODE_MANUAL == g_connectionData.ConnectMode) { 190 | var dataConnection = { 191 | 'Handover': 0 192 | }; 193 | var newXmlSetString = object2xml('request', dataConnection); 194 | saveAjaxData('api/wlan/handover-setting', newXmlSetString, function($xml) { 195 | var ret = xml2object($xml); 196 | if (!isAjaxReturnOK(ret)) { 197 | g_quicksetup_saveDataOK = false; 198 | } 199 | }); 200 | } 201 | var newXmlString = object2xml('request', g_connectionData); 202 | saveAjaxData('api/dialup/connection', newXmlString, function($xml) { 203 | var ret = xml2object($xml); 204 | if (!isAjaxReturnOK(ret)) { 205 | g_quicksetup_saveDataOK = false; 206 | } 207 | 208 | if (g_quicksetup_saveDataOK) { 209 | showInfoDialog(common_success); 210 | button_enable('apply', '0'); 211 | }else { 212 | initPage(); 213 | } 214 | }); 215 | } 216 | 217 | function onApply() { 218 | if (!isButtonEnable('apply')) { 219 | return; 220 | } 221 | clearAllErrorLabel(); 222 | 223 | if (!validateConnection()) { 224 | return; 225 | } 226 | //if ((CONNECTMODE_ONDEMAND == $('#select_connection_mode').val()) && ($('.auto_connect_roam :checked').size() > 0)) { 227 | if ((CONNECTMODE_AUTO == $('#select_connection_mode').val()) && ($('.auto_connect_roam :checked').size() > 0)) { 228 | showConfirmDialog(dialup_hint_roam_auto_connect, postData, function() {}); 229 | }else { 230 | showConfirmDialog(firewall_hint_submit_list_item, postData, function() {}); 231 | } 232 | $('#pop_confirm').click(function() { 233 | button_enable('apply', '0'); 234 | }); 235 | } 236 | 237 | $(document).ready(function() { 238 | button_enable('apply', '0'); 239 | 240 | $('#tooltip_ConnectionMode').qtip({ 241 | content: '' + common_manual + '' + common_colon + dialup_help_connection_mode_manual + '
' + common_auto + '' + common_colon + dialup_help_connection_mode_auto, 242 | position: { 243 | corner: { 244 | tooltip: 'rightMiddle', 245 | target: 'leftMiddle' 246 | } 247 | } 248 | }); 249 | 250 | $('#tooltip_MaxIdleTime').qtip({ 251 | content: dialup_help_max_idle_time, 252 | position: { 253 | corner: { 254 | tooltip: 'rightMiddle', 255 | target: 'leftMiddle' 256 | } 257 | } 258 | }); 259 | $('#apply').bind('click', onApply); 260 | //when enter, dafault it is disabled. 261 | button_enable('apply', '0'); 262 | initPage(); 263 | }); 264 | -------------------------------------------------------------------------------- /webui/js/statistic.js: -------------------------------------------------------------------------------- 1 | // JavaScript Document 2 | var g_monitoring_traffic_statistics = null; 3 | var g_monitoring_status = null; 4 | var g_wlan_security_settings = null; 5 | var g_wlan_basic_settings = null; 6 | var g_connection_trafficresponse = null; 7 | //Prefix string of ssid2 of Multi-SSID 8 | var g_prefixWifiSsid = "ssid2_"; 9 | 10 | function getTrafficInfo(bit) { 11 | var final_number = 0; 12 | var final_str = ""; 13 | if(g_monitoring_dumeter_kb > bit) { 14 | final_number = formatFloat(parseFloat(bit), 2); 15 | final_str = final_number + " B"; 16 | } 17 | else if(g_monitoring_dumeter_kb <= bit && g_monitoring_dumeter_mb > bit) { 18 | final_number = formatFloat(parseFloat(bit) / g_monitoring_dumeter_kb, 2); 19 | final_str = final_number + " KB"; 20 | } 21 | else if(g_monitoring_dumeter_mb <= bit && g_monitoring_dumeter_gb > bit) { 22 | final_number = formatFloat((parseFloat(bit) / g_monitoring_dumeter_mb), 2); 23 | final_str = final_number + " MB"; 24 | } 25 | else if(g_monitoring_dumeter_gb <= bit && g_monitoring_dumeter_tb > bit) { 26 | final_number = formatFloat((parseFloat(bit) / g_monitoring_dumeter_gb), 2); 27 | final_str = final_number + " GB"; 28 | } 29 | else { 30 | final_number = formatFloat((parseFloat(bit) / g_monitoring_dumeter_tb), 2); 31 | final_str = final_number + " TB"; 32 | } 33 | return final_str; 34 | } 35 | 36 | function setTrafficHTML() { 37 | g_connection_trafficresponse = g_monitoring_traffic_statistics; 38 | if(g_connection_trafficresponse != "") { 39 | //profile table info 40 | $("#current_upload").html(getTrafficInfo(g_connection_trafficresponse.CurrentUpload)); 41 | $("#current_download").html(getTrafficInfo(g_connection_trafficresponse.CurrentDownload)); 42 | $("#total_current").html(getTrafficInfo(parseInt(g_connection_trafficresponse.CurrentUpload, 10) + parseInt(g_connection_trafficresponse.CurrentDownload, 10))); 43 | var trafficTimesString = getCurrentTime(g_connection_trafficresponse.CurrentConnectTime); 44 | $("#current_duration").html(trafficTimesString); 45 | 46 | //total table info 47 | $("#history_upload").html(getTrafficInfo(g_connection_trafficresponse.TotalUpload)); 48 | $("#history_download").html(getTrafficInfo(g_connection_trafficresponse.TotalDownload)); 49 | $("#total_history").html(getTrafficInfo((parseInt(g_connection_trafficresponse.TotalUpload, 10) + parseInt(g_connection_trafficresponse.TotalDownload, 10)))); 50 | var totalTimesString = getCurrentTime(g_connection_trafficresponse.TotalConnectTime, 10); 51 | $("#history_duration").html(totalTimesString); 52 | } 53 | //ap station info 54 | if(g_feature.ap_station_enabled && G_StationStatus != null) { 55 | 56 | $("#wifi_current_download").html(getTrafficInfo(G_StationStatus.response.RxFlux)); 57 | $("#wifi_current_upload").html(getTrafficInfo(G_StationStatus.response.TxFlux)); 58 | $("#wifi_total_current").html(getTrafficInfo(parseInt(G_StationStatus.response.TxFlux, 10) + parseInt(G_StationStatus.response.RxFlux, 10))); 59 | $("#wifi_history_download").html(getTrafficInfo(G_StationStatus.response.TotalRxFlux)); 60 | $("#wifi_history_upload").html(getTrafficInfo(G_StationStatus.response.TotalTxFlux)); 61 | $("#wifi_total_history").html(getTrafficInfo(parseInt(G_StationStatus.response.TotalTxFlux, 10) + parseInt(G_StationStatus.response.TotalRxFlux, 10))); 62 | 63 | var wifi_trafficTimesString = getCurrentTime(G_StationStatus.response.CurrentTime); 64 | var wifi_totalTimesString = getCurrentTime(G_StationStatus.response.TotalTime); 65 | $("#wifi_current_duration").html(wifi_trafficTimesString); 66 | $("#wifi_history_duration").html(wifi_totalTimesString); 67 | } 68 | } 69 | 70 | function setCurrrentUserHTML() { 71 | var settings = g_wlan_basic_settings; 72 | var ssids = [""]; 73 | 74 | if(g_feature.multi_ssid_enabled) { 75 | settings = g_wlan_security_settings; 76 | ssids.push(g_prefixWifiSsid); 77 | } 78 | var i = 0; 79 | for(i; i < ssids.length; ++i) { 80 | if(settings && settings.WifiEnable == 1) { 81 | 82 | $("#"+ssids[i]+"table_wifiClient").show(); 83 | } 84 | else { 85 | 86 | $("#"+ssids[i]+"table_wifiClient").hide(); 87 | } 88 | 89 | } 90 | } 91 | 92 | function getTrafficStatus() { 93 | getAjaxData("api/monitoring/traffic-statistics", function($xml) { 94 | var traffic_ret = xml2object($xml); 95 | if(traffic_ret.type == "response") { 96 | g_monitoring_traffic_statistics = traffic_ret.response; 97 | setTrafficHTML(); 98 | } 99 | }); 100 | } 101 | 102 | function getWlanStatus() { 103 | getAjaxData("api/monitoring/status", function($xml) { 104 | var wlan_ret = xml2object($xml); 105 | if(wlan_ret.type == "response") { 106 | g_monitoring_status = wlan_ret.response; 107 | setCurrrentUserHTML(); 108 | } 109 | }); 110 | } 111 | 112 | function getWlanBasicStatus() { 113 | getAjaxData("api/wlan/basic-settings", function($xml) { 114 | var basic_ret = xml2object($xml); 115 | if(basic_ret.type == "response") { 116 | g_wlan_basic_settings = basic_ret.response; 117 | setCurrrentUserHTML(); 118 | } 119 | }); 120 | } 121 | 122 | function getWlanSecurityStatusMultiSSID() { 123 | getAjaxData("api/wlan/multi-security-settings", function($xml) { 124 | var security_ret = xml2object($xml); 125 | if(security_ret.type == "response") { 126 | g_wlan_security_settings = security_ret.response; 127 | setCurrrentUserHTML(); 128 | } 129 | }); 130 | } 131 | 132 | function getApStationTrafficStatus() { 133 | getAjaxData("api/wlan/station-information", function($xml) { 134 | var ret = xml2object($xml); 135 | if(ret.type == "response") { 136 | G_StationStatus = ret; 137 | setTrafficHTML(); 138 | } 139 | }); 140 | } 141 | 142 | function getAuthenInfo() { 143 | getAjaxData("api/wlan/host-list", function($xml) { 144 | var wlan_ret = xml2object($xml); 145 | var wlanTimeArray = []; 146 | var listHosts = []; 147 | var new_line = ""; 148 | var numSsid1Hosts = 0; 149 | var numSsid2Hosts = 0; 150 | 151 | if(wlan_ret.type == "response") { 152 | $("#table_wifiClient > tbody > tr:gt(0)").remove(); 153 | if(g_feature.multi_ssid_enabled) { 154 | $("#"+g_prefixWifiSsid+"table_wifiClient > tbody > tr").remove(); 155 | } 156 | if(wlan_ret.response.Hosts.Host) { 157 | if($.isArray(wlan_ret.response.Hosts.Host)) { 158 | listHosts = wlan_ret.response.Hosts.Host; 159 | 160 | //Count number of hosts in ssid1 and ssid2 respectivity 161 | var i = 0; 162 | for(i; i < listHosts.length; i++) { 163 | if("SSID1" == listHosts[i].AssociatedSsid) { 164 | numSsid1Hosts++; 165 | } 166 | 167 | if("SSID2" == listHosts[i].AssociatedSsid) { 168 | numSsid2Hosts++; 169 | } 170 | } 171 | 172 | if(g_feature.multi_ssid_enabled) { 173 | new_line = "" + wlan_label_multi_ssid_clients + "1" + common_colon + " " + numSsid1Hosts + ""; 174 | $("#table_wifiClient").append(new_line); 175 | new_line = "" + wlan_label_multi_ssid_clients + "2" + common_colon + " " + numSsid2Hosts + ""; 176 | $("#"+g_prefixWifiSsid+"table_wifiClient").append(new_line); 177 | } 178 | } 179 | else { 180 | listHosts.push(wlan_ret.response.Hosts.Host); 181 | 182 | if(g_feature.multi_ssid_enabled) { 183 | if("SSID1" == listHosts[0].AssociatedSsid) { 184 | new_line = "" + wlan_label_multi_ssid_clients + "1" + common_colon + " " + "1" + ""; 185 | $("#table_wifiClient").append(new_line); 186 | } 187 | 188 | if("SSID2" == listHosts[0].AssociatedSsid) { 189 | new_line = "" + wlan_label_multi_ssid_clients + "2" + common_colon + " " + "1" + ""; 190 | $("#"+g_prefixWifiSsid+"table_wifiClient").append(new_line); 191 | } 192 | } 193 | } 194 | } 195 | 196 | $.each(listHosts, function(n, value) { 197 | 198 | var connectionDuration = getCurrentTime(value.AssociatedTime); 199 | new_line = "" + value.ID + ""; 200 | new_line += "" + value.IpAddress + ""; 201 | new_line += "" + value.HostName + ""; 202 | new_line += "" + value.MacAddress + ""; 203 | new_line += "" + connectionDuration + ""; 204 | 205 | if("SSID2" != value.AssociatedSsid) { 206 | $("#table_wifiClient").append(new_line); 207 | } 208 | else if(g_feature.multi_ssid_enabled && ("SSID2" == value.AssociatedSsid)) { 209 | $("#"+g_prefixWifiSsid+"table_wifiClient").append(new_line); 210 | } 211 | }); 212 | } 213 | else { 214 | log.error("Load host-list data failed"); 215 | } 216 | }); 217 | } 218 | 219 | function getAllInfo() { 220 | //getWlanStatus(); 221 | getTrafficStatus(); 222 | 223 | if(g_module.wifi_enabled) { 224 | if(g_feature.multi_ssid_enabled) { 225 | //getWlanBasicStatusMultiSSID(); 226 | getWlanSecurityStatusMultiSSID(); 227 | } 228 | else { 229 | getWlanBasicStatus(); 230 | //getWlanSecurityStatus(); 231 | } 232 | getAuthenInfo(); 233 | } 234 | 235 | setTimeout(getAllInfo, g_feature.update_interval); 236 | } 237 | 238 | function refreshTraffic() { 239 | var request = { 240 | ClearTraffic : 1 241 | }; 242 | var xmlstr = object2xml("request", request); 243 | log.debug(xmlstr); 244 | saveAjaxData("api/monitoring/clear-traffic", xmlstr, function($xml) { 245 | var ret = xml2object($xml); 246 | if(ret.type == "response") { 247 | getTrafficStatus(); 248 | if(g_feature.ap_station_enabled) { 249 | getApStationTrafficStatus(); 250 | } 251 | } 252 | else { 253 | log.error("code = " + ret.error.code); 254 | log.error("message = " + ret.error.message); 255 | } 256 | }); 257 | } 258 | 259 | function cancel_RefreshTraffic() { 260 | $("#div_wrapper").remove(); 261 | $(".dialog").remove(); 262 | } 263 | 264 | $(document).ready( function() { 265 | 266 | // ap station open 267 | if(g_feature.ap_station_enabled) { 268 | $(".no_station").remove(); 269 | $(".have_station").show(); 270 | } 271 | else { 272 | $(".no_station").show(); 273 | $(".have_station").remove(); 274 | } 275 | 276 | if (!g_module.wifi_enabled) { 277 | $(".status_title").remove(); 278 | $(".wifi_table").remove(); 279 | } 280 | 281 | $("#table_wifiClient").hide(); 282 | $("#" + g_prefixWifiSsid + "table_wifiClient").hide(); 283 | 284 | getAllInfo(); 285 | 286 | //Clear History 287 | $("#button_clear_history").click( function() { 288 | showConfirmDialog(dialup_hint_reset_data_counter, refreshTraffic, cancel_RefreshTraffic); 289 | }); 290 | }); -------------------------------------------------------------------------------- /webui/html/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 213 |
214 |
215 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /webui/js/virtualserver.js: -------------------------------------------------------------------------------- 1 | var VIRTUAL_SERVER_NUM = 16; 2 | var ok_flag = 0; 3 | var add_flag = 0; 4 | 5 | var protocolStatusArray = [ 6 | [PROTOCOL_BOTH, firewall_label_tcp_or_udp], 7 | [PROTOCOL_TCP, firewall_label_tcp], 8 | [PROTOCOL_UDP, firewall_label_udp] 9 | ]; 10 | 11 | var filterStatusArray = [ 12 | [FILTER_DISABLED, common_off], 13 | [FILTER_ENABLED, common_on] 14 | ]; 15 | 16 | function isVaildVirtual() 17 | { 18 | var flagEmpty = 0; 19 | var virtualServerIPName = $.trim($('#input_server_name').val()); 20 | var virtualServerIPAddress = $.trim($('#input_wan_ip_address').val()); 21 | var virtualServerLanPort = $.trim($('#input_lan_port').val()); 22 | var virtualServerWanPort = $.trim($('#input_wan_port').val()); 23 | 24 | $.each($('.qtip-defaults'), function() { 25 | $(this).remove(); 26 | }); 27 | if ('' != virtualServerIPName) 28 | { 29 | if (!checkInputChar(virtualServerIPName)) 30 | { 31 | showQtip('input_server_name', firewall_hint_name_valid_type); 32 | return false; 33 | } 34 | 35 | } 36 | else 37 | { 38 | showQtip('input_server_name', common_message_name_empty); 39 | return false; 40 | } 41 | 42 | if ('' != virtualServerWanPort) 43 | { 44 | if (!isVaildSpecialPort(virtualServerWanPort, 'input_wan_port')) 45 | { 46 | return false; 47 | } 48 | } 49 | else 50 | { 51 | showQtip('input_wan_port', firewall_hint_port_empty); 52 | return false; 53 | } 54 | 55 | if ('' == virtualServerIPAddress || 56 | !isValidIpAddress(virtualServerIPAddress) || 57 | !isSameSubnetAddrs(virtualServerIPAddress, dhcpLanIPAddress, dhcpLanNetmask) || 58 | !isBroadcastOrNetworkAddress(virtualServerIPAddress, dhcpLanNetmask) || 59 | virtualServerIPAddress == dhcpLanIPAddress 60 | ) 61 | { 62 | showQtip('input_wan_ip_address', dialup_hint_ip_address_empty); 63 | return false; 64 | } 65 | 66 | if (virtualServerLanPort != '') 67 | { 68 | if (!isVaildSpecialPort(virtualServerLanPort, 'input_lan_port')) 69 | { 70 | return false; 71 | } 72 | } 73 | else 74 | { 75 | showQtip('input_lan_port', firewall_hint_port_empty); 76 | return false; 77 | } 78 | 79 | return true; 80 | } 81 | 82 | function initPage() { 83 | VIRTUAL_SERVER_NUM = parseInt(g_config_firewall.virtualserver.number,10); 84 | button_enable('apply', '0'); 85 | initSelectOption('select_protocol_status', protocolStatusArray); 86 | initSelectOption('select_status', filterStatusArray); 87 | $('#select_protocol_status').val(PROTOCOL_BOTH); 88 | $('#select_status').val(FILTER_DISABLED); 89 | 90 | $('.user_add_line').remove(); 91 | getAjaxData('api/dhcp/settings', function($xml) { 92 | var ret = xml2object($xml); 93 | if (ret.type == 'response') 94 | { 95 | dhcpPageVar = ret.response; 96 | initDhcp(); 97 | } 98 | }); 99 | getAjaxData('api/security/virtual-servers', function($xml) { 100 | var ret = xml2object($xml); 101 | var servers = ret.response.Servers.Server; 102 | var serverStatus; 103 | var lastServer; 104 | 105 | if (servers) { 106 | if (servers.length >= VIRTUAL_SERVER_NUM) 107 | { 108 | button_enable('add_item', '0'); 109 | } 110 | if ($.isArray(servers)) { 111 | $(servers).each(function(i) { 112 | addFilter( 113 | $('#service_list tr'), 114 | '
' + servers[i].VirtualServerIPName + '
', 115 | servers[i].VirtualServerWanPort, 116 | servers[i].VirtualServerIPAddress, 117 | servers[i].VirtualServerLanPort, 118 | getDArrayElement(protocolStatusArray, servers[i].VirtualServerProtocol, 'value'), 119 | getDArrayElement(filterStatusArray, servers[i].VirtualServerStatus, 'value') 120 | ); 121 | }); 122 | lastServer = servers[servers.length - 1]; 123 | }else { 124 | addFilter( 125 | $('#service_list tr'), 126 | '
' + servers.VirtualServerIPName + '
', 127 | servers.VirtualServerWanPort, 128 | servers.VirtualServerIPAddress, 129 | servers.VirtualServerLanPort, 130 | getDArrayElement(protocolStatusArray, servers.VirtualServerProtocol, 'value'), 131 | getDArrayElement(filterStatusArray, servers.VirtualServerStatus, 'value') 132 | ); 133 | lastServer = servers; 134 | } 135 | 136 | $('#input_server_name').val(lastServer.VirtualServerIPName); 137 | $('#input_wan_port').val(lastServer.VirtualServerWanPort); 138 | $('#input_wan_ip_address').val(lastServer.VirtualServerIPAddress); 139 | $('#input_lan_port').val(lastServer.VirtualServerLanPort); 140 | } 141 | }); 142 | } 143 | 144 | $(document).ready(function() { 145 | initPage(); 146 | 147 | //hide add item control 148 | $('#add_item_cancel').live('click', function() { 149 | hideAddItemControl(); 150 | if((1 == add_flag) || (1 == ok_flag)) 151 | { 152 | button_enable('apply', '1'); 153 | } 154 | }); 155 | 156 | //show add item control 157 | $('#add_item').click(function() { 158 | if (isButtonEnable('add_item')) 159 | { 160 | showAddItemControl(); 161 | $('.add_item_control input').eq(0).focus(); 162 | button_enable('apply', '0'); 163 | } 164 | }); 165 | 166 | $('#add_item_ok').live('click', function() { 167 | if (isVaildVirtual()) { 168 | var serverName = '
' + $.trim($('#input_server_name').val()) + '
'; 169 | var wanPort = $.trim($('#input_wan_port').val()); 170 | var wanAddress = $.trim($('#input_wan_ip_address').val()); 171 | var lanPort = $.trim($('#input_lan_port').val()); 172 | var serverProtocol = $('#select_protocol_status option:selected').text(); 173 | var serverStatus = $('#select_status option:selected').text(); 174 | 175 | hideAddItemControl(); 176 | addFilter($('#service_list tr'), serverName, wanPort, wanAddress, lanPort, serverProtocol, serverStatus); 177 | button_enable('apply', '1'); 178 | if ($('.user_add_line').length >= VIRTUAL_SERVER_NUM) 179 | { 180 | button_enable('add_item', '0'); 181 | } 182 | add_flag = 1; 183 | } 184 | }); 185 | 186 | var currentAllVal = null; 187 | var editIndex = null; 188 | $('.button_edit_list').live('click', function() { 189 | if (($(".add_item_control:hidden").size() > 0) && ($('#edit_item_ok').size() < 1)) { 190 | editIndex = $('.button_edit_list').index(this); 191 | // save the value before user edit 192 | currentAllVal = $('.user_add_line').eq(editIndex).html(); 193 | var editVirtualServer = $(this).parent().siblings(); 194 | var editserverName = editVirtualServer.eq(0); 195 | var editWanPort = editVirtualServer.eq(1); 196 | var editLanIpAddr = editVirtualServer.eq(2); 197 | var editLanPort = editVirtualServer.eq(3); 198 | var editProtocol = editVirtualServer.eq(4); 199 | var editStatus = editVirtualServer.eq(5); 200 | 201 | var htmlProtocol = editProtocol.html(); 202 | var htmlStatus = editStatus.html(); 203 | 204 | editserverName.html(''); 205 | editWanPort.html(''); 206 | editLanIpAddr.html(''); 207 | editLanPort.html(''); 208 | 209 | createSelect(editProtocol, 'select_protocol_status', protocolStatusArray); 210 | createSelect(editStatus, 'select_status', filterStatusArray); 211 | 212 | $('#select_protocol_status').val(getDArrayElement(protocolStatusArray, htmlProtocol, 'key')); 213 | $('#select_status').val(getDArrayElement(filterStatusArray, htmlStatus, 'key')); 214 | 215 | $(this).parent().html('' + 216 | common_ok + '  ' + common_cancel + ''); 217 | 218 | hideAddItemControl(); 219 | $('.user_add_line input').eq(0).focus(); 220 | $('#edit_item_cancel').live('click', function() { 221 | $('.user_add_line').eq(editIndex).html(currentAllVal); 222 | $('.qtip').qtip('destroy'); 223 | if (!isButtonEnable('add_item')) 224 | { 225 | button_enable('add_item', '1'); 226 | if((1 == ok_flag) || (1 == add_flag)) 227 | { 228 | button_enable('apply', '1'); 229 | } 230 | } 231 | if ($('.user_add_line').length >= LAN_IP_FILTER_NUM) 232 | { 233 | button_enable('add_item', '0'); 234 | } 235 | }); 236 | $('#add_item').live('click', function() { 237 | if (isButtonEnable('add_item')) 238 | { 239 | $('.user_add_line').eq(editIndex).html(currentAllVal); 240 | $('.qtip').qtip('destroy'); 241 | } 242 | }); 243 | button_enable('apply', '0'); 244 | button_enable('add_item', '0'); 245 | } 246 | }); 247 | 248 | $('#edit_item_ok').live('click', function() { 249 | if (isVaildVirtual()) { 250 | var serverName = '
' + $.trim($('#input_server_name').val()) + '
'; 251 | var wanPort = $.trim($('#input_wan_port').val()); 252 | var wanAddress = $.trim($('#input_wan_ip_address').val()); 253 | var lanPort = $.trim($('#input_lan_port').val()); 254 | var serverProtocol = $('#select_protocol_status option:selected').text(); 255 | var serverStatus = $('#select_status option:selected').text(); 256 | 257 | hideAddItemControl(); 258 | var editVirtualServer = $(this).parent().siblings(); 259 | editVirtualServer.eq(0).html(serverName); 260 | editVirtualServer.eq(1).html(wanPort); 261 | editVirtualServer.eq(2).html(wanAddress); 262 | editVirtualServer.eq(3).html(lanPort); 263 | editVirtualServer.eq(4).html(serverProtocol); 264 | editVirtualServer.eq(5).html(serverStatus); 265 | 266 | $(this).parent().html('' + common_edit + 267 | '  ' + common_delete + ''); 268 | currentAllVal = $('.user_add_line').eq(editIndex).html(); 269 | } 270 | button_enable('apply', '1'); 271 | button_enable('add_item', '1'); 272 | ok_flag = 1; 273 | if ($('.user_add_line').length >= VIRTUAL_SERVER_NUM) 274 | { 275 | button_enable('add_item', '0'); 276 | } 277 | }); 278 | 279 | function postData() { 280 | var submitObject = {}; 281 | var serverArray = []; 282 | 283 | $('.user_add_line').each(function() { 284 | var server = { 285 | VirtualServerIPName: $(this).children().eq(0).text(), 286 | VirtualServerStatus: getDArrayElement(filterStatusArray, $(this).children().eq(5).text(), 'key'), 287 | VirtualServerRemoteIP: '', 288 | VirtualServerWanPort: $(this).children().eq(1).text(), 289 | VirtualServerWanEndPort: '', 290 | VirtualServerLanPort: $(this).children().eq(3).text(), 291 | VirtualServerIPAddress: $(this).children().eq(2).text(), 292 | VirtualServerProtocol: getDArrayElement(protocolStatusArray, $(this).children().eq(4).text(), 'key') 293 | }; 294 | serverArray.push(server); 295 | }); 296 | 297 | submitObject = { 298 | Servers: { 299 | Server: serverArray 300 | } 301 | }; 302 | 303 | var submitData = object2xml('request', submitObject); 304 | saveAjaxData('api/security/virtual-servers', submitData, function($xml) { 305 | var ret = xml2object($xml); 306 | if (isAjaxReturnOK(ret)) { 307 | showInfoDialog(common_success); 308 | button_enable('apply', '0'); 309 | } 310 | else { 311 | initPage(); 312 | } 313 | }); 314 | } 315 | 316 | $('#apply').click(function() { 317 | if (isButtonEnable('apply')) { 318 | showConfirmDialog(firewall_hint_submit_list_item, postData); 319 | } 320 | ok_flag = 0; 321 | add_flag = 0; 322 | }); 323 | }); -------------------------------------------------------------------------------- /webui/js/wlanmacfilter.js: -------------------------------------------------------------------------------- 1 | var g_wanlmacfilter_dataVlaue; 2 | var WANLMACFILTER_FILTER_STATUS_DISABLED = 0; 3 | var WANLMACFILTER_FILTER_STATUS_ALLOW = 1; 4 | var WANLMACFILTER_FILTER_STATUS_DENY = 2; 5 | 6 | var g_wlanmacfilert_filterStatusArray = [ 7 | [0, common_disable], 8 | [1, wlan_label_allow], 9 | [2, wlan_label_deny] 10 | ]; 11 | 12 | $(document).ready(function() { 13 | var i; 14 | button_enable('apply', '0'); 15 | // init macfilter status options 16 | var options1 = document.getElementById('ssid1_select_service').options; 17 | var options2 = document.getElementById('ssid2_select_service').options; 18 | for (i = 0; i < g_wlanmacfilert_filterStatusArray.length; i++) { 19 | var curStatus = g_wlanmacfilert_filterStatusArray[i]; 20 | options1.add(new Option(curStatus[1], curStatus[0])); 21 | options2.add(new Option(curStatus[1], curStatus[0])); 22 | } 23 | // Judgement if the mac filter can be edit 24 | $('#ssid1_mac_list :input').bind('input change cut paste keydown', function() { 25 | button_enable('apply', '1'); 26 | 27 | }); 28 | 29 | $('#ssid1_select_service').bind('change', function() { 30 | var ssids = ['ssid1']; 31 | var selectedStatus = $('#ssid1_select_service').val(); 32 | wlanmacfilter_ssid1_setDisabled(); 33 | $('.error_message').remove(); 34 | 35 | if (selectedStatus == g_wanlmacfilter_dataVlaue[0].WifiMacFilterStatus) 36 | { 37 | setData(ssids); 38 | button_enable('apply', '0'); 39 | } 40 | else 41 | { 42 | clearData(ssids); 43 | button_enable('apply', '1'); 44 | } 45 | }); 46 | $('#apply').click(function() { 47 | if (!isButtonEnable('apply')) { 48 | return; 49 | } 50 | wlanmacfilert_onApply(); 51 | }); 52 | // MULTI SSID 53 | if (g_module.multi_ssid_enabled) { 54 | $('#ssid1_name').show(); 55 | $('#ssid2').show(); 56 | $('#ssid2_select_service').bind('change', function() { 57 | var ssids = ['ssid2']; 58 | var selectedStatus = $('#ssid2_select_service').val(); 59 | wlanmacfilter_ssid2_setDisabled(); 60 | button_enable('apply', '1'); 61 | $('.error_message').remove(); 62 | 63 | if (selectedStatus == g_wanlmacfilter_dataVlaue[1].WifiMacFilterStatus) 64 | { 65 | setData(ssids); 66 | button_enable('apply', '0'); 67 | } 68 | else 69 | { 70 | clearData(ssids); 71 | button_enable('apply', '1'); 72 | } 73 | }); 74 | $('#ssid2_mac_list :input').bind('input change cut paste keydown', function() { 75 | button_enable('apply', '1'); 76 | }); 77 | wlanmacfilter_multissid_initPage(); 78 | } 79 | else { 80 | wlanmacfilter_initPage(); 81 | } 82 | }); 83 | // disable/enable MAC address FOR SSID1 84 | function wlanmacfilter_ssid1_setDisabled() { 85 | var selectedStatus = $('#ssid1_select_service').val(); 86 | if (selectedStatus == WANLMACFILTER_FILTER_STATUS_DISABLED) { 87 | $('#ssid1_mac_list :input').attr('disabled', 'disabled'); 88 | } 89 | else { 90 | $('#ssid1_mac_list :input').removeAttr('disabled'); 91 | } 92 | } 93 | 94 | // disable/enable MAC address FOR SSID2 95 | function wlanmacfilter_ssid2_setDisabled() { 96 | var selectedStatus = $('#ssid2_select_service').val(); 97 | if (selectedStatus == WANLMACFILTER_FILTER_STATUS_DISABLED) { 98 | $('#ssid2_mac_list :input').attr('disabled', 'disabled'); 99 | } 100 | else { 101 | $('#ssid2_mac_list :input').removeAttr('disabled'); 102 | } 103 | } 104 | function clearData(ssids) 105 | { 106 | var i; 107 | for (i = 0; i < ssids.length; i++) { 108 | $('#'+ ssids[i] + '_input_WifiMacFilterMac0').val(''); 109 | $('#'+ ssids[i] + '_input_WifiMacFilterMac1').val(''); 110 | $('#'+ ssids[i] + '_input_WifiMacFilterMac2').val(''); 111 | $('#'+ ssids[i] + '_input_WifiMacFilterMac3').val(''); 112 | $('#'+ ssids[i] + '_input_WifiMacFilterMac4').val(''); 113 | $('#'+ ssids[i] + '_input_WifiMacFilterMac5').val(''); 114 | $('#'+ ssids[i] + '_input_WifiMacFilterMac6').val(''); 115 | $('#'+ ssids[i] + '_input_WifiMacFilterMac7').val(''); 116 | $('#'+ ssids[i] + '_input_WifiMacFilterMac8').val(''); 117 | $('#'+ ssids[i] + '_input_WifiMacFilterMac9').val(''); 118 | } 119 | } 120 | 121 | function setData(ssids) 122 | { 123 | var i; 124 | for (i = 0; i < ssids.length; i++) { 125 | $('#'+ ssids[i] + '_input_WifiMacFilterMac0').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac0); 126 | $('#'+ ssids[i] + '_input_WifiMacFilterMac1').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac1); 127 | $('#'+ ssids[i] + '_input_WifiMacFilterMac2').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac2); 128 | $('#'+ ssids[i] + '_input_WifiMacFilterMac3').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac3); 129 | $('#'+ ssids[i] + '_input_WifiMacFilterMac4').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac4); 130 | $('#'+ ssids[i] + '_input_WifiMacFilterMac5').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac5); 131 | $('#'+ ssids[i] + '_input_WifiMacFilterMac6').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac6); 132 | $('#'+ ssids[i] + '_input_WifiMacFilterMac7').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac7); 133 | $('#'+ ssids[i] + '_input_WifiMacFilterMac8').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac8); 134 | $('#'+ ssids[i] + '_input_WifiMacFilterMac9').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac9); 135 | 136 | //bind selected item for filter status 137 | if(($.browser.msie) && ($.browser.version == 6.0)) 138 | { 139 | if(i == 0) 140 | { 141 | setTimeout(function() { 142 | $('#'+ ssids[0] + '_select_service').val(g_wanlmacfilter_dataVlaue[0].WifiMacFilterStatus); 143 | }, 1); 144 | } 145 | else 146 | { 147 | setTimeout(function() { 148 | $('#'+ ssids[1] + '_select_service').val(g_wanlmacfilter_dataVlaue[1].WifiMacFilterStatus); 149 | }, 1); 150 | } 151 | } 152 | else 153 | { 154 | $('#'+ ssids[i] + '_select_service').val(g_wanlmacfilter_dataVlaue[i].WifiMacFilterStatus); 155 | } 156 | } 157 | } 158 | function wlanmacfilter_initPage() { 159 | var ssids = ['ssid1']; 160 | var temp = []; 161 | getAjaxData('api/wlan/mac-filter', function($xml) { 162 | var ret = xml2object($xml); 163 | if ('response' == ret.type) { 164 | temp.push(ret.response); 165 | g_wanlmacfilter_dataVlaue = temp; 166 | setData(ssids); 167 | if(($.browser.msie) && ($.browser.version == 6.0)) 168 | { 169 | setTimeout(function() { 170 | wlanmacfilter_ssid1_setDisabled(); 171 | }, 1); 172 | } 173 | else 174 | { 175 | wlanmacfilter_ssid1_setDisabled(); 176 | } 177 | } 178 | }); 179 | } 180 | 181 | function wlanmacfilter_multissid_initPage() { 182 | var ssids = ['ssid1', 'ssid2']; 183 | getAjaxData('api/wlan/multi-basic-settings', function($xml) { 184 | var ret = xml2object($xml); 185 | g_wanlmacfilter_dataVlaue = ret.response.Ssids.Ssid; 186 | setData(ssids); 187 | if(($.browser.msie) && ($.browser.version == 6.0)) 188 | { 189 | setTimeout(function() { 190 | wlanmacfilter_ssid1_setDisabled(); 191 | }, 1); 192 | setTimeout(function() { 193 | wlanmacfilter_ssid2_setDisabled(); 194 | }, 1); 195 | } 196 | else 197 | { 198 | wlanmacfilter_ssid1_setDisabled(); 199 | wlanmacfilter_ssid2_setDisabled(); 200 | } 201 | }); 202 | } 203 | 204 | // validate format of mac address 205 | function wlanmacfilter_isValidMacAddress(macAddress) { 206 | macAddress = macAddress.toLowerCase(); 207 | var c = 0; 208 | var i = 0, j = 0; 209 | 210 | if ('ff:ff:ff:ff:ff:ff' == macAddress || '00:00:00:00:00:00' == macAddress) { 211 | return false; 212 | } 213 | 214 | var addrParts = macAddress.split(':'); 215 | if (addrParts.length != 6) { 216 | return false; 217 | } 218 | for (i = 0; i < 6; i++) { 219 | if (addrParts[i].length != 2) { 220 | return false; 221 | } 222 | 223 | for (j = 0; j < addrParts[i].length; j++) { 224 | c = addrParts[i].charAt(j); 225 | if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) { 226 | continue; 227 | } 228 | else { 229 | return false; 230 | } 231 | } 232 | } 233 | 234 | c = parseInt(addrParts[0].charAt(1), 16); 235 | if (c % 2)/*the first number of mac address must be even*/ 236 | { 237 | return false; 238 | } 239 | 240 | return true; 241 | } 242 | 243 | function wlanmacfilert_checkAllMac(ssid) { 244 | var checkResult = true; 245 | var emptyMacCount = 0; 246 | $('#'+ ssid + '_mac_list :input').each(function(i) { 247 | if ((($.trim($(this).val()).length > 0) && (!wlanmacfilter_isValidMacAddress($(this).val()))) 248 | || (0 == $.trim($(this).val()).length && $(this).val().length > 0)) { 249 | $(this).focus(); 250 | showErrorUnderTextbox(ssid + '_input_WifiMacFilterMac' + i, wlan_hint_mac_address_invalid); 251 | checkResult = false; 252 | } 253 | else if (0 == $(this).val().length) { 254 | emptyMacCount++; 255 | } 256 | }); 257 | if (10 == emptyMacCount) { 258 | var macFilterStatus = $('#'+ ssid + '_select_service').val(); 259 | if (WANLMACFILTER_FILTER_STATUS_DISABLED != macFilterStatus) { 260 | showInfoDialog(wlan_hint_mac_address_invalid); 261 | $('#'+ ssid + '_input_WifiMacFilterMac0').focus(); 262 | checkResult = false; 263 | } 264 | } 265 | return checkResult; 266 | } 267 | 268 | function wlanmacfilert_onApply() { 269 | clearAllErrorLabel(); 270 | 271 | //function for check all mac address 272 | if (wlanmacfilert_checkAllMac('ssid1')) { 273 | if (g_module.multi_ssid_enabled) { 274 | if (wlanmacfilert_checkAllMac('ssid2')) { 275 | showConfirmDialog(firewall_hint_submit_list_item, multissid_postData, function() { 276 | }); 277 | } 278 | } 279 | else { 280 | showConfirmDialog(firewall_hint_submit_list_item, postData, function() { 281 | }); 282 | } 283 | } 284 | } 285 | 286 | function getData(ssids) { 287 | var i = 0; 288 | for (i = 0; i < ssids.length; i++) 289 | { 290 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterStatus = $('#'+ ssids[i] + '_select_service').val(); 291 | if ($('#'+ ssids[i] + '_select_service').val() == WANLMACFILTER_FILTER_STATUS_DISABLED) 292 | { 293 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac0 = ''; 294 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac1 = ''; 295 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac2 = ''; 296 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac3 = ''; 297 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac4 = ''; 298 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac5 = ''; 299 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac6 = ''; 300 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac7 = ''; 301 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac8 = ''; 302 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac9 = ''; 303 | 304 | } 305 | else 306 | { 307 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac0 = $('#'+ ssids[i] + '_input_WifiMacFilterMac0').val(); 308 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac1 = $('#'+ ssids[i] + '_input_WifiMacFilterMac1').val(); 309 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac2 = $('#'+ ssids[i] + '_input_WifiMacFilterMac2').val(); 310 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac3 = $('#'+ ssids[i] + '_input_WifiMacFilterMac3').val(); 311 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac4 = $('#'+ ssids[i] + '_input_WifiMacFilterMac4').val(); 312 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac5 = $('#'+ ssids[i] + '_input_WifiMacFilterMac5').val(); 313 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac6 = $('#'+ ssids[i] + '_input_WifiMacFilterMac6').val(); 314 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac7 = $('#'+ ssids[i] + '_input_WifiMacFilterMac7').val(); 315 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac8 = $('#'+ ssids[i] + '_input_WifiMacFilterMac8').val(); 316 | g_wanlmacfilter_dataVlaue[i].WifiMacFilterMac9 = $('#'+ ssids[i] + '_input_WifiMacFilterMac9').val(); 317 | } 318 | } 319 | } 320 | 321 | function postData() { 322 | var ssids = ['ssid1']; 323 | getData(ssids); 324 | var newXmlString = object2xml('request', g_wanlmacfilter_dataVlaue[0]); 325 | saveAjaxData('api/wlan/mac-filter', newXmlString, function($xml) { 326 | var ret = xml2object($xml); 327 | if (isAjaxReturnOK(ret)) { 328 | showInfoDialog(common_success); 329 | button_enable('apply', '0'); 330 | } 331 | else { 332 | wlanmacfilter_initPage(); 333 | } 334 | }); 335 | } 336 | 337 | function multissid_postData() { 338 | var ssids = ['ssid1', 'ssid2']; 339 | getData(ssids); 340 | var postData = { 341 | Ssids: { 342 | Ssid: g_wanlmacfilter_dataVlaue 343 | }, 344 | WifiRestart: 1 345 | }; 346 | var newXmlString = object2xml('request', postData); 347 | saveAjaxData('api/wlan/multi-basic-settings', newXmlString, function($xml) { 348 | var ret = xml2object($xml); 349 | if (isAjaxReturnOK(ret)) { 350 | showInfoDialog(common_success); 351 | button_enable('apply', '0'); 352 | } 353 | else { 354 | wlanmacfilter_multissid_initPage(); 355 | } 356 | }); 357 | } 358 | -------------------------------------------------------------------------------- /webui/lib/log4javascript_lite.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2009 Tim Down. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | if (!Array.prototype.shift) { 17 | Array.prototype.shift = function() { 18 | if (this.length > 0) { 19 | var firstItem = this[0]; 20 | for (var i = 0, len = this.length - 1; i < len; i++) { 21 | this[i] = this[i + 1]; 22 | } 23 | this.length = this.length - 1; 24 | return firstItem; 25 | } 26 | }; 27 | } 28 | var log4javascript; 29 | (function() { 30 | var newLine = "\r\n"; 31 | 32 | function Log4JavaScript() {} 33 | log4javascript = new Log4JavaScript(); 34 | log4javascript.version = "1.4.1"; 35 | log4javascript.edition = "log4javascript_lite"; 36 | 37 | function getExceptionMessage(ex) { 38 | if (ex.message) { 39 | return ex.message; 40 | } else if (ex.description) { 41 | return ex.description; 42 | } else { 43 | return toStr(ex); 44 | } 45 | } 46 | 47 | function getUrlFileName(url) { 48 | var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\")); 49 | return url.substr(lastSlashIndex + 1); 50 | } 51 | 52 | function getExceptionStringRep(ex) { 53 | if (ex) { 54 | var exStr = "Exception: " + getExceptionMessage(ex); 55 | try { 56 | if (ex.lineNumber) { 57 | exStr += " on line number " + ex.lineNumber; 58 | } 59 | if (ex.fileName) { 60 | exStr += " in file " + getUrlFileName(ex.fileName); 61 | } 62 | } catch (localEx) {} 63 | if (showStackTraces && ex.stack) { 64 | exStr += newLine + "Stack trace:" + newLine + ex.stack; 65 | } 66 | return exStr; 67 | } 68 | return null; 69 | } 70 | 71 | function isError(err) { 72 | return (err instanceof Error); 73 | } 74 | 75 | function bool(obj) { 76 | return Boolean(obj); 77 | } 78 | var enabled = (typeof log4javascript_disabled != "undefined") && log4javascript_disabled ? false : true; 79 | log4javascript.setEnabled = function(enable) { 80 | enabled = bool(enable); 81 | }; 82 | log4javascript.isEnabled = function() { 83 | return enabled; 84 | }; 85 | var showStackTraces = false; 86 | log4javascript.setShowStackTraces = function(show) { 87 | showStackTraces = bool(show); 88 | }; 89 | var Level = function(level, name) { 90 | this.level = level; 91 | this.name = name; 92 | }; 93 | Level.prototype = { 94 | toString: function() { 95 | return this.name; 96 | }, 97 | equals: function(level) { 98 | return this.level == level.level; 99 | }, 100 | isGreaterOrEqual: function(level) { 101 | return this.level >= level.level; 102 | } 103 | }; 104 | Level.ALL = new Level(Number.MIN_VALUE, "ALL"); 105 | Level.TRACE = new Level(10000, "TRACE"); 106 | Level.DEBUG = new Level(20000, "DEBUG"); 107 | Level.INFO = new Level(30000, "INFO"); 108 | Level.WARN = new Level(40000, "WARN"); 109 | Level.ERROR = new Level(50000, "ERROR"); 110 | Level.FATAL = new Level(60000, "FATAL"); 111 | Level.OFF = new Level(Number.MAX_VALUE, "OFF"); 112 | log4javascript.Level = Level; 113 | 114 | function Appender() { 115 | var getConsoleHtmlLines = function() { 116 | return ['', '', '', 'log4javascript', '', '', '', '', '', '', '', '
', 'Options:', '', '', '', '
', '
', '', '']; 117 | }; 118 | var popUp = null; 119 | var popUpsBlocked = false; 120 | var popUpClosed = false; 121 | var popUpLoaded = false; 122 | var complainAboutPopUpBlocking = true; 123 | var initialized = false; 124 | var isSupported = true; 125 | var width = 600; 126 | var height = 400; 127 | var focusPopUp = false; 128 | var queuedLoggingEvents = new Array(); 129 | 130 | function isLoaded(win) { 131 | try { 132 | return bool(win.loaded); 133 | } catch (ex) { 134 | return false; 135 | } 136 | } 137 | 138 | function finalInit() { 139 | popUpLoaded = true; 140 | appendQueuedLoggingEvents(); 141 | } 142 | 143 | function writeHtml(doc) { 144 | var lines = getConsoleHtmlLines(); 145 | doc.open(); 146 | for (var i = 0, len = lines.length; i < len; i++) { 147 | doc.writeln(lines[i]); 148 | } 149 | doc.close(); 150 | } 151 | 152 | function pollConsoleWindow() { 153 | function pollConsoleWindowLoaded() { 154 | if (popUpLoaded) { 155 | clearInterval(poll); 156 | } else if (bool(popUp) && isLoaded(popUp)) { 157 | clearInterval(poll); 158 | finalInit(); 159 | } 160 | } 161 | var poll = setInterval(pollConsoleWindowLoaded, 100); 162 | } 163 | 164 | function init() { 165 | var windowProperties = "width=" + width + ",height=" + height + ",status,resizable"; 166 | var windowName = "log4javascriptLitePopUp" + location.host.replace(/[^a-z0-9]/gi, "_"); 167 | popUp = window.open("", windowName, windowProperties); 168 | popUpClosed = false; 169 | if (popUp) { 170 | if (isLoaded(popUp)) { 171 | popUp.mainPageReloaded(); 172 | finalInit(); 173 | } else { 174 | writeHtml(popUp.document); 175 | if (isLoaded(popUp)) { 176 | finalInit(); 177 | } else { 178 | pollConsoleWindow(); 179 | } 180 | } 181 | } else { 182 | isSupported = false; 183 | if (complainAboutPopUpBlocking) { 184 | alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging."); 185 | } 186 | } 187 | initialized = true; 188 | } 189 | 190 | function safeToAppend() { 191 | if (!popUpsBlocked && !popUpClosed) { 192 | if (popUp.closed) { 193 | popUpClosed = true; 194 | return false; 195 | } 196 | if (!popUpLoaded && popUp.loaded) { 197 | popUpLoaded = true; 198 | } 199 | } 200 | return !popUpsBlocked && popUpLoaded && !popUpClosed; 201 | } 202 | 203 | function padWithZeroes(num, len) { 204 | var str = "" + num; 205 | while (str.length < len) { 206 | str = "0" + str; 207 | } 208 | return str; 209 | } 210 | 211 | function padWithSpaces(str, len) { 212 | while (str.length < len) { 213 | str += " "; 214 | } 215 | return str; 216 | }; 217 | this.append = function(loggingEvent) { 218 | if (!initialized) { 219 | init(); 220 | } 221 | queuedLoggingEvents.push(loggingEvent); 222 | if (safeToAppend()) { 223 | appendQueuedLoggingEvents(); 224 | } 225 | } 226 | 227 | function appendQueuedLoggingEvents() { 228 | if (safeToAppend()) { 229 | while (queuedLoggingEvents.length > 0) { 230 | var currentLoggingEvent = queuedLoggingEvents.shift(); 231 | var date = currentLoggingEvent.timeStamp; 232 | var formattedDate = padWithZeroes(date.getHours(), 2) + ":" + 233 | padWithZeroes(date.getMinutes(), 2) + ":" + padWithZeroes(date.getSeconds(), 2); 234 | var formattedMessage = formattedDate + " " + padWithSpaces(currentLoggingEvent.level.name, 5) + " - " + currentLoggingEvent.getCombinedMessages(); 235 | var throwableStringRep = currentLoggingEvent.getThrowableStrRep(); 236 | if (throwableStringRep) { 237 | formattedMessage += newLine + throwableStringRep; 238 | } 239 | popUp.log(currentLoggingEvent.level, formattedMessage); 240 | } 241 | if (focusPopUp) { 242 | popUp.focus(); 243 | } 244 | } 245 | } 246 | } 247 | log4javascript.Appender = Appender; 248 | 249 | function Logger(name) { 250 | var appender = new Appender(); 251 | var loggerLevel = Level.ALL; 252 | this.log = function(level, params) { 253 | if (level.isGreaterOrEqual(this.getLevel())) { 254 | var exception; 255 | var finalParamIndex = params.length - 1; 256 | var lastParam = params[params.length - 1]; 257 | if (params.length > 1 && isError(lastParam)) { 258 | exception = lastParam; 259 | finalParamIndex--; 260 | } 261 | var messages = []; 262 | for (var i = 0; i <= finalParamIndex; i++) { 263 | messages[i] = params[i]; 264 | } 265 | var loggingEvent = new LoggingEvent(this, new Date(), level, messages, exception); 266 | appender.append(loggingEvent); 267 | } 268 | }; 269 | this.setLevel = function(level) { 270 | loggerLevel = level; 271 | }; 272 | this.getLevel = function() { 273 | return loggerLevel; 274 | }; 275 | } 276 | Logger.prototype = { 277 | trace: function() { 278 | this.log(Level.TRACE, arguments); 279 | }, 280 | debug: function() { 281 | this.log(Level.DEBUG, arguments); 282 | }, 283 | info: function() { 284 | this.log(Level.INFO, arguments); 285 | }, 286 | warn: function() { 287 | this.log(Level.WARN, arguments); 288 | }, 289 | error: function() { 290 | this.log(Level.ERROR, arguments); 291 | }, 292 | fatal: function() { 293 | this.log(Level.FATAL, arguments); 294 | }, 295 | isEnabledFor: function(level) { 296 | return level.isGreaterOrEqual(this.getLevel()); 297 | }, 298 | isTraceEnabled: function() { 299 | return this.isEnabledFor(Level.TRACE); 300 | }, 301 | isDebugEnabled: function() { 302 | return this.isEnabledFor(Level.DEBUG); 303 | }, 304 | isInfoEnabled: function() { 305 | return this.isEnabledFor(Level.INFO); 306 | }, 307 | isWarnEnabled: function() { 308 | return this.isEnabledFor(Level.WARN); 309 | }, 310 | isErrorEnabled: function() { 311 | return this.isEnabledFor(Level.ERROR); 312 | }, 313 | isFatalEnabled: function() { 314 | return this.isEnabledFor(Level.FATAL); 315 | } 316 | }; 317 | var defaultLogger = null; 318 | log4javascript.getDefaultLogger = function() { 319 | if (!defaultLogger) { 320 | defaultLogger = new Logger(); 321 | } 322 | return defaultLogger; 323 | }; 324 | log4javascript.getLogger = log4javascript.getDefaultLogger; 325 | var nullLogger = null; 326 | log4javascript.getNullLogger = function() { 327 | if (!nullLogger) { 328 | nullLogger = new Logger(); 329 | nullLogger.setLevel(Level.OFF); 330 | } 331 | return nullLogger; 332 | }; 333 | var LoggingEvent = function(logger, timeStamp, level, messages, exception) { 334 | this.logger = logger; 335 | this.timeStamp = timeStamp; 336 | this.level = level; 337 | this.messages = messages; 338 | this.exception = exception; 339 | }; 340 | LoggingEvent.prototype = { 341 | getThrowableStrRep: function() { 342 | return this.exception ? getExceptionStringRep(this.exception) : ""; 343 | }, 344 | getCombinedMessages: function() { 345 | return (this.messages.length === 1) ? this.messages[0] : this.messages.join(newLine); 346 | } 347 | }; 348 | log4javascript.LoggingEvent = LoggingEvent; 349 | window.log4javascript = log4javascript; 350 | })(); 351 | -------------------------------------------------------------------------------- /webui/js/validation.js: -------------------------------------------------------------------------------- 1 | 2 | var CHARCODE_A = 65; 3 | var CHARCODE_F = 70; 4 | var CHARCODE_Z = 90; 5 | var CHARCODE_a = 97; 6 | var CHARCODE_f = 102; 7 | var CHARCODE_z = 122; 8 | var CHARCODE_0 = 48; 9 | var CHARCODE_9 = 57; 10 | var CHARCODE_DOT = 46; 11 | var CHARCODE_UNDERLINE = 95; 12 | var CHARCODE_SPACE = 32; 13 | var CHARCODE_DASH = 45; 14 | //Port value range 15 | var MIN_PORT_RANGE = 1; 16 | var MAX_PORT_RANGE = 65535; 17 | //Filter status 18 | var FILTER_DISABLED = 0; 19 | var FILTER_ENABLED = 1; 20 | //Protocol status 21 | var PROTOCOL_BOTH = 0; 22 | var PROTOCOL_IMCP = 1; 23 | var PROTOCOL_TCP = 6; 24 | var PROTOCOL_UDP = 17; 25 | 26 | /*not support char*/ 27 | var MACRO_SUPPORT_CHAR_MIN = 32; 28 | var MACRO_SUPPORT_CHAR_MAX = 127; 29 | var MACRO_NOT_SUPPORT_CHAR_COMMA = 44; //, 30 | var MACRO_NOT_SUPPORT_CHAR_QUOTATION_MARK = 34; //" 31 | var MACRO_NOT_SUPPORT_CHAR_COLON = 58; //: 32 | var MACRO_NOT_SUPPORT_CHAR_SEMICOLON = 59; //; 33 | var MACRO_NOT_SUPPORT_BACKSLASH_MARK = 92; //\ 34 | var MACRO_NOT_SUPPORT_CHAR_38 = 38; //& 35 | var MACRO_NOT_SUPPORT_CHAR_37 = 37; //% 36 | var MACRO_NOT_SUPPORT_CHAR_43 = 43; //+ 37 | var MACRO_NOT_SUPPORT_CHAR_39 = 39; //' 38 | var MACRO_NOT_SUPPORT_CHAR_60 = 60; //< 39 | var MACRO_NOT_SUPPORT_CHAR_62 = 62; //> 40 | var MACRO_NOT_SUPPORT_CHAR_63 = 63; //? 41 | // verify IP Address 42 | function isValidIpAddress(address){ 43 | var addrParts = address.split('.'); 44 | if (addrParts.length != 4) 45 | { 46 | return false; 47 | } 48 | 49 | for (i = 0; i < 4; i++) 50 | { 51 | if (isNaN(addrParts[i]) == true)//isNaN if not a number return true,else return false 52 | { 53 | return false; 54 | } 55 | 56 | if (addrParts[i] == '') 57 | { 58 | return false; 59 | } 60 | 61 | if (addrParts[i].indexOf(' ') != -1)// 62 | { 63 | return false; 64 | } 65 | 66 | if ((addrParts[i].indexOf('0') == 0) && (addrParts[i].length != 1)) 67 | { 68 | return false; 69 | } 70 | } 71 | 72 | if ((addrParts[0] <= 0 || addrParts[0] == 127 || addrParts[0] > 223) || 73 | (addrParts[1] < 0 || addrParts[1] > 255) || 74 | (addrParts[2] < 0 || addrParts[2] > 255) || 75 | (addrParts[3] <= 0 || addrParts[3] >= 255)) 76 | { 77 | return false; 78 | } 79 | 80 | return true; 81 | } 82 | 83 | // validate Mac Address 84 | function isValidMacAddress(macAddress){ 85 | var c = ''; 86 | var i = 0, j = 0; 87 | var OddVals = new Array("1", "3", "5", "7", "9", "b", "d", "f"); 88 | 89 | if ('ff:ff:ff:ff:ff:ff' == macAddress) 90 | { 91 | return false; 92 | } 93 | 94 | var addrParts = macAddress.split(':'); 95 | if (addrParts.length != 6) 96 | { 97 | return false; 98 | } 99 | for (i = 0; i < 6; i++) 100 | { 101 | if (addrParts[i].length != 2) 102 | { 103 | return false; 104 | } 105 | 106 | for (j = 0; j < addrParts[i].length; j++) 107 | { 108 | c = addrParts[i].toLowerCase().charAt(j); 109 | if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) 110 | { 111 | continue; 112 | } 113 | else 114 | { 115 | return false; 116 | } 117 | } 118 | } 119 | 120 | c = addrParts[0].toLowerCase().charAt(1); 121 | 122 | for (i = 0; i < OddVals.length; i++) 123 | { 124 | if (c == OddVals[i]) 125 | { 126 | return false; 127 | } 128 | } 129 | 130 | return true; 131 | } 132 | 133 | 134 | 135 | function isValidSubnetMask(mask){ 136 | var i = 0; 137 | var num = 0; 138 | var zeroBitPos = 0, oneBitPos = 0; 139 | var zeroBitExisted = false; 140 | 141 | if ('0.0.0.0' == mask) 142 | { 143 | return false; 144 | } 145 | 146 | if ('255.255.255.255' == mask) 147 | { 148 | return false; 149 | } 150 | 151 | var maskParts = mask.split('.'); 152 | if (maskParts.length != 4) 153 | { 154 | return false; 155 | } 156 | 157 | for (i = 0; i < 4; i++) 158 | { 159 | if (true == isNaN(maskParts[i])) 160 | { 161 | return false; 162 | } 163 | if ('' == maskParts[i]) 164 | { 165 | return false; 166 | } 167 | if (maskParts[i].indexOf(' ') != -1) 168 | { 169 | return false; 170 | } 171 | 172 | if ((0 == maskParts[i].indexOf('0')) && (maskParts[i].length != 1)) 173 | { 174 | return false; 175 | } 176 | 177 | num = parseInt(maskParts[i],10); 178 | if (num < 0 || num > 255) 179 | { 180 | return false; 181 | } 182 | if (true == zeroBitExisted && 0 != num) 183 | { 184 | return false; 185 | } 186 | zeroBitPos = getLeftMostZeroBitPos(num); 187 | oneBitPos = getRightMostOneBitPos(num); 188 | if (zeroBitPos < oneBitPos) 189 | { 190 | return false; 191 | } 192 | if (zeroBitPos < 8) 193 | { 194 | zeroBitExisted = true; 195 | } 196 | } 197 | 198 | return true; 199 | } 200 | 201 | function isBroadcastOrMulticastIp(ipAddress) 202 | { 203 | var ip; 204 | ip = inetAton(ipAddress); 205 | ip = ip >>> 0; 206 | if((0xffffffff == ip) || (ip >= 0xe0000000 && ip <= 0xefffffff)) 207 | { 208 | return true; 209 | } 210 | return false; 211 | } 212 | 213 | function isPrivateIp(ipAddress) 214 | { 215 | var ip; 216 | ip = inetAton(ipAddress); 217 | ip = ip >>> 0; 218 | if((ip >= 0xa0000000 && ip <= 0xa0ffffff) 219 | || (ip >= 0xac100000 && ip <= 0xac1fffff) 220 | || (ip >= 0xc0a80000 && ip <= 0xc0a8ffff)) 221 | { 222 | return true; 223 | } 224 | return false; 225 | } 226 | 227 | // function for split port 228 | function portPartsParse(_port){ 229 | var portArray = []; 230 | _port = $.trim(_port); 231 | if (_port.indexOf('-') == -1) 232 | { 233 | portArray = [_port, _port]; 234 | } 235 | else 236 | { 237 | _port = _port.split('-'); 238 | portArray = [$.trim(_port[0]), $.trim(_port[1])]; 239 | } 240 | return portArray; 241 | } 242 | 243 | // function for join port 244 | function portJoin(startPort, endPort){ 245 | var _port; 246 | var startPt = $.trim(startPort); 247 | var endPt = $.trim(endPort); 248 | 249 | if ( "" == startPt || "" == endPt || startPt == endPt ) 250 | { 251 | _port = startPort; 252 | } 253 | else 254 | { 255 | _port = startPort + "-" + endPort; 256 | } 257 | return _port; 258 | } 259 | 260 | function inetAton(a){ 261 | var n; 262 | 263 | n = a.split(/\./); 264 | if (n.length != 4) 265 | { 266 | return 0; 267 | } 268 | return ((n[0] << 24) | (n[1] << 16) | (n[2] << 8) | n[3]); 269 | } 270 | 271 | function getLeftMostZeroBitPos(num){ 272 | var i = 0; 273 | var numArr = [128, 64, 32, 16, 8, 4, 2, 1]; 274 | 275 | for (i = 0; i < numArr.length; i++) 276 | { 277 | if ((num & numArr[i]) == 0) 278 | { 279 | return i; 280 | } 281 | } 282 | 283 | return numArr.length; 284 | } 285 | 286 | function getRightMostOneBitPos(num){ 287 | var i = 0; 288 | var numArr = [1, 2, 4, 8, 16, 32, 64, 128]; 289 | 290 | for (i = 0; i < numArr.length; i++) 291 | { 292 | if (((num & numArr[i]) >> i) == 1) 293 | { 294 | return (numArr.length - i - 1); 295 | } 296 | } 297 | 298 | return -1; 299 | } 300 | 301 | function compareStartIpAndEndIp(startIp, endIp){ 302 | var ipStart = startIp.split("."); 303 | var ipEnd = endIp.split("."); 304 | 305 | for (i = 0; i < 4; i++) 306 | { 307 | if (parseInt(ipEnd[i],10) > parseInt(ipStart[i],10)) 308 | { 309 | break; 310 | } 311 | else if ((parseInt(ipEnd[i],10) == parseInt(ipStart[i],10)) && 3 != i) 312 | { 313 | continue; 314 | } 315 | else 316 | { 317 | return false; 318 | } 319 | } 320 | 321 | return true; 322 | } 323 | 324 | function isSameSubnetAddrs(ip1, ip2, mask){ 325 | var addrParts1 = ip1.split("."); 326 | var addrParts2 = ip2.split("."); 327 | var maskParts = mask.split("."); 328 | for (i = 0; i < 4; i++) 329 | { 330 | if (((Number(addrParts1[i])) & (Number(maskParts[i]))) != ((Number(addrParts2[i])) & (Number(maskParts[i])))) 331 | { 332 | return false; 333 | } 334 | } 335 | return true; 336 | } 337 | 338 | /*begin check the ip is in the ip range, w00166520*/ 339 | function IsIpInRange(ipAddress, startip, endip) 340 | { 341 | var ip; 342 | var MinIp; 343 | var MaxIp; 344 | ip = inetAton(ipAddress); 345 | ip = ip >>> 0; 346 | MinIp = inetAton(startip); 347 | MinIp = MinIp >>> 0; 348 | MaxIp = inetAton(endip); 349 | MaxIp = MaxIp >>> 0; 350 | if(ip >= MinIp && ip <= MaxIp){ 351 | return true; 352 | } 353 | return false; 354 | } 355 | /*end check the ip is in the ip range, w00166520*/ 356 | 357 | function isBroadcastOrNetworkAddress(ipAddress, netmask){ 358 | var ip; 359 | var mask; 360 | var netaddr; 361 | var broadaddr; 362 | 363 | ip = inetAton(ipAddress); 364 | mask = inetAton(netmask); 365 | netaddr = ip & mask; 366 | broadaddr = netaddr | ~ mask; 367 | 368 | if (netaddr == ip || ip == broadaddr) 369 | { 370 | return false; 371 | } 372 | return true; 373 | } 374 | 375 | function isVaildSpecialPort(port, showTarget){ 376 | var portParts = $.trim(port); 377 | var c = ''; 378 | var i = 0; 379 | 380 | if ('' == portParts) 381 | { 382 | showQtip(showTarget, firewall_hint_port_empty); 383 | return false; 384 | } 385 | if ((portParts.indexOf('0') == 0) && (portParts.length != 1)) 386 | { 387 | showQtip(showTarget, firewall_hint_port_empty); 388 | return false; 389 | } 390 | 391 | for (i = 0; i < portParts.length; i++) 392 | { 393 | c = portParts.toLowerCase().charAt(i); 394 | if ((c >= '0') && (c <= '9')) 395 | { 396 | continue; 397 | } 398 | else 399 | { 400 | showQtip(showTarget, firewall_hint_port_empty); 401 | return false; 402 | } 403 | } 404 | 405 | if ((portParts < MIN_PORT_RANGE) || (portParts > MAX_PORT_RANGE)) 406 | { 407 | showQtip(showTarget, firewall_hint_port_number_valid_char); 408 | return false; 409 | } 410 | 411 | return true; 412 | } 413 | 414 | function isVaildPortForIPFilter(port, showTarget){ 415 | var portParts = $.trim(port); 416 | if ('' == portParts) 417 | { 418 | showQtip(showTarget, firewall_hint_port_empty); 419 | return false; 420 | } 421 | if (port < MIN_PORT_RANGE || port > MAX_PORT_RANGE) 422 | { 423 | showQtip(showTarget, firewall_hint_port_number_valid_char); 424 | return false; 425 | } 426 | var splitPort = portPartsParse(port); 427 | 428 | var i = 0 429 | for (i = 0; i < splitPort.length; i++) 430 | { 431 | if (isNaN(splitPort[i])) 432 | { 433 | showQtip(showTarget, firewall_hint_port_empty); 434 | return false; 435 | } 436 | } 437 | portParts = $.trim(port); 438 | if (portParts.indexOf('-') == -1) 439 | { 440 | if (!isVaildSpecialPort(portParts, showTarget)) 441 | { 442 | return false; 443 | } 444 | } 445 | else 446 | { 447 | portParts = port.split('-'); 448 | if (portParts.length == 2) 449 | { 450 | for (i = 0; i < 2; i++) 451 | { 452 | if (isNaN(portParts[i]) == true) 453 | { 454 | showQtip(showTarget, firewall_hint_port_empty); 455 | return false; 456 | } 457 | 458 | if (portParts[i] == '') 459 | { 460 | showQtip(showTarget, firewall_hint_port_empty); 461 | return false; 462 | } 463 | 464 | if (!isVaildSpecialPort(portParts[i], showTarget)) 465 | { 466 | return false; 467 | } 468 | } 469 | if (parseInt(portParts[0], 10) > parseInt(portParts[1], 10)) 470 | { 471 | showQtip(showTarget, firewall_hint_start_greater_end_port); 472 | return false; 473 | } 474 | } 475 | else 476 | { 477 | showQtip(showTarget, firewall_hint_port_empty); 478 | return false; 479 | } 480 | } 481 | return true; 482 | } 483 | 484 | function isHexString(str){ 485 | for (i = 0; i < str.length; i++) 486 | { 487 | var c = str.charCodeAt(i); 488 | if ( !( (c >= CHARCODE_0 && c <= CHARCODE_9) 489 | ||(c >= CHARCODE_A && c <= CHARCODE_F) 490 | ||(c >= CHARCODE_a && c <= CHARCODE_f) 491 | ) 492 | ) 493 | { 494 | return false; 495 | } 496 | } 497 | return true; 498 | } 499 | 500 | function isAsciiString(str){ 501 | for (i = 0; i < str.length; i++) 502 | { 503 | var c = str.charCodeAt(i); 504 | if (c <= 32 || c >= 127) 505 | { 506 | 507 | return false; 508 | } 509 | } 510 | return true; 511 | } 512 | 513 | 514 | function checkInputChar(str){ 515 | var i; 516 | var char_i; 517 | var num_char_i; 518 | 519 | if (str == "") 520 | { 521 | return true; 522 | } 523 | 524 | for (i = 0; i < str.length; i++) 525 | { 526 | char_i = str.charAt(i); 527 | num_char_i = char_i.charCodeAt(); 528 | if ((num_char_i > MACRO_SUPPORT_CHAR_MAX) || (num_char_i < MACRO_SUPPORT_CHAR_MIN)) 529 | { 530 | return false; 531 | } 532 | else if ((MACRO_NOT_SUPPORT_CHAR_COMMA == num_char_i) || 533 | (MACRO_NOT_SUPPORT_CHAR_QUOTATION_MARK == num_char_i) || 534 | (MACRO_NOT_SUPPORT_CHAR_COLON == num_char_i) || 535 | (MACRO_NOT_SUPPORT_CHAR_SEMICOLON == num_char_i) || 536 | (MACRO_NOT_SUPPORT_BACKSLASH_MARK == num_char_i) || 537 | (MACRO_NOT_SUPPORT_CHAR_38 == num_char_i) || 538 | (MACRO_NOT_SUPPORT_CHAR_37 == num_char_i) || 539 | (MACRO_NOT_SUPPORT_CHAR_43 == num_char_i) || 540 | (MACRO_NOT_SUPPORT_CHAR_39 == num_char_i) || 541 | (MACRO_NOT_SUPPORT_CHAR_60 == num_char_i) || 542 | (MACRO_NOT_SUPPORT_CHAR_62 == num_char_i) || 543 | (MACRO_NOT_SUPPORT_CHAR_63 == num_char_i)) 544 | { 545 | return false; 546 | } 547 | else 548 | { 549 | continue; 550 | } 551 | } 552 | return true; 553 | } 554 | 555 | function resolveXMLEntityReference(xmlStr) 556 | { 557 | return xmlStr.replace( /(\<|\>|\&|\'|\")/g, 558 | function($0, $1) 559 | { 560 | return{ 561 | "<" : "<" 562 | , ">" : ">" 563 | , "&" : "&" 564 | , "'" : "'" 565 | , "\"": """ 566 | }[$1]; 567 | } 568 | ); 569 | } 570 | 571 | 572 | /****************************************************************** 573 | * Description: 574 | * Trim whitespace characters like space, tab, etc. at head or tail of string 575 | * Return: 576 | * Trimed string. 577 | * Remark: 578 | * Calls trimWhitespace() as a member function of String. 579 | * 580 | *******************************************************************/ 581 | String.prototype.trimWhitespace = function() 582 | { 583 | return this.replace(/(^\s*)|(\s*$)/g,""); 584 | } 585 | 586 | function hasSpaceOrTabAtHead(str) 587 | { 588 | if(0 == str.indexOf(" ") || 0 == str.indexOf("\t")) 589 | { 590 | return true; 591 | } 592 | else 593 | { 594 | return false; 595 | } 596 | } 597 | 598 | --------------------------------------------------------------------------------