void ms_rtp_send_process(MSRtpSend *r) { MSFifo *fi; MSQueue *qi; MSSync *sync= r->sync; int gran=ms_sync_get_samples_per_tick(sync); guint32 ts; void *s; guint skip; guint32 synctime=sync->time; g_return_if_fail(gran>0); if (r->rtpsession==NULL) return; ms_filter_lock(MS_FILTER(r)); skip=r->delay!=0; if (skip) r->delay--; /* process output fifo and output queue*/ fi=r->f_inputs[0]; if (fi!=NULL) { ts=get_new_timestamp(r,synctime); /* try to read r->packet_size bytes and send them in a rtp packet*/ ms_fifo_get_read_ptr(fi,r->packet_size,&s); if (!skip){ rtp_session_send_with_ts(r->rtpsession,s,r->packet_size,ts); ms_trace("len=%i, ts=%i ",r->packet_size,ts); } } qi=r->q_inputs[0]; if (qi!=NULL) { MSMessage *msg; /* read a MSMessage and send it through the network*/ while ( (msg=ms_queue_get(qi))!=NULL){ ts=get_new_timestamp(r,synctime); if (!skip) { /*g_message("Sending packet with ts=%u",ts);*/ rtp_session_send_with_ts(r->rtpsession,msg->data,msg->size,ts); } ms_message_destroy(msg); } } ms_filter_unlock(MS_FILTER(r)); }
int do_backup_server_burp1(struct async *as, struct sdirs *sdirs, struct conf *cconf, const char *incexc, int resume) { int ret=0; char msg[256]=""; gzFile mzp=NULL; // Real path to the working directory char *realworking=NULL; char tstmp[64]=""; struct asfd *asfd=as->asfd; struct dpthl dpthl; gzFile cmanfp=NULL; struct stat statp; logp("in do_backup_server\n"); if(init_dpthl(&dpthl, asfd, sdirs, cconf)) { log_and_send(asfd, "could not init_dpthl\n"); goto error; } if(resume) { ssize_t len=0; char real[256]=""; if((len=readlink(sdirs->working, real, sizeof(real)-1))<0) len=0; real[len]='\0'; if(!(realworking=prepend_s(sdirs->client, real))) { log_and_send_oom(asfd, __func__); goto error; } if(open_log(asfd, realworking, cconf)) goto error; } else { // Not resuming - need to set everything up fresh. if(get_new_timestamp(asfd, sdirs, cconf, tstmp, sizeof(tstmp))) goto error; if(!(realworking=prepend_s(sdirs->client, tstmp))) { log_and_send_oom(asfd, __func__); goto error; } // Add the working symlink before creating the directory. // This is because bedup checks the working symlink before // going into a directory. If the directory got created first, // bedup might go into it in the moment before the symlink // gets added. if(symlink(tstmp, sdirs->working)) // relative link to the real work dir { snprintf(msg, sizeof(msg), "could not point working symlink to: %s", realworking); log_and_send(asfd, msg); goto error; } else if(mkdir(realworking, 0777)) { snprintf(msg, sizeof(msg), "could not mkdir for next backup: %s", sdirs->working); log_and_send(asfd, msg); unlink(sdirs->working); goto error; } else if(open_log(asfd, realworking, cconf)) { goto error; } else if(mkdir(sdirs->datadirtmp, 0777)) { snprintf(msg, sizeof(msg), "could not mkdir for datadir: %s", sdirs->datadirtmp); log_and_send(asfd, msg); goto error; } else if(write_timestamp(sdirs->timestamp, tstmp)) { snprintf(msg, sizeof(msg), "unable to write timestamp %s", sdirs->timestamp); log_and_send(asfd, msg); goto error; } else if(incexc && *incexc && write_incexc(realworking, incexc)) { snprintf(msg, sizeof(msg), "unable to write incexc"); log_and_send(asfd, msg); goto error; } if(backup_phase1_server(asfd, sdirs, cconf)) { logp("error in phase 1\n"); goto error; } } // Open the previous (current) manifest. // If the split_vss setting changed between the previous backup // and the new backup, do not open the previous manifest. // This will have the effect of making the client back up everything // fresh. Need to do this, otherwise toggling split_vss on and off // will result in backups that do not work. if(!lstat(sdirs->cmanifest, &statp) && !vss_opts_changed(sdirs, cconf, incexc)) { if(!(cmanfp=gzopen_file(sdirs->cmanifest, "rb"))) { if(!lstat(sdirs->cmanifest, &statp)) { logp("could not open old manifest %s\n", sdirs->cmanifest); goto error; } } } //if(cmanfp) logp("Current manifest: %s\n", sdirs->cmanifest); if(backup_phase2_server(asfd, sdirs, cconf, &cmanfp, &dpthl, resume)) { logp("error in backup phase 2\n"); goto error; } if(backup_phase3_server(sdirs, cconf, 0 /* not recovery mode */, 1 /* compress */)) { logp("error in backup phase 3\n"); goto error; } // will not write anything more to // the new manifest // finish_backup will open it again // for reading if(gzclose_fp(&mzp)) { logp("Error closing manifest after phase3\n"); goto error; } asfd->write_str(asfd, CMD_GEN, "okbackupend"); logp("Backup ending - disconnect from client.\n"); // Close the connection with the client, the rest of the job // we can do by ourselves. asfd_free(&as->asfd); // Move the symlink to indicate that we are now in the end // phase. if(do_rename(sdirs->working, sdirs->finishing)) goto error; set_logfp(NULL, cconf); // does an fclose on logfp. // finish_backup will open logfp again ret=backup_phase4_server(sdirs, cconf); if(!ret && cconf->keep>0) ret=remove_old_backups(asfd, sdirs, cconf); goto end; error: ret=-1; end: gzclose_fp(&cmanfp); gzclose_fp(&mzp); set_logfp(NULL, cconf); // does an fclose on logfp. return ret; }