diff -r c9c2ad51f972 -r ef893827b4d1 vpnengine/vpnconnagt/inc/vpnconnagt.h --- a/vpnengine/vpnconnagt/inc/vpnconnagt.h Thu Jan 07 13:26:15 2010 +0200 +++ b/vpnengine/vpnconnagt/inc/vpnconnagt.h Mon Jan 18 21:14:04 2010 +0200 @@ -12,749 +12,343 @@ * Contributors: * * Description: VPN Connection Agent declaration. - * */ - - - - /** - * @file vpnconnagt.h - - * - - * VPN Connection Agent declaration. - * - + * VPN Connection Agent declaration. + * */ - - - - - #if !defined __VPN_CONN_AGT_H__ - #define __VPN_CONN_AGT_H__ - - // INCLUDES - #include - - #include "eventmediatorapi.h" - - - #include "vpnconnagtprog.h" - #include "vpnconnagtdefs.h" - #include "eventdefssit.h" - #include "log_r6.h" - - // CONSTANTS - const TInt KMajorVerNumber=1; - const TInt KMinorVerNumber=0; - const TInt KBuildVerNumber=0; - - _LIT(KVPNConnAgtName,"vpnconnagt"); - +/** + * A Factory for creating a VPNConnAgent. + */ +class CVPNConnAgtFactory : public CNifAgentFactory + { + /** + @internalComponent + */ + protected: // Methods + /** + * "Installs" this factory to the system. From this Agent point of view + * it doesn't do anything... + */ + void InstallL(); -class CAsyncDisconnecter; + /** + * Creates a new VPN Agent instance. + * @param aName Not used. + * @return Returns the pointer to the agent created if succeed. Otherwise it + * leaves. + */ + CNifAgentBase *NewAgentL(const TDesC& aName); - + /** + * Returns the information defined in TNifAgentInfo. + * @param aInfo The reference to the TNifAgentInfo object to be used to pass + * the needed information. + * @param aIndex Not used. + */ + TInt Info(TNifAgentInfo& aInfo, TInt aIndex) const; + }; /** - - * A Factory for creating a VPNConnAgent. + * Class declaration for VPN connection agent. Each agent reference + * has it's own instance of agent and nif. Nif sends it's name via + * agent reference to agent. This triggers agent to initialize the VPN connection + * through the VPN Manager Server. After VPN tunnel has been created + * agent sends the IP address and the DNS addresses to the nif which + * in turn informs the Nifman and IP stack that the connection has + * been created. + */ +class CVPNConnAgt : public CAgentBase, public MEventObserver + { + /** + @internalComponent + */ + friend class CAsyncDisconnecter; + public: // Methods + /** + * Static constructor. + * @return The return value is the pointer to the CVPNConnAgt + * if it succeed. Otherwise the fuction leaves. + */ + static CVPNConnAgt* NewL(); - */ + /** + * Default C++ destructor. + * Cancels all the Callbacks. + */ + virtual ~CVPNConnAgt(); + + // from CNifAgentBase + /** + * Returns the information defined in TNifAgentInfo. + * @param aInfo A reference to TNifAgentInfo object which is + * used to pass the information to caller of this function. + */ + void Info(TNifAgentInfo& aInfo) const; -class CVPNConnAgtFactory : public CNifAgentFactory + /** + * Starts the connection creation process. + * @param aType Not used. + */ + void Connect(TAgentConnectType aType); + + /** + * Starts the connection by calling Connect(TAgentConnectType aType). + * @param aType Type of the connection e.g. EAgentReconnect. + * @param aOverrideSettings Not used. + */ + void Connect(TAgentConnectType aType, CStoreableOverrideSettings* aOverrideSettings); + + /** + * Starts the cancellation of the connect. + */ + void CancelConnect(); + + /** + * Disconnects an ongoing connection. + * @param aReason Not used. + */ + void Disconnect(TInt aReason); - { + /** + * Called after Connect() in connection creation phase. Connection configuration + * parameters are read and request for the VPNManServer to open the connection + * is done. During the execution of this function VPN Nif is created. + * @param aError Not used. + */ + void ServiceStarted(TInt& aError); - /** + /** + * The addresses got from the VPN Manager Server are send to VPN Nif. + * Nifman is informed with the progress call (with parameter EVPNConnAgtConnected). + * MNifAgentNotify interface's ConnectComplete() is called (this generates the Start() + * call to VPN Nif. + * @param aError Not used. + */ + void ConnectionComplete(TInt aError); + + /** + * Causes the deactivationing/unloading of the VPN Policies. + */ + void DisconnectionComplete(); + + /** + * Not Supported. + * @param aBuffer Not used. + * @return Always returns KErrNotSupported. + */ + TInt GetExcessData(TDes8& aBuffer); - @internalComponent + /** + * Used to deliver the name of the VPN Nif to the VPN Agent. + * @param aEvent If the value of this is ENifToVPNAgentEventTypeIfName the name of the + * VPN Nif is copied from the aInfo parameter. + * @param aInfo TName type pointer containing the name of the VPN NIf (if aEvent value is + * ENifToVPNAgentEventTypeIfName). + * @return Returns KErrNone if the fuction is used to deliver the name of the VPN Nif, + * otherwise it returns KErrNotSupported. + */ + TInt Notification(TNifToAgentEventType aEvent, TAny* aInfo); + + /** + * Passes the last error code to the caller. + * @param aError Reference to the TInt type error code. + */ + void GetLastError(TInt& aError); - */ + /** + * + */ + TBool IsReconnect() const {return (ETrue);}; + + /** + * Not supported. + */ + TInt IncomingConnectionReceived(); + + /** + * Is called when an event comes from real interface via event mediator. + * @param aStatus Error code if the call fails. KErrNone if everything succees. + * @param aType Type pf the event e.g. ESingleInterfaceEvent. + * @param aData Pointer to the TInterfaceNotificationBuf type packaged buffer. Contains + * the status of the real interface. + */ + void EventOccured(TInt aStatus, TEventType aType, TDesC8* aData); protected: // Methods - - /** - - * "Installs" this factory to the system. From this Agent point of view - - * it doesn't do anything... - - */ - - void InstallL(); - - - - /** - - * Creates a new VPN Agent instance. - - * @param aName Not used. - - * @return Returns the pointer to the agent created if succeed. Otherwise it - - * leaves. - - */ - - CNifAgentBase *NewAgentL(const TDesC& aName); - - - - /** - - * Returns the information defined in TNifAgentInfo. - - * @param aInfo The reference to the TNifAgentInfo object to be used to pass - - * the needed information. - - * @param aIndex Not used. - - */ - - TInt Info(TNifAgentInfo& aInfo, TInt aIndex) const; - - }; - - - - - -/** - - * Class declaration for VPN connection agent. Each agent reference - - * has it's own instance of agent and nif. Nif sends it's name via - - * agent reference to agent. This triggers agent to initialize the VPN connection - - * through the VPN Manager Server. After VPN tunnel has been created - - * agent sends the IP address and the DNS addresses to the nif which - - * in turn informs the Nifman and IP stack that the connection has - - * been created. - - */ - -class CVPNConnAgt : public CAgentBase, public MEventObserver - - { - - /** - - @internalComponent - - */ - - friend class CAsyncDisconnecter; - - public: // Methods - - - - /** - - * Static constructor. - - * @return The return value is the pointer to the CVPNConnAgt - - * if it succeed. Otherwise the fuction leaves. - - */ - - static CVPNConnAgt* NewL(); - - - - /** - - * Default C++ destructor. - - * Cancels all the Callbacks. - - */ - - virtual ~CVPNConnAgt(); - - - - // from CNifAgentBase - - /** - - * Returns the information defined in TNifAgentInfo. - - * @param aInfo A reference to TNifAgentInfo object which is - - * used to pass the information to caller of this function. - - */ - - void Info(TNifAgentInfo& aInfo) const; - - - - /** - - * Starts the connection creation process. - - * @param aType Not used. - - */ - - void Connect(TAgentConnectType aType); - - - - /** - - * Starts the connection by calling Connect(TAgentConnectType aType). - - * @param aType Type of the connection e.g. EAgentReconnect. - - * @param aOverrideSettings Not used. - - */ - - void Connect(TAgentConnectType aType, CStoreableOverrideSettings* aOverrideSettings); - - - - /** - - * Starts the cancellation of the connect. - + * Overwrites the default implementation to catch the ip version reading from the + * database. This value is retrieved from the VPN Manager Server. + * @param aField Colum name in the CommDb. Ip version colum name is SERVICE_IF_NETWORKS. + * @param aValue Value to be returned. In SERVICE_IF_NETWORKS case it's ip or ip6. + * @param aMessage Message to validate capabilities + * @return Returns KErrNone if the function succeed. Otherwise it returns system wide + * error code. */ - - void CancelConnect(); - - - - /** - - * Disconnects an ongoing connection. - - * @param aReason Not used. - - */ - - void Disconnect(TInt aReason); - - - - /** - - * Called after Connect() in connection creation phase. Connection configuration - - * parameters are read and request for the VPNManServer to open the connection - - * is done. During the execution of this function VPN Nif is created. - - * @param aError Not used. - - */ - - void ServiceStarted(TInt& aError); - - - - /** - - * The addresses got from the VPN Manager Server are send to VPN Nif. - - * Nifman is informed with the progress call (with parameter EVPNConnAgtConnected). - - * MNifAgentNotify interface's ConnectComplete() is called (this generates the Start() - - * call to VPN Nif. - - * @param aError Not used. - - */ - - void ConnectionComplete(TInt aError); - - - - /** - - * Causes the deactivationing/unloading of the VPN Policies. - - */ - - void DisconnectionComplete(); - - - - /** - - * Not Supported. - - * @param aBuffer Not used. - - * @return Always returns KErrNotSupported. - - */ - - TInt GetExcessData(TDes8& aBuffer); - - - - /** - - * Used to deliver the name of the VPN Nif to the VPN Agent. - - * @param aEvent If the value of this is ENifToVPNAgentEventTypeIfName the name of the - - * VPN Nif is copied from the aInfo parameter. - - * @param aInfo TName type pointer containing the name of the VPN NIf (if aEvent value is - - * ENifToVPNAgentEventTypeIfName). - - * @return Returns KErrNone if the fuction is used to deliver the name of the VPN Nif, - - * otherwise it returns KErrNotSupported. - - */ - - TInt Notification(TNifToAgentEventType aEvent, TAny* aInfo); - - - - /** - - * Passes the last error code to the caller. - - * @param aError Reference to the TInt type error code. - - */ - - void GetLastError(TInt& aError); - - - - /** - - * - - */ - - TBool IsReconnect() const {return (ETrue);}; - - - - /** - - * Not supported. - - */ - - TInt IncomingConnectionReceived(); - - - - /** - - * Is called when an event comes from real interface via event mediator. - - * @param aStatus Error code if the call fails. KErrNone if everything succees. - - * @param aType Type pf the event e.g. ESingleInterfaceEvent. - - * @param aData Pointer to the TInterfaceNotificationBuf type packaged buffer. Contains - - * the status of the real interface. - - */ - - void EventOccured(TInt aStatus, TEventType aType, TDesC8* aData); - - - - protected: // Methods - - - - /** - - * Overwrites the default implementation to catch the ip version reading from the - - * database. This value is retrieved from the VPN Manager Server. - - * @param aField Colum name in the CommDb. Ip version colum name is SERVICE_IF_NETWORKS. - - * @param aValue Value to be returned. In SERVICE_IF_NETWORKS case it's ip or ip6. - - * @param aMessage Message to validate capabilities - - * @return Returns KErrNone if the function succeed. Otherwise it returns system wide - - * error code. - - */ - TInt DoReadDes(const TDesC& aField, TDes16& aValue, const RMessagePtr2* aMessage ); - - - - /** - * Returns the pointer to the parameter object defined in vpnconnagtdefs.h. - * @return The pointer to the connection parameter object. - */ - TVPNParameters* VPNParameters() { return &iVPNParameters; }; - - - /** - - * Returns the pointer to the name of the VPN Nif sent by the nif itself. - - * @return The pointer to the TName type object containing the name of the - - * VPN Nif. - - */ - - TName* VPNNifName(void){ return iVPNParameters.GetVPNNifName();}; - - - /** - - * Returns the pointer to the interface from the Agent to Nifman. This interface - - * is used to e.g. send progress notifications from Agent to Nifman. - - * @return The pointer to the interface from the Agent to Nifman. - + * Returns the pointer to the name of the VPN Nif sent by the nif itself. + * @return The pointer to the TName type object containing the name of the + * VPN Nif. */ - - MNifAgentNotify* Notify() { return iNotify; }; - - - - /** - - * After deactivationing/unloading of the VPN Policies Nifman is informed with the - - * progress call (with EVPNConnAgtDisconnected). - - * MNifAgentNotify interface's DisconnectComplete() is called (this generates the deletion - - * of the VPN Nif and at the end deletion of the agent. - - * - - */ - - void VPNDisconnCompleted(TInt aError); - - - - private: // Methods - - - - /** - - * Second phase constructor. - - */ - - void ConstructL(); - - + TName* VPNNifName(void){ return iVPNParameters.GetVPNNifName();}; /** - - * Default constructor. - - */ - - CVPNConnAgt(); - - - - /** - - * CallBack to start the service (means the connection creation). - - * @param aThisPtr Pointer to the CVPNConnAgt type object. - - * @return Always returns KErrNone. - + * Returns the pointer to the interface from the Agent to Nifman. This interface + * is used to e.g. send progress notifications from Agent to Nifman. + * @return The pointer to the interface from the Agent to Nifman. */ - - static TInt ServiceStartedCb(TAny* aThisPtr); - - - + MNifAgentNotify* Notify() { return iNotify; }; + /** - - * CallBack to complete the connection. + * After deactivationing/unloading of the VPN Policies Nifman is informed with the + * progress call (with EVPNConnAgtDisconnected). + * MNifAgentNotify interface's DisconnectComplete() is called (this generates the deletion + * of the VPN Nif and at the end deletion of the agent. + * + */ + void VPNDisconnCompleted(TInt aError); - * @param aThisPtr Pointer to the CVPNConnAgt type object. - - * @return Always returns KErrNone. - + private: // Methods + /** + * Second phase constructor. */ - - static TInt ConnectCompleteCb(TAny* aThisPtr); - - + void ConstructL(); /** - - * CallBack to disconnect. + * Default constructor. + */ + CVPNConnAgt(); + /** + * CallBack to start the service (means the connection creation). * @param aThisPtr Pointer to the CVPNConnAgt type object. - * @return Always returns KErrNone. - */ - - static TInt DisconnectCompleteCb(TAny* aThisPtr); - - + static TInt ServiceStartedCb(TAny* aThisPtr); /** - - * Reads needed configuration settings from the CommDb database. - + * CallBack to complete the connection. + * @param aThisPtr Pointer to the CVPNConnAgt type object. + * @return Always returns KErrNone. */ - - void ReadConfigurationL(); - - + static TInt ConnectCompleteCb(TAny* aThisPtr); /** - - * Starts the listening of real interface events. - + * CallBack to disconnect. + * @param aThisPtr Pointer to the CVPNConnAgt type object. + * @return Always returns KErrNone. */ - - void ListenRealIAP(); - - + static TInt DisconnectCompleteCb(TAny* aThisPtr); /** - - * Starts the listening of virtual nif address change event. - + * Reads needed configuration settings from the CommDb database. */ - - void ListenAddressChange(); - - + void ReadConfigurationL(); /** - - * Cancels the listening of the real interface events and the - - * listening of virtual nif address change event. - + * Starts the listening of real interface events. */ + void ListenRealIAP(); - void CancelListeners(); - - - - - - private: - - + /** + * Starts the listening of virtual nif address change event. + */ + void ListenAddressChange(); /** - - * Defines the internal states. - + * Cancels the listening of the real interface events and the + * listening of virtual nif address change event. */ - - enum TRequestState - - { - - EGettingProtocolVersion, - - EConnecting, - - EConnected, + void CancelListeners(); + private: + /** + * Defines the internal states. + */ + enum TRequestState + { + EGettingProtocolVersion, + EConnecting, + EConnected, EClosingConnection, - EConnectionClosed, - EStartingRealIf, - EListeningEvents, - EIdle - }; - - - - /** CallBack object to implement ServiceStarted asynchronously. */ - CAsyncCallBack iServiceStartedCallback; - - /** CallBack object to implement ConnectCompleted asynchronously. */ - CAsyncCallBack iConnectCompleteCallback; - - /** CallBack object to implement Disconnect asynchronously. */ - CAsyncCallBack iDisconnectCallback; - - /** Defines wether Agent is connected (Connection completed successfully). */ - TBool iConnected; - - /** Connection configuration parameter member object. See vpnconnagtdefs.h. */ - TVPNParameters iVPNParameters; - - /** An integer to keep last error code in memory. */ - TInt iLastErrorCode; - - /** An API to EventMediator */ - REventMediator iEventMediator; - - /** Tells if vpnconnagt must close tunnelnif */ - TBool iEventActivatedClose; - - /** This defines the shutdown type to the kmd. Value 0 is normal and 1 is to - force it to shutdown without trying to send any packets anymore */ - TDeactivateType iDisconnectType; - - /* State of the agent object */ - TRequestState iState; - - /** Boolean to define wether disconnecting operation is ongoing */ - TBool iDisconnecting; - - /** PckgBufs used when creating connection through eventmediator api */ - TPckgBuf iProtocolVersionDes; - TPckgBuf iStartVpnConnDes; - TPckgBuf iCloseVpnConnDes; - TPckgBuf iObserveRealIapConnDes; - - - - /** Poiter to an object which confirms disconnect operation to Nifman */ - - CAsyncDisconnecter* iAD; - }; - - -class CAsyncDisconnecter : public CAsyncOneShot - - { - - /** - - @internalComponent - - */ - - public: - - static CAsyncDisconnecter* NewL(CVPNConnAgt* aAgent); - - void ConfirmDisconnect(); - - - - private: - - CAsyncDisconnecter(CVPNConnAgt* aAgent); - - void RunL(); // From CAsyncOneShot - - - - private: - - CVPNConnAgt* iAgent; - - }; - - - #endif // VPN_CONN_AGT_H