X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=7175259fc2399bca02d6c047ecee8e0067927a3d;hb=c9b3ad74a6f7fbf4559b055824cf85106cf45c1a;hp=ed10928b71d5b186b1de1893d131ce428d7d728f;hpb=efc05613724470915c842b3217ec0625dc8147a7;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index ed10928..7175259 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -106,7 +106,7 @@ struct dchub char *inbuf; size_t inbufdata, inbufsize; struct qcommand *queue; - int extended; + int extended, isop; char *nativename; char *nativenick; }; @@ -1426,6 +1426,37 @@ static void cmd_usercommand(struct socket *sk, struct fnetnode *fn, char *cmd, c /* Do nothing for now. */ } +static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char *args) +{ + struct dchub *hub; + struct wcspair *arg; + char *mbspw; + + hub = fn->data; + for(arg = fn->args; arg != NULL; arg = arg->next) + { + if(!wcscmp(arg->key, L"password")) + break; + } + if((arg == NULL) || ((mbspw = icwcstombs(arg->val, DCCHARSET)) == NULL)) + { + killfnetnode(fn); + return; + } + qstrf(sk, "$MyPass %s|", mbspw); + free(mbspw); + hubhandleaction(sk, fn, cmd, args); +} + +static void cmd_logedin(struct socket *sk, struct fnetnode *fn, char *cmd, char *args) +{ + struct dchub *hub; + + hub = fn->data; + hub->isop = 1; + hubhandleaction(sk, fn, cmd, args); +} + static void cmd_mynick(struct socket *sk, struct dcpeer *peer, char *cmd, char *args) { struct dcexppeer *expect; @@ -2471,6 +2502,8 @@ struct command hubcmds[] = {"$To:", cc(cmd_to)}, {"$SR", cc(cmd_sr)}, {"$UserCommand", cc(cmd_usercommand)}, + {"$GetPass", cc(cmd_getpass)}, + {"$LogedIn", cc(cmd_logedin)}, /* sic */ {NULL, NULL} };