break;
case FT_PLUGIN_CONFIG:
case FT_RESTORE_FIRST:
- comp_len = ff_pkt->object_len;
- ff_pkt->object_compression = 0;
- if (ff_pkt->object_len > 1000) {
+ comp_len = ff_pkt->restore_obj.object_len;
+ ff_pkt->restore_obj.object_compression = 0;
+ if (ff_pkt->restore_obj.object_len > 1000) {
/* Big object, compress it */
- comp_len = ff_pkt->object_len + 1000;
+ comp_len = ff_pkt->restore_obj.object_len + 1000;
POOLMEM *comp_obj = get_memory(comp_len);
/* *** FIXME *** check Zdeflate error */
- Zdeflate(ff_pkt->object, ff_pkt->object_len, comp_obj, comp_len);
- if (comp_len < ff_pkt->object_len) {
- ff_pkt->object = comp_obj;
- ff_pkt->object_compression = 1; /* zlib level 9 compression */
+ Zdeflate(ff_pkt->restore_obj.object, ff_pkt->restore_obj.object_len, comp_obj, comp_len);
+ if (comp_len < ff_pkt->restore_obj.object_len) {
+ ff_pkt->restore_obj.object = comp_obj;
+ ff_pkt->restore_obj.object_compression = 1; /* zlib level 9 compression */
} else {
/* Uncompressed object smaller, use it */
- comp_len = ff_pkt->object_len;
+ comp_len = ff_pkt->restore_obj.object_len;
}
- Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->object_len, comp_len);
+ Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->restore_obj.object_len, comp_len);
}
sd->msglen = Mmsg(sd->msg, "%d %d %d %d %d %d %s%c%s%c",
- jcr->JobFiles, ff_pkt->type, ff_pkt->object_index,
- comp_len, ff_pkt->object_len, ff_pkt->object_compression,
- ff_pkt->fname, 0, ff_pkt->object_name, 0);
+ jcr->JobFiles, ff_pkt->type, ff_pkt->restore_obj.index,
+ comp_len, ff_pkt->restore_obj.object_len, ff_pkt->restore_obj.object_compression,
+ ff_pkt->fname, 0, ff_pkt->restore_obj.object_name, 0);
sd->msg = check_pool_memory_size(sd->msg, sd->msglen + comp_len + 2);
- memcpy(sd->msg + sd->msglen, ff_pkt->object, comp_len);
+ memcpy(sd->msg + sd->msglen, ff_pkt->restore_obj.object, comp_len);
/* Note send an extra byte so the SD can store zero after object */
sd->msglen += comp_len + 1;
stat = sd->send();
- if (ff_pkt->object_compression) {
- free_and_null_pool_memory(ff_pkt->object);
+ if (ff_pkt->restore_obj.object_compression) {
+ free_and_null_pool_memory(ff_pkt->restore_obj.object);
}
break;
+ case FT_PLUGIN_OBJECT:
+ break;
case FT_REG:
stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%d%c", jcr->JobFiles,
ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0, attribsEx, 0,
ff_pkt->fname = (char *)"*all*"; /* for all plugins */
ff_pkt->type = FT_RESTORE_FIRST;
ff_pkt->LinkFI = 0;
- ff_pkt->object_name = (char *)"job_metadata.xml";
+ ff_pkt->restore_obj.object_name = (char *)"job_metadata.xml";
ff_pkt->object = (char *)metadata;
- ff_pkt->object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
- ff_pkt->object_index = (int)time(NULL);
+ ff_pkt->restore_obj.object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
+ ff_pkt->restore_obj.object_index = (int)time(NULL);
save_file(jcr, ff_pkt, true);
}
}
*/
ff_pkt->type = sp.type;
if (IS_FT_OBJECT(sp.type)) {
- if (!sp.object_name) {
+ if (!sp.restore_obj.object_name) {
Jmsg1(jcr, M_FATAL, 0, _("Command plugin \"%s\": no object_name in startBackupFile packet.\n"),
cmd);
goto bail_out;
}
ff_pkt->fname = cmd; /* full plugin string */
- ff_pkt->object_name = sp.object_name;
- ff_pkt->object_index = sp.index; /* restore object index */
- ff_pkt->object_compression = 0; /* no compression for now */
- ff_pkt->object = sp.object;
- ff_pkt->object_len = sp.object_len;
+ ff_pkt->restore_obj.object_name = sp.restore_obj.object_name;
+ ff_pkt->restore_obj.index = sp.restore_obj.index; /* restore object index */
+ ff_pkt->restore_obj.object_compression = 0; /* no compression for now */
+ ff_pkt->restore_obj.object = sp.restore_obj.object;
+ ff_pkt->restore_obj.object_len = sp.restore_obj.object_len;
} else {
Dsm_check(999);
if (!sp.fname) {
memcpy(&ff_pkt->statp, &sp.statp, sizeof(ff_pkt->statp));
Dmsg2(dbglvl, "startBackup returned type=%d, fname=%s\n", sp.type, sp.fname);
- if (sp.object) {
- Dmsg2(dbglvl, "index=%d object=%s\n", sp.index, sp.object);
+ if (sp.restore_obj.object) {
+ Dmsg2(dbglvl, "index=%d object=%s\n", sp.restore_obj.index, sp.restore_obj.object);
}
/* Call Bacula core code to backup the plugin's file */
save_file(jcr, ff_pkt, true);
sp.portable = true;
sp.flags = 0;
sp.cmd = cmd;
- Dmsg3(dbglvl, "startBackup st_size=%p st_blocks=%p sp=%p\n", &sp.statp.st_size, &sp.statp.st_blocks,
+ Dmsg3(0, "startBackup st_size=%p st_blocks=%p sp=%p\n", &sp.statp.st_size, &sp.statp.st_blocks,
&sp);
/* Get the file save parameters. I.e. the stat pkt ... */
if (plug_func(plugin)->startBackupFile(jcr->plugin_ctx, &sp) != bRC_OK) {
}
Dmsg2(dbglvl, "startBackup returned type=%d, fname=%s\n", sp.type, sp.fname);
- if (sp.object) {
- Dmsg2(dbglvl, "index=%d object=%s\n", sp.index, sp.object);
+ if (sp.restore_obj.object) {
+ Dmsg2(dbglvl, "index=%d object=%s\n", sp.restore_obj.index, sp.restore_obj.object);
}
bRC rc = plug_func(plugin)->endBackupFile(jcr->plugin_ctx);
if (rc == bRC_More || rc == bRC_OK) {
int32_t pkt_end; /* end packet sentinel */
};
+struct restore_object {
+ char *object_name; /* Object name to create */
+ char *object; /* restore object data to save */
+ int32_t object_len; /* restore object length */
+ int32_t index; /* restore object index */
+ int32_t object_compression; /* set to compression type */
+};
+
/*
* This packet is used for file save info transfer.
*/
bool accurate_found; /* Found in accurate list (valid after check_changes()) */
bool do_dedup; /* True if we deal with a dedup storage system */
char *cmd; /* command */
+ struct restore_object restore_obj; /* Info about restore object */
uint32_t delta_seq; /* Delta sequence number */
- char *object_name; /* Object name to create */
- char *object; /* restore object data to save */
- int32_t object_len; /* restore object length */
- int32_t index; /* restore object index */
int32_t LinkFI; /* LinkFI if LINKSAVED */
int32_t pkt_end; /* end packet sentinel */
};
char *fname; /* full filename */
char *snap_fname; /* the path on the snapshot or fname */
char *link; /* link if file linked */
- char *object_name; /* Object name */
- char *object; /* restore object */
char *plugin; /* Current Options{Plugin=} name */
/* Specific snapshot part */
int32_t FileIndex; /* FileIndex of this file */
int32_t LinkFI; /* FileIndex of main hard linked file */
int32_t delta_seq; /* Delta Sequence number */
- int32_t object_index; /* Object index */
- int32_t object_len; /* Object length */
- int32_t object_compression; /* Type of compression for object */
+ struct restore_object restore_obj;
struct f_link *linked; /* Set if this file is hard linked */
int type; /* FT_ type from above */
int ff_errno; /* errno */