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