@@ -23,6 +23,8 @@ using namespace v8;
23
23
24
24
thread_local int insideCorkCallback = 0 ;
25
25
26
+ /* PROTOCOL is 0 = TCP, 1 = TLS, 2 = QUIC, 3 = CACHE */
27
+
26
28
struct HttpResponseWrapper {
27
29
28
30
static void assumeCorked () {
@@ -34,15 +36,17 @@ struct HttpResponseWrapper {
34
36
template <int PROTOCOL>
35
37
static inline constexpr decltype (auto ) getHttpResponse(const FunctionCallbackInfo<Value> &args) {
36
38
Isolate *isolate = args.GetIsolate ();
37
- auto *res = (uWS::HttpResponse<PROTOCOL != 0 > *) args.Holder ()->GetAlignedPointerFromInternalField (0 );
39
+ void *res = args.Holder ()->GetAlignedPointerFromInternalField (0 );
38
40
if (!res) {
39
41
args.GetReturnValue ().Set (isolate->ThrowException (v8::Exception::Error (String::NewFromUtf8 (isolate, " uWS.HttpResponse must not be accessed after uWS.HttpResponse.onAborted callback, or after a successful response. See documentation for uWS.HttpResponse and consult the user manual." , NewStringType::kNormal ).ToLocalChecked ())));
40
42
}
41
43
42
44
if constexpr (PROTOCOL == 2 ) {
43
45
return (uWS::Http3Response *) res;
46
+ } else if constexpr (PROTOCOL == 3 ) {
47
+ return (uWS::CachingHttpResponse *) res;
44
48
} else {
45
- return res;
49
+ return (uWS::HttpResponse<PROTOCOL != 0 > *) res;
46
50
}
47
51
}
48
52
@@ -417,7 +421,7 @@ struct HttpResponseWrapper {
417
421
}
418
422
}
419
423
420
- /* 0 = TCP, 1 = TLS, 2 = QUIC */
424
+ /* 0 = TCP, 1 = TLS, 2 = QUIC, 3 = CACHE */
421
425
template <int SSL>
422
426
static Local<Object> init (Isolate *isolate) {
423
427
Local<FunctionTemplate> resTemplateLocal = FunctionTemplate::New (isolate);
@@ -427,32 +431,39 @@ struct HttpResponseWrapper {
427
431
resTemplateLocal->SetClassName (String::NewFromUtf8 (isolate, " uWS.HttpResponse" , NewStringType::kNormal ).ToLocalChecked ());
428
432
} else if (SSL == 2 ) {
429
433
resTemplateLocal->SetClassName (String::NewFromUtf8 (isolate, " uWS.Http3Response" , NewStringType::kNormal ).ToLocalChecked ());
434
+ } else if (SSL == 3 ) {
435
+ resTemplateLocal->SetClassName (String::NewFromUtf8 (isolate, " uWS.CachedHttpResponse" , NewStringType::kNormal ).ToLocalChecked ());
430
436
}
431
437
resTemplateLocal->InstanceTemplate ()->SetInternalFieldCount (1 );
432
438
433
439
/* Register our functions */
434
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " writeStatus" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_writeStatus<SSL>));
435
440
resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " end" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_end<SSL>));
436
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " endWithoutBody" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_endWithoutBody<SSL>));
437
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " tryEnd" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_tryEnd<SSL>));
438
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " write" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_write<SSL>));
439
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " writeHeader" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_writeHeader<SSL>));
440
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " close" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_close<SSL>));
441
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onWritable" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onWritable<SSL>));
442
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onAborted" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onAborted<SSL>));
443
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onData" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onData<SSL>));
444
-
445
- if constexpr (SSL != 2 ) {
446
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getWriteOffset" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getWriteOffset<SSL>));
447
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getRemoteAddress" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getRemoteAddress<SSL>));
448
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " cork" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_cork<SSL>));
449
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " collect" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_cork<SSL>));
450
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " upgrade" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_upgrade<SSL>));
451
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getRemoteAddressAsText" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getRemoteAddressAsText<SSL>));
452
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getProxiedRemoteAddress" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getProxiedRemoteAddress<SSL>));
453
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getProxiedRemoteAddressAsText" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getProxiedRemoteAddressAsText<SSL>));
454
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " pause" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_pause<SSL>));
455
- resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " resume" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_resume<SSL>));
441
+
442
+ /* Cache has almost nothing wrapped yet */
443
+ if constexpr (SSL != 3 ) {
444
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " writeStatus" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_writeStatus<SSL>));
445
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " endWithoutBody" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_endWithoutBody<SSL>));
446
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " tryEnd" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_tryEnd<SSL>));
447
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " write" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_write<SSL>));
448
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " writeHeader" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_writeHeader<SSL>));
449
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " close" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_close<SSL>));
450
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onWritable" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onWritable<SSL>));
451
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onAborted" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onAborted<SSL>));
452
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " onData" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_onData<SSL>));
453
+
454
+ /* QUIC has a lot of functions unimplemented */
455
+ if constexpr (SSL != 2 ) {
456
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getWriteOffset" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getWriteOffset<SSL>));
457
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getRemoteAddress" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getRemoteAddress<SSL>));
458
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " cork" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_cork<SSL>));
459
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " collect" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_cork<SSL>));
460
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " upgrade" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_upgrade<SSL>));
461
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getRemoteAddressAsText" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getRemoteAddressAsText<SSL>));
462
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getProxiedRemoteAddress" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getProxiedRemoteAddress<SSL>));
463
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " getProxiedRemoteAddressAsText" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_getProxiedRemoteAddressAsText<SSL>));
464
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " pause" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_pause<SSL>));
465
+ resTemplateLocal->PrototypeTemplate ()->Set (String::NewFromUtf8 (isolate, " resume" , NewStringType::kNormal ).ToLocalChecked (), FunctionTemplate::New (isolate, res_resume<SSL>));
466
+ }
456
467
}
457
468
458
469
/* Create our template */
0 commit comments