Exemple #1
0
void rexxsendbinfile(struct RexxMsg *mess) {
        char buf[257],*pek,filtemp[257],tmp[3];
        int i,quote;
        struct TransferFiles *tf;

        mess->rm_Result1=0;
        pek=hittaefter(mess->rm_Args[0]);
        NewList((struct List *)&tf_list);
        while(pek[0]!=NULL && mess->rm_Result1!=20) {
		filtemp[0]=NULL;
		i=0; quote=0;
		while(pek[0]==' ' && pek[0]!=NULL) pek++;
		if(pek[0]=='"') { quote=1; pek++; }
		if(!pek[0]) break;
		while(((pek[0]!='"' && quote) || (pek[0]!=' ' && !quote)) && pek[0]!=NULL) {
			filtemp[i++]=pek[0];
			pek++;
		}
		if(pek[0]=='"') pek++;
		filtemp[i]=NULL;
                if(!(tf=(struct TransferFiles *)AllocMem(sizeof(struct TransferFiles),MEMF_CLEAR))) {
                        mess->rm_Result1=20;
                        mess->rm_Result2=NULL;
		} else {
			strcpy(tf->path,filtemp);
			tf->filpek=NULL;
			AddTail((struct List *)&tf_list,(struct Node *)tf);
		}
	}
        sendbinfile();
        buf[0] = NULL;
        for(tf=(struct TransferFiles *)tf_list.mlh_Head;tf->node.mln_Succ;tf=(struct TransferFiles *)tf->node.mln_Succ)
        {
                sprintf(tmp,"%d ",tf->sucess);
                strcat(buf,tmp);
        }
        buf[strlen(buf)-1] = NULL;

        while(tf=(struct TransferFiles *)RemHead((struct List *)&tf_list))
                FreeMem(tf,sizeof(struct TransferFiles));

        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Exemple #2
0
int download(void) {
    int cnt,freedlonly=FALSE, global = 0, matchall = 0;
    char *nextfile,*nextnext;
    struct Fil *filpek;
    struct TransferFiles *tf;
    if(Servermem->inne[nodnr].upload+1==0) {
        puttekn("\r\n\nVARNING!! Uploads = -1",-1);
        return(0);
    }
    if(Servermem->cfg.uldlratio[Servermem->inne[nodnr].status] && Servermem->cfg.uldlratio[Servermem->inne[nodnr].status] < (Servermem->inne[nodnr].download+1)/(Servermem->inne[nodnr].upload+1)) {
        sprintf(outbuffer,"\r\n\nDu måste ladda upp en fil per %d filer du laddar ner.\r\n",Servermem->cfg.uldlratio[Servermem->inne[nodnr].status]);
        puttekn(outbuffer,-1);
        puttekn("Endast filer med fri download tillåts.\n\r",-1);
        freedlonly=TRUE;
    }
    if(area2==-1) {
        puttekn("\r\n\nDu befinner dig inte i någon area!\r\n",-1);
        return(0);
    }
    if((!global && Servermem->areor[area2].flaggor & AREA_NODOWNLOAD) && (Servermem->inne[nodnr].status < Servermem->cfg.st.laddaner)) {
        puttekn("\n\n\rDu har ingen rätt att ladda ner från den här arean!\n\r",-1);
        return(0);
    }
    if(!argument[0]) {
        puttekn("\r\n\nSkriv: Download <filnamn> [<filnamn> [<filnamn> [...]]]\r\n",-1);
        return(0);
    }
    nextfile=argument;
    if(nextfile[0] == '-')
    {
        puttekn("\r\n\nTest\r\n",-1);
        if(nextfile[1] == 'g' || nextfile[1] == 'G')
            global = 1;

        if(nextfile[1] == 'a' || nextfile[1] == 'A')
            matchall = 1;

        if(!global && !matchall)
        {
            puttekn("\r\n\nOkänd option, bara -A eller -G stödjs.\r\n",-1);
            return(0);
        }

        nextfile=hittaefter(nextfile);
    }

    nextnext=hittaefter(nextfile);
    puttekn("\n\n\r",-1);
    NewList((struct List *)&tf_list);
    while(nextfile[0])
    {
        for(cnt=0; nextfile[cnt]!=' ' && nextfile[cnt]!=0; cnt++);
        nextfile[cnt]=0;
        if(!global && !(filpek=parsefil(nextfile,area2))) {
            sprintf(outbuffer,"Finns ingen fil som matchar \"%s\"\n\r",nextfile);
            puttekn(outbuffer,-1);
            nextfile=nextnext;
            nextnext=hittaefter(nextnext);
            continue;
        }
        if(!filpek && global && !(filpek=parsefilallareas(nextfile)))
        {
            sprintf(outbuffer,"Finns ingen fil som matchar \"%s\"\n\r",nextfile);
            puttekn(outbuffer,-1);
            nextfile=nextnext;
            nextnext=hittaefter(nextnext);
            continue;
        }

        if(filpek->status>Servermem->inne[nodnr].status && Servermem->inne[nodnr].status<Servermem->cfg.st.laddaner)
        {
            sprintf(outbuffer,"Du har ingen rätt att ladda ner %s!\n\r",filpek->namn);
            puttekn(outbuffer,-1);
            nextfile=nextnext;
            nextnext=hittaefter(nextnext);
            continue;
        }
        if(freedlonly && !(filpek->flaggor & FILE_FREEDL))
        {
            nextfile=nextnext;
            nextnext=hittaefter(nextnext);
            continue;
        }
        if(!(tf=(struct TransferFiles *)AllocMem(sizeof(struct TransferFiles),MEMF_CLEAR))) {
            puttekn("Kunde inte allokera en TransferFiles-struktur\n\r",-1);
            nextfile=nextnext;
            nextnext=hittaefter(nextnext);
            continue;
        }
        sprintf(tf->path,"%s%s",Servermem->areor[area2].dir[filpek->dir],filpek->namn);
        tf->filpek=filpek;
        AddTail((struct List *)&tf_list,(struct Node *)tf);
        sprintf(outbuffer,"Skickar filen %s. Storlek: %d %s\r\n",filpek->namn,filpek->size,(filpek->flaggor & FILE_FREEDL) ? "(Fri download)" : "");
        puttekn(outbuffer,-1);
        nextfile=nextnext;
        nextnext=hittaefter(nextnext);
    }
    if(!tf_list.mlh_Head->mln_Succ) {
        puttekn("\n\rInga filer att skicka.\n\r",-1);
        return(0);
    }
    Servermem->action[nodnr] = DOWNLOAD;
    Servermem->varmote[nodnr] = area2;
    Servermem->vilkastr[nodnr] = NULL;
    sendbinfile();
    if(Servermem->cfg.logmask & LOG_DOWNLOAD) {
        for(tf=(struct TransferFiles *)tf_list.mlh_Head; tf->node.mln_Succ; tf=(struct TransferFiles *)tf->node.mln_Succ)
            if(tf->sucess) {
                LogEvent(USAGE_LOG, INFO, "%s laddar ner %s (%d cps)",
                         getusername(inloggad), tf->filpek->namn, tf->cps);
            }
    }
    for(tf=(struct TransferFiles *)tf_list.mlh_Head; tf->node.mln_Succ; tf=(struct TransferFiles *)tf->node.mln_Succ) {
        if(tf->sucess) {
            if(!(tf->filpek->flaggor & FILE_FREEDL)) Servermem->inne[nodnr].download++;
            Statstr.dl++;
            raisefiledl(tf->filpek);
            sprintf(outbuffer,"%s, %d cps\n\r",tf->filpek->namn,tf->cps);
            puttekn(outbuffer,-1);
        } else {
            sprintf(outbuffer,"%s misslyckades.\n\r",tf->filpek->namn);
            puttekn(outbuffer,-1);
        }
    }
    while(tf=(struct TransferFiles *)RemHead((struct List *)&tf_list))
        FreeMem(tf,sizeof(struct TransferFiles));

    if(carrierdropped()) return(1);
    else return(0);
}