github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/include/apr_uri.h (about)

     1  /* Licensed to the Apache Software Foundation (ASF) under one or more
     2   * contributor license agreements.  See the NOTICE file distributed with
     3   * this work for additional information regarding copyright ownership.
     4   * The ASF licenses this file to You under the Apache License, Version 2.0
     5   * (the "License"); you may not use this file except in compliance with
     6   * the License.  You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  /*
    18   * apr_uri.h: External Interface of apr_uri.c
    19   */
    20  
    21  /**
    22   * @file apr_uri.h
    23   * @brief APR-UTIL URI Routines
    24   */
    25  
    26  #ifndef APR_URI_H
    27  #define APR_URI_H
    28  
    29  #include "apu.h"
    30  
    31  #include "apr_network_io.h"
    32  
    33  #ifdef __cplusplus
    34  extern "C" {
    35  #endif
    36  
    37  /**
    38   * @defgroup APR_Util_URI URI
    39   * @ingroup APR_Util
    40   * @{
    41   */
    42  
    43  #define APR_URI_FTP_DEFAULT_PORT         21 /**< default FTP port */
    44  #define APR_URI_SSH_DEFAULT_PORT         22 /**< default SSH port */
    45  #define APR_URI_TELNET_DEFAULT_PORT      23 /**< default telnet port */
    46  #define APR_URI_GOPHER_DEFAULT_PORT      70 /**< default Gopher port */
    47  #define APR_URI_HTTP_DEFAULT_PORT        80 /**< default HTTP port */
    48  #define APR_URI_POP_DEFAULT_PORT        110 /**< default POP port */
    49  #define APR_URI_NNTP_DEFAULT_PORT       119 /**< default NNTP port */
    50  #define APR_URI_IMAP_DEFAULT_PORT       143 /**< default IMAP port */
    51  #define APR_URI_PROSPERO_DEFAULT_PORT   191 /**< default Prospero port */
    52  #define APR_URI_WAIS_DEFAULT_PORT       210 /**< default WAIS port */
    53  #define APR_URI_LDAP_DEFAULT_PORT       389 /**< default LDAP port */
    54  #define APR_URI_HTTPS_DEFAULT_PORT      443 /**< default HTTPS port */
    55  #define APR_URI_RTSP_DEFAULT_PORT       554 /**< default RTSP port */
    56  #define APR_URI_SNEWS_DEFAULT_PORT      563 /**< default SNEWS port */
    57  #define APR_URI_ACAP_DEFAULT_PORT       674 /**< default ACAP port */
    58  #define APR_URI_NFS_DEFAULT_PORT       2049 /**< default NFS port */
    59  #define APR_URI_TIP_DEFAULT_PORT       3372 /**< default TIP port */
    60  #define APR_URI_SIP_DEFAULT_PORT       5060 /**< default SIP port */
    61  
    62  /** Flags passed to unparse_uri_components(): */
    63  /** suppress "scheme://user\@site:port" */
    64  #define APR_URI_UNP_OMITSITEPART    (1U<<0)
    65  /** Just omit user */
    66  #define APR_URI_UNP_OMITUSER        (1U<<1)
    67  /** Just omit password */
    68  #define APR_URI_UNP_OMITPASSWORD    (1U<<2)
    69  /** omit "user:password\@" part */
    70  #define APR_URI_UNP_OMITUSERINFO    (APR_URI_UNP_OMITUSER | \
    71                                       APR_URI_UNP_OMITPASSWORD)
    72  /** Show plain text password (default: show XXXXXXXX) */
    73  #define APR_URI_UNP_REVEALPASSWORD  (1U<<3)
    74  /** Show "scheme://user\@site:port" only */
    75  #define APR_URI_UNP_OMITPATHINFO    (1U<<4)
    76  /** Omit the "?queryarg" from the path */
    77  #define APR_URI_UNP_OMITQUERY       (1U<<5)
    78  
    79  /** @see apr_uri_t */
    80  typedef struct apr_uri_t apr_uri_t;
    81  
    82  /**
    83   * A structure to encompass all of the fields in a uri
    84   */
    85  struct apr_uri_t {
    86      /** scheme ("http"/"ftp"/...) */
    87      char *scheme;
    88      /** combined [user[:password]\@]host[:port] */
    89      char *hostinfo;
    90      /** user name, as in http://user:passwd\@host:port/ */
    91      char *user;
    92      /** password, as in http://user:passwd\@host:port/ */
    93      char *password;
    94      /** hostname from URI (or from Host: header) */
    95      char *hostname;
    96      /** port string (integer representation is in "port") */
    97      char *port_str;
    98      /** the request path (or NULL if only scheme://host was given) */
    99      char *path;
   100      /** Everything after a '?' in the path, if present */
   101      char *query;
   102      /** Trailing "#fragment" string, if present */
   103      char *fragment;
   104  
   105      /** structure returned from gethostbyname() */
   106      struct hostent *hostent;
   107  
   108      /** The port number, numeric, valid only if port_str != NULL */
   109      apr_port_t port;
   110      
   111      /** has the structure been initialized */
   112      unsigned is_initialized:1;
   113  
   114      /** has the DNS been looked up yet */
   115      unsigned dns_looked_up:1;
   116      /** has the dns been resolved yet */
   117      unsigned dns_resolved:1;
   118  };
   119  
   120  /* apr_uri.c */
   121  /**
   122   * Return the default port for a given scheme.  The schemes recognized are
   123   * http, ftp, https, gopher, wais, nntp, snews, and prospero
   124   * @param scheme_str The string that contains the current scheme
   125   * @return The default port for this scheme
   126   */ 
   127  APU_DECLARE(apr_port_t) apr_uri_port_of_scheme(const char *scheme_str);
   128  
   129  /**
   130   * Unparse a apr_uri_t structure to an URI string.  Optionally 
   131   * suppress the password for security reasons.
   132   * @param p The pool to allocate out of
   133   * @param uptr All of the parts of the uri
   134   * @param flags How to unparse the uri.  One of:
   135   * <PRE>
   136   *    APR_URI_UNP_OMITSITEPART        Suppress "scheme://user\@site:port" 
   137   *    APR_URI_UNP_OMITUSER            Just omit user 
   138   *    APR_URI_UNP_OMITPASSWORD        Just omit password 
   139   *    APR_URI_UNP_OMITUSERINFO        Omit "user:password\@" part
   140   *    APR_URI_UNP_REVEALPASSWORD      Show plain text password (default: show XXXXXXXX)
   141   *    APR_URI_UNP_OMITPATHINFO        Show "scheme://user\@site:port" only 
   142   *    APR_URI_UNP_OMITQUERY           Omit "?queryarg" or "#fragment" 
   143   * </PRE>
   144   * @return The uri as a string
   145   */
   146  APU_DECLARE(char *) apr_uri_unparse(apr_pool_t *p, 
   147                                      const apr_uri_t *uptr,
   148                                      unsigned flags);
   149  
   150  /**
   151   * Parse a given URI, fill in all supplied fields of a apr_uri_t
   152   * structure. This eliminates the necessity of extracting host, port,
   153   * path, query info repeatedly in the modules.
   154   * @param p The pool to allocate out of
   155   * @param uri The uri to parse
   156   * @param uptr The apr_uri_t to fill out
   157   * @return APR_SUCCESS for success or error code
   158   */
   159  APU_DECLARE(apr_status_t) apr_uri_parse(apr_pool_t *p, const char *uri, 
   160                                          apr_uri_t *uptr);
   161  
   162  /**
   163   * Special case for CONNECT parsing: it comes with the hostinfo part only
   164   * @param p The pool to allocate out of
   165   * @param hostinfo The hostinfo string to parse
   166   * @param uptr The apr_uri_t to fill out
   167   * @return APR_SUCCESS for success or error code
   168   */
   169  APU_DECLARE(apr_status_t) apr_uri_parse_hostinfo(apr_pool_t *p, 
   170                                                   const char *hostinfo, 
   171                                                   apr_uri_t *uptr);
   172  
   173  /** @} */
   174  #ifdef __cplusplus
   175  }
   176  #endif
   177  
   178  #endif /* APR_URI_H */