// // httpMultiPart.js // examples/libraries // // Copyright 2014 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // httpMultiPart = (function () { var that = {}, parts, byteLength, boundaryString, crlf; function clear() { boundaryString = "--boundary_" + String(Uuid.generate()).slice(1, 36) + "="; parts = []; byteLength = 0; crlf = ""; } that.clear = clear; function boundary() { return boundaryString.slice(2); } that.boundary = boundary; function length() { return byteLength; } that.length = length; function add(object) { // - name, string // - name, buffer var buffer, string, stringBuffer, compressedBuffer; if (object.name === undefined) { throw new Error("Item to add to HttpMultiPart must have a name"); } else if (object.string !== undefined) { //--= //Content-Disposition: form-data; name="model_name" // // string = crlf + boundaryString + "\r\n" + "Content-Disposition: form-data; name=\"" + object.name + "\"\r\n" + "\r\n" + object.string; buffer = string.toArrayBuffer(); } else if (object.buffer !== undefined) { //--= //Content-Disposition: form-data; name="fbx"; filename="" //Content-Type: application/octet-stream // // string = crlf + boundaryString + "\r\n" + "Content-Disposition: form-data; name=\"" + object.name + "\"; filename=\"" + object.buffer.filename + "\"\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n"; stringBuffer = string.toArrayBuffer(); compressedBuffer = object.buffer.buffer.compress(); buffer = new Uint8Array(stringBuffer.byteLength + compressedBuffer.byteLength); buffer.set(new Uint8Array(stringBuffer)); buffer.set(new Uint8Array(compressedBuffer), stringBuffer.byteLength); } else { throw new Error("Item to add to HttpMultiPart not recognized"); } byteLength += buffer.byteLength; parts.push(buffer); crlf = "\r\n"; return true; } that.add = add; function response() { var buffer, index, str, i; str = crlf + boundaryString + "--\r\n"; buffer = str.toArrayBuffer(); byteLength += buffer.byteLength; parts.push(buffer); buffer = new Uint8Array(byteLength); index = 0; for (i = 0; i < parts.length; i += 1) { buffer.set(new Uint8Array(parts[i]), index); index += parts[i].byteLength; } return buffer; } that.response = response; clear(); return that; }());