diff lib/protocols.c @ 173:4c288d05b26a

2003-6-8 Brian Masney <masneyb@gftp.org> * lib/bookmark.c lib/gftp.h lib/https.c lib/local.c lib/misc.c lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/sshv2.c src/text/gftp-text.c src/gtk/gftp-gtk.c - made the init function for all the protocols return an integer instead of nothing. If there was an error setting up the protocol, GFTP_EFATAL should be returned and the connection should be aborted. The HTTPS protocol uses this to return if SSL support was not compiled in * lib/protocols.c src/text/gftp-text.c src/gtk/dnd.c src/gtk/gftp-gtk.c src/gtk/menu-items.c - have gftp_parse_url() log the error messages to the user. This shouldn't have been done in the individual ports * lib/https.c - only initialize the SSL engine the first time a SSL connection is made.
author masneyb
date Mon, 09 Jun 2003 00:53:20 +0000
parents d40f9db52cdf
children aec4b4541d3a
line wrap: on
line diff
--- a/lib/protocols.c	Sun Jun 08 22:31:07 2003 +0000
+++ b/lib/protocols.c	Mon Jun 09 00:53:20 2003 +0000
@@ -392,7 +392,7 @@
   gftp_logging_func logging_function;
   gftp_bookmarks_var * tempentry;
   char *default_protocol;
-  int i;
+  int i, init_ret;
 
   g_return_val_if_fail (request != NULL, GFTP_EFATAL);
   g_return_val_if_fail (bookmark != NULL, GFTP_EFATAL);
@@ -433,7 +433,11 @@
     {
       if (strcmp (gftp_protocols[i].name, tempentry->protocol) == 0)
         {
-          gftp_protocols[i].init (request);
+          if ((init_ret = gftp_protocols[i].init (request)) < 0)
+            {
+              gftp_request_destroy (request, 0);
+              return (init_ret);
+            }
           break;
         }
     }
@@ -456,7 +460,12 @@
         i = GFTP_FTP_NUM;
     }
 
-  gftp_protocols[i].init (request);
+  if ((init_ret = gftp_protocols[i].init (request)) < 0)
+    {
+      gftp_request_destroy (request, 0);
+      return (init_ret);
+    }
+
   return (0);
 }
 
@@ -466,8 +475,8 @@
 {
   char *pos, *endpos, *endhostpos, tempchar, *default_protocol, *stpos;
   gftp_logging_func logging_function;
+  int len, i, init_ret;
   const char *cpos;
-  int len, i;
 
   g_return_val_if_fail (request != NULL, GFTP_EFATAL);
   g_return_val_if_fail (url != NULL, GFTP_EFATAL);
@@ -493,13 +502,16 @@
             break;
         }
 
-      *pos = ':';
-
       if (gftp_protocols[i].url_prefix == NULL)
         {
+          request->logging_function (gftp_logging_misc, NULL, 
+                                     _("The protocol '%s' is currently not supported.\n"),
+                                     stpos);
           g_free (stpos);
           return (GFTP_EFATAL);
         }
+
+      *pos = ':';
     }
   else
     {
@@ -519,7 +531,11 @@
   if (gftp_protocols[i].url_prefix == NULL)
     i = GFTP_FTP_NUM;
 
-  gftp_protocols[i].init (request);
+  if ((init_ret = gftp_protocols[i].init (request)) < 0)
+    {
+      gftp_request_destroy (request, 0);
+      return (init_ret);
+    }
 
   if (request->parse_url != NULL)
     {