MCPcopy Create free account
hub / github.com/apache/cloudstack / _readSegment

Method _readSegment

systemvm/agent/noVNC/core/decoders/jpeg.js:89–145  ·  view source on GitHub ↗
(sock)

Source from the content-addressed store, hash-verified

87 }
88
89 _readSegment(sock) {
90 if (sock.rQwait("JPEG", 2)) {
91 return null;
92 }
93
94 let marker = sock.rQshift8();
95 if (marker != 0xFF) {
96 throw new Error("Illegal JPEG marker received (byte: " +
97 marker + ")");
98 }
99 let type = sock.rQshift8();
100 if (type >= 0xD0 && type <= 0xD9 || type == 0x01) {
101 // No length after marker
102 return new Uint8Array([marker, type]);
103 }
104
105 if (sock.rQwait("JPEG", 2, 2)) {
106 return null;
107 }
108
109 let length = sock.rQshift16();
110 if (length < 2) {
111 throw new Error("Illegal JPEG length received (length: " +
112 length + ")");
113 }
114
115 if (sock.rQwait("JPEG", length-2, 4)) {
116 return null;
117 }
118
119 let extra = 0;
120 if (type === 0xDA) {
121 // start of scan
122 extra += 2;
123 while (true) {
124 if (sock.rQwait("JPEG", length-2+extra, 4)) {
125 return null;
126 }
127 let data = sock.rQpeekBytes(length-2+extra, false);
128 if (data.at(-2) === 0xFF && data.at(-1) !== 0x00 &&
129 !(data.at(-1) >= 0xD0 && data.at(-1) <= 0xD7)) {
130 extra -= 2;
131 break;
132 }
133 extra++;
134 }
135 }
136
137 let segment = new Uint8Array(2 + length + extra);
138 segment[0] = marker;
139 segment[1] = type;
140 segment[2] = length >> 8;
141 segment[3] = length;
142 segment.set(sock.rQshiftBytes(length-2+extra, false), 4);
143
144 return segment;
145 }
146}

Callers 1

decodeRectMethod · 0.95

Calls 6

rQwaitMethod · 0.80
rQshift8Method · 0.80
rQshift16Method · 0.80
rQpeekBytesMethod · 0.80
rQshiftBytesMethod · 0.80
setMethod · 0.65

Tested by

no test coverage detected