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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * remconn.h
  3.  *
  4.  * Remote networking connection 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: remconn.h,v $
  30.  * Revision 1.13  1999/03/09 02:59:50  robertj
  31.  * Changed comments to doc++ compatible documentation.
  32.  *
  33.  * Revision 1.12  1999/02/16 08:11:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.11  1998/09/23 06:21:17  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.10  1998/07/24 06:58:27  robertj
  40.  * Added ability to get IP number of RAS connection.
  41.  *
  42.  * Revision 1.9  1998/02/03 06:28:46  robertj
  43.  * Added more error codes.
  44.  *
  45.  * Revision 1.8  1998/01/26 00:34:51  robertj
  46.  * Added parameter to PRemoteConnection to open only if already connected.
  47.  * Added function to PRemoteConnection to get at OS error code.
  48.  *
  49.  * Revision 1.7  1997/04/01 06:00:05  robertj
  50.  * Added Remove Configuration.
  51.  *
  52.  * Revision 1.6  1997/01/12 04:15:11  robertj
  53.  * Added ability to add/change new connections.
  54.  *
  55.  * Revision 1.5  1996/11/04 03:40:43  robertj
  56.  * Added more debugging for remote drop outs.
  57.  *
  58.  * Revision 1.4  1996/08/11 07:03:45  robertj
  59.  * Changed remote connection to late bind DLL.
  60.  *
  61.  * Revision 1.3  1996/04/23 11:33:04  robertj
  62.  * Added username and password.
  63.  *
  64.  * Revision 1.2  1996/03/02 03:09:48  robertj
  65.  * Added function to get all possible remote access connection names.
  66.  *
  67.  * Revision 1.1  1995/12/10 13:04:46  robertj
  68.  * Initial revision
  69.  *
  70.  */
  71. #define _PREMOTECONNECTION
  72. #ifdef __GNUC__
  73. #pragma interface
  74. #endif
  75. /** Remote Access Connection class.
  76. */
  77. class PRemoteConnection : public PObject
  78. {
  79.   PCLASSINFO(PRemoteConnection, PObject);
  80.   public:
  81.   /**@name Construction */
  82.   //@{
  83.     /// Create a new remote connection.
  84.     PRemoteConnection();
  85.     /**Create a new remote connection.
  86.        This will initiate the connection using the specified settings.
  87.      */
  88.     PRemoteConnection(
  89.       const PString & name  /// Name of RAS configuration.
  90.     );
  91.     /// Disconnect remote connection.
  92.     ~PRemoteConnection();
  93.   //@}
  94.   /**@name Overrides from class PObject */
  95.   //@{
  96.     /** Compare two connections.
  97.       @return EqualTo of same RAS connectionconfiguration.
  98.      */
  99.     virtual Comparison Compare(
  100.       const PObject & obj     /// Another connection instance.
  101.     ) const;
  102.     /** Get has value for the connection
  103.         @return Hash value of the connection name string.
  104.       */
  105.     virtual PINDEX HashFunction() const;
  106.   //@}
  107.   /**@name Dial/Hangup functions */
  108.   //@{
  109.     /** Open the remote connection.
  110.      */
  111.     BOOL Open(
  112.       BOOL existing = FALSE  /// Flag for open only if already connected.
  113.     );
  114.     /** Open the remote connection.
  115.      */
  116.     BOOL Open(
  117.       const PString & name,   /// RAS name of of connection to open.
  118.       BOOL existing = FALSE   /// Flag for open only if already connected.
  119.     );
  120.     /** Open the remote connection.
  121.      */
  122.     BOOL Open(
  123.       const PString & name,     /// RAS name of of connection to open.
  124.       const PString & username, /// Username for remote log in.
  125.       const PString & password, /// password for remote log in.
  126.       BOOL existing = FALSE     /// Flag for open only if already connected.
  127.     );
  128.     /** Close the remote connection.
  129.         This will hang up/dosconnect the connection, net access will no longer
  130.         be available to this site.
  131.       */
  132.     void Close();
  133.   //@}
  134.   /**@name Error/Status functions */
  135.   //@{
  136.     /// Status codes for remote connection.
  137.     enum Status {
  138.       /// Connection has not been made and no attempt is being made.
  139.       Idle,
  140.       /// Connection is completed and active.
  141.       Connected,
  142.       /// Connection is in progress.
  143.       InProgress,
  144.       /// Connection failed due to the line being busy.
  145.       LineBusy,
  146.       /// Connection failed due to the line havin no dial tone.
  147.       NoDialTone,
  148.       /// Connection failed due to the remote not answering.
  149.       NoAnswer,
  150.       /// Connection failed due to the port being in use.
  151.       PortInUse,
  152.       /// Connection failed due to the RAS setting name/number being incorrect.
  153.       NoNameOrNumber,
  154.       /// Connection failed due to insufficient privilege.
  155.       AccessDenied,
  156.       /// Connection failed due to a hardware failure.
  157.       HardwareFailure,
  158.       /// Connection failed due to a general failure.
  159.       GeneralFailure,
  160.       /// Connection was lost after successful establishment.
  161.       ConnectionLost,
  162.       /// The Remote Access Operating System support is not installed.
  163.       NotInstalled,
  164.       NumStatuses
  165.     };
  166.     /**Get the current status of the RAS connection.
  167.        @return
  168.        Status code.
  169.      */
  170.     Status GetStatus() const;
  171.     /**Get the error code for the last operation.
  172.        @return
  173.        Operating system error code.
  174.      */
  175.     DWORD GetErrorCode() const { return osError; }
  176.   //@}
  177.   /**@name Information functions */
  178.   //@{
  179.     /**Get the name of the RAS connection.
  180.        @return
  181.        String for IP address, or empty string if none.
  182.      */
  183.     const PString & GetName() const { return remoteName; }
  184.     /**Get the IP address in dotted decimal form for the RAS connection.
  185.        @return
  186.        String for IP address, or empty string if none.
  187.      */
  188.     PString GetAddress();
  189.     /**Get an array of names for all of the available remote connections on
  190.        this system.
  191.        @return
  192.        Array of strings for remote connection names.
  193.      */
  194.     static PStringArray GetAvailableNames();
  195.   //@}
  196.   /**@name Configuration functions */
  197.   //@{
  198.     /// Structure for a RAS configuration.
  199.     struct Configuration {
  200.       /// Device name for connection eg /dev/modem
  201.       PString device;
  202.       /// Telephone number to call to make the connection.
  203.       PString phoneNumber;
  204.       /// IP address of local machine after connection is made.
  205.       PString ipAddress;
  206.       /// DNS host on remote site.
  207.       PString dnsAddress;
  208.       /// Script name for doing remote log in.
  209.       PString script;
  210.       /// Sub-entry number when Multi-link PPP is used.
  211.       PINDEX  subEntries;
  212.       /// Always establish maximum bandwidth when Multi-link PPP is used.
  213.       BOOL    dialAllSubEntries;
  214.     };
  215.     /**Get the configuration of the specified remote access connection.
  216.        @return
  217.        #Connected# if the configuration information was obtained,
  218.        #NoNameOrNumber# if the particular RAS name does not exist,
  219.        #NotInstalled# if there is no RAS support in the operating system,
  220.        #GeneralFailure# on any other error.
  221.      */
  222.     Status GetConfiguration(
  223.       Configuration & config  /// Configuration of remote connection
  224.     );
  225.     /**Get the configuration of the specified remote access connection.
  226.        @return
  227.        #Connected# if the configuration information was obtained,
  228.        #NoNameOrNumber# if the particular RAS name does not exist,
  229.        #NotInstalled# if there is no RAS support in the operating system,
  230.        #GeneralFailure# on any other error.
  231.      */
  232.     static Status GetConfiguration(
  233.       const PString & name,   /// Remote connection name to get configuration
  234.       Configuration & config  // Configuration of remote connection
  235.     );
  236.     /**Set the configuration of the specified remote access connection.
  237.        @return
  238.        #Connected# if the configuration information was set,
  239.        #NoNameOrNumber# if the particular RAS name does not exist,
  240.        #NotInstalled# if there is no RAS support in the operating system,
  241.        #GeneralFailure# on any other error.
  242.      */
  243.     Status SetConfiguration(
  244.       const Configuration & config,  /// Configuration of remote connection
  245.       BOOL create = FALSE            /// Flag to create connection if not present
  246.     );
  247.     /**Set the configuration of the specified remote access connection.
  248.        @return
  249.        #Connected# if the configuration information was set,
  250.        #NoNameOrNumber# if the particular RAS name does not exist,
  251.        #NotInstalled# if there is no RAS support in the operating system,
  252.        #GeneralFailure# on any other error.
  253.      */
  254.     static Status SetConfiguration(
  255.       const PString & name,          /// Remote connection name to configure
  256.       const Configuration & config,  /// Configuration of remote connection
  257.       BOOL create = FALSE            /// Flag to create connection if not present
  258.     );
  259.     /**Remove the specified remote access connection.
  260.        @return
  261.        #Connected# if the configuration information was removed,
  262.        #NoNameOrNumber# if the particular RAS name does not exist,
  263.        #NotInstalled# if there is no RAS support in the operating system,
  264.        #GeneralFailure# on any other error.
  265.      */
  266.     static Status RemoveConfiguration(
  267.       const PString & name          /// Remote connection name to configure
  268.     );
  269.   //@}
  270.     
  271.   protected:
  272.     PString remoteName;
  273.     PString userName;
  274.     PString password;
  275.     DWORD osError;
  276.   private:
  277.     PRemoteConnection(const PRemoteConnection &) { }
  278.     void operator=(const PRemoteConnection &) { }
  279.     void Construct();
  280. #ifdef DOC_PLUS_PLUS
  281. };
  282. #endif
  283. // Class declaration continued in platform specific header file ///////////////