From 287ee6e49ad636f6536fcc0c5d9d0b14e41f68cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net> Date: Thu, 8 Apr 2021 02:11:35 -0400 Subject: [PATCH] When a callback event is handled, get remote_addr Prevents weird issues with getting remote address. --- src/sbbs3/js_internal.c | 8 ++++++++ src/sbbs3/js_socket.c | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index 3581220987..a2275766d3 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -1120,6 +1120,8 @@ js_handle_events(JSContext *cx, js_callback_t *cb, volatile int *terminated) jsrefcount rc; JSBool ret = JS_TRUE; BOOL input_locked = FALSE; + js_socket_private_t* jssp; + socklen_t slen; #ifdef PREFER_POLL struct pollfd *fds; nfds_t sc; @@ -1372,6 +1374,12 @@ js_handle_events(JSContext *cx, js_callback_t *cb, volatile int *terminated) if (input_locked) js_do_lock_input(cx, FALSE); } + if (ev->type == JS_EVENT_SOCKET_CONNECT) { + if ((jssp = (js_socket_private_t*)JS_GetPrivate(cx, ev->cx)) != NULL) { + slen=sizeof(ev->data.connect.sock); + getpeername(ev->data.connect.sock, &jssp->remote_addr.addr, &slen); + } + } ret = JS_CallFunction(cx, ev->cx, ev->cb, 0, NULL, &rval); diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 53430b9c81..011bb8d6a4 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -2091,6 +2091,10 @@ js_install_event(JSContext *cx, uintN argc, jsval *arglist, BOOL once) return(JS_FALSE); } + /* + * NOTE: If you allow a thisObj here, you'll need to deal with js_GetClassPrivate + * in js_internal.c where the object is assumed to be a socket. + */ if (argc != 2) { JS_ReportError(cx, "js.on() and js.once() require exactly two parameters"); return JS_FALSE; -- GitLab