static int get_wbuf_from_blks(struct iobuf *wbuf, struct slist *slist, uint8_t *end_flags) { struct sbuf *sb=slist->blks_to_send; if(!sb) { if((*end_flags)&END_REQUESTS && !((*end_flags)&END_SIGS)) { iobuf_from_str(wbuf, CMD_GEN, (char *)"sigs_end"); (*end_flags)|=END_SIGS; } return 0; } if(!sb->protocol2->bsighead) return 0; if(!(sb->flags & SBUF_SENT_STAT)) { iobuf_copy(wbuf, &sb->attr); wbuf->cmd=CMD_ATTRIBS_SIGS; // hack sb->flags |= SBUF_SENT_STAT; return 0; } if(iobuf_from_blk_data(wbuf, sb->protocol2->bsighead)) return -1; // Move on. if(sb->protocol2->bsighead==sb->protocol2->bend) { slist->blks_to_send=sb->next; sb->protocol2->bsighead=sb->protocol2->bstart; } else { sb->protocol2->bsighead=sb->protocol2->bsighead->next; } return 0; }
static void get_wbuf_from_blks(struct iobuf *wbuf, struct slist *slist, int requests_end, int *sigs_end) { struct sbuf *sb=slist->blks_to_send; if(!sb) { if(requests_end && !*sigs_end) { iobuf_from_str(wbuf, CMD_GEN, (char *)"sigs_end"); *sigs_end=1; } return; } if(!sb->burp2->bsighead) return; if(!(sb->flags & SBUF_SENT_STAT)) { iobuf_copy(wbuf, &sb->attr); wbuf->cmd=CMD_ATTRIBS_SIGS; // hack sb->flags |= SBUF_SENT_STAT; return; } iobuf_from_blk_data(wbuf, sb->burp2->bsighead); // Move on. if(sb->burp2->bsighead==sb->burp2->bend) { slist->blks_to_send=sb->next; sb->burp2->bsighead=sb->burp2->bstart; } else { sb->burp2->bsighead=sb->burp2->bsighead->next; } }