From 0b6b34550187ff5bb36e38ed78364b3e6ace4a09 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sun, 2 Mar 2008 03:42:07 +0000 Subject: [PATCH] Fixes for Deuce's last commit: initialize local and remote_addr in js_CreateSocketObject() and don't care what p->is_connected is when p->external is true. --- src/sbbs3/js_socket.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 99d5ab3dbe..bb107564e4 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -1114,8 +1114,6 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) BOOL rd; BOOL wr; private_t* p; - socklen_t addr_len; - SOCKADDR_IN addr; JSString* js_str; if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { @@ -1179,7 +1177,7 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) *vp=JSVAL_VOID; break; case SOCK_PROP_REMOTE_IP: - if(p->is_connected) { + if(p->is_connected || p->external) { if((js_str=JS_NewStringCopyZ(cx,inet_ntoa(p->remote_addr.sin_addr)))==NULL) return(JS_FALSE); *vp = STRING_TO_JSVAL(js_str); @@ -1188,7 +1186,7 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) *vp=JSVAL_VOID; break; case SOCK_PROP_REMOTE_PORT: - if(p->is_connected) + if(p->is_connected || p->external) *vp = INT_TO_JSVAL(ntohs(p->remote_addr.sin_port)); else *vp=JSVAL_VOID; @@ -1467,6 +1465,12 @@ JSObject* DLLCALL js_CreateSocketObject(JSContext* cx, JSObject* parent, char *n p->external = TRUE; p->network_byte_order = TRUE; + len=sizeof(p->local_addr); + getsockname(p->sock, (struct sockaddr *)&p->local_addr,&len); + + len=sizeof(p->remote_addr); + getpeername(p->sock, (struct sockaddr *)&p->remote_addr,&len); + if(!JS_SetPrivate(cx, obj, p)) { dbprintf(TRUE, p, "JS_SetPrivate failed"); return(NULL); -- GitLab