️ Use ArrayBuffer instead of Buffer
This commit is contained in:
parent
46b0cbbf70
commit
2dae5f6c58
5 changed files with 12 additions and 13 deletions
|
@ -1,6 +1,6 @@
|
|||
import * as http from 'http';
|
||||
|
||||
export default function getUrlContents({ host, path }: {host: string, path: string}): Promise<Buffer> {
|
||||
export default function getUrlContents({ host, path }: {host: string, path: string}): Promise<ArrayBuffer> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = http.request({
|
||||
family: 4,
|
||||
|
@ -23,7 +23,7 @@ export default function getUrlContents({ host, path }: {host: string, path: stri
|
|||
return reject(`Expected length ${headerLength} but received ${totalLength}`);
|
||||
}
|
||||
const fileContents = Buffer.concat(chunkList, totalLength);
|
||||
resolve(fileContents);
|
||||
resolve(fileContents.buffer as ArrayBuffer);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -10,19 +10,19 @@ const Decoder = new TextDecoder('utf-8');
|
|||
//----- PATCHMANIFEST -----
|
||||
//.patchmanifest files contain a single XML file called "manifest.xml"
|
||||
const patchmanifestBuffer = await getPatchmanifest('assets_swtor_de_de');
|
||||
console.log(patchmanifestBuffer.length, patchmanifestBuffer);
|
||||
console.log(patchmanifestBuffer.byteLength, patchmanifestBuffer);
|
||||
|
||||
const patchmanifestFiles = readSsnFile(patchmanifestBuffer);
|
||||
console.log(patchmanifestFiles);
|
||||
|
||||
const patchmanifestFile = extractFile(patchmanifestFiles[0], [new DataView(patchmanifestBuffer.buffer)]);
|
||||
const patchmanifestFile = extractFile(patchmanifestFiles[0], [new DataView(patchmanifestBuffer)]);
|
||||
const patchmanifestXml = Decoder.decode(patchmanifestFile);
|
||||
console.log(patchmanifestXml);
|
||||
|
||||
//----- SOLIDPKG -----
|
||||
//.solidpkg files contain a single Bencode file called "metafile.solid"
|
||||
const solidpkgBuffer = await getSolidpkg('assets_swtor_de_de', -1, 0);
|
||||
console.log(solidpkgBuffer.length, solidpkgBuffer);
|
||||
console.log(solidpkgBuffer.byteLength, solidpkgBuffer);
|
||||
|
||||
const solidPkgFiles = readSsnFile(solidpkgBuffer);
|
||||
console.log(solidPkgFiles);
|
||||
|
|
|
@ -2,7 +2,7 @@ import getUrlContents from '../getUrlContents';
|
|||
import { Product } from '../interfaces/ISettings';
|
||||
import verifyProductName from '../verifyProductName';
|
||||
|
||||
export default function getPatchmanifest(product: Product): Promise<Buffer> {
|
||||
export default function getPatchmanifest(product: Product): Promise<ArrayBuffer> {
|
||||
//Verify function arguments
|
||||
if (!verifyProductName(product)) {
|
||||
throw new Error(`"${product}" is not a valid product.`);
|
||||
|
|
|
@ -2,7 +2,7 @@ import getUrlContents from '../getUrlContents';
|
|||
import { Product } from '../interfaces/ISettings';
|
||||
import verifyProductName from '../verifyProductName';
|
||||
|
||||
export default function getSolidpkg(product: Product, from: number, to: number): Promise<Buffer> {
|
||||
export default function getSolidpkg(product: Product, from: number, to: number): Promise<ArrayBuffer> {
|
||||
//Verify function arguments
|
||||
if (!verifyProductName(product)) {
|
||||
throw new Error(`"${product}" is not a valid product.`);
|
||||
|
|
|
@ -14,16 +14,15 @@ const COMPRESSION_DEFLATE = 8;
|
|||
|
||||
const Decoder = new TextDecoder('utf-8');
|
||||
|
||||
export default function readSsnFile(buffer: Buffer): ISsnFileEntry[] {
|
||||
const arrayBuffer = buffer.buffer;
|
||||
const dv = new DataView(arrayBuffer);
|
||||
export default function readSsnFile(buffer: ArrayBuffer): ISsnFileEntry[] {
|
||||
const dv = new DataView(buffer);
|
||||
|
||||
const fileEntries: ISsnFileEntry[] = [];
|
||||
|
||||
//--------------- READ END OF CENTRAL DIR ---------------
|
||||
|
||||
//Go to end of file
|
||||
let pos = buffer.length - 22; //end of central dir is at least 22 bytes long
|
||||
let pos = buffer.byteLength - 22; //end of central dir is at least 22 bytes long
|
||||
|
||||
//Find end of central dir
|
||||
while (pos >= 0 && dv.getUint32(pos, true) !== SIGNATURE_END_OF_CENTRAL_DIR) {
|
||||
|
@ -106,7 +105,7 @@ export default function readSsnFile(buffer: Buffer): ISsnFileEntry[] {
|
|||
/** relative offset of local header */
|
||||
const relOffset = dv.getUint32(pos, true); pos += 4;
|
||||
/** file name (variable size) */
|
||||
const fileName = Decoder.decode(new DataView(arrayBuffer, pos, fileNameLength)); pos += fileNameLength;
|
||||
const fileName = Decoder.decode(new DataView(buffer, pos, fileNameLength)); pos += fileNameLength;
|
||||
|
||||
//read password from extra field
|
||||
const extraFieldEnd = pos + extraFieldLength;
|
||||
|
@ -122,7 +121,7 @@ export default function readSsnFile(buffer: Buffer): ISsnFileEntry[] {
|
|||
if (fieldLength > 120) {
|
||||
throw new Error(`Password is too long, it should be 120 characters at most but it is ${fieldLength} characters long.`);
|
||||
}
|
||||
encodedPassword = new Uint8Array(arrayBuffer, pos, fieldLength);
|
||||
encodedPassword = new Uint8Array(buffer, pos, fieldLength);
|
||||
break;
|
||||
}
|
||||
case 0x80AE: //diff type
|
||||
|
|
Loading…
Reference in a new issue