diff options
author | 2023-09-29 03:39:26 -0700 | |
---|---|---|
committer | 2023-09-29 03:39:26 -0700 | |
commit | 6afa78120ac0512bc55d00a8a1562d8f0eafa2c2 (patch) | |
tree | 6a413589452d966f42c1e97e39fd11a82308e565 /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | 6514dcf4cbc63cff89f3cac59598872caf776f0b (diff) | |
download | bun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.tar.gz bun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.tar.zst bun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.zip |
feat(runtime): implement `server.requestIp` + node:http `socket.address()` (#6165)
* [server] requestIp and AnyRequestContext
Changed Request.uws_request to the new AnyRequestContext. This
allows grabbing the IP from a Request. Unfinished.
* [server] basic `requestIp` implementation
Currently using uws's requestIpAsText, which always returns a ipv6
string. We should return a `SocketAddress` object to the user instead,
which will contain the formatted address string and what type it is.
We'll have to use requestIpAsBinary and parse that ourselves.
* TypeScript docs, use `bun.String`, return `undefined` instead of `null`
if we can't get the ip.
* binary address formatting
* uws getRemoteAddress binding
* remove dead code
* working
* final touches:sparkles:
* I will abide by the results of this poll.
---------
Co-authored-by: Parzival-3141 <29632054+Parzival-3141@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 7ffd75ccf..a7d2bb7e5 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -206,6 +206,7 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers; #include "JSDOMConvertStrings.h" #include "JSDOMConvertUnion.h" #include "AddEventListenerOptions.h" +#include "JSSocketAddress.h" #include "ErrorStackTrace.h" #include "CallSite.h" @@ -2884,6 +2885,11 @@ void GlobalObject::finishCreation(VM& vm) init.set(structure); }); + m_JSSocketAddressStructure.initLater( + [](const Initializer<Structure>& init) { + init.set(JSSocketAddress::createStructure(init.vm, init.owner)); + }); + // Change prototype from null to object for synthetic modules. m_moduleNamespaceObjectStructure.initLater( [](const Initializer<Structure>& init) { @@ -3858,6 +3864,7 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->m_commonJSModuleObjectStructure.visit(visitor); thisObject->m_memoryFootprintStructure.visit(visitor); thisObject->m_commonJSFunctionArgumentsStructure.visit(visitor); + thisObject->m_JSSocketAddressStructure.visit(visitor); thisObject->m_cachedGlobalObjectStructure.visit(visitor); thisObject->m_cachedGlobalProxyStructure.visit(visitor); |