Fix memory leak.
[doldaconnect.git] / daemon / fnet-dc.c
index d6ccb77..ec19a56 100644 (file)
@@ -1475,7 +1475,8 @@ static void cmd_direction(struct socket *sk, struct dcpeer *peer, char *cmd, cha
            freedcpeer(peer);
            return;
        }
-       requestfile(peer);
+       if(peer->direction == TRNSD_DOWN)
+           requestfile(peer);
     } else {
        if(peer->wcsname == NULL)
        {
@@ -2146,6 +2147,12 @@ static void cmd_sending(struct socket *sk, struct dcpeer *peer, char *cmd, char
        return;
     }
     startdl(peer);
+    if(peer->inbufdata > 0)
+    {
+       sockpushdata(sk, peer->inbuf, peer->inbufdata);
+       peer->inbufdata = 0;
+       transread(sk, peer);
+    }
 }
 
 /*
@@ -2976,15 +2983,15 @@ static void peerread(struct socket *sk, struct dcpeer *peer)
            newqcmd(&peer->queue, peer->inbuf);
            for(cmd = peercmds; cmd->handler != NULL; cmd++)
            {
-               if(!memcmp(peer->inbuf, cmd->name, strlen(cmd->name)) && (peer->inbuf[strlen(cmd->name)] == 0))
+               if(!memcmp(peer->inbuf, cmd->name, strlen(cmd->name)) && ((peer->inbuf[strlen(cmd->name)] == ' ') || (peer->inbuf[strlen(cmd->name)] == '|')))
                    break;
            }
+           memmove(peer->inbuf, p, peer->inbufdata -= p - peer->inbuf);
            if(cmd->stop)
            {
                peer->state = PEER_STOP;
                break;
            }
-           memmove(peer->inbuf, p, peer->inbufdata -= p - peer->inbuf);
        }
     } else if(peer->state == PEER_TTHL) {
        handletthl(peer);