vpnengine/ikev1lib/inc/ikev1pluginsession.h
changeset 0 33413c0669b9
equal deleted inserted replaced
-1:000000000000 0:33413c0669b9
       
     1 /*
       
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  IKEv1 plugin session
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef C_IKEV1PLUGINSESSION_H
       
    20 #define C_IKEV1PLUGINSESSION_H
       
    21 
       
    22 #include <in_sock.h>
       
    23 
       
    24 #include "vpnmandefs.h"
       
    25 #include "ikemsgheader.h"
       
    26 #include "ikepluginsessionif.h"
       
    27 #include "ikev1receiver.h"
       
    28 #include "ikev1sender.h"
       
    29 #include "ikesendqueueitem.h"
       
    30 
       
    31 // FORWARD DECLARATIONS
       
    32 class CIkev1Plugin;
       
    33 class CIkev1Dialog;
       
    34 class CIkev1Negotiation;
       
    35 class CIkev1PluginSession;
       
    36 class CInternalAddress;
       
    37 class TDeleteISAKMP;
       
    38 class CAuthDialogInfo;
       
    39 class CIkev1SA;
       
    40 class TIkev1SAData;
       
    41 class CSARekeyInfo;
       
    42 class TIpsecSPI;
       
    43 class MIkeDebug;
       
    44 class ThdrISAKMP;
       
    45 class TPfkeyMessage;
       
    46 class TIpsecSAData;
       
    47 class MKmdEventLoggerIf;
       
    48 class CIpsecSaSpecList;
       
    49 class CPFKeySocketIf;
       
    50 
       
    51 NONSHARABLE_CLASS(CIkev1PluginSession) : public CBase,
       
    52                                          public MIkePluginSessionIf,
       
    53                                          public MIkev1ReceiverCallback,
       
    54                                          public MIkev1SenderCallback
       
    55                                          
       
    56     {
       
    57 public:
       
    58     /**
       
    59      * Two-phased constructor.
       
    60      * @param aVpnIapId VPN IAP id
       
    61      * @param aVpnNetId VPN NET id
       
    62      * @param aVpnInterfaceIndex VPN interface index
       
    63      * @param aDataInterface Data interface
       
    64      * @param aPlugin IKE plugin
       
    65      * @param aPFKeySocketIf PF key socket interface
       
    66      * @param aDebug Debug trace interface
       
    67      */
       
    68     static CIkev1PluginSession* NewL( TUint32 aVpnIapId,
       
    69                                       TUint32 aVpnNetId,
       
    70                                       TUint32 aVpnInterfaceIndex,
       
    71                                       MIkeDataInterface& aDataInterface,
       
    72                                       CIkev1Plugin& aPlugin,
       
    73                                       CPFKeySocketIf& aPFKeySocketIf,
       
    74                                       MIkeDebug& aDebug );
       
    75     
       
    76     /**
       
    77      * Destructor.
       
    78      */
       
    79     ~CIkev1PluginSession();
       
    80             
       
    81     /**
       
    82      * Handles IKE SA deletion request.
       
    83      * @param aIkev1SaData IKEv1 SA data
       
    84      * @param aSilentClose Silent close
       
    85      */
       
    86     TBool DeleteIkeSA( TIkev1SAData* aIkev1SAdata,
       
    87                        TBool aSilentClose = EFalse );
       
    88         
       
    89     /**
       
    90      * Handles IKE SA rekeying request.
       
    91      * @param aIkev1SaData IKEv1 SA data
       
    92      * @param aSaRekeyInfo Rekey info
       
    93      */
       
    94     void RekeyIkeSAL( TIkev1SAData* aIkev1SaData,
       
    95                       CSARekeyInfo* aSaRekeyInfo );
       
    96         
       
    97     /**
       
    98      * Handles IKE SA keepalive request.
       
    99      * @param aIkev1SaData IKEv1 SA data
       
   100      */
       
   101     void KeepAliveIkeSAL( TIkev1SAData* aIkev1SaData );
       
   102     
       
   103     /**
       
   104      * Creates IKE SA.
       
   105      * @param aIkev1SaData IKEv1 SA data
       
   106      * @param aSaRekeyInfo Rekey info
       
   107      */
       
   108     void CreateIkev1SAL( TIkev1SAData& aIkev1SaData,
       
   109                          CSARekeyInfo* aSaRekeyInfo );                
       
   110 
       
   111     /**
       
   112      * Updates IKE SA.
       
   113      * @param aSaId SA id
       
   114      * @param aExpired Expired
       
   115      * @param aIkev1SaData IKEv1 SA data
       
   116      */
       
   117     void UpdateIkev1SAL( TUint32 aSaId,
       
   118                          TBool aExpired,
       
   119                          TIkev1SAData* aIkev1SaData = NULL );
       
   120     
       
   121     /**
       
   122      * Expires IKE SA.
       
   123      * @param aSaId SA id
       
   124      */
       
   125     void ExpireIkev1SA( TUint32 aSaId );         
       
   126     
       
   127     /**
       
   128      * Removes IKE SA.
       
   129      * @param aIkev1Sa IKE SA
       
   130      * @param aStatus Error status
       
   131      */
       
   132     void RemoveIkeSA( CIkev1SA* aIkev1Sa,
       
   133                       TInt aStatus );    
       
   134     
       
   135 // IKE SA find methods
       
   136     
       
   137     CIkev1SA* FindIkev1SA();
       
   138     CIkev1SA* FindIkev1SA( const TCookie& aCookie_I,
       
   139                            const TCookie& aCookie_R );
       
   140     CIkev1SA* FindIkev1SAWithId( TUint32 aSaId );
       
   141     CIkev1SA* FindIkev1SA( const TInetAddr& aAddr );
       
   142     CIkev1SA* FindIkev1SA( const TInetAddr& aAddr,
       
   143                            TUint32 aInboundSpi );
       
   144     
       
   145     TIkev1SAData* FindIkev1SAData();
       
   146     TIkev1SAData* FindIkev1SAData( const TCookie& aCookie_I,
       
   147                                    const TCookie& aCookie_R );
       
   148     TIkev1SAData* FindIkev1SAData( TUint32 aSaId );
       
   149     TIkev1SAData* FindIkev1SAData( const TInetAddr& aAddr,
       
   150                                    TUint32 aInboundSpi );
       
   151     TIkev1SAData* FindIkev1SADataWithAddr( const TInetAddr& aAddr );
       
   152 
       
   153     /**
       
   154      * Handles IPsec SA deletion request.
       
   155      * @param aIkev1SaData IKEv1 SA data
       
   156      * @param aIpsecSpi IPsec SPI
       
   157      */
       
   158     void DeleteIpsecSAL( TIkev1SAData* aIkev1SaData,
       
   159                          TIpsecSPI* aIpsecSpi );
       
   160     
       
   161     /**
       
   162      * Deletes IPsec SAs.
       
   163      * @param aSaId SA id
       
   164      */
       
   165     void DeleteIpsecSAs( TUint32 aSAId );
       
   166     
       
   167     /**
       
   168      * Deletes IPsec SPI.
       
   169      * @param aSaId SA id
       
   170      * @param aSpi SPI
       
   171      * @param aInbound Inbound
       
   172      */
       
   173     TBool DeleteIpsecSpi( TUint32 aSaId,
       
   174                           TUint32 aSpi,
       
   175                           TBool aInbound = EFalse );
       
   176         
       
   177     /**
       
   178      * Adds IPsec SPI to IKE SA.
       
   179      * @param aSaId SA id
       
   180      * @param aIpsecSpi IPsec SPI
       
   181      */
       
   182     void AddIpsecSPIToSAL( TUint32 aSaId,
       
   183                            TIpsecSPI& aIpsecSpi );
       
   184 
       
   185     /**
       
   186      * Returns dialog anchor.
       
   187      */
       
   188     CIkev1Dialog** DialogAnchor();
       
   189     
       
   190     /**
       
   191      * Returns debug trace interface.
       
   192      */
       
   193     MIkeDebug& Debug();
       
   194     
       
   195     /**
       
   196      * Gets SA id.
       
   197      */
       
   198     TUint32 GetSAId();     
       
   199           
       
   200     /**
       
   201      * Deletes ISAKMP SAs.
       
   202      * @param aDeletePayload Delete payload which identifies ISAKMP/IKE SA.
       
   203      * @param aInfoNegotiation Negotiation object used by CIkev1InfoNegotiation
       
   204      *                         object.
       
   205      */
       
   206     void DeleteISAKMPSAsL( TDeleteISAKMP* aDeletePayload,
       
   207                            const CIkev1Negotiation& aInfoNegotiation );
       
   208     
       
   209     /**
       
   210      * Requests sending of IKE message.
       
   211      * @param aIkeMsg IKE message
       
   212      * @param aDestAddr Destination IP address/port
       
   213      * @param aUseNatPort NAT used or not
       
   214      */
       
   215     void SendIkeMsgL( const TDesC8& aIkeMsg,
       
   216                       TInetAddr& aDestAddr,
       
   217                       TBool aUseNatPort );
       
   218 
       
   219     /**
       
   220      * Gets local IP address.
       
   221      * @param aAddr Local IP address (returned)
       
   222      * @return Error value
       
   223      */
       
   224     TInt GetLocalAddress( TInetAddr& aAddr );
       
   225             
       
   226     /**
       
   227      * Sends NAT keep-alive packet.
       
   228      * @param aDestAddr Destination IP address/port
       
   229      * @param Keep-alive data
       
   230      * @param aDscp DSCP value
       
   231      */
       
   232     void SendNatKeepAliveL( TInetAddr& aDestAddr,
       
   233                             const TDesC8& aData,
       
   234                             TUint8 aDscp );
       
   235     
       
   236     /**
       
   237      * Sends Nokia NAT keep-alive packet.
       
   238      * @param aDestAddr Destination IP address/port
       
   239      * @param Keep-alive data
       
   240      * @param aDscp DSCP value
       
   241      */
       
   242     void SendNokiaNatKeepAliveL( TInetAddr& aDestAddr,
       
   243                                  const TDesC8& aData,
       
   244                                  TUint8 aDscp );        
       
   245             
       
   246     /**
       
   247      * Handles completion of IKE SA establishment.
       
   248      * @param aStatus Completion status
       
   249      * @param aInternalAddress Internal address. Ownership transferred.
       
   250      */
       
   251     void IkeSaCompleted( TInt aStatus, 
       
   252                          CInternalAddress* aInternalAddress = NULL );
       
   253     
       
   254     /**
       
   255      * Deletes negotiation object.
       
   256      * @param aNegotiation Negotiation
       
   257      */
       
   258     void DeleteNegotiation( CIkev1Negotiation* aNegotiation );
       
   259     
       
   260     // Negotiation linking and finding methods
       
   261     void LinkNegotiation( CIkev1Negotiation* aNegotiation );
       
   262     CIkev1Negotiation* FirstNegotiation();
       
   263     CIkev1Negotiation* FindNegotiation( TUint32 aSaId );
       
   264     CIkev1Negotiation* FindNegotiation( TCookie aInit,
       
   265                                         TCookie aResp,
       
   266                                         TUint8 aExchange,
       
   267                                         TUint32 aMsgId ); 
       
   268     void RemoveNegotiation( CIkev1Negotiation* aNegotiation );    
       
   269 
       
   270     /**
       
   271      * Handles completion of authentication dialog processing.
       
   272      * @param aUserInfo User info
       
   273      * @return Error value
       
   274      */
       
   275     TInt AuthDialogCompletedL( CAuthDialogInfo* aUserInfo );  
       
   276     
       
   277     /**
       
   278      * Handles change of internal address.
       
   279      * @param aInternalAddr Internal address
       
   280      * @return Informs if internal address differs from existing internal address
       
   281      */
       
   282     TBool InternalAddressChangedL( const CInternalAddress& aInternalAddr );
       
   283     
       
   284     /**
       
   285       * Gets acceptable IPsec policies for specified selectors.
       
   286       * 
       
   287       * @param aLocalAddr IP address, including possible port, of the local end selector
       
   288       * @param aLocalMask Local end selector mask
       
   289       * @param aRemoteAddr IP address, including possible port, of the remote end selector
       
   290       * @param aRemoteMask Remote end selector mask
       
   291       * @param aProtocol Protocol id
       
   292       * @param aVpnNetId VPN net id
       
   293       */
       
   294      CIpsecSaSpecList* GetIpseSaSpecListLC( const TInetAddr& aLocalAddr, const TInetAddr& aLocalMask, 
       
   295                                             const TInetAddr& aRemoteAddr, const TInetAddr& aRemoteMask,
       
   296                                             TInt aProtocol );     
       
   297                             
       
   298     /**
       
   299      * Handles fatal error.
       
   300      * @param aStatus Error status
       
   301      */
       
   302     void HandleError( TInt aStatus );
       
   303     
       
   304     /**
       
   305      * Returns error status.
       
   306      * @return Error status
       
   307      */
       
   308     TInt ErrorStatus();
       
   309     
       
   310     /**
       
   311      * Sets error status.
       
   312      * @param aStatus Error status
       
   313      */
       
   314     void SetErrorStatus( TInt aStatus );
       
   315     
       
   316     /**
       
   317      * Returns VPN IAP id.
       
   318      * @return VPN IAP id
       
   319      */
       
   320     TUint32 VpnIapId();    
       
   321 
       
   322     /**
       
   323      * Returns VPN interface index.
       
   324      */
       
   325     TUint32 VpnInterfaceIndex();
       
   326     
       
   327     /**
       
   328      * Returns IKE policy data.
       
   329      * @return IKE policy data
       
   330      */
       
   331     CIkeData& IkeData();
       
   332 
       
   333     /**
       
   334      * Returns UID.
       
   335      * @return UID
       
   336      */
       
   337     TUint32 Uid();
       
   338 
       
   339     /**
       
   340      * Returns event logger interface.
       
   341      * @return Eveng logger interface
       
   342      */
       
   343     MKmdEventLoggerIf& EventLogger();
       
   344     
       
   345     /**
       
   346      * Returns internal address (NULL if does not exist).
       
   347      * @return Internal address. Ownership transferred.
       
   348      */
       
   349     CInternalAddress* InternalAddressL();    
       
   350     
       
   351 
       
   352 // PFKEY related methods
       
   353     
       
   354     /**
       
   355      * Matches destination address to remote address in IKE policy data.
       
   356      * @param aDestAddr Destination IP address
       
   357      * @return ETrue if matches. 
       
   358      */
       
   359     TBool MatchDestinationAddress( const TInetAddr& aDestAddr );
       
   360     
       
   361     /**
       
   362      * Handles received PFKEY message.
       
   363      * @param aPfkeyMessage PFKEY message
       
   364      */
       
   365     void PfkeyMessageReceived( const TPfkeyMessage& aPfkeyMessage );
       
   366 
       
   367 // Methods to build and send PFKEY API primitives to IPsec
       
   368     
       
   369     void GetIpsecSPI( TUint8 aType,
       
   370                       TUint32 aSeq,
       
   371                       TInetAddr& aSrc, 
       
   372                       TInetAddr& aDst );
       
   373     
       
   374     void AcquireSAError( TIpsecSAData& aSAData,
       
   375                          TInt aError );
       
   376     
       
   377     void UpdateSAL( TIpsecSAData& aSaData );
       
   378     
       
   379     void AddSAL( TIpsecSAData& aSaData );
       
   380     
       
   381     void DeleteIpsecSA( TIpsecSPI& aIpsecSpi );
       
   382     
       
   383     void DeleteIpsecSA( TUint32 aSPI,
       
   384                         TInetAddr& aSrc, 
       
   385                         TInetAddr& aDst,
       
   386                         TUint8 aProtocol );
       
   387         
       
   388 // from base class MIkePluginSessionIf
       
   389     
       
   390     /**
       
   391      * From MIkePluginSessionIf.
       
   392      * Starts negotiation with a peer.
       
   393      * @param aIkeData IKE policy data
       
   394      * @param aInternalAddress Internal address (returned)
       
   395      * @param aStatus Completion status (returned) 
       
   396      */
       
   397     void NegotiateWithHost( const CIkeData& aIkeData,
       
   398                             TVPNAddress& aInternalAddress,
       
   399                             TRequestStatus& aStatus );
       
   400     
       
   401     /**
       
   402      * From MIkePluginSessionIf.
       
   403      * Cancels negotiate request. DeleteSession() method needs to be called
       
   404      * after this method to delete session.
       
   405      */
       
   406     void CancelNegotiateWithHost();
       
   407     
       
   408     /**
       
   409      * From MIkePluginSessionIf.
       
   410      * Deletes session. IKE/IPSec SA:s are deleted.
       
   411      * @param aSilentClose Specified if a silent close in question (Delete
       
   412      * payloads not transmitted to peer)
       
   413      * @param aStatus Completion status (returned)
       
   414      */
       
   415     void DeleteSession( const TBool aSilentClose,
       
   416                         TRequestStatus& aStatus );
       
   417     
       
   418     /**
       
   419      * From MIkePluginSessionIf.
       
   420      * Cancels deletion requests. IKE/IPSec SA:s are deleted.
       
   421      */
       
   422     void CancelDeleteSession();
       
   423             
       
   424     /**
       
   425      * From MIkePluginSessionIf.
       
   426      * Requests notification about error condition.
       
   427      * @param aStatus Completion status (returned)
       
   428      */
       
   429     void NotifyError( TRequestStatus& aStatus );
       
   430     
       
   431     /**
       
   432      * From MIkePluginSessionIf.
       
   433      * Cancels error notification request.
       
   434      */
       
   435     void CancelNotifyError();
       
   436     
       
   437     /**
       
   438      * From MIkePluginSessionIf.
       
   439      * Requests notification about change of internal address.
       
   440      * @param aInternalAddress Internal address (returned)
       
   441      * @param aStatus KErrNone. Error condition needs to be indicated via
       
   442      *                NotifyError() method. (returned)
       
   443      */
       
   444     virtual void NotifyInternalAddressChanged( TVPNAddress& aInternalAddress,
       
   445                                                TRequestStatus& aStatus );
       
   446     
       
   447     /**
       
   448      * From MIkePluginSessionIf.
       
   449      * Cancels internal address change notification request.
       
   450      */
       
   451     void CancelNotifyInternalAddressChanged();
       
   452         
       
   453 // from base class MIkev1ReceiverCallback
       
   454 
       
   455     /**
       
   456      * From MIkev1ReceiverCallback.
       
   457      * Notification about received IKE message.
       
   458      * @param aIkeMsg IKE message
       
   459      * @param aSrcAddr Source IP address/port
       
   460      * @param aLocalPort Local port
       
   461      */
       
   462     void IkeMsgReceivedL( const ThdrISAKMP& aIkeMsg,
       
   463                           const TInetAddr& aSrcAddr,
       
   464                           TInt aLocalPort );
       
   465     
       
   466     /**
       
   467      * From MIkev1ReceiverCallback.
       
   468      * Notification about receive error.
       
   469      * @param aStatus Error value
       
   470      */
       
   471     void ReceiveError( TInt aError );
       
   472     
       
   473     
       
   474 // from base class MIkev1SenderCallback   
       
   475     
       
   476     /**
       
   477      * From MIkev1SenderCallback.
       
   478      * Notification about completion sending.
       
   479      * @param aStatus Completion status
       
   480      */
       
   481     void SendUdpDataCompleted( TInt aStatus );
       
   482     
       
   483 private:
       
   484     
       
   485     CIkev1PluginSession( TUint32 aVpnIapId,
       
   486                          TUint32 aVpnNetId,
       
   487                          TUint32 aVpnInterfaceIndex,
       
   488                          MIkeDataInterface& aDataInterface,
       
   489                          CIkev1Plugin& aPlugin,
       
   490                          CPFKeySocketIf& aPFKeySocketIf,
       
   491                          MIkeDebug& aDebug );
       
   492     void ConstructL();
       
   493     
       
   494     /**
       
   495      * Handles received PFKEY message.
       
   496      * @param aPfkeyMessage PFKEY message
       
   497      */
       
   498     void DoPfkeyMessageReceivedL( const TPfkeyMessage& aPfkeyMessage );
       
   499     
       
   500     /**
       
   501      * Deletes IKE SAs.
       
   502      * @param aSilentClose silent close
       
   503      * @return Deactivation started or not.
       
   504      */
       
   505     TBool DeleteSAsWithHost( TBool aSilentClose );
       
   506         
       
   507     /**
       
   508      * Requests sending of UDP data.
       
   509      * @param aUdpData UDP data. Ownership transferred.
       
   510      * @param aDestAddr Destination IP address/port
       
   511      * @param aLocalPort Local port
       
   512      * @param aDscp DSCP value
       
   513      */
       
   514     void DoSendUdpDataL( HBufC8* aUdpData,
       
   515                          const TInetAddr& aDestAddr,
       
   516                          TInt aLocalPort,
       
   517                          TUint8 aDscp );
       
   518     /**
       
   519      * Sends UDP data.
       
   520      * @param aUdpData UDP data. Ownership transferred.
       
   521      * @param aDestAddr Destination IP address/port
       
   522      * @param aLocalPort Local port
       
   523      * @param aDscp DSCP value
       
   524      */
       
   525     void DoSendUdpData( HBufC8* aUdpData,
       
   526                         const TInetAddr& aDestAddr,
       
   527                         TInt aLocalPort,
       
   528                         TUint8 aDscp );  
       
   529     
       
   530     /**
       
   531      * Handles starting of negotiation with a peer.
       
   532      * @param aIkeData IKE policy data
       
   533      */
       
   534     void DoNegotiateWithHostL( const CIkeData& aIkeData );
       
   535  
       
   536     /**
       
   537      * Handles fatal error.
       
   538      * @param aError Error status
       
   539      */
       
   540     void DoHandleError( TInt aError );
       
   541     
       
   542     /**
       
   543      * Handles completion of client's negotiate request.
       
   544      * @param aStatus Status
       
   545      */
       
   546     void DoCompleteNegotiateWithHost( TInt aStatus );
       
   547 
       
   548     /**
       
   549      * Handles completion of client's delete session request.
       
   550      * @param aStatus Status
       
   551      */
       
   552     void DoCompleteDeleteSession( TInt aStatus );
       
   553     
       
   554     /**
       
   555      * Handles completion of client's notify error request.
       
   556      * @param aStatus Status
       
   557      */
       
   558     void DoCompleteNotifyError( TInt aStatus );
       
   559     
       
   560     /**
       
   561      * Handles completion of client's notify internal address change request.
       
   562      * @param aStatus Status
       
   563      */
       
   564     void DoCompleteInternalAddressChanged( TInt aStatus );
       
   565     
       
   566     /**
       
   567      * Cancels data transfer.
       
   568      */    
       
   569     void DoCancelDataTransfer();
       
   570     
       
   571     /**
       
   572      * Empties send queue.
       
   573      */
       
   574     void DoEmptySendQueue();
       
   575     
       
   576 private: // data
       
   577     
       
   578     /**
       
   579      * VPN IAP id.
       
   580      * Own.
       
   581      */
       
   582     TUint32                     iVpnIapId;
       
   583 
       
   584     /**
       
   585      * VPN NET id.
       
   586      * Own.
       
   587      */
       
   588     TUint32                     iVpnNetId;
       
   589 
       
   590     /**
       
   591      * VPN interface index.
       
   592      * Own.
       
   593      */
       
   594     TInt                        iVpnInterfaceIndex;
       
   595 
       
   596     /**
       
   597      * IKE policy data.
       
   598      * Own.
       
   599      */
       
   600     CIkeData*                   iIkeData;
       
   601 
       
   602     /**
       
   603      * IKEv1 negotiations.
       
   604      * Own.
       
   605      */
       
   606     CIkev1Negotiation*          iFirstNegotiation;
       
   607 
       
   608     /**
       
   609      * Dialog wait queue. Used by CIkeDialog class.
       
   610      * Own.
       
   611      */
       
   612     CIkev1Dialog*               iDialogWaitQueue;  
       
   613 
       
   614     /**
       
   615      * SA id seed.
       
   616      * Own.
       
   617      */
       
   618     TUint32                     iSAIdSeed;            
       
   619     
       
   620     /**
       
   621      * IKE message send queue.
       
   622      * Own.
       
   623      */
       
   624     RArray<TIkeSendQueueItem>   iSendQueue;
       
   625     
       
   626     /**
       
   627      * IKEv1 SAs.
       
   628      * Own.
       
   629      */
       
   630     RPointerArray<CIkev1SA>     iIkev1SAs;
       
   631     
       
   632     /**
       
   633      * Local IP address.
       
   634      * Own.
       
   635      */
       
   636     TInetAddr                   iLocalAddr;
       
   637     
       
   638     /**
       
   639      * Receiver.
       
   640      * Own.
       
   641      */
       
   642     CIkev1Receiver*             iReceiver;
       
   643     
       
   644     /**
       
   645      * Sender.
       
   646      * Own.
       
   647      */
       
   648     CIkev1Sender*               iSender;
       
   649     
       
   650     /**
       
   651      * Internal address.
       
   652      * Own.
       
   653      */
       
   654     CInternalAddress*           iInternalAddress;
       
   655     
       
   656     /**
       
   657      * Error status.
       
   658      * Own.
       
   659      */
       
   660     TInt                        iErrorStatus;    
       
   661     
       
   662     /**
       
   663      * Client's negotiate requests status.
       
   664      * Not own.
       
   665      */
       
   666     TRequestStatus*             iClientStatusNegotiate;
       
   667     
       
   668     /**
       
   669      * Client's internal address variable for negotiate request.
       
   670      * Not own.
       
   671      */
       
   672     TVPNAddress*                iClientIaNegotiate;
       
   673 
       
   674     /**
       
   675      * Client's delete session requests status.
       
   676      * Not own.
       
   677      */
       
   678     TRequestStatus*             iClientStatusDelete;
       
   679     
       
   680     /**
       
   681      * Client's notify error requests status.
       
   682      * Not own.
       
   683      */
       
   684     TRequestStatus*             iClientStatusNotifyError;
       
   685     
       
   686     /**
       
   687      * Client's notify IA change requests status.
       
   688      * Not own.
       
   689      */
       
   690     TRequestStatus*             iClientStatusNotifyIaChange;
       
   691     
       
   692     /**
       
   693      * Client's internal address variable for notify request.
       
   694      * Not own.
       
   695      */
       
   696     TVPNAddress*                iClientIaNotify;
       
   697         
       
   698     /**
       
   699      * Data interface.
       
   700      * Not own.
       
   701      */
       
   702     MIkeDataInterface&          iDataInterface;
       
   703     
       
   704     /**
       
   705      * IKEv1 plugin.
       
   706      * Not own.
       
   707      */
       
   708     CIkev1Plugin&               iPlugin;
       
   709     
       
   710     /**
       
   711      * VPN PF key socket.
       
   712      * Not own.
       
   713      */
       
   714     CPFKeySocketIf&             iPFKeySocketIf;
       
   715     
       
   716     /**
       
   717      * Debug trace interface.
       
   718      * Not own.
       
   719      */
       
   720     MIkeDebug&                  iDebug;    
       
   721     };
       
   722 
       
   723 #endif // C_IKEV1PLUGINSESSION_H