diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index db08d50cba53b2bbc71fc8e2c0c5b91aa7944cab..507fcb122d5aab5ec6bd12fdf978594d8673251e 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -109,6 +109,7 @@ typedef struct { /* Initial UDP datagram */ BYTE* udp_buf; int udp_len; + subscan_t *subscan; } service_client_t; static service_t *service=NULL; @@ -466,6 +467,11 @@ js_login(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) rc=JS_SUSPENDREQUEST(cx); memset(&client->user,0,sizeof(user_t)); + if(client->user.number) { + if(client->subscan!=NULL) + putmsgptrs(&scfg, client->user.number, client->subscan); + } + if(isdigit(*p)) client->user.number=atoi(p); else if(*p) @@ -522,10 +528,18 @@ js_login(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) } putuserdat(&scfg,&client->user); + if(client->subscan==NULL) { + client->subscan=(subscan_t*)malloc(sizeof(subscan_t)*scfg.total_subs); + if(client->subscan==NULL) + lprintf(LOG_CRIT,"!MALLOC FAILURE"); + } + if(client->subscan!=NULL) { + getmsgptrs(&scfg,client->user.number,client->subscan); + } + JS_RESUMEREQUEST(cx, rc); - /* user-specific objects */ - if(!js_CreateUserObjects(cx, obj, &scfg, &client->user, client->client, NULL, NULL)) + if(!js_CreateUserObjects(cx, obj, &scfg, &client->user, client->client, NULL, client->subscan)) lprintf(LOG_ERR,"%04d %s !JavaScript ERROR creating user objects" ,client->socket,client->service->protocol); @@ -887,7 +901,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client, break; /* user-specific objects */ - if(!js_CreateUserObjects(js_cx, js_glob, &scfg, /*user: */NULL, service_client->client, NULL, NULL)) + if(!js_CreateUserObjects(js_cx, js_glob, &scfg, /*user: */NULL, service_client->client, NULL, service_client->subscan)) break; if(js_CreateSystemObject(js_cx, js_glob, &scfg, uptime, startup->host_name, SOCKLIB_DESC)==NULL) @@ -1185,10 +1199,13 @@ static void js_service_thread(void* arg) jsrt_Release(js_runtime); if(service_client.user.number) { + if(service_client.subscan!=NULL) + putmsgptrs(&scfg, service_client.user.number, service_client.subscan); lprintf(LOG_INFO,"%04d %s Logging out %s" ,socket, service->protocol, service_client.user.alias); logoutuserdat(&scfg,&service_client.user,time(NULL),service_client.logintime); } + FREE_AND_NULL(service_client.subscan); if(service->clients) service->clients--;