You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
/*
 | 
						|
 * vim: ts=4:sw=4:expandtab
 | 
						|
 */
 | 
						|
 | 
						|
function ProtoParser(arrayBuffer, protobuf) {
 | 
						|
    this.protobuf = protobuf;
 | 
						|
    this.buffer = new dcodeIO.ByteBuffer();
 | 
						|
    this.buffer.append(arrayBuffer);
 | 
						|
    this.buffer.offset = 0;
 | 
						|
    this.buffer.limit = arrayBuffer.byteLength;
 | 
						|
}
 | 
						|
ProtoParser.prototype = {
 | 
						|
    constructor: ProtoParser,
 | 
						|
    next: function() {
 | 
						|
        try {
 | 
						|
            if (this.buffer.limit === this.buffer.offset) {
 | 
						|
                return undefined; // eof
 | 
						|
            }
 | 
						|
            var len = this.buffer.readVarint32();
 | 
						|
            var nextBuffer = this.buffer.slice(
 | 
						|
                this.buffer.offset, this.buffer.offset+len
 | 
						|
            ).toArrayBuffer();
 | 
						|
            // TODO: de-dupe ByteBuffer.js includes in libaxo/libts
 | 
						|
            // then remove this toArrayBuffer call.
 | 
						|
 | 
						|
            var proto = this.protobuf.decode(nextBuffer);
 | 
						|
            this.buffer.skip(len);
 | 
						|
 | 
						|
            if (proto.avatar) {
 | 
						|
                var attachmentLen = proto.avatar.length;
 | 
						|
                proto.avatar.data = this.buffer.slice(
 | 
						|
                    this.buffer.offset, this.buffer.offset + attachmentLen
 | 
						|
                ).toArrayBuffer();
 | 
						|
                this.buffer.skip(attachmentLen);
 | 
						|
            }
 | 
						|
 | 
						|
            return proto;
 | 
						|
        } catch(e) {
 | 
						|
            console.log(e);
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
var GroupBuffer = function(arrayBuffer) {
 | 
						|
    ProtoParser.call(this, arrayBuffer, textsecure.protobuf.GroupDetails);
 | 
						|
};
 | 
						|
GroupBuffer.prototype = Object.create(ProtoParser.prototype);
 | 
						|
GroupBuffer.prototype.constructor = GroupBuffer;
 | 
						|
var ContactBuffer = function(arrayBuffer) {
 | 
						|
    ProtoParser.call(this, arrayBuffer, textsecure.protobuf.ContactDetails);
 | 
						|
};
 | 
						|
ContactBuffer.prototype = Object.create(ProtoParser.prototype);
 | 
						|
ContactBuffer.prototype.constructor = ContactBuffer;
 |