diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 1ffd3cd7cab783f7b5c538a18605fa5d1b835b16..e5b8f0108ee3ccc3505208ddf603191749d33661 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1538,6 +1538,38 @@ int putnmsg(scfg_t* cfg, int num, char *strin) return(0); } +/* Return node's client's socket descriptor or negative on error */ +int getnodeclient(scfg_t* cfg, uint number, client_t* client) +{ + SOCKET sock = INVALID_SOCKET; + char path[MAX_PATH + 1]; + char value[INI_MAX_VALUE_LEN]; + char* p; + FILE* fp; + + if(!VALID_CFG(cfg) + || client == NULL || number < 1 || number > cfg->sys_nodes) + return -1; + + if(client->size == sizeof(client)) + free((char*)client->protocol); + memset(client, 0, sizeof(*client)); + client->size = sizeof(client); + SAFEPRINTF(path, "%sclient.ini", cfg->node_path[number - 1]); + fp = iniOpenFile(path, /* create: */FALSE); + if(fp == NULL) + return -2; + sock = iniReadShortInt(fp, ROOT_SECTION, "sock", 0); + client->port = iniReadShortInt(fp, ROOT_SECTION, "port", 0); + client->time = iniReadInteger(fp, ROOT_SECTION, "time", 0); + SAFECOPY(client->addr, iniReadString(fp, ROOT_SECTION, "addr", "<none>", value)); + SAFECOPY(client->host, iniReadString(fp, ROOT_SECTION, "host", "<none>", value)); + if((p = iniReadString(fp, ROOT_SECTION, "prot", NULL, value)) != NULL) + client->protocol = strdup(p); + fclose(fp); + return sock; +} + static int getdirnum(scfg_t* cfg, char* code) { size_t i; diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index 36c46244028272515a82ccd82081b6b460be3aab..50f0b5cd6f7734c9384b52dd788fb4b659355755 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -76,6 +76,7 @@ DLLEXPORT char* getsmsg(scfg_t*, int usernumber); DLLEXPORT int putsmsg(scfg_t*, int usernumber, char *strin); DLLEXPORT char* getnmsg(scfg_t*, int node_num); DLLEXPORT int putnmsg(scfg_t*, int num, char *strin); +DLLEXPORT int getnodeclient(scfg_t*, uint number, client_t*); DLLEXPORT uint userdatdupe(scfg_t*, uint usernumber, uint offset, uint datlen, char *dat ,BOOL del, BOOL next, void (*progress)(void*, int, int), void* cbdata);