+static int restore_object_cmd(JCR *jcr)
+{
+ BSOCK *dir = jcr->dir_bsock;
+ POOLMEM *msg = get_memory(dir->msglen+1);
+ int32_t FileIndex;
+ restore_object_pkt rop;
+
+ memset(&rop, 0, sizeof(rop));
+ rop.pkt_size = sizeof(rop);
+ rop.pkt_end = sizeof(rop);
+ Dmsg1(100, "Enter restoreobject_cmd: %s", dir->msg);
+ if (strcmp(dir->msg, endrestoreobjectcmd) == 0) {
+ generate_plugin_event(jcr, bEventRestoreObject, NULL);
+ free_memory(msg);
+ return dir->fsend(OKRestoreObject);
+ }
+
+ if (sscanf(dir->msg, restoreobjcmd, &rop.JobId, &rop.object_len,
+ &rop.object_index, &rop.object_type, &FileIndex) != 5) {
+ Dmsg0(5, "Bad restore object command\n");
+ pm_strcpy(jcr->errmsg, dir->msg);
+ Jmsg1(jcr, M_FATAL, 0, _("Bad RestoreObject command: %s\n"), jcr->errmsg);
+ goto bail_out;
+ }
+
+// Dmsg5(000, "Recv object: JobId=%u objlen=%d objinx=%d objtype=%d FI=%d\n",
+// JobId, object_len, object_index, object_type, FileIndex);
+ /* Read Object name */
+ if (dir->recv() < 0) {
+ goto bail_out;
+ }
+// Dmsg2(000, "Recv Fname object: len=%d Oname=%s\n", dir->msglen, dir->msg);
+ rop.object_name = bstrdup(dir->msg);
+
+// Dmsg2(000, "Recv Path object: len=%d Path=%s\n", dir->msglen, dir->msg);
+
+ /* Read Object */
+ if (dir->recv() < 0) {
+ goto bail_out;
+ }
+ rop.object = dir->msg;
+// Dmsg2(000, "Recv Object: len=%d Object=%s\n", dir->msglen, dir->msg);
+
+ /* pass to plugin */
+ generate_plugin_event(jcr, bEventRestoreObject, (void *)&rop);
+
+ if (rop.object_name) {
+ free(rop.object_name);
+ }
+ if (!rop.object) {
+ dir->msg = get_pool_memory(PM_MESSAGE);
+ }
+
+ free_memory(msg);
+ Dmsg1(100, "Send: %s", OKRestoreObject);
+ return 1;
+
+bail_out:
+ dir->fsend(_("2909 Bad RestoreObject command.\n"));
+ free_memory(msg);
+ return 0;
+
+}
+
+