[SoupURI] add a bit of ftp URI support
authorDan Winship <danw@gnome.org>
Fri, 18 Dec 2009 11:34:47 +0000 (12:34 +0100)
committerDan Winship <danw@gnome.org>
Fri, 18 Dec 2009 11:34:47 +0000 (12:34 +0100)
libsoup/soup-uri.c
libsoup/soup-uri.h

index 8cb49fd..ffc4f1d 100644 (file)
@@ -96,6 +96,8 @@ static char *uri_decoded_copy (const char *str, int length);
 static char *uri_normalized_copy (const char *str, int length, const char *unescape_extra, gboolean fixup);
 
 gpointer _SOUP_URI_SCHEME_HTTP, _SOUP_URI_SCHEME_HTTPS;
+gpointer _SOUP_URI_SCHEME_FTP;
+gpointer _SOUP_URI_SCHEME_FILE, _SOUP_URI_SCHEME_DATA;
 
 static inline const char *
 soup_uri_get_scheme (const char *scheme, int len)
@@ -122,6 +124,8 @@ soup_scheme_default_port (const char *scheme)
                return 80;
        else if (scheme == SOUP_URI_SCHEME_HTTPS)
                return 443;
+       else if (scheme == SOUP_URI_SCHEME_FTP)
+               return 21;
        else
                return 0;
 }
@@ -358,6 +362,13 @@ soup_uri_new_with_base (SoupURI *base, const char *uri_string)
                }
        }
 
+       if (uri->scheme == SOUP_URI_SCHEME_FTP) {
+               if (!uri->host) {
+                       soup_uri_free (uri);
+                       return NULL;
+               }
+       }
+
        if (!uri->port)
                uri->port = soup_scheme_default_port (uri->scheme);
        if (!uri->path)
@@ -745,7 +756,8 @@ gboolean
 soup_uri_uses_default_port (SoupURI *uri)
 {
        g_return_val_if_fail (uri->scheme == SOUP_URI_SCHEME_HTTP ||
-                             uri->scheme == SOUP_URI_SCHEME_HTTPS, FALSE);
+                             uri->scheme == SOUP_URI_SCHEME_HTTPS ||
+                             uri->scheme == SOUP_URI_SCHEME_FTP, FALSE);
 
        return uri->port == soup_scheme_default_port (uri->scheme);
 }
index 21e465d..67a0580 100644 (file)
@@ -33,7 +33,12 @@ GType     soup_uri_get_type          (void);
 
 #define SOUP_URI_SCHEME_HTTP  _SOUP_ATOMIC_INTERN_STRING (_SOUP_URI_SCHEME_HTTP, "http")
 #define SOUP_URI_SCHEME_HTTPS _SOUP_ATOMIC_INTERN_STRING (_SOUP_URI_SCHEME_HTTPS, "https")
+#define SOUP_URI_SCHEME_FTP   _SOUP_ATOMIC_INTERN_STRING (_SOUP_URI_SCHEME_HTTP, "ftp")
+#define SOUP_URI_SCHEME_FILE  _SOUP_ATOMIC_INTERN_STRING (_SOUP_URI_SCHEME_HTTP, "file")
+#define SOUP_URI_SCHEME_DATA  _SOUP_ATOMIC_INTERN_STRING (_SOUP_URI_SCHEME_HTTPS, "data")
 extern gpointer _SOUP_URI_SCHEME_HTTP, _SOUP_URI_SCHEME_HTTPS;
+extern gpointer _SOUP_URI_SCHEME_FTP;
+extern gpointer _SOUP_URI_SCHEME_FILE, _SOUP_URI_SCHEME_DATA;
 
 SoupURI  *soup_uri_new_with_base         (SoupURI    *base,
                                          const char *uri_string);