PTLib  Version 2.12.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
http.h
Go to the documentation of this file.
1 /*
2  * http.h
3  *
4  * HyperText Transport Protocol classes.
5  *
6  * Portable Windows Library
7  *
8  * Copyright (c) 1993-2002 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Portable Windows Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Contributor(s): ______________________________________.
25  *
26  * $Revision: 28997 $
27  * $Author: rjongbloed $
28  * $Date: 2013-01-26 13:37:28 +1100 (Sat, 26 Jan 2013) $
29  */
30 
31 #ifndef PTLIB_HTTP_H
32 #define PTLIB_HTTP_H
33 
34 #ifdef P_USE_PRAGMA
35 #pragma interface
36 #endif
37 
38 #if P_HTTP
39 
40 #include <ptclib/inetprot.h>
41 #include <ptclib/mime.h>
42 #include <ptclib/url.h>
43 #include <ptlib/ipsock.h>
44 #include <ptlib/pfactory.h>
45 
46 
47 #include <ptclib/html.h>
48 
50 // PHTTPSpace
51 
52 class PHTTPResource;
53 
58 class PHTTPSpace : public PContainer
59 {
61  public:
63  PHTTPSpace();
64 
65 
66  // New functions for class.
67  enum AddOptions {
70  };
71 
72 
85  PHTTPResource * resource,
86  AddOptions overwrite = ErrorOnExist
88  );
89 
98  const PURL & url
99  );
100 
107  const PURL & url
108  );
109 
112  void StartRead() const
113  { mutex->StartRead(); }
114 
117  void EndRead() const
118  { mutex->EndRead(); }
119 
122  void StartWrite() const
123  { mutex->StartWrite(); }
124 
127  void EndWrite() const
128  { mutex->EndWrite(); }
129 
130 
131  protected:
133 
134  class Node;
135  PSORTED_LIST(ChildList, Node);
136  class Node : public PString
137  {
139  public:
140  Node(const PString & name, Node * parentNode);
141  ~Node();
142 
144  ChildList children;
146  } * root;
147 
148  private:
149  PBoolean SetSize(PINDEX) { return false; }
150 };
151 
152 #ifdef TRACE
153 #undef TRACE
154 #endif
155 
157 // PHTTP
158 
162 class PHTTP : public PInternetProtocol
163 {
165 
166  public:
167  // New functions for class.
168  enum Commands {
169  // HTTP/1.0 commands
171  // HTTP/1.1 commands
173  // HTTPS command
176  };
177 
178  enum StatusCode {
182  Continue = 100,
184  RequestOK = 200,
197  BadRequest = 400,
215  };
216 
217  // Common MIME header tags
218  static const PCaselessString & HostTag();
219  static const PCaselessString & AllowTag();
220  static const PCaselessString & AuthorizationTag();
221  static const PCaselessString & ContentEncodingTag();
222  static const PCaselessString & ContentLengthTag();
224  static const PCaselessString & DateTag();
225  static const PCaselessString & ExpiresTag();
226  static const PCaselessString & FromTag();
227  static const PCaselessString & IfModifiedSinceTag();
228  static const PCaselessString & LastModifiedTag();
229  static const PCaselessString & LocationTag();
230  static const PCaselessString & PragmaTag();
231  static const PCaselessString & PragmaNoCacheTag();
232  static const PCaselessString & RefererTag();
233  static const PCaselessString & ServerTag();
234  static const PCaselessString & UserAgentTag();
235  static const PCaselessString & WWWAuthenticateTag();
236  static const PCaselessString & MIMEVersionTag();
237  static const PCaselessString & ConnectionTag();
238  static const PCaselessString & KeepAliveTag();
239  static const PCaselessString & TransferEncodingTag();
240  static const PCaselessString & ChunkedTag();
241  static const PCaselessString & ProxyConnectionTag();
242  static const PCaselessString & ProxyAuthorizationTag();
243  static const PCaselessString & ProxyAuthenticateTag();
244  static const PCaselessString & ForwardedTag();
245  static const PCaselessString & SetCookieTag();
246  static const PCaselessString & CookieTag();
247 
248  protected:
251  PHTTP();
252  PHTTP(
253  const char * defaultServiceName
254  );
255 
267  virtual PINDEX ParseResponse(
268  const PString & line
269  );
270 };
271 
272 
273 
275 {
276  PCLASSINFO(PHTTPClientAuthentication, PObject);
277  public:
278  class AuthObject {
279  public:
280  virtual ~AuthObject() { }
281  virtual PMIMEInfo & GetMIME() = 0;
282  virtual PString GetURI() = 0;
283  virtual PString GetEntityBody() = 0;
284  virtual PString GetMethod() = 0;
285  };
286 
288 
289  virtual Comparison Compare(
290  const PObject & other
291  ) const;
292 
293  virtual PBoolean Parse(
294  const PString & auth,
295  PBoolean proxy
296  ) = 0;
297 
298  virtual PBoolean Authorise(
299  AuthObject & pdu
300  ) const = 0;
301 
302  virtual PBoolean IsProxy() const { return isProxy; }
303 
304  virtual PString GetUsername() const { return username; }
305  virtual PString GetPassword() const { return password; }
306  virtual PString GetAuthRealm() const { return PString::Empty(); }
307 
308  virtual void SetUsername(const PString & user) { username = user; }
309  virtual void SetPassword(const PString & pass) { password = pass; }
310  virtual void SetAuthRealm(const PString &) { }
311 
312  PString GetAuthParam(const PString & auth, const char * name) const;
313  PString AsHex(PMessageDigest5::Code & digest) const;
314  PString AsHex(const PBYTEArray & data) const;
315 
316  static PHTTPClientAuthentication * ParseAuthenticationRequired(bool isProxy, const PMIMEInfo & line, PString & errorMsg);
317 
318 
319  protected:
323 };
324 
326 
328 {
329  public:
331  const PString & cmdName,
332  const PString & uri,
333  PMIMEInfo & mime,
334  const PString & body
335  );
336  virtual PMIMEInfo & GetMIME();
337  virtual PString GetURI();
338  virtual PString GetEntityBody();
339  virtual PString GetMethod();
340  protected:
345 };
346 
348 
350 {
352  public:
354 
355  virtual Comparison Compare(
356  const PObject & other
357  ) const;
358 
359  virtual PBoolean Parse(
360  const PString & auth,
361  PBoolean proxy
362  );
363 
364  virtual PBoolean Authorise(
365  AuthObject & pdu
366  ) const;
367 };
368 
370 
372 {
374  public:
376 
379  );
380 
381  virtual Comparison Compare(
382  const PObject & other
383  ) const;
384 
385  virtual PBoolean Parse(
386  const PString & auth,
387  PBoolean proxy
388  );
389 
390  virtual PBoolean Authorise(
391  AuthObject & pdu
392  ) const;
393 
394  virtual PString GetAuthRealm() const { return authRealm; }
395  virtual void SetAuthRealm(const PString & r) { authRealm = r; }
396 
397  enum Algorithm {
400  };
401  const PString & GetNonce() const { return nonce; }
402  Algorithm GetAlgorithm() const { return algorithm; }
403  const PString & GetOpaque() const { return opaque; }
404  bool GetStale() const { return stale; }
405 
406  protected:
411 
412  bool qopAuth;
414  bool stale;
417 };
418 
419 
421 // PHTTPClient
422 
443 class PHTTPClient : public PHTTP
444 {
446 
447  public:
449  PHTTPClient(
450  const PString & userAgentName = PString::Empty()
451  );
452 
453 
454  // New functions for class.
462  int ExecuteCommand(
463  Commands cmd,
464  const PURL & url,
465  PMIMEInfo & outMIME,
466  const PString & dataBody,
467  PMIMEInfo & replyMime
468  );
469  int ExecuteCommand(
470  const PString & cmdName,
471  const PURL & url,
472  PMIMEInfo & outMIME,
473  const PString & dataBody,
474  PMIMEInfo & replyMime
475  );
476 
478  bool WriteCommand(
479  Commands cmd,
480  const PString & url,
481  PMIMEInfo & outMIME,
482  const PString & dataBody
483  );
484  bool WriteCommand(
485  const PString & cmdName,
486  const PString & url,
487  PMIMEInfo & outMIME,
488  const PString & dataBody
489  );
490 
492  bool ReadResponse(
493  PMIMEInfo & replyMIME
494  );
495 
498  {
499  virtual ~ContentProcessor() { }
500  virtual void * GetBuffer(PINDEX & size) = 0;
501  virtual bool Process(const void * data, PINDEX length) = 0;
502  };
503 
505  bool ReadContentBody(
506  PMIMEInfo & replyMIME,
507  ContentProcessor & processor
508  );
509 
511  bool ReadContentBody(
512  PMIMEInfo & replyMIME
513  );
514 
516  bool ReadContentBody(
517  PMIMEInfo & replyMIME,
518  PString & body
519  );
520 
522  bool ReadContentBody(
523  PMIMEInfo & replyMIME,
524  PBYTEArray & body
525  );
526 
527 
534  bool GetDocument(
535  const PURL & url,
536  ContentProcessor & processor
537  );
538 
545  bool GetDocument(
546  const PURL & url,
547  PMIMEInfo & outMIME,
548  PMIMEInfo & replyMIME
549  );
550  bool GetDocument(
551  const PURL & url,
552  PMIMEInfo & replyMIME
553  );
554 
555 
563  bool GetTextDocument(
564  const PURL & url,
565  PString & document,
566  const PString & contentType = PString::Empty()
567  );
568 
576  bool GetBinaryDocument(
577  const PURL & url,
578  PBYTEArray & document,
579  const PString & contentType = PString::Empty()
580  );
581 
582 
588  bool GetHeader(
589  const PURL & url,
590  PMIMEInfo & outMIME,
591  PMIMEInfo & replyMIME
592  );
593  bool GetHeader(
594  const PURL & url,
595  PMIMEInfo & replyMIME
596  );
597 
598 
604  bool PostData(
605  const PURL & url,
606  const PStringToString & data
607  );
608 
614  bool PostData(
615  const PURL & url,
616  PMIMEInfo & outMIME,
617  const PString & data
618  );
619 
626  bool PostData(
627  const PURL & url,
628  PMIMEInfo & outMIME,
629  const PString & data,
630  PMIMEInfo & replyMIME
631  );
632 
638  bool PostData(
639  const PURL & url,
640  PMIMEInfo & outMIME,
641  const PString & data,
642  PMIMEInfo & replyMIME,
643  PString & replyBody
644  );
645 
651  bool PutTextDocument(
652  const PURL & url,
653  const PString & document,
654  const PString & contentType = PMIMEInfo::TextPlain()
655  );
656 
662  bool PutDocument(
663  const PURL & url,
664  PMIMEInfo & outMIME,
665  PMIMEInfo & replyMIME
666  );
667 
673  bool DeleteDocument(
674  const PURL & url
675  );
676 
680  const PString & userName,
681  const PString & password
682  );
683 
684 #if P_SSL
685  void SetSSLCredentials(
686  const PString & authority,
687  const PString & certificate,
688  const PString & privateKey
689  );
690 #endif
691 
694  bool persist = true
695  ) { m_persist = persist; }
696 
698  bool GetPersistent() const { return m_persist; }
699 
700  protected:
701  bool AssureConnect(const PURL & url, PMIMEInfo & outMIME);
702 
704  bool m_persist;
707 #if P_SSL
708  PString m_authority; // Directory, file or data
709  PString m_certificate; // File or data
710  PString m_privateKey; // File or data
711 #endif
713 };
714 
715 
717 // PHTTPConnectionInfo
718 
719 class PHTTPServer;
720 
726 {
728  public:
730 
732  const PString & GetCommandName() const { return commandName; }
733 
734  const PURL & GetURL() const { return url; }
735 
736  const PMIMEInfo & GetMIME() const { return mimeInfo; }
737  void SetMIME(const PString & tag, const PString & value);
738 
739  PBoolean IsCompatible(int major, int minor) const;
740 
741  bool IsPersistent() const { return isPersistent; }
742  bool WasPersistent() const { return wasPersistent; }
743  bool IsProxyConnection() const { return isProxyConnection; }
744  int GetMajorVersion() const { return majorVersion; }
745  int GetMinorVersion() const { return minorVersion; }
746 
747  long GetEntityBodyLength() const { return entityBodyLength; }
748 
752 
756 
761 
766 
768  { return m_multipartFormInfo; }
769 
772 
773  PString GetEntityBody() const { return entityBody; }
774 
775  protected:
776  PBoolean Initialise(PHTTPServer & server, PString & args);
778 
788  PString entityBody; // original entity body (POST only)
793 
794  friend class PHTTPServer;
795 };
796 
797 
799 // PHTTPServer
800 
822 class PHTTPServer : public PHTTP
823 {
825 
826  public:
834  PHTTPServer();
835  PHTTPServer(
836  const PHTTPSpace & urlSpace
837  );
838 
839 
840  // New functions for class.
846  virtual PString GetServerName() const;
847 
854 
856  void SetURLSpace(
857  const PHTTPSpace & space
858  );
859 
860 
870  virtual PBoolean ProcessCommand();
871 
883  virtual PBoolean OnGET(
884  const PURL & url,
885  const PMIMEInfo & info,
886  const PHTTPConnectionInfo & conInfo
887  );
888 
889 
890 
902  virtual PBoolean OnHEAD(
903  const PURL & url,
904  const PMIMEInfo & info,
905  const PHTTPConnectionInfo & conInfo
906  );
907 
919  virtual PBoolean OnPOST(
920  const PURL & url,
921  const PMIMEInfo & info,
922  const PStringToString & data,
923  const PHTTPConnectionInfo & conInfo
924  );
925 
938  virtual PBoolean OnProxy(
939  const PHTTPConnectionInfo & conInfo
940  );
941 
942 
949  virtual PString ReadEntityBody();
950 
956  virtual PBoolean OnUnknown(
957  const PCaselessString & command,
959  );
960 
980  StatusCode code,
981  PMIMEInfo & headers,
982  long bodySize
983  );
984 
994  virtual PBoolean OnError(
995  StatusCode code,
996  const PCaselessString & extra,
998  );
999 
1002  void SetDefaultMIMEInfo(
1003  PMIMEInfo & info,
1005  );
1006 
1010 
1016  virtual bool OnCommand(
1017  PINDEX cmd,
1018  const PURL & url,
1019  const PString & args,
1021  );
1022 
1023 
1024  protected:
1025  void Construct();
1026 
1031 };
1032 
1033 
1035 // PHTTPRequest
1036 
1041 class PHTTPRequest : public PObject
1042 {
1044 
1045  public:
1046  PHTTPRequest(
1047  const PURL & url,
1048  const PMIMEInfo & inMIME,
1050  PHTTPResource * resource,
1051  PHTTPServer & server
1052  );
1053 
1055  const PURL & url;
1056  const PMIMEInfo & inMIME;
1061  PINDEX contentSize;
1064  WORD localPort;
1066 };
1067 
1068 
1070 // PHTTPAuthority
1071 
1075 class PHTTPAuthority : public PObject
1076 {
1078 
1079  public:
1080  // New functions for class.
1087  virtual PString GetRealm(
1088  const PHTTPRequest & request
1089  ) const = 0;
1090 
1097  virtual PBoolean Validate(
1098  const PHTTPRequest & request,
1099  const PString & authInfo
1100  ) const = 0;
1101 
1111  virtual PBoolean IsActive() const;
1112 
1113  protected:
1114  static void DecodeBasicAuthority(
1115  const PString & authInfo,
1116  PString & username,
1117  PString & password
1118  );
1119 };
1120 
1121 
1123 // PHTTPSimpleAuth
1124 
1129 {
1131 
1132  public:
1134  const PString & realm,
1135  const PString & username,
1136  const PString & password
1137  );
1138  // Construct the simple authorisation structure.
1139 
1140 
1141  // Overrides from class PObject.
1149  virtual PObject * Clone() const;
1150 
1151 
1152  // Overrides from class PHTTPAuthority.
1159  virtual PString GetRealm(
1160  const PHTTPRequest & request
1161  ) const;
1162 
1169  virtual PBoolean Validate(
1170  const PHTTPRequest & request,
1171  const PString & authInfo
1172  ) const;
1173 
1183  virtual PBoolean IsActive() const;
1184 
1190  const PString & GetUserName() const { return username; }
1191 
1197  const PString & GetPassword() const { return password; }
1198 
1199 
1200  protected:
1204 };
1205 
1206 
1208 // PHTTPMultiSimpAuth
1209 
1214 {
1216 
1217  public:
1219  const PString & realm
1220  );
1222  const PString & realm,
1223  const PStringToString & userList
1224  );
1225  // Construct the simple authorisation structure.
1226 
1227 
1228  // Overrides from class PObject.
1236  virtual PObject * Clone() const;
1237 
1238 
1239  // Overrides from class PHTTPAuthority.
1246  virtual PString GetRealm(
1247  const PHTTPRequest & request
1248  ) const;
1249 
1256  virtual PBoolean Validate(
1257  const PHTTPRequest & request,
1258  const PString & authInfo
1259  ) const;
1260 
1270  virtual PBoolean IsActive() const;
1271 
1277  void AddUser(
1278  const PString & username,
1279  const PString & password
1280  );
1281 
1282 
1283  protected:
1286 };
1287 
1288 
1290 // PHTTPResource
1291 
1295 class PHTTPResource : public PObject
1296 {
1298 
1299  protected:
1300  PHTTPResource(
1301  const PURL & url
1302  );
1303  PHTTPResource(
1304  const PURL & url,
1305  const PHTTPAuthority & auth
1306  );
1307  PHTTPResource(
1308  const PURL & url,
1309  const PString & contentType
1310  );
1311  PHTTPResource(
1312  const PURL & url,
1313  const PString & contentType,
1314  const PHTTPAuthority & auth
1315  );
1316  // Create a new HTTP Resource.
1317 
1318 
1319  public:
1320  virtual ~PHTTPResource();
1321  // Destroy the HTTP Resource.
1322 
1323 
1324  // New functions for class.
1330  const PURL & GetURL() const { return baseURL; }
1331 
1335 
1341  const PString & GetContentType() const { return contentType; }
1342 
1349  PHTTPAuthority * GetAuthority() const { return authority; }
1350 
1353  void SetAuthority(
1354  const PHTTPAuthority & auth
1355  );
1356 
1359  void ClearAuthority();
1360 
1367  DWORD GetHitCount() const { return hitCount; }
1368 
1369  void ClearHitCount() { hitCount = 0; }
1370  // Clear the hit count for the resource.
1371 
1372 
1384  virtual PBoolean OnGET(
1385  PHTTPServer & server,
1386  const PURL & url,
1387  const PMIMEInfo & info,
1388  const PHTTPConnectionInfo & conInfo
1389  );
1390 
1400  virtual PBoolean OnGETData(
1401  PHTTPServer & server,
1402  const PURL & url,
1403  const PHTTPConnectionInfo & connectInfo,
1404  PHTTPRequest & request
1405  );
1406 
1418  virtual PBoolean OnHEAD(
1419  PHTTPServer & server,
1420  const PURL & url,
1421  const PMIMEInfo & info,
1422  const PHTTPConnectionInfo & conInfo
1423  );
1424 
1436  virtual PBoolean OnPOST(
1437  PHTTPServer & server,
1438  const PURL & url,
1439  const PMIMEInfo & info,
1440  const PStringToString & data,
1441  const PHTTPConnectionInfo & conInfo
1442  );
1443 
1453  virtual PBoolean OnPOSTData(
1454  PHTTPRequest & request,
1455  const PStringToString & data
1456  );
1457 
1464  virtual PBoolean IsModifiedSince(
1465  const PTime & when
1466  );
1467 
1473  virtual PBoolean GetExpirationDate(
1474  PTime & when
1475  );
1476 
1484  virtual PHTTPRequest * CreateRequest(
1485  const PURL & url,
1486  const PMIMEInfo & inMIME,
1487  const PMultiPartList & multipartFormInfo,
1488  PHTTPServer & socket
1489  );
1490 
1498  virtual PBoolean LoadHeaders(
1499  PHTTPRequest & request
1500  ) = 0;
1501 
1507  virtual void SendData(
1508  PHTTPRequest & request
1509  );
1510 
1519  virtual PBoolean LoadData(
1520  PHTTPRequest & request,
1521  PCharArray & data
1522  );
1523 
1532  virtual PString LoadText(
1533  PHTTPRequest & request
1534  );
1535 
1542  virtual void OnLoadedText(
1543  PHTTPRequest & request,
1544  PString & text
1545  );
1546 
1555  virtual PBoolean Post(
1556  PHTTPRequest & request,
1557  const PStringToString & data,
1558  PHTML & replyMessage
1559  );
1560 
1561 
1562  protected:
1565  virtual PBoolean CheckAuthority(
1566  PHTTPServer & server,
1567  const PHTTPRequest & request,
1568  const PHTTPConnectionInfo & conInfo
1569  );
1570  static PBoolean CheckAuthority(
1572  PHTTPServer & server,
1573  const PHTTPRequest & request,
1574  const PHTTPConnectionInfo & connectInfo
1575  );
1576 
1577 
1579  virtual PBoolean OnGETOrHEAD(
1580  PHTTPServer & server,
1581  const PURL & url,
1582  const PMIMEInfo & info,
1583  const PHTTPConnectionInfo & conInfo,
1584  PBoolean isGet
1585  );
1586 
1587 
1591  volatile DWORD hitCount;
1592 };
1593 
1594 
1596 // PHTTPString
1597 
1603 {
1605 
1606  public:
1610  PHTTPString(
1611  const PURL & url // Name of the resource in URL space.
1612  );
1613  PHTTPString(
1614  const PURL & url, // Name of the resource in URL space.
1615  const PHTTPAuthority & auth // Authorisation for the resource.
1616  );
1617  PHTTPString(
1618  const PURL & url, // Name of the resource in URL space.
1619  const PString & str // String to return in this resource.
1620  );
1621  PHTTPString(
1622  const PURL & url, // Name of the resource in URL space.
1623  const PString & str, // String to return in this resource.
1624  const PString & contentType // MIME content type for the file.
1625  );
1626  PHTTPString(
1627  const PURL & url, // Name of the resource in URL space.
1628  const PString & str, // String to return in this resource.
1629  const PHTTPAuthority & auth // Authorisation for the resource.
1630  );
1631  PHTTPString(
1632  const PURL & url, // Name of the resource in URL space.
1633  const PString & str, // String to return in this resource.
1634  const PString & contentType, // MIME content type for the file.
1635  const PHTTPAuthority & auth // Authorisation for the resource.
1636  );
1637 
1638 
1639  // Overrides from class PHTTPResource
1647  virtual PBoolean LoadHeaders(
1648  PHTTPRequest & request // Information on this request.
1649  );
1650 
1659  virtual PString LoadText(
1660  PHTTPRequest & request // Information on this request.
1661  );
1662 
1663  // New functions for class.
1669  const PString & GetString() { return string; }
1670 
1674  const PString & str // New string for the resource.
1675  ) { string = str; }
1676 
1677 
1678  protected:
1680 };
1681 
1682 
1684 // PHTTPFile
1685 
1691 class PHTTPFile : public PHTTPResource
1692 {
1694 
1695  public:
1702  PHTTPFile(
1703  const PString & filename // file in file system and URL name.
1704  );
1705  PHTTPFile(
1706  const PString & filename, // file in file system and URL name.
1707  const PHTTPAuthority & auth // Authorisation for the resource.
1708  );
1709  PHTTPFile(
1710  const PURL & url, // Name of the resource in URL space.
1711  const PFilePath & file // Location of file in file system.
1712  );
1713  PHTTPFile(
1714  const PURL & url, // Name of the resource in URL space.
1715  const PFilePath & file, // Location of file in file system.
1716  const PString & contentType // MIME content type for the file.
1717  );
1718  PHTTPFile(
1719  const PURL & url, // Name of the resource in URL space.
1720  const PFilePath & file, // Location of file in file system.
1721  const PHTTPAuthority & auth // Authorisation for the resource.
1722  );
1723  PHTTPFile(
1724  const PURL & url, // Name of the resource in URL space.
1725  const PFilePath & file, // Location of file in file system.
1726  const PString & contentType, // MIME content type for the file.
1727  const PHTTPAuthority & auth // Authorisation for the resource.
1728  );
1729 
1730 
1731  // Overrides from class PHTTPResource
1737  virtual PHTTPRequest * CreateRequest(
1738  const PURL & url, // Universal Resource Locator for document.
1739  const PMIMEInfo & inMIME, // Extra MIME information in command.
1740  const PMultiPartList & multipartFormInfo,
1741  PHTTPServer & socket
1742  );
1743 
1751  virtual PBoolean LoadHeaders(
1752  PHTTPRequest & request // Information on this request.
1753  );
1754 
1760  virtual PBoolean LoadData(
1761  PHTTPRequest & request, // Information on this request.
1762  PCharArray & data // Data used in reply.
1763  );
1764 
1773  virtual PString LoadText(
1774  PHTTPRequest & request // Information on this request.
1775  );
1776 
1777 
1778  protected:
1779  PHTTPFile(
1780  const PURL & url, // Name of the resource in URL space.
1781  int dummy
1782  );
1783  // Constructor used by PHTTPDirectory
1784 
1785 
1787 };
1788 
1789 
1791 {
1793  public:
1795  const PURL & url, // Universal Resource Locator for document.
1796  const PMIMEInfo & inMIME, // Extra MIME information in command.
1798  PHTTPResource * resource,
1800  );
1801 
1803 };
1804 
1805 
1807 // PHTTPTailFile
1808 
1817 class PHTTPTailFile : public PHTTPFile
1818 {
1820 
1821  public:
1828  PHTTPTailFile(
1829  const PString & filename // file in file system and URL name.
1830  );
1831  PHTTPTailFile(
1832  const PString & filename, // file in file system and URL name.
1833  const PHTTPAuthority & auth // Authorisation for the resource.
1834  );
1835  PHTTPTailFile(
1836  const PURL & url, // Name of the resource in URL space.
1837  const PFilePath & file // Location of file in file system.
1838  );
1839  PHTTPTailFile(
1840  const PURL & url, // Name of the resource in URL space.
1841  const PFilePath & file, // Location of file in file system.
1842  const PString & contentType // MIME content type for the file.
1843  );
1844  PHTTPTailFile(
1845  const PURL & url, // Name of the resource in URL space.
1846  const PFilePath & file, // Location of file in file system.
1847  const PHTTPAuthority & auth // Authorisation for the resource.
1848  );
1849  PHTTPTailFile(
1850  const PURL & url, // Name of the resource in URL space.
1851  const PFilePath & file, // Location of file in file system.
1852  const PString & contentType, // MIME content type for the file.
1853  const PHTTPAuthority & auth // Authorisation for the resource.
1854  );
1855 
1856 
1857  // Overrides from class PHTTPResource
1865  virtual PBoolean LoadHeaders(
1866  PHTTPRequest & request // Information on this request.
1867  );
1868 
1874  virtual PBoolean LoadData(
1875  PHTTPRequest & request, // Information on this request.
1876  PCharArray & data // Data used in reply.
1877  );
1878 };
1879 
1880 
1882 // PHTTPDirectory
1883 
1897 {
1899 
1900  public:
1902  const PURL & url,
1903  const PDirectory & dir
1904  );
1906  const PURL & url,
1907  const PDirectory & dir,
1908  const PHTTPAuthority & auth
1909  );
1910  // Construct a new directory resource for HTTP.
1911 
1912 
1913  // Overrides from class PHTTPResource
1919  virtual PHTTPRequest * CreateRequest(
1920  const PURL & url, // Universal Resource Locator for document.
1921  const PMIMEInfo & inMIME, // Extra MIME information in command.
1922  const PMultiPartList & multipartFormInfo,
1923  PHTTPServer & socket
1924  );
1925 
1933  virtual PBoolean LoadHeaders(
1934  PHTTPRequest & request
1935  );
1936 
1945  virtual PString LoadText(
1946  PHTTPRequest & request
1947  );
1948 
1957  void EnableAuthorisation(const PString & realm);
1958 
1961  void AllowDirectories(PBoolean enable = true);
1962 
1963  protected:
1965  PHTTPServer & server, // Server to send response to.
1966  const PHTTPRequest & request, // Information on this request.
1967  const PHTTPConnectionInfo & conInfo // Information on the connection
1968  );
1969 
1970  PBoolean FindAuthorisations(const PDirectory & dir, PString & realm, PStringToString & authorisations);
1971 
1975 };
1976 
1977 
1979 {
1981  public:
1983  const PURL & url, // Universal Resource Locator for document.
1984  const PMIMEInfo & inMIME, // Extra MIME information in command.
1986  PHTTPResource * resource,
1988  );
1989 
1992 };
1993 
1994 
1995 #endif // P_HTTP
1996 
1997 #endif // PTLIB_HTTP_H
1998 
1999 
2000 // End Of File ///////////////////////////////////////////////////////////////