------------------------------------------------------------------------------ -- 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;