]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/getmsg.c
Misc see kes-1.31 13May03
[bacula/bacula] / bacula / src / dird / getmsg.c
index 7c1caf51185270c871ce72469a1cff2e20097221..37fd753b7fcb7705bfb84db5e22460d8d73973c3 100644 (file)
@@ -60,8 +60,11 @@ static char OK_msg[] = "1000 OK\n";
  *  to the appropriate handler.  If the message is
  *  in any other format, it will be returned. 
  *
+ *  E.g. any message beginning with a digit will be returned.
+ *      any message beginning with Jmsg will be processed.
+ *
  */
-int32_t bget_msg(BSOCK *bs, int rtn)
+int bget_dirmsg(BSOCK *bs)
 {
    int32_t n;
    char Job[MAX_NAME_LENGTH];
@@ -72,43 +75,45 @@ int32_t bget_msg(BSOCK *bs, int rtn)
 
    for (;;) {
       n = bnet_recv(bs);
-      Dmsg2(120, "bget_msg %d: %s\n", n, bs->msg);
+      Dmsg2(120, "bget_dirmsg %d: %s\n", n, bs->msg);
 
-      if (n < 0) {
-        return n;                    /* error return */
+      if (is_bnet_stop(bs)) {
+        return n;                    /* error or terminate */
       }
-      if (n == 0) {                  /* handle signal */
-        /* 0 return from bnet_recv() => network signal */
+      if (n == BNET_SIGNAL) {         /* handle signal */
+        /* BNET_SIGNAL (-1) return from bnet_recv() => network signal */
         switch (bs->msglen) {
-           case BNET_EOD:               /* end of data */
-              return 0;
-           case BNET_EOD_POLL:
-              bnet_fsend(bs, OK_msg);   /* send response */
-              return 0;                 /* end of data */
-           case BNET_TERMINATE:
-              bs->terminated = 1;
-              return 0;
-           case BNET_POLL:
-              bnet_fsend(bs, OK_msg);   /* send response */
-              break;
-           case BNET_HEARTBEAT:
-              bnet_sig(bs, BNET_HB_RESPONSE);
-              break;
-           case BNET_STATUS:
-              /* *****FIXME***** Implement */
-               bnet_fsend(bs, "Status OK\n");
-              bnet_sig(bs, BNET_EOD);
-              break;
-           default:
-               Emsg1(M_WARNING, 0, _("bget_msg: unknown signal %d\n"), bs->msglen);
-              return 0;
+        case BNET_EOD:            /* end of data */
+           return n;
+        case BNET_EOD_POLL:
+           bnet_fsend(bs, OK_msg);/* send response */
+           return n;              /* end of data */
+        case BNET_TERMINATE:
+           bs->terminated = 1;
+           return n;
+        case BNET_POLL:
+           bnet_fsend(bs, OK_msg); /* send response */
+           break;
+        case BNET_HEARTBEAT:
+       /*   Dmsg0(000, "Got heartbeat.\n"); */
+           break;
+        case BNET_HB_RESPONSE:
+           break;
+        case BNET_STATUS:
+           /* *****FIXME***** Implement more completely */
+            bnet_fsend(bs, "Status OK\n");
+           bnet_sig(bs, BNET_EOD);
+           break;
+        default:
+            Emsg1(M_WARNING, 0, _("bget_dirmsg: unknown bnet signal %d\n"), bs->msglen);
+           return n;
         }
         continue;
       }
      
       /* Handle normal data */
 
-      if (ISDIGIT(bs->msg[0])) {      /* response? */
+      if (B_ISDIGIT(bs->msg[0])) {     /* response? */
         return n;                    /* yes, return it */
       }
        
@@ -125,6 +130,7 @@ int32_t bget_msg(BSOCK *bs, int rtn)
          Emsg1(M_ERROR, 0, _("Job not found: %s\n"), bs->msg);
         continue;
       }
+      Dmsg1(200, "Getmsg got jcr 0x%x\n", jcr);
 
       /* Skip past "Jmsg Job=nnn" */
       if (!(msg=find_msg_start(bs->msg))) {
@@ -162,13 +168,16 @@ int32_t bget_msg(BSOCK *bs, int rtn)
        *   CatReq Job=nn Catalog-Request-Message
        */
       if (bs->msg[0] == 'C') {        /* Catalog request */
-         Dmsg1(120, "Catalog req: %s", bs->msg);
+         Dmsg2(120, "Catalog req jcr 0x%x: %s", jcr, bs->msg);
         catalog_request(jcr, bs, msg);
+         Dmsg1(200, "Calling freejcr 0x%x\n", jcr);
         free_jcr(jcr);
         continue;
       }
       if (bs->msg[0] == 'U') {        /* Catalog update */
+         Dmsg2(120, "Catalog upd jcr 0x%x: %s", jcr, bs->msg);
         catalog_update(jcr, bs, msg);
+         Dmsg1(200, "Calling freejcr 0x%x\n", jcr);
         free_jcr(jcr);
         continue;
       }
@@ -200,23 +209,25 @@ static char *find_msg_start(char *msg)
  *  Returns: 0 on failure
  *          1 on success
  */
-int response(BSOCK *fd, char *resp, char *cmd)
+int response(BSOCK *fd, char *resp, char *cmd, int prtmsg)
 {
    int n;
 
-   if (fd->errors) {
+   if (is_bnet_error(fd)) {
       return 0;
    }
-   if ((n = bget_msg(fd, 0)) > 0) {
-      Dmsg0(10, fd->msg);
+   if ((n = bget_dirmsg(fd)) >= 0) {
+      Dmsg0(110, fd->msg);
       if (strcmp(fd->msg, resp) == 0) {
         return 1;
       }
-      Emsg3(M_FATAL, 0, _("<filed: bad response to %s command: wanted %s got: %s\n"),
-        cmd, resp, fd->msg);
+      if (prtmsg) {
+         Emsg3(M_FATAL, 0, _("FD gave bad response to %s command: wanted %s got: %s\n"),
+           cmd, resp, fd->msg);
+      }
       return 0;
    } 
-   Emsg2(M_FATAL, 0, _("<filed: Socket error from Filed on %s command: ERR=%s\n"),
+   Emsg2(M_FATAL, 0, _("Socket error from Filed on %s command: ERR=%s\n"),
         cmd, bnet_strerror(fd));
    return 0;
 }