[vlc-commits] Move mime type guessing by extension to separate file and export it

Angelo Haller git at videolan.org
Tue Aug 28 19:07:25 CEST 2012


vlc | branch: master | Angelo Haller <vlc-devel at szanni.org> | Tue Aug 28 18:07:06 2012 +0200| [0df51d03d9f74d295434071006238e8ca9e53e64] | committer: Jean-Baptiste Kempf

Move mime type guessing by extension to separate file and export it

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0df51d03d9f74d295434071006238e8ca9e53e64
---

 .../cmake/CMakeLists/src_CMakeLists.txt            |    1 +
 include/vlc_mime.h                                 |   31 ++++++
 src/Makefile.am                                    |    2 +
 src/libvlccore.sym                                 |    1 +
 src/misc/mime.c                                    |  107 ++++++++++++++++++++
 src/network/httpd.c                                |   80 +--------------
 6 files changed, 145 insertions(+), 77 deletions(-)

diff --git a/extras/buildsystem/cmake/CMakeLists/src_CMakeLists.txt b/extras/buildsystem/cmake/CMakeLists/src_CMakeLists.txt
index f96a62c..b178b81 100644
--- a/extras/buildsystem/cmake/CMakeLists/src_CMakeLists.txt
+++ b/extras/buildsystem/cmake/CMakeLists/src_CMakeLists.txt
@@ -118,6 +118,7 @@ set( SOURCES_libvlccore_common
     misc/events.c
     misc/image.c
     misc/messages.c
+    misc/mime.c
     misc/objects.c
     misc/variables.h
     misc/variables.c
diff --git a/include/vlc_mime.h b/include/vlc_mime.h
new file mode 100644
index 0000000..f04fc95
--- /dev/null
+++ b/include/vlc_mime.h
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * vlc_mime.h: Mime type recognition
+ *****************************************************************************
+ * Copyright (C) 2012 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef VLC_MIME_H
+#define VLC_MIME_H 1
+
+/**
+ * \file
+ * Mime type recognition helpers.
+ */
+
+VLC_API const char * vlc_mime_Ext2Mime( const char *psz_url );
+
+#endif /* _VLC_MIME_H */
diff --git a/src/Makefile.am b/src/Makefile.am
index da40d00..ff25cff 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -64,6 +64,7 @@ pluginsinclude_HEADERS = \
 	../include/vlc_messages.h \
 	../include/vlc_meta.h \
 	../include/vlc_media_library.h \
+	../include/vlc_mime.h \
 	../include/vlc_modules.h \
 	../include/vlc_mouse.h \
 	../include/vlc_mtime.h \
@@ -438,6 +439,7 @@ SOURCES_libvlc_common = \
 	misc/events.c \
 	misc/image.c \
 	misc/messages.c \
+	misc/mime.c \
 	misc/objects.c \
 	misc/variables.h \
 	misc/variables.c \
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index a859934..be48588 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -535,6 +535,7 @@ vlc_meta_New
 vlc_meta_Set
 vlc_meta_SetStatus
 vlc_meta_TypeToLocalizedString
+vlc_mime_Ext2Mime
 vlc_mutex_destroy
 vlc_mutex_init
 vlc_mutex_init_recursive
diff --git a/src/misc/mime.c b/src/misc/mime.c
new file mode 100644
index 0000000..e56a730
--- /dev/null
+++ b/src/misc/mime.c
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ * mime.c
+ *****************************************************************************
+ * Copyright © 2004-2012 VLC authors and VideoLAN
+ * Copyright © 2004-2007 Rémi Denis-Courmont
+ *
+ * Authors: Laurent Aimar <fenrir at via.ecp.fr>
+ *          Rémi Denis-Courmont <rem # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_mime.h>
+
+#include <string.h>
+
+static const struct
+{
+    const char psz_ext[8];
+    const char *psz_mime;
+} ext_mime[] =
+{
+    { ".htm",   "text/html" },
+    { ".html",  "text/html" },
+    { ".txt",   "text/plain" },
+    { ".xml",   "text/xml" },
+    { ".dtd",   "text/dtd" },
+
+    { ".css",   "text/css" },
+
+    /* image mime */
+    { ".gif",   "image/gif" },
+    { ".jpe",   "image/jpeg" },
+    { ".jpg",   "image/jpeg" },
+    { ".jpeg",  "image/jpeg" },
+    { ".png",   "image/png" },
+    /* same as modules/mux/mpjpeg.c here: */
+    { ".mpjpeg","multipart/x-mixed-replace; boundary=7b3cc56e5f51db803f790dad720ed50a" },
+
+    /* media mime */
+    { ".avi",   "video/avi" },
+    { ".asf",   "video/x-ms-asf" },
+    { ".m1a",   "audio/mpeg" },
+    { ".m2a",   "audio/mpeg" },
+    { ".m1v",   "video/mpeg" },
+    { ".m2v",   "video/mpeg" },
+    { ".mp2",   "audio/mpeg" },
+    { ".mp3",   "audio/mpeg" },
+    { ".mpa",   "audio/mpeg" },
+    { ".mpg",   "video/mpeg" },
+    { ".mpeg",  "video/mpeg" },
+    { ".mpe",   "video/mpeg" },
+    { ".mov",   "video/quicktime" },
+    { ".moov",  "video/quicktime" },
+    { ".oga",   "audio/ogg" },
+    { ".ogg",   "application/ogg" },
+    { ".ogm",   "application/ogg" },
+    { ".ogv",   "video/ogg" },
+    { ".ogx",   "application/ogg" },
+    { ".spx",   "audio/ogg" },
+    { ".wav",   "audio/wav" },
+    { ".wma",   "audio/x-ms-wma" },
+    { ".wmv",   "video/x-ms-wmv" },
+    { ".webm",  "video/webm" },
+
+    /* end */
+    { "",       "" }
+};
+
+const char *vlc_mime_Ext2Mime( const char *psz_url )
+{
+
+    char *psz_ext;
+
+    psz_ext = strrchr( psz_url, '.' );
+    if( psz_ext )
+    {
+        int i;
+
+        for( i = 0; ext_mime[i].psz_ext[0] ; i++ )
+        {
+            if( !strcasecmp( ext_mime[i].psz_ext, psz_ext ) )
+            {
+                return ext_mime[i].psz_mime;
+            }
+        }
+    }
+    return "application/octet-stream";
+}
+
diff --git a/src/network/httpd.c b/src/network/httpd.c
index e3195d3..5052646 100644
--- a/src/network/httpd.c
+++ b/src/network/httpd.c
@@ -38,6 +38,7 @@
 #include <vlc_rand.h>
 #include <vlc_charset.h>
 #include <vlc_url.h>
+#include <vlc_mime.h>
 #include "../libvlc.h"
 
 #include <string.h>
@@ -172,81 +173,6 @@ struct httpd_client_t
 /*****************************************************************************
  * Various functions
  *****************************************************************************/
-static const struct
-{
-    const char psz_ext[8];
-    const char *psz_mime;
-} http_mime[] =
-{
-    { ".htm",   "text/html" },
-    { ".html",  "text/html" },
-    { ".txt",   "text/plain" },
-    { ".xml",   "text/xml" },
-    { ".dtd",   "text/dtd" },
-
-    { ".css",   "text/css" },
-
-    /* image mime */
-    { ".gif",   "image/gif" },
-    { ".jpe",   "image/jpeg" },
-    { ".jpg",   "image/jpeg" },
-    { ".jpeg",  "image/jpeg" },
-    { ".png",   "image/png" },
-    /* same as modules/mux/mpjpeg.c here: */
-    { ".mpjpeg","multipart/x-mixed-replace; boundary=7b3cc56e5f51db803f790dad720ed50a" },
-
-    /* media mime */
-    { ".avi",   "video/avi" },
-    { ".asf",   "video/x-ms-asf" },
-    { ".m1a",   "audio/mpeg" },
-    { ".m2a",   "audio/mpeg" },
-    { ".m1v",   "video/mpeg" },
-    { ".m2v",   "video/mpeg" },
-    { ".mp2",   "audio/mpeg" },
-    { ".mp3",   "audio/mpeg" },
-    { ".mpa",   "audio/mpeg" },
-    { ".mpg",   "video/mpeg" },
-    { ".mpeg",  "video/mpeg" },
-    { ".mpe",   "video/mpeg" },
-    { ".mov",   "video/quicktime" },
-    { ".moov",  "video/quicktime" },
-    { ".oga",   "audio/ogg" },
-    { ".ogg",   "application/ogg" },
-    { ".ogm",   "application/ogg" },
-    { ".ogv",   "video/ogg" },
-    { ".ogx",   "application/ogg" },
-    { ".spx",   "audio/ogg" },
-    { ".wav",   "audio/wav" },
-    { ".wma",   "audio/x-ms-wma" },
-    { ".wmv",   "video/x-ms-wmv" },
-    { ".webm",  "video/webm" },
-
-    /* end */
-    { "",       "" }
-};
-
-static const char *httpd_MimeFromUrl( const char *psz_url )
-{
-
-    char *psz_ext;
-
-    psz_ext = strrchr( psz_url, '.' );
-    if( psz_ext )
-    {
-        int i;
-
-        for( i = 0; http_mime[i].psz_ext[0] ; i++ )
-        {
-            if( !strcasecmp( http_mime[i].psz_ext, psz_ext ) )
-            {
-                return http_mime[i].psz_mime;
-            }
-        }
-    }
-    return "application/octet-stream";
-}
-
-
 typedef struct
 {
     unsigned   i_code;
@@ -459,7 +385,7 @@ httpd_file_t *httpd_FileNew( httpd_host_t *host,
     }
     else
     {
-        file->psz_mime = strdup( httpd_MimeFromUrl( psz_url ) );
+        file->psz_mime = strdup( vlc_mime_Ext2Mime( psz_url ) );
     }
 
     file->pf_fill = pf_fill;
@@ -857,7 +783,7 @@ httpd_stream_t *httpd_StreamNew( httpd_host_t *host,
     }
     else
     {
-        stream->psz_mime = strdup( httpd_MimeFromUrl( psz_url ) );
+        stream->psz_mime = strdup( vlc_mime_Ext2Mime( psz_url ) );
     }
     stream->i_header = 0;
     stream->p_header = NULL;



More information about the vlc-commits mailing list