X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffilenet.c;h=99e094a618b994efa32de8308b21649357e66b82;hb=f5dbbe62975d51f5096e1b38c3d982e6af093d8b;hp=4198344d90caa653d3b8841f9b0ce7f8351fa08d;hpb=d68b4c9aaabb04186de06394c92a5c70072e26e7;p=doldaconnect.git diff --git a/daemon/filenet.c b/daemon/filenet.c index 4198344..99e094a 100644 --- a/daemon/filenet.c +++ b/daemon/filenet.c @@ -67,22 +67,18 @@ void killfnetnode(struct fnetnode *fn) if(fn->sk != NULL) { fn->sk->close = 1; - if(fn->sk->data == fn) - { - fn->sk->data = NULL; - putfnetnode(fn); - } putsock(fn->sk); fn->sk = NULL; } } -void getfnetnode(struct fnetnode *fn) +struct fnetnode *getfnetnode(struct fnetnode *fn) { fn->refcount++; #ifdef DEBUG fprintf(stderr, "getfnetnode on id %i at %p, refcount=%i\n", fn->id, fn, fn->refcount); #endif + return(fn); } void putfnetnode(struct fnetnode *fn) @@ -121,6 +117,8 @@ void putfnetnode(struct fnetnode *fn) free(fn->name); if(fn->sk != NULL) putsock(fn->sk); + if(fn->owner != NULL) + free(fn->owner); free(fn); numfnetnodes--; } @@ -161,19 +159,20 @@ void unlinkfnetnode(struct fnetnode *fn) putfnetnode(fn); } -static void conncb(struct socket *sk, int err, struct fnetnode *data) +static int conncb(struct socket *sk, int err, struct fnetnode *data) { if(err != 0) { killfnetnode(data); putfnetnode(data); - return; + return(1); } data->sk = sk; fnetsetstate(data, FNN_HS); socksettos(sk, confgetint("fnet", "fntos")); data->fnet->connect(data); putfnetnode(data); + return(1); } static void resolvecb(struct sockaddr *addr, int addrlen, struct fnetnode *data) @@ -183,7 +182,7 @@ static void resolvecb(struct sockaddr *addr, int addrlen, struct fnetnode *data) killfnetnode(data); putfnetnode(data); } else { - netcsconn(addr, addrlen, (void (*)(struct socket *, int, void *))conncb, data); + netcsconn(addr, addrlen, (int (*)(struct socket *, int, void *))conncb, data); } } @@ -444,7 +443,7 @@ struct fnet *findfnet(wchar_t *name) return(fnet); } -struct fnetnode *fnetinitconnect(wchar_t *name, char *addr, struct wcspair *args) +struct fnetnode *fnetinitconnect(wchar_t *name, wchar_t *owner, char *addr, struct wcspair *args) { struct fnet *fnet; struct fnetnode *fn; @@ -456,6 +455,7 @@ struct fnetnode *fnetinitconnect(wchar_t *name, char *addr, struct wcspair *args return(NULL); } fn = newfn(fnet); + fn->owner = swcsdup(owner); fn->pubid = icmbstowcs(addr, NULL); if(fn->pubid == NULL) fn->pubid = swcsdup(L""); @@ -502,6 +502,7 @@ static struct configvar myvars[] = {CONF_VAR_INT, "srchwait", {.num = 15}}, {CONF_VAR_INT, "fntos", {.num = 0}}, {CONF_VAR_INT, "fnptos", {.num = 0}}, + {CONF_VAR_INT, "maxnodes", {.num = 0}}, {CONF_VAR_END} };