Save op status (for whatever reason... :)
[doldaconnect.git] / daemon / fnet-dc.c
index 0009d54..7175259 100644 (file)
@@ -106,7 +106,7 @@ struct dchub
     char *inbuf;
     size_t inbufdata, inbufsize;
     struct qcommand *queue;
-    int extended;
+    int extended, isop;
     char *nativename;
     char *nativenick;
 };
@@ -996,7 +996,7 @@ static void cmd_forcemove(struct socket *sk, struct fnetnode *fn, char *cmd, cha
     } else {
        freeargs = 0;
     }
-    if((newfn = fnetinitconnect(L"dc", args)) != NULL)
+    if((newfn = fnetinitconnect(L"dc", args, NULL)) != NULL)
     {
        linkfnetnode(newfn);
        putfnetnode(newfn);
@@ -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}
 };