From dd15aba4ee6951499cfeb23885d0775838a00296 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 27 Jun 2002 06:04:12 +0000 Subject: [PATCH] Created the following properties: local_ip_address, local_port, remote_ip_address (was ip_address), and remote_port. --- src/sbbs3/js_socket.c | 66 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index e78e178b0b..f45b01370d 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -47,12 +47,10 @@ typedef struct BOOL nonblocking; BOOL is_connected; int last_error; - SOCKADDR_IN addr; } private_t; - static void dbprintf(BOOL error, private_t* p, char* fmt, ...) { va_list argptr; @@ -164,7 +162,7 @@ js_bind(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) if(argc) addr.sin_port = (ushort)JSVAL_TO_INT(argv[0]); - if(bind(p->sock, (struct sockaddr *) &addr, sizeof (addr))!=0) { + if(bind(p->sock, (struct sockaddr *) &addr, sizeof(addr))!=0) { p->last_error=ERROR_VALUE; dbprintf(TRUE, p, "bind failed with error %d",ERROR_VALUE); *rval = BOOLEAN_TO_JSVAL(JS_FALSE); @@ -183,6 +181,7 @@ js_connect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ushort port; JSString* str; private_t* p; + SOCKADDR_IN addr; if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) return(JS_FALSE); @@ -203,12 +202,12 @@ js_connect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) dbprintf(FALSE, p, "connecting to port %u at %s", port, JS_GetStringBytes(str)); - memset(&p->addr,0,sizeof(p->addr)); - p->addr.sin_addr.s_addr = ip_addr; - p->addr.sin_family = AF_INET; - p->addr.sin_port = htons(port); + memset(&addr,0,sizeof(addr)); + addr.sin_addr.s_addr = ip_addr; + addr.sin_family = AF_INET; + addr.sin_port = htons(port); - if(connect(p->sock, (struct sockaddr *)&p->addr, sizeof(p->addr))!=0) { + if(connect(p->sock, (struct sockaddr *)&addr, sizeof(addr))!=0) { p->last_error=ERROR_VALUE; dbprintf(TRUE, p, "connect failed with error %d",ERROR_VALUE); *rval = BOOLEAN_TO_JSVAL(JS_FALSE); @@ -553,7 +552,10 @@ enum { ,SOCK_PROP_DEBUG ,SOCK_PROP_DESCRIPTOR ,SOCK_PROP_NONBLOCKING - ,SOCK_PROP_IP_ADDRESS + ,SOCK_PROP_LOCAL_IP + ,SOCK_PROP_LOCAL_PORT + ,SOCK_PROP_REMOTE_IP + ,SOCK_PROP_REMOTE_PORT }; static JSBool js_socket_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) @@ -589,10 +591,13 @@ static JSBool js_socket_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { + char str[128]; jsint tiny; ulong cnt; BOOL rd; private_t* p; + socklen_t addr_len; + SOCKADDR_IN addr; if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) return(JS_FALSE); @@ -633,9 +638,43 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) case SOCK_PROP_NONBLOCKING: *vp = BOOLEAN_TO_JSVAL(p->nonblocking); break; - case SOCK_PROP_IP_ADDRESS: - *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,inet_ntoa(p->addr.sin_addr))); + case SOCK_PROP_LOCAL_IP: + addr_len = sizeof(addr); + if(getsockname(p->sock, (struct sockaddr *)&addr,&addr_len)!=0) { + p->last_error=ERROR_VALUE; + *vp = JSVAL_VOID; + } else + *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,inet_ntoa(addr.sin_addr))); break; + case SOCK_PROP_LOCAL_PORT: + addr_len = sizeof(addr); + if(getsockname(p->sock, (struct sockaddr *)&addr,&addr_len)!=0) { + p->last_error=ERROR_VALUE; + *vp = JSVAL_VOID; + } else { + sprintf(str,"%u",ntohs(addr.sin_port)); + *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,str)); + } + break; + case SOCK_PROP_REMOTE_IP: + addr_len = sizeof(addr); + if(getpeername(p->sock, (struct sockaddr *)&addr,&addr_len)!=0) { + p->last_error=ERROR_VALUE; + *vp = JSVAL_VOID; + } else + *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,inet_ntoa(addr.sin_addr))); + break; + case SOCK_PROP_REMOTE_PORT: + addr_len = sizeof(addr); + if(getpeername(p->sock, (struct sockaddr *)&addr,&addr_len)!=0) { + p->last_error=ERROR_VALUE; + *vp = JSVAL_VOID; + } else { + sprintf(str,"%u",ntohs(addr.sin_port)); + *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,str)); + } + break; + } return(TRUE); @@ -653,7 +692,10 @@ static struct JSPropertySpec js_socket_properties[] = { { "debug" ,SOCK_PROP_DEBUG ,JSPROP_ENUMERATE, NULL,NULL}, { "descriptor" ,SOCK_PROP_DESCRIPTOR ,JSPROP_ENUMERATE, NULL,NULL}, { "nonblocking" ,SOCK_PROP_NONBLOCKING ,JSPROP_ENUMERATE, NULL,NULL}, - { "ip_address" ,SOCK_PROP_IP_ADDRESS ,SOCK_PROP_FLAGS, NULL,NULL}, + { "local_ip_address" ,SOCK_PROP_LOCAL_IP ,SOCK_PROP_FLAGS, NULL,NULL}, + { "local_port" ,SOCK_PROP_LOCAL_PORT ,SOCK_PROP_FLAGS, NULL,NULL}, + { "remote_ip_address" ,SOCK_PROP_REMOTE_IP ,SOCK_PROP_FLAGS, NULL,NULL}, + { "remote_port" ,SOCK_PROP_REMOTE_PORT ,SOCK_PROP_FLAGS, NULL,NULL}, {0} }; -- GitLab