12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "headers.h"
- typedef struct DisconnectData {
- SmbSession *s;
- SmbTree *t;
- } DisconnectData;
- static void
- smbtreefree(SmbTree **tp)
- {
- SmbTree *t = *tp;
- if (t) {
- smbserviceput(t->serv);
- free(t);
- *tp = nil;
- }
- }
- static void
- closesearch(void *magic, void *a)
- {
- SmbSearch *search = a;
- DisconnectData *d = magic;
- if (search->t == d->t)
- smbsearchclose(d->s, search);
- }
- static void
- closefile(void *magic, void *a)
- {
- SmbFile *f = a;
- DisconnectData *d = magic;
- if (f->t == d->t)
- smbfileclose(d->s, f);
- }
- void
- smbtreedisconnect(SmbSession *s, SmbTree *t)
- {
- if (t) {
- DisconnectData data;
- smblogprintif(smbglobals.log.tids, "smbtreedisconnect: 0x%.4ux\n", t->id);
- data.s = s;
- data.t = t;
- smbserviceput(t->serv);
- smbidmapapply(s->sidmap, closesearch, &data);
- smbidmapapply(s->fidmap, closefile, &data);
- smbidmapremove(s->tidmap, t);
- smbtreefree(&t);
- }
- }
- void
- smbtreedisconnectbyid(SmbSession *s, ushort id)
- {
- smbtreedisconnect(s, smbidmapfind(s->tidmap, id));
- }
- SmbTree *
- smbtreeconnect(SmbSession *s, SmbService *serv)
- {
- SmbTree *t;
- if (s->tidmap == nil)
- s->tidmap = smbidmapnew();
- t = smbemallocz(sizeof(*t), 1);
- smbidmapadd(s->tidmap, t);
- t->serv = serv;
- smbserviceget(serv);
- smblogprintif(smbglobals.log.tids, "smbtreeconnect: 0x%.4ux\n", t->id);
- return t;
- }
|