export function parseRDPMessage()

in src/firefox/rdp-client.js [21:48]


export function parseRDPMessage(data) {
  const str = data.toString();
  const sepIdx = str.indexOf(':');
  if (sepIdx < 1) {
    return { data };
  }

  const byteLen = parseInt(str.slice(0, sepIdx));
  if (isNaN(byteLen)) {
    const error = new Error('Error parsing RDP message length');
    return { data, error, fatal: true };
  }

  if (data.length - (sepIdx + 1) < byteLen) {
    // Can't parse yet, will retry once more data has been received.
    return { data };
  }

  data = data.slice(sepIdx + 1);
  const msg = data.slice(0, byteLen);
  data = data.slice(byteLen);

  try {
    return { data, rdpMessage: JSON.parse(msg.toString()) };
  } catch (error) {
    return { data, error, fatal: false };
  }
}