]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Need to check code close_mx
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 15 Jun 2025 13:25:23 +0000 (09:25 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 15 Jun 2025 13:25:23 +0000 (09:25 -0400)
lib/lvleml.c

index 8a3322d415c3bbb1a2561c74cbd4ae75e7f4e438..d09bd7fcf15307eefbf3091017bbe2a417f47833 100644 (file)
@@ -901,15 +901,50 @@ return done;
 static RMTTYP *close_mx(RMTTYP *rmt)
 
 {
-if (rmt!=(RMTTYP *)0) {
-  rmt->socptr=soc_closefeedsock(rmt->socptr);
-  rmt->mxs=dns_freemxlist(rmt->mxs);
-  rmt->orgdomain=rou_freestr(rmt->orgdomain);
-  rmt->dstdomain=rou_freestr(rmt->dstdomain);
-  (void) free(rmt);
-  rmt=(RMTTYP *)0;
+#define OPEP    "lvleml.c:close_mx,"
+
+int phase;
+_Bool proceed;
+
+phase=0;
+proceed=(rmt!=(RMTTYP *)0);
+while (proceed==true) {
+  switch (phase) {
+    case 0      :       //need to disconnect
+      if (rmt->socptr!=(SOCPTR *)0) {
+        char **resp;
+        int rspcode;
+
+        resp=(char **)0;
+        rspcode=tcp_smtp_command(rmt,&resp,"QUIT");
+        switch (rspcode) {
+          case QUITOK   :       //Everything fine
+            break;
+          default       :
+            (void) rou_alert(0,"%s Unexpected QUIT status='%d' (check code!)",
+                                OPEP,rspcode);
+            break;
+          }
+        resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
+        rmt->socptr=soc_closefeedsock(rmt->socptr);
+        }
+      break;
+    case 1      :       //free memory
+      rmt->mxs=dns_freemxlist(rmt->mxs);
+      rmt->orgdomain=rou_freestr(rmt->orgdomain);
+      rmt->dstdomain=rou_freestr(rmt->dstdomain);
+      (void) free(rmt);
+      rmt=(RMTTYP *)0;
+      break;
+    default     :       //SAFE Guard
+      proceed=false;
+      break;
+    }
+  phase++;
   }
 return rmt;
+
+#undef  OPEP
 }
 /*
 ^L