void masterconn_download_next(masterconn *eptr) { uint8_t *ptr; uint8_t filenum; int64_t dltime; if (eptr->dloffset>=eptr->filesize) { // end of file filenum = eptr->downloading; if (masterconn_download_end(eptr)<0) { return; } dltime = main_utime()-eptr->dlstartuts; if (dltime<=0) { dltime=1; } syslog(LOG_NOTICE,"%s downloaded %"PRIu64"B/%"PRIu64".%06"PRIu32"s (%.3lf MB/s)",(filenum==1)?"metadata":(filenum==2)?"sessions":(filenum==11)?"changelog_0":(filenum==12)?"changelog_1":"???",eptr->filesize,dltime/1000000,(uint32_t)(dltime%1000000),(double)(eptr->filesize)/(double)(dltime)); if (filenum==1) { if (masterconn_metadata_check("metadata_ml.tmp")==0) { if (BackMetaCopies>0) { char metaname1[100],metaname2[100]; int i; for (i=BackMetaCopies-1 ; i>0 ; i--) { snprintf(metaname1,100,"metadata_ml.mfs.back.%"PRIu32,i+1); snprintf(metaname2,100,"metadata_ml.mfs.back.%"PRIu32,i); rename(metaname2,metaname1); } rename("metadata_ml.mfs.back","metadata_ml.mfs.back.1"); } if (rename("metadata_ml.tmp","metadata_ml.mfs.back")<0) { syslog(LOG_NOTICE,"can't rename downloaded metadata - do it manually before next download"); } } if (eptr->oldmode==0) { masterconn_download_init(eptr,11); } else { masterconn_download_init(eptr,2); } } else if (filenum==11) { if (rename("changelog_ml.tmp","changelog_ml_back.0.mfs")<0) { syslog(LOG_NOTICE,"can't rename downloaded changelog - do it manually before next download"); } masterconn_download_init(eptr,12); } else if (filenum==12) { if (rename("changelog_ml.tmp","changelog_ml_back.1.mfs")<0) { syslog(LOG_NOTICE,"can't rename downloaded changelog - do it manually before next download"); } masterconn_download_init(eptr,2); } else if (filenum==2) { if (rename("sessions_ml.tmp","sessions_ml.mfs")<0) { syslog(LOG_NOTICE,"can't rename downloaded sessions - do it manually before next download"); } } } else { // send request for next data packet ptr = masterconn_createpacket(eptr,MLTOMA_DOWNLOAD_DATA,12); put64bit(&ptr,eptr->dloffset); if (eptr->filesize-eptr->dloffset>META_DL_BLOCK) { put32bit(&ptr,META_DL_BLOCK); } else { put32bit(&ptr,eptr->filesize-eptr->dloffset); } } }
void masterconn_metadownloadinit(void) { masterconn_download_init(masterconnsingleton,1); }
void masterconn_changelog0downloadinit(void) { masterconn_download_init(master_serve,2); }
void masterconn_sessionsdownloadinit(void) { masterconn_download_init(masterconnsingleton,2); }
void masterconn_metadownloadinit(void) { masterconn_download_init(master_serve,1); }