TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
TipusMIME.cc
Veure la documentació d'aquest fitxer.
1 
8 /*
9  * Copyright (c) 2012 Toni Corvera
10  *
11  * This file is part of TFCWeb.
12  *
13  * TFCWeb is free software: you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation, either version 3 of the License, or
16  * (at your option) any later version.
17  *
18  * TFCWeb is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
25  */
26 
27 #include "TipusMIME.h"
28 
29 #include <boost/unordered_map.hpp> // també a std::tr1
30 #include <boost/algorithm/string.hpp>
31 #include <boost/assign.hpp>
32 
33 using namespace std;
35 
36 namespace {
37 
51  // , TEXT_X_M4
52 };
53 
59 const char * NOMS_TIPUS_CONEGUTS[] = {
60  "text/plain",
61  "text/html",
62  "text/css",
63  "image/jpeg",
64  "image/png",
65  "image/gif",
66  "application/x-object"
67  // , "text/x-m4"
68 };
69 
70 
71 boost::unordered_map<string, string> tipus_registrats = boost::assign::map_list_of
72  ( "txt", NOMS_TIPUS_CONEGUTS[TEXT_PLAIN] )
73  ( "html", NOMS_TIPUS_CONEGUTS[TEXT_HTML] )
74  ( "htm", NOMS_TIPUS_CONEGUTS[TEXT_HTML] )
75  ( "css", NOMS_TIPUS_CONEGUTS[TEXT_CSS] )
76  ( "jpg", NOMS_TIPUS_CONEGUTS[IMAGE_JPEG] )
77  ( "jpeg", NOMS_TIPUS_CONEGUTS[IMAGE_JPEG] )
78  ( "jpe", NOMS_TIPUS_CONEGUTS[IMAGE_JPEG] )
79  ( "png", NOMS_TIPUS_CONEGUTS[IMAGE_PNG] )
80  ( "gif", NOMS_TIPUS_CONEGUTS[IMAGE_GIF] )
81  // Tipus per codi: text/x-c, text/x-c++, application/x-object, etc.
82  // Vistos amb 'file -i' i Apache, la x indica que no són estàndards, i les dues aplicacions
83  // no es posen d'acord (p.e. .h va donar x-c i x-chdr, .cc va donar x-c++ i x-c++src)
84  /*
85  ( "o", NOMS_TIPUS_CONEGUTS[APPLICATION_X_OBJECT] )
86  ( "h", NOMS_TIPUS_CONEGUTS[TEXT_PLAIN] )
87  ( "cc", NOMS_TIPUS_CONEGUTS[TEXT_PLAIN] )
88  ( "ac", NOMS_TIPUS_CONEGUTS[TEXT_PLAIN] )
89  */
90 ;
91 
92 
93 const string tipus_per_defecte( NOMS_TIPUS_CONEGUTS[TEXT_PLAIN] );
94 
95 } // ns anònim
96 
97 namespace tfc {
98 
99 namespace RegistreTipusMIME {
100 
101 const string& per_extensio(const string & ext) {
102  assert( ext.empty() || '.' != ext[0] ); // PRECONDICIÓ
103  auto it = tipus_registrats.find(boost::algorithm::to_lower_copy(ext));
104  if (it == tipus_registrats.end()) {
105  return tipus_per_defecte;
106  }
107  return it->second;
108 }
109 
110 void registra_extensio(const string & ext, const string & tipus) {
111  const std::string clau = boost::algorithm::to_lower_copy(ext);
112  tipus_registrats[clau] = tipus;
113 }
114 
115 const string& tipus(const path & ruta) {
116  string ext = ruta.extension().string();
117  if (!ext.empty()) {
118  ext = ext.erase(0,1);
119  }
121 }
122 
123 } // ns RegistreTipusMIME
124 
125 } // ns tfc
126 
127 // vim:set ts=4 et ai: //