|
1 | 1 | import "./lib.deno.d.ts"; |
2 | 2 | import "./lib.engine.d.ts"; |
3 | 3 | import { Eventable as StandardMethods } from "./standard.ts"; |
4 | | -import { libOpt } from "./debug.ts"; |
| 4 | +import { libOpt, store } from "./debug.ts"; |
5 | 5 | import { ByteLib } from "./buffer.ts"; |
6 | 6 |
|
7 | 7 | import * as compress from "jsr:@deno-library/compress"; |
@@ -152,56 +152,58 @@ export class Http2Socket extends StandardMethods { |
152 | 152 | try { |
153 | 153 | for (const fr of frames) { |
154 | 154 | //console.log(fr.type, fr); // :REMOVE: |
155 | | - if(!fr||!fr?.raw){ |
156 | | - this.emit("error",[new Error("no frame data"),fr]); |
157 | | - continue; |
158 | | - if(false)break loop; |
159 | | - }; |
160 | | - if (libOpt.debug) console.log(fr.type, fr); |
161 | | - if (!this.#usedSids.includes(fr.streamId)) this.#usedSids.push(fr.streamId); |
162 | | - if (fr.streamId != 0 && !flow[fr.streamId]) this.#flowInit(fr.streamId);//flow[fr.streamId]=setting[4]; |
163 | | - if (fr.raw.type == 4 && fr.raw.flags == 0) { |
164 | | - //settings.push(fr); |
165 | | - if (fr.streamId == 0) for (let si in fr.settings.int) this.#setting[si] = fr.settings.int[si]; |
166 | | - else for (let si in fr.settings.int) { |
167 | | - if (!settings[fr.streamId]) settings[fr.streamId] = { ...setting, ...fr.settings.int }; |
168 | | - else for (let si in fr.settings.int) settings[fr.streamId][si] = fr.settings.int[si]; |
| 155 | + store("http2frame",fr); // :DEBUG: |
| 156 | + if(fr.readSuccess){ |
| 157 | + if (libOpt.debug) console.log(fr.type, fr); |
| 158 | + if (!this.#usedSids.includes(fr.streamId)) this.#usedSids.push(fr.streamId); |
| 159 | + if (fr.streamId != 0 && !flow[fr.streamId]) this.#flowInit(fr.streamId);//flow[fr.streamId]=setting[4]; |
| 160 | + if (fr.raw.type == 4 && fr.raw.flags == 0) { |
| 161 | + //settings.push(fr); |
| 162 | + if (fr.streamId == 0) for (let si in fr.settings.int) this.#setting[si] = fr.settings.int[si]; |
| 163 | + else for (let si in fr.settings.int) { |
| 164 | + if (!settings[fr.streamId]) settings[fr.streamId] = { ...setting, ...fr.settings.int }; |
| 165 | + else for (let si in fr.settings.int) settings[fr.streamId][si] = fr.settings.int[si]; |
| 166 | + }; |
| 167 | + if (fr.settings.int[4]) flow[fr.streamId] = fr.settings.int[4]; |
| 168 | + const nf = await this.#frame(fr.streamId, 4, { flags: ["ack"] }); |
| 169 | + //console.log("setting acknowledgement",nf); // :REMOVE: |
| 170 | + let r = await this.#tcp.write(nf.buffer).catch(e => e); |
| 171 | + //console.log("write result",r); // :REMOVE: |
| 172 | + } else if (fr.raw.type == 8) { |
| 173 | + let wu = fr.buffer; |
| 174 | + //if(!flow[fr.streamId])flow[fr.streamId]=flow[0]; |
| 175 | + let awu = [...wu]; |
| 176 | + this.#flow[fr.streamId] += parseInt(awu.map(v => ("00" + v.toString(16)).substring(v.toString(16).length)).join(''), 16); |
| 177 | + } else if (fr.raw.type == 1) { |
| 178 | + if (!headersBuff[fr.streamId]) headersBuff[fr.streamId] = []; |
| 179 | + if (!headers[fr.streamId]) headers[fr.streamId] = {}; |
| 180 | + headers[fr.streamId] = { ...headers[fr.streamId], ...fr.headers }; |
| 181 | + headersBuff[fr.streamId].push(...fr.raw.payload); |
| 182 | + |
| 183 | + if (fr.flags.includes("end_stream")) { |
| 184 | + this.#respond(fr.streamId, headers, bodies, headersBuff); |
| 185 | + } |
| 186 | + } else if (fr.raw.type == 0) { |
| 187 | + if (!bodies[fr.streamId]) bodies[fr.streamId] = []; |
| 188 | + bodies[fr.streamId].push(...fr.buffer); |
| 189 | + |
| 190 | + if (fr.flags.includes("end_stream")) { |
| 191 | + this.#respond(fr.streamId, headers, bodies, headersBuff); |
| 192 | + } |
| 193 | + } else if (fr.raw.type == 7) { |
| 194 | + await this.#tcp.write((await this.#frame(fr.streamId, 7, { flags: ["ack"] })).buffer).catch(e => e); |
| 195 | + this.emit("close", fr); |
| 196 | + this.#tcp.close(); |
| 197 | + } else if (fr.raw.type == 3) { |
| 198 | + flow[fr.streamId] = flow[0]; |
| 199 | + this.#usedSids.splice(this.#usedSids.indexOf(fr.streamId), 1); |
| 200 | + } else if (fr.raw.type == 6) { |
| 201 | + await this.#tcp.write((await this.#frame(fr.streamId, 6, { flags: ["ack"], data: fr.buffer })).buffer).catch(e => e); |
169 | 202 | }; |
170 | | - if (fr.settings.int[4]) flow[fr.streamId] = fr.settings.int[4]; |
171 | | - const nf = await this.#frame(fr.streamId, 4, { flags: ["ack"] }); |
172 | | - //console.log("setting acknowledgement",nf); // :REMOVE: |
173 | | - let r = await this.#tcp.write(nf.buffer).catch(e => e); |
174 | | - //console.log("write result",r); // :REMOVE: |
175 | | - } else if (fr.raw.type == 8) { |
176 | | - let wu = fr.buffer; |
177 | | - //if(!flow[fr.streamId])flow[fr.streamId]=flow[0]; |
178 | | - let awu = [...wu]; |
179 | | - this.#flow[fr.streamId] += parseInt(awu.map(v => ("00" + v.toString(16)).substring(v.toString(16).length)).join(''), 16); |
180 | | - } else if (fr.raw.type == 1) { |
181 | | - if (!headersBuff[fr.streamId]) headersBuff[fr.streamId] = []; |
182 | | - if (!headers[fr.streamId]) headers[fr.streamId] = {}; |
183 | | - headers[fr.streamId] = { ...headers[fr.streamId], ...fr.headers }; |
184 | | - headersBuff[fr.streamId].push(...fr.raw.payload); |
185 | | - |
186 | | - if (fr.flags.includes("end_stream")) { |
187 | | - this.#respond(fr.streamId, headers, bodies, headersBuff); |
188 | | - } |
189 | | - } else if (fr.raw.type == 0) { |
190 | | - if (!bodies[fr.streamId]) bodies[fr.streamId] = []; |
191 | | - bodies[fr.streamId].push(...fr.buffer); |
192 | | - |
193 | | - if (fr.flags.includes("end_stream")) { |
194 | | - this.#respond(fr.streamId, headers, bodies, headersBuff); |
195 | | - } |
196 | | - } else if (fr.raw.type == 7) { |
197 | | - await this.#tcp.write((await this.#frame(fr.streamId, 7, { flags: ["ack"] })).buffer).catch(e => e); |
198 | | - this.emit("close", fr); |
199 | | - this.#tcp.close(); |
200 | | - } else if (fr.raw.type == 3) { |
201 | | - flow[fr.streamId] = flow[0]; |
202 | | - this.#usedSids.splice(this.#usedSids.indexOf(fr.streamId), 1); |
203 | | - } else if (fr.raw.type == 6) { |
204 | | - await this.#tcp.write((await this.#frame(fr.streamId, 6, { flags: ["ack"], data: fr.buffer })).buffer).catch(e => e); |
| 203 | + }else/*(!fr.readSuccess)*/{ |
| 204 | + this.emit("error",[new Error("frame read unsuccessfull"),fr]); |
| 205 | + //continue; |
| 206 | + if(false)break loop; |
205 | 207 | }; |
206 | 208 | }; |
207 | 209 |
|
|
0 commit comments