- while ((n=bget_msg(ds)) > 0 && !job_canceled(jcr)) {
-
- rec.VolSessionId = jcr->VolSessionId;
- rec.VolSessionTime = jcr->VolSessionTime;
- rec.FileIndex = file_index;
- rec.Stream = stream;
- rec.data_len = ds->msglen;
- rec.data = ds->msg; /* use message buffer */
-
- Dmsg4(250, "before writ_rec FI=%d SessId=%d Strm=%s len=%d\n",
- rec.FileIndex, rec.VolSessionId, stream_to_ascii(rec.Stream,rec.FileIndex),
- rec.data_len);
-
- while (!write_record_to_block(block, &rec)) {
- Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec.data_len,
- rec.remainder);
- if (!write_block_to_device(jcr, dev, block)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
- dev_name(dev), strerror_dev(dev));
- Jmsg(jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
- strerror_dev(dev));
- ok = FALSE;
- break;
- }
- }
- if (!ok) {
- Dmsg0(400, "Not OK\n");
- break;
- }
- jcr->JobBytes += rec.data_len; /* increment bytes this job */
- Dmsg4(200, "write_record FI=%s SessId=%d Strm=%s len=%d\n",
- FI_to_ascii(rec.FileIndex), rec.VolSessionId,
- stream_to_ascii(rec.Stream, rec.FileIndex), rec.data_len);
-
- /* Send attributes and MD5 to Director for Catalog */
- if (stream == STREAM_UNIX_ATTRIBUTES || stream == STREAM_MD5_SIGNATURE ||
- stream == STREAM_UNIX_ATTRIBUTES_EX || stream == STREAM_SHA1_SIGNATURE) {
- if (!jcr->no_attributes) {
- if (jcr->spool_attributes && jcr->dir_bsock->spool_fd) {
- jcr->dir_bsock->spool = 1;
- }
- Dmsg0(200, "Send attributes.\n");
- if (!dir_update_file_attributes(jcr, &rec)) {
- Jmsg(jcr, M_FATAL, 0, _("Error updating file attributes. ERR=%s\n"),
- bnet_strerror(jcr->dir_bsock));
- ok = FALSE;
- jcr->dir_bsock->spool = 0;
- break;
- }
- jcr->dir_bsock->spool = 0;
- }
- }
+ while ((n=qfd->bget_msg(NULL)) > 0 && !jcr->is_job_canceled()) {
+
+ rec.VolSessionId = jcr->VolSessionId;
+ rec.VolSessionTime = jcr->VolSessionTime;
+ rec.FileIndex = file_index;
+ rec.Stream = stream;
+ rec.StreamLen = stream_len;
+ rec.maskedStream = stream & STREAMMASK_TYPE; /* strip high bits */
+ rec.data_len = qfd->msglen;
+ rec.data = qfd->msg; /* use message buffer */
+
+ Dmsg4(850, "before writ_rec FI=%d SessId=%d Strm=%s len=%d\n",
+ rec.FileIndex, rec.VolSessionId,
+ stream_to_ascii(buf1, rec.Stream,rec.FileIndex),
+ rec.data_len);
+ ok = dcr->write_record(&rec);
+ if (!ok) {
+ Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
+ dcr->dev->print_name(), dcr->dev->bstrerror());
+ break;
+ }
+ jcr->JobBytes += rec.data_len; /* increment bytes this job */
+ jcr->JobBytes += qfd->bmsg->jobbytes; // if the block as been downloaded, count it
+ Dmsg4(850, "write_record FI=%s SessId=%d Strm=%s len=%d\n",
+ FI_to_ascii(buf1, rec.FileIndex), rec.VolSessionId,
+ stream_to_ascii(buf2, rec.Stream, rec.FileIndex), rec.data_len);
+
+ send_attrs_to_dir(jcr, &rec);
+ Dmsg0(650, "Enter bnet_get\n");