diff options
Diffstat (limited to 'source4/scripting/libjs/encoder.js')
-rw-r--r-- | source4/scripting/libjs/encoder.js | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/source4/scripting/libjs/encoder.js b/source4/scripting/libjs/encoder.js deleted file mode 100644 index 6cb780c00d..0000000000 --- a/source4/scripting/libjs/encoder.js +++ /dev/null @@ -1,116 +0,0 @@ -/* - server side js functions for encoding/decoding objects into linear strings - - Copyright Andrew Tridgell 2005 - released under the GNU GPL Version 3 or later -*/ -/* - usage: - - enc = encodeObject(obj); - obj = decodeObject(enc); - - The encoded format of the object is a string that is safe to - use in URLs - - Note that only data elements are encoded, not functions -*/ - -function __count_members(o) { - var i, count = 0; - for (i in o) { - count++; - } - if (o.length != undefined) { - count++; - } - return count; -} - -function __replace(str, old, rep) { - var s = string_init(); - var a = s.split(old, str); - var j = s.join(rep, a); - return s.join(rep, a); -} - -function encodeElement(e, name) { - var t = typeof(e); - var r; - var s = string_init(); - if (t == 'object' && e == null) { - t = 'null'; - } - if (t == 'object') { - r = s.sprintf("%s:%s:%s", name, t, encodeObject(e)); - } else if (t == "string") { - var enc = s.encodeURIComponent(e); - var rep = __replace(enc, '%', '#'); - r = s.sprintf("%s:%s:%s:", - name, t, __replace(s.encodeURIComponent(e),'%','#')); - } else if (t == "boolean" || t == "number") { - r = s.sprintf("%s:%s:%s:", name, t, "" + e); - } else if (t == "undefined" || t == "null") { - r = s.sprintf("%s:%s:", name, t); - } else if (t == "pointer") { - r = s.sprintf("%s:string:(POINTER):", name); - } else { - println("Unable to linearise type " + t); - r = ""; - } - return r; -} - -function encodeObject(o) { - var s = string_init(); - var i, r = s.sprintf("%u:", __count_members(o)); - for (i in o) { - r = r + encodeElement(o[i], i); - } - if (o.length != undefined) { - r = r + encodeElement(o.length, 'length'); - } - return r; -} - -function decodeObjectArray(a) { - var s = string_init(); - var o = new Object(); - var i, count = a[a.i]; a.i++; - for (i=0;i<count;i++) { - var name = a[a.i]; a.i++; - var type = a[a.i]; a.i++; - var value; - if (type == 'object') { - o[name] = decodeObjectArray(a); - } else if (type == "string") { - value = s.decodeURIComponent(__replace(a[a.i],'#','%')); a.i++; - o[name] = value; - } else if (type == "boolean") { - value = a[a.i]; a.i++; - if (value == 'true') { - o[name] = true; - } else { - o[name] = false; - } - } else if (type == "undefined") { - o[name] = undefined; - } else if (type == "null") { - o[name] = null; - } else if (type == "number") { - value = a[a.i]; a.i++; - o[name] = value + 0; - } else { - println("Unable to delinearise type " + t); - assert(t == "supported type"); - } - } - return o; -} - -function decodeObject(str) { - var s = string_init(); - var a = s.split(':', str); - a.i = 0; - return decodeObjectArray(a); -} |