File : aws-mime.adb
------------------------------------------------------------------------------
-- Ada Web Server --
-- --
-- Copyright (C) 2000-2002 --
-- ACT-Europe --
-- --
-- Authors: Dmitriy Anisimkov - Pascal Obry --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under the terms of the GNU General Public License as published by --
-- the Free Software Foundation; either version 2 of the License, or (at --
-- your option) any later version. --
-- --
-- This library 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 --
-- General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public License --
-- along with this library; if not, write to the Free Software Foundation, --
-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
------------------------------------------------------------------------------
-- $Id: aws-mime.adb,v 1.1 2003/10/05 19:59:56 Jano Exp $
with Ada.Characters.Handling;
with Ada.Strings.Maps;
with Ada.Strings.Fixed;
package body AWS.MIME is
use Ada;
type String_Access is access constant String;
type Mapping is record
File_Type : String_Access;
Content_Type : String_Access;
end record;
-- extensions
Dot_Html : aliased constant String := ".html";
Dot_Htm : aliased constant String := ".htm";
Dot_XML : aliased constant String := ".xml";
Dot_Txt : aliased constant String := ".txt";
Dot_Ada : aliased constant String := ".ada";
Dot_Ads : aliased constant String := ".ads";
Dot_Adb : aliased constant String := ".adb";
Dot_C : aliased constant String := ".c";
Dot_H : aliased constant String := ".h";
Dot_Gif : aliased constant String := ".gif";
Dot_Jpg : aliased constant String := ".jpg";
Dot_Jpeg : aliased constant String := ".jpeg";
Dot_Png : aliased constant String := ".png";
Dot_Ps : aliased constant String := ".ps";
Dot_Pdf : aliased constant String := ".pdf";
Dot_Zip : aliased constant String := ".zip";
Dot_Gz : aliased constant String := ".gz";
Dot_Tar : aliased constant String := ".tar";
Dot_Exe : aliased constant String := ".exe";
Type_Table : constant array (Positive range <>) of Mapping :=
((Dot_Html'Access, Text_HTML'Access),
(Dot_Htm'Access, Text_HTML'Access),
(Dot_XML'Access, Text_XML'Access),
(Dot_Txt'Access, Text_Plain'Access),
(Dot_Ada'Access, Text_Plain'Access),
(Dot_Ads'Access, Text_Plain'Access),
(Dot_Adb'Access, Text_Plain'Access),
(Dot_C'Access, Text_Plain'Access),
(Dot_H'Access, Text_Plain'Access),
(Dot_Gif'Access, Image_Gif'Access),
(Dot_Jpg'Access, Image_Jpeg'Access),
(Dot_Jpeg'Access, Image_Jpeg'Access),
(Dot_Png'Access, Image_Png'Access),
(Dot_Ps'Access, Appl_Postscript'Access),
(Dot_Pdf'Access, Appl_Pdf'Access),
(Dot_Zip'Access, Appl_Zip'Access),
(Dot_Gz'Access, Appl_Octet_Stream'Access),
(Dot_Tar'Access, Appl_Octet_Stream'Access),
(Dot_Exe'Access, Appl_Octet_Stream'Access));
--------------
-- To_Lower --
--------------
function To_Lower (Item : in String) return String renames
Ada.Characters.Handling.To_Lower;
-- Just a shorter name
-------------
-- Content --
-------------
function Content_Type (Filename : in String) return String is
Default_Content_Type : constant String := "application/octet-stream";
Pos : constant Natural
:= Strings.Fixed.Index (Filename,
Strings.Maps.To_Set ("."),
Going => Strings.Backward);
begin
if Pos > 0 then
declare
File_Type : constant String
:= To_Lower (Filename (Pos .. Filename'Last));
begin
for I in Type_Table'Range loop
if File_Type = Type_Table (I).File_Type.all then
return Type_Table (I).Content_Type.all;
end if;
end loop;
end;
end if;
return Default_Content_Type;
end Content_Type;
-------------
-- Is_Text --
-------------
function Is_Text (Mime_Type : in String) return Boolean is
begin
return Mime_Type'Length > 5
and then To_Lower (Mime_Type (Mime_Type'First .. Mime_Type'First + 4))
= "text/";
end Is_Text;
end AWS.MIME;