tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RTCRtpScriptTransform-encoded-transform-worker.js (1718B)


      1 const modification = 1;
      2 
      3 function appendToBuffer(buffer, value) {
      4    const result = new ArrayBuffer(buffer.byteLength + 1);
      5    const byteResult = new Uint8Array(result);
      6    byteResult.set(new Uint8Array(buffer), 0);
      7    byteResult[buffer.byteLength] = value;
      8    return result;
      9 }
     10 
     11 function ModifyAndWrite(chunk, transformer) {
     12    chunk.value.data = appendToBuffer(chunk.value.data, modification);
     13    transformer.writer.write(chunk.value);
     14 }
     15 
     16 function RestoreAndWrite(chunk, transformer) {
     17    const lastByte = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1];
     18    chunk.value.data = chunk.value.data.slice(0, chunk.value.data.byteLength - 1);
     19    let frameData = chunk.value.data;
     20    transformer.writer.write(chunk.value);
     21    if (lastByte === modification && frameData.byteLength == 0) {
     22        self.postMessage("got expected");
     23    }
     24    else {
     25        self.postMessage("unexpected value: lastByte (got " + lastByte +
     26            ", expected " + modification +
     27            "),  frame data length (got " + frameData.byteLength +
     28            ", expected 0))");
     29    }
     30 }
     31 onrtctransform = (event) => {
     32    const transformer = event.transformer;
     33 
     34    transformer.reader = transformer.readable.getReader();
     35    transformer.writer = transformer.writable.getWriter();
     36    async function process(transformer)
     37    {
     38        const chunk = await transformer.reader.read();
     39        if (chunk.done)
     40            return;
     41        if (transformer.options.name === 'sender') // sender
     42            ModifyAndWrite(chunk, transformer);
     43        else  // receiver
     44            RestoreAndWrite(chunk, transformer);
     45 
     46        await process(transformer);
     47    }
     48    process(transformer);
     49 };
     50 self.postMessage("registered");