/** Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).* All rights reserved.* This component and the accompanying materials are made available* under the terms of "Eclipse Public License v1.0"* which accompanies this distribution, and is available* at the URL "http://www.eclipse.org/legal/epl-v10.html".** Initial Contributors:* Nokia Corporation - initial contribution.** Contributors:** Description: * CDynamicsCommand**/#ifndef __CDYNAMICSCOMMAND_H__#define __CDYNAMICSCOMMAND_H__/**************************************************************************************** * * System Includes * ***************************************************************************************/#include <string>using namespace std;/**************************************************************************************** * * Constants * ***************************************************************************************/#define MAXIMUMERRORSTRINGLENGTH 128#define MAXCOMMANDLINE 256#define MAXINTERFACENAME 64#define MAXNAILEN 128#define MAXINFOLEN 128#define MAXERRORSTRING 256/**************************************************************************************** * * Types - General * ***************************************************************************************/typedef enum { DC_SUCCESS, DC_COMMAND_TOOL_NOT_FOUND, DC_INVALID_ARGUMENTS, DC_CSH_FAILED, DC_CALL_FAILED, DC_EXECUTE_FAILED, DC_UNEXPECTED_OUTPUT,} TDynamicsCallResult;typedef enum { DCF_UNKNOWN, DCF_FUNCTION_NOT_PERMITTED, DCF_AGENT_UNREACHABLE} TDynamicsCallFailedReason;typedef struct { TDynamicsCallResult iResult; int iErrorCode; int iErrorDetail; char iDynamicsErrorString[MAXIMUMERRORSTRINGLENGTH];} TDynamicsCallInfo;/**************************************************************************************** * * Types - For Foreign Agent Calls * ***************************************************************************************/typedef struct { int iTunnelCount; int iPendingRegistrationRequests; int iRequestsRejected; int iRequestsAccepted; int iReplysAccepted; int iReplysRejected; int iDiscardedUnknownExtension; int iDiscardedMalformed; int iDiscardedVendor; int iAdvertisementsSent;} TForeignAgentStatusInfo;typedef struct { unsigned int iMobileNodeAddress; unsigned int iHomeAgentAddress; int iTunnelID;} TTunnelID;typedef struct { unsigned int iMobileNodeAddress; unsigned int iCareofAddress; unsigned int iHomeAgentAddress; int iPrivateHomeAgentID; int iCreationTime; int iExpirationTime; int iRefreshTime; int iLastTimestamp; int iSPI; int iTimeout;} TForeignAgentTunnelInfo;/**************************************************************************************** * * Types - For Home Agent Calls * ***************************************************************************************/typedef struct { int iTunnelCount; int iRequestsRejected; int iRequestsAccepted; int iDiscardedUnknownExtension; int iDiscardedMalformed; int iDiscardedVendor; int iAdvertisementsSent;} THomeAgentStatusInfo;typedef struct { unsigned int iMobileNodeAddress; unsigned int iCareofAddress; unsigned int iHomeAgentAddress; int iCreationTime; int iExpirationTime; int iRefreshTime; int iLastTimestamp; int iSPI; int iTimeout;} THomeAgentTunnelInfo;/**************************************************************************************** * * Types - For Mobile Node Agent Calls * ***************************************************************************************/typedef struct { int iConnected; int iTunnelUp; unsigned int iLocalAddress; unsigned int iColocatedAddress; unsigned int iForeignAgentAddress; unsigned int iHomeAgentAddress; unsigned int iHomeAddress; int iLifetimeRemaining; int iTunnelMode; int iSecondsSinceLastRequest; int iSecondsSinceLastReply; int iReplyCode; char iInfoText[MAXINFOLEN]; char iLastErrorString[MAXERRORSTRING];} TMobileNodeAgentStatusInfo;typedef struct { unsigned int iForeignAgentAddress; char iInterfaceName[MAXINTERFACENAME]; int iPriority; int iInUse; int iInterfaceIndex; int iLastAdvertisement; char iNAI[MAXNAILEN];} TMobileNodeForeignAgentInfo;/**************************************************************************************** * * CDynamicsCommand Class Definition * ***************************************************************************************/class CDynamicsCommand {public: // General CDynamicsCommand(); ~CDynamicsCommand(); void SetPipePath( string aPipePath ); void SetTimeout( int aTimeoutInMilliseconds ); // Foreign Agent Calls TDynamicsCallInfo ForeignAgentGetStatus( TForeignAgentStatusInfo *aForeignAgentInfo ); TDynamicsCallInfo ForeignAgentDestroyTunnel( unsigned int aMobileNodeAddress ); TDynamicsCallInfo ForeignAgentGetTunnels( int *aTunnelCount, TTunnelID *aTunnelIDArray ); TDynamicsCallInfo ForeignAgentGetTunnelInfo( unsigned int aMobileNodeAddress, TForeignAgentTunnelInfo *aTunnelInfo ); // Home Agent Calls TDynamicsCallInfo HomeAgentGetStatus( THomeAgentStatusInfo *aHomeAgentInfo ); TDynamicsCallInfo HomeAgentDestroyTunnel( unsigned int aMobileNodeAddress , unsigned int aHomeAgentAddress = 0, int aTunnelID = 0); TDynamicsCallInfo HomeAgentGetTunnels( int *aTunnelCount, unsigned int *aMobileNodeAddresses ); TDynamicsCallInfo HomeAgentGetTunnelInfo( unsigned int aMobileNodeAddress, THomeAgentTunnelInfo *aTunnelInfo ); // Mobile Node Calls TDynamicsCallInfo MobileNodeAgentGetCareofAddress( struct in_addr *aCareofAddress ); TDynamicsCallInfo MobileNodeAgentGetStatus( TMobileNodeAgentStatusInfo *aMobileNodeAgentInfo ); TDynamicsCallInfo MobileNodeAgentConnect(); TDynamicsCallInfo MobileNodeAgentDisconnect(); TDynamicsCallInfo MobileNodeAgentConfirm(); TDynamicsCallInfo MobileNodeAgentRescan(); TDynamicsCallInfo MobileNodeAgentSetPolicy( int aPolicyVector ); TDynamicsCallInfo MobileNodeAgentGetPolicy( int *aPolicyVector ); TDynamicsCallInfo MobileNodeAgentGetForeignAgentList( int *aListCount, TMobileNodeForeignAgentInfo *aForeignAgentInfoList ); TDynamicsCallInfo MobileNodeAgentGetForeignAgentInfo( unsigned int aFAAddress, TMobileNodeForeignAgentInfo *aForeignAgentInfo );private: // Helper functions TDynamicsCallInfo DynamicsCall( char *aExecutable, char *aCommand, char *aParams, string *aStandardOutput, string *aStandardError ); int GetIntegerEntry( const char *aOutput, const char *aLabel, int *aValue ); int GetDateEntry( const char *aOutput, const char *aLabel, int *aValue ); int GetAddressEntry( const char *aOutput, const char *aLabel, unsigned int *aValue ); int GetPolicyEntry( const char *aOutput, const char *aLabel, int *aValue ); int GetStringEntry( const char *aOutput, const char *aLabel, char *aValue, int aBufferSize ); TDynamicsCallFailedReason GetCallFailedReason( const char *aOutput ); TDynamicsCallInfo ParseForeignAgentListOutput( string aOutput, int aListSize, TTunnelID *aTunnelIDArray, int *aListCount ); TDynamicsCallInfo ParseHomeAgentListOutput( string aOutput, int aListSize, unsigned int *aTunnelList, int *aListCount ); TDynamicsCallInfo ParseMobileNodeAgentListOutput( string aOutput, int aListSize, TMobileNodeForeignAgentInfo *aForeignAgentList, int *aListCount ); int ConvertTunnelStringToInteger( char *aTunnelMode, int *aValue ); int CheckMatchAsBoolean( char *aInput, char *aTrue, int *aValue ); int strstrbeforedelim( const char *aSearchSpace, const char *aToken, char aDelim ); // Members int iTimeout; string iPipePath; char iCommandLine[MAXCOMMANDLINE];};#endif //__CDYNAMICSCOMMAND_H__