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); } }
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); }