url.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * url.h
  3.  *
  4.  * Universal Resource Locator (for HTTP/HTML) class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 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.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: url.h,v $
  30.  * Revision 1.15  1999/03/09 08:01:47  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.14  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.13  1998/09/23 06:20:11  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.12  1998/02/16 00:12:53  robertj
  40.  * Added function to open a URL in a browser.
  41.  *
  42.  * Revision 1.11  1998/02/03 10:02:35  robertj
  43.  * Added ability to get scheme, host and port from URL as a string.
  44.  *
  45.  * Revision 1.10  1998/02/03 06:18:49  robertj
  46.  * Fixed URL encoding to be closer to RFC
  47.  *
  48.  * Revision 1.9  1997/01/12 04:22:54  robertj
  49.  * Added has function so URL can be dictionary key.
  50.  *
  51.  * Revision 1.8  1996/08/19 13:37:28  robertj
  52.  * Fixed URL parsing and definition (cannot have relative paths).
  53.  *
  54.  * Revision 1.7  1996/06/10 09:55:44  robertj
  55.  * Added global function for query parameters parsing.
  56.  *
  57.  * Revision 1.6  1996/03/31 08:53:13  robertj
  58.  * Added string representation for URI part only.
  59.  *
  60.  * Revision 1.5  1996/03/16 04:46:02  robertj
  61.  * Added translation type to TranslateString() to accommodate query variables.
  62.  *
  63.  * Revision 1.4  1996/03/02 03:12:13  robertj
  64.  * Added function to translate a string to a form suitable for inclusion in a URL.
  65.  *
  66.  * Revision 1.3  1996/02/03 11:06:27  robertj
  67.  * Added splitting of query field into variables dictionary.
  68.  *
  69.  * Revision 1.2  1996/01/26 02:24:32  robertj
  70.  * Further implemetation.
  71.  *
  72.  * Revision 1.1  1996/01/23 13:04:20  robertj
  73.  * Initial revision
  74.  *
  75.  */
  76. #ifndef _PURL
  77. #define _PURL
  78. #ifdef __GNUC__
  79. #pragma interface
  80. #endif
  81. //////////////////////////////////////////////////////////////////////////////
  82. // PURL
  83. /**
  84.  This class describes a Universal Resource Locator.
  85.  This is the desciption of a resource location as used by the World Wide
  86.  Web and the #PHTTPSocket# class.
  87.  */
  88. class PURL : public PObject
  89. {
  90.   PCLASSINFO(PURL, PObject)
  91.   public:
  92.     /**Construct a new URL object from the URL string. */
  93.     PURL();
  94.     /**Construct a new URL object from the URL string. */
  95.     PURL(
  96.       const char * cstr     /// C string representation of the URL.
  97.     );
  98.     /**Construct a new URL object from the URL string. */
  99.     PURL(
  100.       const PString & str   /// String representation of the URL.
  101.     );
  102.   /**@name Overrides from class PObject */
  103.   //@{
  104.     /**Compare the two URLs and return their relative rank.
  105.      @return
  106.        #LessThan#, #EqualTo# or #GreaterThan#
  107.        according to the relative rank of the objects.
  108.      */
  109.     virtual Comparison Compare(
  110.       const PObject & obj   /// Object to compare against.
  111.     ) const;
  112.     /**This function yields a hash value required by the #PDictionary#
  113.        class. A descendent class that is required to be the key of a dictionary
  114.        should override this function. The precise values returned is dependent
  115.        on the semantics of the class. For example, the #PString# class
  116.        overrides it to provide a hash function for distinguishing text strings.
  117.        The default behaviour is to return the value zero.
  118.        @return
  119.        hash function value for class instance.
  120.      */
  121.     virtual PINDEX HashFunction() const;
  122.     /**Output the contents of the URL to the stream as a string.
  123.      */
  124.     virtual void PrintOn(
  125.       ostream &strm   /// Stream to print the object into.
  126.     ) const;
  127.     /**Input the contents of the URL from the stream. The input is a URL in
  128.        string form.
  129.      */
  130.     virtual void ReadFrom(
  131.       istream &strm   /// Stream to read the objects contents from.
  132.     );
  133.   //@}
  134.  
  135.   /**@name New functions for class. */
  136.   //@{
  137.     /**Parse the URL string into the fields in the object instance. */
  138.     void Parse(
  139.       const char * cstr   /// URL as a string to parse.
  140.     );
  141.     /**Parse the URL string into the fields in the object instance. */
  142.     void Parse(
  143.       const PString & str /// URL as a string to parse.
  144.     ) { Parse((const char *)str); }
  145.     /**Print/String output representation formats. */
  146.     enum UrlFormat {
  147.       /// Translate to a string as a full URL
  148.       FullURL,      
  149.       /// Translate to a string as only path
  150.       PathOnly,     
  151.       /// Translate to a string with no scheme or host
  152.       URIOnly,      
  153.       /// Translate to a string with scheme and host/port
  154.       HostPortOnly  
  155.     };
  156.     /**Convert the URL object into its string representation. The parameter
  157.        indicates whether a full or partial representation os to be produced.
  158.        @return
  159.        String representation of the URL.
  160.      */
  161.     PString AsString(
  162.       UrlFormat fmt = FullURL   /// The type of string to be returned.
  163.     ) const;
  164.     /// Type for translation of strings to URL format,
  165.     enum TranslationType {
  166.       /// Translate a username/password field for a URL.
  167.       LoginTranslation,
  168.       /// Translate the path field for a URL.
  169.       PathTranslation,
  170.       /// Translate the query parameters field for a URL.
  171.       QueryTranslation
  172.     };
  173.     /**Translate a string from general form to one that can be included into
  174.        a URL. All reserved characters for the particular field type are
  175.        escaped.
  176.        @return
  177.        String for the URL ready translation.
  178.      */
  179.     static PString TranslateString(
  180.       const PString & str,    /// String to be translated.
  181.       TranslationType type    /// Type of translation.
  182.     );
  183.     /** Split a string in &= form to a dictionary of names and values. */
  184.     static void SplitQueryVars(
  185.       const PString & queryStr,   /// String to split into variables.
  186.       PStringToString & queryVars /// Dictionary of variable names and values.
  187.     );
  188.     /// Get the scheme field of the URL.
  189.     const PCaselessString & GetScheme() const   { return scheme; }
  190.     /// Get the username field of the URL.
  191.     const PString & GetUserName() const         { return username; }
  192.     /// Get the password field of the URL.
  193.     const PString & GetPassword() const         { return password; }
  194.     /// Get the hostname field of the URL.
  195.     const PCaselessString & GetHostName() const { return hostname; }
  196.     /// Get the port field of the URL.
  197.     WORD GetPort() const                        { return port; }
  198.     /// Get the path field of the URL as a string.
  199.     const PString & GetPathStr() const          { return pathStr; }
  200.     /// Get the path field of the URL as a string array.
  201.     const PStringArray & GetPath() const        { return path; }
  202.     /// Get the parameter (;) field of the URL.
  203.     const PString & GetParameters() const       { return parameters; }
  204.     /// Get the fragment (##) field of the URL.
  205.     const PString & GetFragment() const         { return fragment; }
  206.     /// Get the Query (?) field of the URL as a string.
  207.     const PString & GetQuery() const            { return queryStr; }
  208.     /// Get the Query (?) field of the URL as a string dictionary.
  209.     PStringToString GetQueryVars() const        { return queryVars; }
  210.     /// Set the port field in the URL.
  211.     void SetPort(WORD newPort)                  { port = newPort; }
  212.     /**Open the URL in a browser.
  213.        @return
  214.        The browser was successfully opened. This does not mean the URL exists and was
  215.        displayed.
  216.      */
  217.     static BOOL OpenBrowser(
  218.       const PString & url   /// URL to open
  219.     );
  220.   //@}
  221.   protected:
  222.     PCaselessString scheme;
  223.     PString username;
  224.     PString password;
  225.     PCaselessString hostname;
  226.     WORD port;
  227.     PString pathStr;
  228.     PStringArray path;
  229.     PString parameters;
  230.     PString fragment;
  231.     PString queryStr;
  232.     PStringToString queryVars;
  233. };
  234. #endif
  235. // End Of File ///////////////////////////////////////////////////////////////