Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
cirospaciari committed Oct 15, 2024
1 parent 46abacb commit 9fdb70a
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 52 deletions.
20 changes: 6 additions & 14 deletions src/bun.js/api/bun/h2_frame_parser.zig
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,12 @@ const BunSocket = union(enum) {
tcp: *TCPSocket,
tcp_writeonly: *TCPSocket,
};
pub const StringPair = extern struct {
key: JSC.JSValue,
value: JSC.JSValue,
};
extern fn JSC__JSGlobalObject__getHTTP2CommonString(globalObject: *JSC.JSGlobalObject, hpack_index: u32) StringPair;
extern fn JSC__JSGlobalObject__getHTTP2CommonString(globalObject: *JSC.JSGlobalObject, hpack_index: u32) JSC.JSValue;

pub fn getHTTP2CommonString(globalObject: *JSC.JSGlobalObject, hpack_index: u32) ?StringPair {
pub fn getHTTP2CommonString(globalObject: *JSC.JSGlobalObject, hpack_index: u32) ?JSC.JSValue {
if (hpack_index == 255) return null;
const value = JSC__JSGlobalObject__getHTTP2CommonString(globalObject, hpack_index);
if (value.key.isEmptyOrUndefinedOrNull()) return null;
if (value.isEmptyOrUndefinedOrNull()) return null;
return value;
}
const JSValue = JSC.JSValue;
Expand Down Expand Up @@ -1804,13 +1800,9 @@ pub const H2FrameParser = struct {
};

if (getHTTP2CommonString(globalObject, header.well_know)) |header_info| {
output.push(globalObject, header_info.key);
if (header.well_know_value) {
output.push(globalObject, header_info.value);
} else {
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
}
output.push(globalObject, header_info);
var header_value = bun.String.fromUTF8(header.value);
output.push(globalObject, header_value.transferToJS(globalObject));
} else {
var header_name = bun.String.fromUTF8(header.name);
output.push(globalObject, header_name.transferToJS(globalObject));
Expand Down
3 changes: 0 additions & 3 deletions src/bun.js/api/bun/lshpack.zig
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ const lshpack_header = extern struct {
value_len: usize = 0,
never_index: bool = false,
hpack_index: u16 = 255,
hpack_index_withvalue: bool = false,
};

/// wrapper implemented at src/bun.js/bindings/c-bindings.cpp
Expand All @@ -21,7 +20,6 @@ pub const HPACK = extern struct {
value: []const u8,
never_index: bool,
well_know: u16,
well_know_value: bool,
// offset of the next header position in src
next: usize,
};
Expand All @@ -45,7 +43,6 @@ pub const HPACK = extern struct {
.next = offset,
.never_index = header.never_index,
.well_know = header.hpack_index,
.well_know_value = header.hpack_index_withvalue,
};
}

Expand Down
7 changes: 1 addition & 6 deletions src/bun.js/bindings/BunHttp2CommonStrings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,10 @@ using namespace JSC;
this->m_names[idx].initLater( \
[](const JSC::LazyProperty<JSGlobalObject, JSString>::Initializer& init) { \
init.set(jsOwnedString(init.vm, key)); \
}); \
this->m_values[idx].initLater( \
[](const JSC::LazyProperty<JSGlobalObject, JSString>::Initializer& init) { \
init.set(jsOwnedString(init.vm, value)); \
});

#define HTTP2_COMMON_STRINGS_LAZY_PROPERTY_VISITOR(name, key, value, idx) \
this->m_names[idx].visit(visitor); \
this->m_values[idx].visit(visitor);
this->m_names[idx].visit(visitor);

void Http2CommonStrings::initialize()
{
Expand Down
21 changes: 3 additions & 18 deletions src/bun.js/bindings/BunHttp2CommonStrings.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,21 +71,13 @@ macro(wwwAuthenticate, "www-authenticate"_s, ""_s, 60)
JSC::JSString* name##String(JSC::JSGlobalObject* globalObject) \
{ \
return m_names[idx].getInitializedOnMainThread(globalObject); \
} \
JSC::JSString* name##StringValue(JSC::JSGlobalObject* globalObject) \
{ \
return m_values[idx].getInitializedOnMainThread(globalObject); \
}

namespace Bun {

using namespace JSC;

class Http2CommonStrings {
struct StringPair {
JSC::JSString* key;
JSC::JSString* value;
};

public:
typedef JSC::JSString* (*commonStringInitializer)(Http2CommonStrings*, JSC::JSGlobalObject* globalObject);
Expand All @@ -97,23 +89,16 @@ class Http2CommonStrings {
template<typename Visitor>
void visit(Visitor& visitor);

StringPair getStringFromHPackIndex(uint16_t index, JSC::JSGlobalObject* globalObject)
JSC::JSString* getStringFromHPackIndex(uint16_t index, JSC::JSGlobalObject* globalObject)
{
if (index > 60) {
return StringPair {
.key = nullptr,
.value = nullptr,
};
return nullptr;
}
return StringPair {
.key = m_names[index].getInitializedOnMainThread(globalObject),
.value = m_values[index].getInitializedOnMainThread(globalObject),
};
return m_names[index].getInitializedOnMainThread(globalObject);
}

private:
JSC::LazyProperty<JSC::JSGlobalObject, JSC::JSString> m_names[61];
JSC::LazyProperty<JSC::JSGlobalObject, JSC::JSString> m_values[61];
};

} // namespace Bun
Expand Down
12 changes: 4 additions & 8 deletions src/bun.js/bindings/ZigGlobalObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3609,17 +3609,13 @@ extern "C" void JSC__JSGlobalObject__drainMicrotasks(Zig::GlobalObject* globalOb
globalObject->drainMicrotasks();
}

struct Http2StringPair {
EncodedJSValue key;
EncodedJSValue value;
};
extern "C" Http2StringPair JSC__JSGlobalObject__getHTTP2CommonString(Zig::GlobalObject* globalObject, uint32_t hpack_index)
extern "C" EncodedJSValue JSC__JSGlobalObject__getHTTP2CommonString(Zig::GlobalObject* globalObject, uint32_t hpack_index)
{
auto value = globalObject->http2CommonStrings().getStringFromHPackIndex(hpack_index, globalObject);
if (value.key != nullptr) {
return Http2StringPair { .key = JSValue::encode(value.key), .value = JSValue::encode(value.value) };
if (value != nullptr) {
return JSValue::encode(value);
}
return Http2StringPair { .key = JSValue::encode(JSValue::JSUndefined), .value = JSValue::encode(JSValue::JSUndefined) };
return JSValue::encode(JSValue::JSUndefined);
}

template<typename Visitor>
Expand Down
3 changes: 0 additions & 3 deletions src/bun.js/bindings/c-bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,6 @@ typedef struct {
size_t value_len;
bool never_index;
uint16_t hpack_index;
bool hpack_index_withvalue;
} lshpack_header;

lshpack_wrapper* lshpack_wrapper_init(lshpack_wrapper_alloc alloc, lshpack_wrapper_free free, unsigned max_capacity)
Expand Down Expand Up @@ -316,10 +315,8 @@ size_t lshpack_wrapper_decode(lshpack_wrapper* self,
output->never_index = (hdr.flags & LSXPACK_NEVER_INDEX) != 0;
if (hdr.hpack_index != LSHPACK_HDR_UNKNOWN && hdr.hpack_index <= LSHPACK_HDR_WWW_AUTHENTICATE) {
output->hpack_index = hdr.hpack_index - 1;
output->hpack_index_withvalue = false; // TODO: discover a way of checking if the value also matchs
} else {
output->hpack_index = 255;
output->hpack_index_withvalue = false;
}
return s - src;
}
Expand Down

0 comments on commit 9fdb70a

Please sign in to comment.