MCPcopy Create free account
hub / github.com/mscdex/ssh2 / makeBufferParser

Function makeBufferParser

lib/protocol/utils.js:37–139  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

35}
36
37function makeBufferParser() {
38 let pos = 0;
39 let buffer;
40
41 const self = {
42 init: (buf, start) => {
43 buffer = buf;
44 pos = (typeof start === 'number' ? start : 0);
45 },
46 pos: () => pos,
47 length: () => (buffer ? buffer.length : 0),
48 avail: () => (buffer && pos < buffer.length ? buffer.length - pos : 0),
49 clear: () => {
50 buffer = undefined;
51 },
52 readUInt32BE: () => {
53 if (!buffer || pos + 3 >= buffer.length)
54 return;
55 return (buffer[pos++] * 16777216)
56 + (buffer[pos++] * 65536)
57 + (buffer[pos++] * 256)
58 + buffer[pos++];
59 },
60 readUInt64BE: (behavior) => {
61 if (!buffer || pos + 7 >= buffer.length)
62 return;
63 switch (behavior) {
64 case 'always':
65 return BigInt(`0x${buffer.hexSlice(pos, pos += 8)}`);
66 case 'maybe':
67 if (buffer[pos] > 0x1F)
68 return BigInt(`0x${buffer.hexSlice(pos, pos += 8)}`);
69 // FALLTHROUGH
70 default:
71 return (buffer[pos++] * 72057594037927940)
72 + (buffer[pos++] * 281474976710656)
73 + (buffer[pos++] * 1099511627776)
74 + (buffer[pos++] * 4294967296)
75 + (buffer[pos++] * 16777216)
76 + (buffer[pos++] * 65536)
77 + (buffer[pos++] * 256)
78 + buffer[pos++];
79 }
80 },
81 skip: (n) => {
82 if (buffer && n > 0)
83 pos += n;
84 },
85 skipString: () => {
86 const len = self.readUInt32BE();
87 if (len === undefined)
88 return;
89 pos += len;
90 return (pos <= buffer.length ? len : undefined);
91 },
92 readByte: () => {
93 if (buffer && pos < buffer.length)
94 return buffer[pos++];

Callers 5

client.jsFile · 0.85
agent.jsFile · 0.85
SFTP.jsFile · 0.85
utils.jsFile · 0.85
keyParser.jsFile · 0.85

Calls 2

bufferCopyFunction · 0.85
bufferSliceFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…