static int add_data_to_store(struct cntr *cntr, struct slist *slist, struct iobuf *rbuf, struct dpth *dpth) { static struct blk *blk=NULL; // Find the first one in the list that was requested. // FIX THIS: Going up the list here, and then later // when writing to the manifest is not efficient. for(blk=slist->blist->head; blk && (!blk->requested || blk->got==BLK_GOT); blk=blk->next) { // logp("try: %d %d\n", blk->index, blk->got); } if(!blk) { logp("Received data but could not find next requested block.\n"); if(!slist->blist->head) logp("and slist->blist->head is null\n"); else logp("head index: %" PRIu64 "\n", slist->blist->head->index); return -1; } // Add it to the data store straight away. if(dpth_protocol2_fwrite(dpth, rbuf, blk)) return -1; cntr_add(cntr, CMD_DATA, 0); cntr_add_recvbytes(cntr, blk->length); blk->got=BLK_GOT; blk=blk->next; return 0; }
static int write_to_dpth(struct dpth *dpth, const char *savepathstr) { int ret; struct iobuf wbuf; struct blk *blk=blk_alloc(); savepathstr_to_bytes(savepathstr, blk->savepath); wbuf.buf=strdup_w("abc", __FUNCTION__); wbuf.len=3; ret=dpth_protocol2_fwrite(dpth, &wbuf, blk); free_w(&wbuf.buf); blk_free(&blk); return ret; }