summaryrefslogblamecommitdiffstats
path: root/_includes/js/custom.js
blob: 3e14a68c1b6ba2de4cf67ca6b3178eeea4672f16 (plain) (tree)












































































































































                                                                                        
  













                                                                                                                                                                                                          
 
































































                                                                                                                           


               
         
                      
                             


                                              
                                                                      



                                                     

                                                         





                                                                

     
                 


                                      
                      


                                      
                


                                      
                     


                                      
               


                                      
                    


                                      
               


                                      
                    


                                      
                          


                                      
                               


                                      
                      


                                      
                           


                                      
                   


                                      
                        


                                      
                     


                                      
                          


                                      
class uuencoding {
    /**
     * uuencode a value
     *
     * @param {(String|Buffer)} The value to be encoded.
     * @returns {String} The encoded value.
     */
    static encode(inString) {
        var stop = false;
        var inIndex = 0;
        var outIndex = 0;
        var bytesRead = 0;

        var inBytes = new Buffer(inString);
        var buffLen = inBytes.length;
        var outBytes = new Buffer(buffLen + buffLen / 3 + 1 + buffLen / 45 * 2 + 2 + 4);

        do {
            var n;
            var bytesLeft = buffLen - bytesRead;

            if (bytesLeft === 0) {
                break;
            }

            if (bytesLeft <= 45) {
                n = bytesLeft;
            } else {
                n = 45;
            }

            outBytes[outIndex++] = (n & 0x3F) + 32;

            for (var i = 0; i < n; i += 3) {
                if (buffLen - inIndex < 3) {
                    var padding = new Array(3);
                    var z = 0;

                    while (inIndex + z < buffLen) {
                        padding[z] = inBytes[inIndex + z];
                        ++z;
                    }

                    this.#encodeBytes(padding, 0, outBytes, outIndex);
                } else {
                    this.#encodeBytes(inBytes, inIndex, outBytes, outIndex);
                }

                inIndex += 3;
                outIndex += 4;
            }

            outBytes[outIndex++] = 10;
            bytesRead += n;

            if (n >= 45) {
                continue;
            }

            stop = true;
        } while (!stop);

        return outBytes.toString().substring(0, outIndex);
    }

    /**
     * uudecode a value
     *
     * @param {(String|Buffer)} The value to be decoded.
     * @returns {Buffer} The decoded value.
     */
    static decode(inString) {
        var stop = false;
        var inIndex = 0;
        var outIndex = 0;
        var totalLen = 0;

        var inBytes = new Buffer(inString);
        var buffLen = inBytes.length;
        var outBytes = new Buffer(buffLen);

        do {
            if (inIndex < buffLen) {
                var n = inBytes[inIndex] - 32 & 0x3F;

                ++inIndex;

                if (n > 45) {
                    throw 'Invalid Data';
                }

                if (n < 45) {
                    stop = true;
                }

                totalLen += n;

                while (n > 0) {
                    this.#decodeChars(inBytes, inIndex, outBytes, outIndex);
                    outIndex += 3;
                    inIndex += 4;
                    n -= 3;
                }

                ++inIndex;
            } else {
                stop = true;
            }
        } while (!stop);

        return outBytes.slice(0, totalLen);
    }

    // private helper functions
    static #encodeBytes(inBytes, inIndex, outBytes, outIndex) {
        var c1 = inBytes[inIndex] >>> 2;
        var c2 = inBytes[inIndex] << 4 & 0x30 | inBytes[inIndex + 1] >>> 4 & 0xF;
        var c3 = inBytes[inIndex + 1] << 2 & 0x3C | inBytes[inIndex + 2] >>> 6 & 0x3;
        var c4 = inBytes[inIndex + 2] & 0x3F;

        outBytes[outIndex] = (c1 & 0x3F) + 32;
        outBytes[outIndex + 1] = (c2 & 0x3F) + 32;
        outBytes[outIndex + 2] = (c3 & 0x3F) + 32;
        outBytes[outIndex + 3] = (c4 & 0x3F) + 32;
    }

    static #decodeChars(inBytes, inIndex, outBytes, outIndex) {
        var c1 = inBytes[inIndex];
        var c2 = inBytes[inIndex + 1];
        var c3 = inBytes[inIndex + 2];
        var c4 = inBytes[inIndex + 3];

        var b1 = (c1 - 32 & 0x3F) << 2 | (c2 - 32 & 0x3F) >> 4;
        var b2 = (c2 - 32 & 0x3F) << 4 | (c3 - 32 & 0x3F) >> 2;
        var b3 = (c3 - 32 & 0x3F) << 6 | c4 - 32 & 0x3F;

        outBytes[outIndex] = b1 & 0xFF;
        outBytes[outIndex + 1] = b2 & 0xFF;
        outBytes[outIndex + 2] = b3 & 0xFF;
    }
}
/*
class asciiHex {
    static asciiToHex(str, prefix = "0x", glue = " ") {
        var prefixi = glue !== "" ? prefix : "";
        var prefixs = glue === "" ? prefix : "";
        var hex = prefixs + ([...str].map((elem, n) => prefixi+Number(str.charCodeAt(n)).toString(16)).join(glue));
        return hex;
    }
    static hexToAscii(str, prefix = "0x", separator = " ") {
        if(prefix != "" && str.startsWith(prefix)) 
            str = str.substring(prefix.length);
        var ascii = separator === "" ? getChunks(str.substring(2),2).map(el => String.fromCharCode(parseInt(el, 16))).join('') : str.split(separator).map(el => String.fromCharCode(Number(el))).join('');
        return ascii;
    }
}

class gponSerial {
    #vendor;
    #progressive;
    constructor(vendor, progressive) {
        if(vendor.length == 4) {
            this.#vendor = vendor.toUpperCase();
        } else if(vendor.length == 8) {
            this.#vendor = asciiHex.hexToAscii(vendor,'','').toUpperCase();
        } else {
            throw "vendor length unvalid";
        }
        if(progressive.length == 8) {
            this.#progressive = progressive.toLowerCase();
        } else {
            throw "progressive length unvalid";
        }
    }
    constructor(serial) {
        if(serial.length == 12) {
            this.#vendor = serial.substring(0, 4).toUpperCase();
            this.#progressive = serial.substring(4).toLowerCase();
        } else if(serial.length == 16) {
            this.#vendor = asciiHex.hexToAscii(serial.substring(0, 8)).toUpperCase();
            this.#progressive = serial.substring(8).toLowerCase();
        }  else {
            throw "serial length unvalid";
        }
    }
    get [vendorHex]() {
        return ([...this.#vendor].map((elem, n) => Number(this.#vendor.charCodeAt(n)).toString(16)).join(''));
    }
    get [vendor]() {
        return this.#vendor;
    }
    get [progressive]() {
        return this.#progressive;
    }
    get [serial]() {
        return `${this.#vendor}${this.#progressive}`;
    }   
}

class gponPloam {
    #ploam;
    constructor(ploam) {
        if(ploam.length <= 10) {  
            this.#ploam = ([...gpon_password].map((elem, n) => Number(gpon_password.charCodeAt(n)).toString(16)).join(''));
            this.#ploam += '0'.repeat(20-gpon_password.length);
        }
        else if(ploam.length === 20) {
            this.#ploam = ploam;
        }
        else if(ploam.length === 22 && ploam.startsWith("0x")) {
            this.#ploam = ploam.substring(2);
        }
    }
    get [ploam]() {
        return asciiHex.hexToAscii(this.#ploam, '','');
    }
    get [ploamEncoding]() {
        return JSON.stringify(ploam);
    }
    get [ploamHex] () {
        return this.#ploam;
    }
}*/

class eeprom1 {
    #hex;
    constructor(hex) {
        this.#hex = [...hex];
    }

    getPart = function(startIndex, endIndex) {
        return this.#hex.slice(startIndex*2, (endIndex+1)*2).join('');
    }

    setPart = function(startIndex, endIndex, value) {
        let calcLength = (endIndex+1-startIndex)*2;
        if(value.length != calcLength) {
            value += '0'.repeat(calcLength-value.length);
        }    
        this.#hex.splice(startIndex, calcLength, ...[...value]);
    }

    getHex() {
      return this.#hex.join('');
    }

    getSerial() {
        return this.getPart(233, 240);
    }

    setSerial(value) {
        this.setPart(233, 240, value);
    }

    getPloam() {
        return this.getPart(191, 214);
    }

    setPloam(value) {
        this.setPart(191, 214, value);
    }

    getLoid() {
        return this.getPart(191, 214);
    }

    setLoid(value) {
        this.setPart(191, 214, value);
    }

    getLpwd() {
        return this.getPart(215, 231);
    }

    setLpwd(value) {
        this.setPart(215, 231, value);
    }

    getLoidPloamSwitch() {
        return this.getPart(232, 232);
    }

    setLoidPloamSwitch(value) {
        this.setPart(232, 232, value);
    }

    getEquipmentID() {
        return this.getPart(512, 531);
    }

    setEquipmentID(value) {
        this.setPart(512, 531, value);
    }

    getVendorID() {
        return this.getPart(532, 535);
    }

    setVendorID(value) {
        this.setPart(532, 535, value);
    }

    getMacAddress() {
        return this.getPart(384, 389);
    }

    setMacAddress(value) {
        this.setPart(384, 389, value);
    }
}