diff options
Diffstat (limited to 'js/src/Ice/Base64.js')
-rw-r--r-- | js/src/Ice/Base64.js | 402 |
1 files changed, 199 insertions, 203 deletions
diff --git a/js/src/Ice/Base64.js b/js/src/Ice/Base64.js index f1f9ec47964..4e318c217e7 100644 --- a/js/src/Ice/Base64.js +++ b/js/src/Ice/Base64.js @@ -7,270 +7,266 @@ // // ********************************************************************** -(function(global){ - require("Ice/Buffer"); +var Ice = require("../Ice/Buffer").Ice; - var Ice = global.Ice || {}; +var Buffer = Ice.Buffer; - var Buffer = Ice.Buffer; +var Base64 = {}; - var Base64 = {}; +var _codeA = "A".charCodeAt(0); +var _codea = "a".charCodeAt(0); +var _code0 = "0".charCodeAt(0); - var _codeA = "A".charCodeAt(0); - var _codea = "a".charCodeAt(0); - var _code0 = "0".charCodeAt(0); - - Base64.encode = function(buf) // Expects native Buffer +Base64.encode = function(buf) // Expects native Buffer +{ + if(buf === null || buf.length === 0) { - if(buf === null || buf.length === 0) - { - return ""; - } + return ""; + } + + var base64Bytes = (((buf.length * 4) / 3) + 1); + var newlineBytes = (((base64Bytes * 2) / 76) + 1); + var totalBytes = base64Bytes + newlineBytes; - var base64Bytes = (((buf.length * 4) / 3) + 1); - var newlineBytes = (((base64Bytes * 2) / 76) + 1); - var totalBytes = base64Bytes + newlineBytes; + var v = []; - var v = []; + var by1; + var by2; + var by3; + var by4; + var by5; + var by6; + var by7; - var by1; - var by2; - var by3; - var by4; - var by5; - var by6; - var by7; + for(var i = 0; i < buf.length; i += 3) + { + by1 = buf[i] & 0xff; + by2 = 0; + by3 = 0; - for(var i = 0; i < buf.length; i += 3) + if((i + 1) < buf.length) { - by1 = buf[i] & 0xff; - by2 = 0; - by3 = 0; - - if((i + 1) < buf.length) - { - by2 = buf[i + 1] & 0xff; - } - - if((i + 2) < buf.length) - { - by3 = buf[i + 2] & 0xff; - } - - by4 = (by1 >> 2) & 0xff; - by5 = (((by1 & 0x3) << 4) | (by2 >> 4)) & 0xff; - by6 = (((by2 & 0xf) << 2) | (by3 >> 6)) & 0xff; - by7 = by3 & 0x3f; - - v.push(encodeChar(by4)); - v.push(encodeChar(by5)); - - if((i + 1) < buf.length) - { - v.push(encodeChar(by6)); - } - else - { - v.push("="); - } - - if((i + 2) < buf.length) - { - v.push(encodeChar(by7)); - } - else - { - v.push("="); - } + by2 = buf[i + 1] & 0xff; } - var retval = v.join(""); - var outString = []; - var iter = 0; - - while((retval.length - iter) > 76) + if((i + 2) < buf.length) { - outString.push(retval.substring(iter, iter + 76)); - outString.push("\r\n"); - iter += 76; + by3 = buf[i + 2] & 0xff; } - outString.push(retval.substring(iter)); + by4 = (by1 >> 2) & 0xff; + by5 = (((by1 & 0x3) << 4) | (by2 >> 4)) & 0xff; + by6 = (((by2 & 0xf) << 2) | (by3 >> 6)) & 0xff; + by7 = by3 & 0x3f; - return outString.join(""); - }; + v.push(encodeChar(by4)); + v.push(encodeChar(by5)); - Base64.decode = function(str) // Returns native Buffer - { - var newStr = []; - - for(var j = 0; j < str.length; j++) + if((i + 1) < buf.length) { - var c = str.charAt(j); - if(Base64.isBase64(c)) - { - newStr.push(c); - } + v.push(encodeChar(by6)); } - - if(newStr.length === 0) + else { - return null; + v.push("="); } - // Note: This is how we were previously computing the size of the return - // sequence. The method below is more efficient (and correct). - // size_t lines = str.size() / 78; - // size_t totalBytes = (lines * 76) + (((str.size() - (lines * 78)) * 3) / 4); + if((i + 2) < buf.length) + { + v.push(encodeChar(by7)); + } + else + { + v.push("="); + } + } - // Figure out how long the final sequence is going to be. - var totalBytes = (newStr.length * 3 / 4) + 1; + var retval = v.join(""); + var outString = []; + var iter = 0; - var retval = new Buffer(); - retval.resize(totalBytes); + while((retval.length - iter) > 76) + { + outString.push(retval.substring(iter, iter + 76)); + outString.push("\r\n"); + iter += 76; + } - var by1; - var by2; - var by3; - var by4; + outString.push(retval.substring(iter)); - var c1; - var c2; - var c3; - var c4; + return outString.join(""); +}; - var off = 0; +Base64.decode = function(str) // Returns native Buffer +{ + var newStr = []; - for(var i = 0; i < newStr.length; i += 4) + for(var j = 0; j < str.length; j++) + { + var c = str.charAt(j); + if(Base64.isBase64(c)) { - c1 = "A"; - c2 = "A"; - c3 = "A"; - c4 = "A"; - - c1 = newStr[i]; - - if((i + 1) < newStr.length) - { - c2 = newStr[i + 1]; - } - - if((i + 2) < newStr.length) - { - c3 = newStr[i + 2]; - } - - if((i + 3) < newStr.length) - { - c4 = newStr[i + 3]; - } - - by1 = decodeChar(c1) & 0xff; - by2 = decodeChar(c2) & 0xff; - by3 = decodeChar(c3) & 0xff; - by4 = decodeChar(c4) & 0xff; - - retval.put((by1 << 2) | (by2 >> 4)); - - if(c3 != "=") - { - retval.put(((by2 & 0xf) << 4) | (by3 >> 2)); - } - - if(c4 != "=") - { - retval.put(((by3 & 0x3) << 6) | by4); - } + newStr.push(c); } + } + + if(newStr.length === 0) + { + return null; + } + + // Note: This is how we were previously computing the size of the return + // sequence. The method below is more efficient (and correct). + // size_t lines = str.size() / 78; + // size_t totalBytes = (lines * 76) + (((str.size() - (lines * 78)) * 3) / 4); + + // Figure out how long the final sequence is going to be. + var totalBytes = (newStr.length * 3 / 4) + 1; + + var retval = new Buffer(); + retval.resize(totalBytes); - return retval.remaining > 0 ? retval.getArrayAt(0, retval.position) : retval.getArrayAt(0); - }; + var by1; + var by2; + var by3; + var by4; - Base64.isBase64 = function(c) + var c1; + var c2; + var c3; + var c4; + + var off = 0; + + for(var i = 0; i < newStr.length; i += 4) { - if(c >= 'A' && c <= 'Z') - { - return true; - } + c1 = "A"; + c2 = "A"; + c3 = "A"; + c4 = "A"; + + c1 = newStr[i]; - if(c >= 'a' && c <= 'z') + if((i + 1) < newStr.length) { - return true; + c2 = newStr[i + 1]; } - if(c >= '0' && c <= '9') + if((i + 2) < newStr.length) { - return true; + c3 = newStr[i + 2]; } - if(c == '+') + if((i + 3) < newStr.length) { - return true; + c4 = newStr[i + 3]; } - if(c == '/') + by1 = decodeChar(c1) & 0xff; + by2 = decodeChar(c2) & 0xff; + by3 = decodeChar(c3) & 0xff; + by4 = decodeChar(c4) & 0xff; + + retval.put((by1 << 2) | (by2 >> 4)); + + if(c3 != "=") { - return true; + retval.put(((by2 & 0xf) << 4) | (by3 >> 2)); } - if(c == '=') + if(c4 != "=") { - return true; + retval.put(((by3 & 0x3) << 6) | by4); } + } - return false; - }; + return retval.remaining > 0 ? retval.getArrayAt(0, retval.position) : retval.getArrayAt(0); +}; - function encodeChar(uc) +Base64.isBase64 = function(c) +{ + if(c >= 'A' && c <= 'Z') { - if(uc < 26) - { - return String.fromCharCode(_codeA + uc); - } + return true; + } - if(uc < 52) - { - return String.fromCharCode(_codea + (uc - 26)); - } + if(c >= 'a' && c <= 'z') + { + return true; + } - if(uc < 62) - { - return String.fromCharCode(_code0 + (uc - 52)); - } + if(c >= '0' && c <= '9') + { + return true; + } - if(uc == 62) - { - return "+"; - } + if(c == '+') + { + return true; + } - return "/"; + if(c == '/') + { + return true; } - function decodeChar(c) + if(c == '=') { - if(c >= 'A' && c <= 'Z') - { - return c.charCodeAt(0) - _codeA; - } + return true; + } - if(c >= 'a' && c <= 'z') - { - return c.charCodeAt(0) - _codea + 26; - } + return false; +}; - if(c >= '0' && c <= '9') - { - return c.charCodeAt(0) - _code0 + 52; - } +function encodeChar(uc) +{ + if(uc < 26) + { + return String.fromCharCode(_codeA + uc); + } - if(c == '+') - { - return 62; - } + if(uc < 52) + { + return String.fromCharCode(_codea + (uc - 26)); + } + + if(uc < 62) + { + return String.fromCharCode(_code0 + (uc - 52)); + } + + if(uc == 62) + { + return "+"; + } + + return "/"; +} + +function decodeChar(c) +{ + if(c >= 'A' && c <= 'Z') + { + return c.charCodeAt(0) - _codeA; + } + + if(c >= 'a' && c <= 'z') + { + return c.charCodeAt(0) - _codea + 26; + } - return 63; + if(c >= '0' && c <= '9') + { + return c.charCodeAt(0) - _code0 + 52; } - Ice.Base64 = Base64; - global.Ice = Ice; -}(typeof (global) === "undefined" ? window : global)); + if(c == '+') + { + return 62; + } + + return 63; +} + +Ice.Base64 = Base64; +module.exports.Ice = Ice; |