diff -r 000000000000 -r 33413c0669b9 vpnengine/eventmediatorapi/inc/eventmediatorapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/eventmediatorapi/inc/eventmediatorapi.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,447 @@ +/* +* Copyright (c) 2003-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: This module defines the API to get services from EventMediator. +* +*/ + + + +/** + * @file eventmediatorapi.h + * + * This module defines the API to get services from EventMediator. + * + */ + +#ifndef __EVENTMEDIATOR_API_H__ +#define __EVENTMEDIATOR_API_H__ + +#include +#include "vpnapidefs.h" +#include "vpnmandefs.h" + +#define EVENTLOG_FILE_HEADER_LTH 16 + +/** + * + * Enumeration of supported events types. + * + */ +enum TEventType + { + EUnfoundEvent, + ETestEvent, + ESystemEvents = 10000, + EAllInterfaceEvents, + ESingleInterfaceEvent, + ELogEvent, + EKmdAddressChangeEvent, + EKmdCertificateChangeEvent, + EKmdRealIapConnDownEvent, + // SIT events + EGetProtocolVersionEvent = 20000, + EStartVpnConnEvent, + ECloseVpnConnEvent, + EStartRealIapConnEvent, + EObserveRealIapConnEvent, + // Internal use only + ETaskArrivedEvent = 30000, + EFetchTaskInfoEvent, + EGetProtocolVersionCancelEvent, + EStartVpnConnCancelEvent, + ECloseVpnConnCancelEvent, + EStartRealIapConnCancelEvent, + EObserveRealIapConnCancelEvent, + EProgressEvent + }; + +/** + * + * Enumeration of log event categories. + * + */ +enum TLogCategory + { + EInfo, + EWarning, + EError, + EDebug + }; + +/** + * The following definitions are used with TEventType + * ESingleInterfaceEvent and EObserveRealIapConnEvent + */ + +enum TSingleConnInterfaceState + { + ESingleInterfaceStateUnknown = -1, + ESingleInterfaceUp, + ESingleInterfaceDown, + ESingleInterfaceTerminated, // Authoritative stop + }; + +class TSingleInterfaceNotification + { +public: + TConnectionInfo iConnectionInfo; + TSingleConnInterfaceState iState; + }; + +typedef TPckgBuf TSingleInterfaceNotificationBuf; + +/** + * Generic event data definition + */ +class TEventSpec + { +public: + inline TEventSpec() : iId(0) {} + TInt iId; + }; + +/** + * Generic event data definition + */ +class TEventData + { +public: + inline TEventData() : iTaskStatus(KErrNone) {} + TInt iTaskStatus; + }; + +/** + * Used by SIT to get informed about new tasks. + */ +class TTaskArrivedEventData + { +public: + inline TTaskArrivedEventData() + :iEventType(EUnfoundEvent), iEventSpecId(0) + {} + TEventType iEventType; + TInt iEventSpecId; + }; + +/** + * Used by SIT to fetch the event specification of a new task. + */ +typedef TTaskArrivedEventData TFetchTaskInfoEventSpec; + +/** + * + * MEventObserver - This class must be implemented to use ListenToEvent of EventMediatorApi + * + */ +class MEventObserver + { +public: + /** + * Called by REventMediator when a listened event has been reported. + * @param aStatus: error code, KErrNone if successfull. + * @param aType: the type of the event. + * @param aData: a pointer to a descriptor containing reported data about the event. + * aData pointer is valid only during the execution of EventOccured. + * A copy of the descriptor must be made to store the data for later use. + */ + virtual void EventOccured(TInt aStatus, TEventType aType, TDesC8* aData)=0; + }; + +class CEventListener; + +/** + * + * REventMediator - API class for EventMediator + * + */ +class REventMediator:public RSessionBase + { +/** + ** @internalComponent + */ + friend class CEventListener; +public: + /** + * Default constructor + */ + IMPORT_C REventMediator(void); + + /** + * Creates session to the EventMediator server. If server is + * not running, it is started. + */ + IMPORT_C TInt Connect(); + + /** + * Closes the session to the VPN Manager. + */ + IMPORT_C void Close(); + + /** + * Sends asynchronous event notification request. + * Called after Connect() request. + * @param aType: the type of the event. + * @param aObserver: object whose EventOccured method is called when an event + * of type aType has been reported. + */ + IMPORT_C void ListenToEvent(TEventType aType, MEventObserver& aObserver); + + /** + * Sends asynchronous event notification request. + * Called after Connect() request. + * @param aType: the type of the event. + * @param aEventSpec: specific info on listened event. + * @param aObserver: object whose EventOccured method is called when an event + * of type aType has been reported. + */ + IMPORT_C void ListenToEvent(TEventType aType, TDesC8& aEventSpec, MEventObserver& aObserver); + + /** + * Cancels all ListenToEvent requests concerning this event type. + * Called after Connect() request. + * @param aType: the type of the event. + */ + IMPORT_C void CancelListening(TEventType aType); + + /** + * Cancels ListenToEvent request geiven with a specification. + * Notice that this may fail. + * Called after Connect() request. + * @param aEventSpec: specific info on listened event. + * @param aType: the type of the event. + * @return error code, KErrNone if successfull. + */ + IMPORT_C TInt CancelListening(TEventType aType, TDesC8& aEventSpec); + + /** + * Cancels all asynchronous ListenToEvent requests. + * Called after Connect() request. + */ + IMPORT_C void CancelAllListening(); + + /** + * Sends synchronous request to report an event. + * Called after Connect() request. + * @param aType: the type of the event. + * @param aData: a descriptor containing data about the event. + * @return error code, KErrNone if successfull. + */ + IMPORT_C TInt ReportEvent(TEventType aType); + + /** + * Sends synchronous request to report an event. + * Called after Connect() request. + * @param aType: the type of the event. + * @param aData: a descriptor containing data about the event. + * @return error code, KErrNone if successfull. + */ + IMPORT_C TInt ReportEvent(TEventType aType, TDesC8& aData); + + /** + * Sends synchronous request to report an event. + * Called after Connect() request. + * @param aType: the type of the event. + * @param aEventSpec: specific info on listened event. + * @param aData: a descriptor containing data about the event. + * @return error code, KErrNone if successfull. + */ + IMPORT_C TInt ReportEvent(TEventType aType, TDesC8& aEventSpec, TDesC8& aData); + + /** + * Sends synchronous request to report an event. + * Called after Connect() request. + * @param aTSrc: source of the event. + * @param aCategory: category of the log event. + * @param aMsgId: Id of the log message. + * @param aDesCount: number of additional arguments (which must be of type TDesC8*). + * @return error code, KErrNone if successfull. + */ + IMPORT_C TInt ReportLogEvent(TUid& aSrc, TLogCategory aCategory, TUint aMsgId,TInt aDesCount,...); + + /** + * Returns a new event specification + * ID to be used with SIT related events. + */ + IMPORT_C TInt NewEventSpecId(); + + /** + * Requests the Event Mediator to delete the files it owns. + */ + IMPORT_C TInt DeletePrivateFiles(); + + IMPORT_C TInt GetEventLogSize(TInt& aEventLogSize); + + IMPORT_C TInt GetEventLogHeader(TDes8& aEventLogHeader); + + IMPORT_C TInt GetEventLogData(TDes8& aEventLogData); + + IMPORT_C TInt ClearEventLog(); + + /** + * Sends a request to cancel all ListenToEvent requests concerning this + * event type. + * @param aType: the type of the event. + */ + void CancelListenToEvent(TEventType aType); + + /** + * Sends a request to cancel all ListenToEvent requests with a given + * specification. + * @param aEventSpec: specific info on listened event. + * @param aType: the type of the event. + * @return error code, KErrNone if successfull. + */ + TInt CancelListenToEvent(TEventType aType, TDesC8& aEventSpec); + +private: + void CreateListenedEventsListL(); + + /** + * Sends synchronous request to get data repeorted with an event. + * Called after Connect() request. + * @param aSrvPtr: pointer to the data in the servers address space. + * The server checks whether this pointer is valid before using it. + * @param aData: a descriptor to which the datais written. + * @return Error status + */ + TInt FetchData(TAny* aSrvPtr, TDes8& aDataDecriptor); + + /** + * Called by ListenToEvent function. + * Creates a new instance of CEventListener to receive notification about the event. + * Adds thsi object to iListenedEvents. + * @param aType: the type of the event. + * @param aObserver: object whose EventOccured function is called when event is received. + * @return the new listener. + */ + CEventListener* NewEventListenerL(TEventType aType, MEventObserver& aObserver); + + /** + * Deletes listener created with NewEventListener + * @param aType: the type of the event. + */ + void RemoveListener(CEventListener* aListener); + + /** + * Creates EventMediator. + */ + TInt StartEventMediator(); + + /** + * Looks up a listener from iListenedEvents. + * @param aType: type of the event the listener is waiting for. + * @param aIndex: the position of the listener in iListenedEvents. + * @return ETrue if listener exists, EFalse if not. + */ + TBool FindEventListener(const TEventType aType, TInt& aIndex); + + /** + * Looks up a listener from iListenedEvents. + * @param aType: type of the event the listener is waiting for. + * @param aEventSpec event specification + * @param aIndex: the position of the listener in iListenedEvents. + * @return ETrue if listener exists, EFalse if not. + */ + TBool FindEventListener(const TEventType aType, TDesC8& aEventSpec, TInt& aIndex); + + /** + * Reads the variable arguments of ReportLogEvent. + * @param aCount: Number of arguments. + * @param aList: list of arguments. + * @param aPointers: array to be filled with argument pointers. + * @param aLengths: array to be filled with argument lengths. + * @param aOverAllLength: sum of argument lengths + * @return error code, KErrNone if successfull. + */ + TInt ReadLogArguments(TInt aCount, VA_LIST aList,TDesC8** aPointers, TInt* aLengths, TInt& aOverAllLength); + +private: //Data + // list of listeners created with function NewEventListener + CArrayFixFlat* iListenedEvents; + TInt64 iRandSeed; + }; + +/** + * + * CEventListener - A class used by REventListener to Store information about the listened events. + * + */ +NONSHARABLE_CLASS(CEventListener) : public CActive + { +/** + ** @internalComponent + */ + friend class REventMediator; + enum TListenerState { EStateListening = 0, EStateFetchingData}; +public: + /** + * standard deconstructor + */ + ~CEventListener(); +private: + /** + * Constructor. + * @param aType: type of the event that is listened. + * @param aObserver: object whose EventOccured is called when event has occured. + * @param aSession: pointer to the owning REventMediator object. + */ + CEventListener(TEventType aType, MEventObserver& aObserver, REventMediator* aSession); + + /** + * Implement RunL of class CActive. + */ + void RunL(); + + /** + * Handles the completion of event listening request + */ + void HandleListeningComplete(); + + /** + * Handles the completion of event data fetching request + * @param Error status + */ + void HandleFetchingComplete(TInt aError); + + /** + * Implements DoCancel of class CActive. + */ + void DoCancel(); + +private: //data + // buffer to receive the length of the data descriptor of an reported event. + TPckgBuf iDataLengthPckg; + // buffer to receive the pointer to the data descriptor in servers address space. + TPckgBuf iSrvDataPtrPckg; + // type of the event that is listened. + TEventType iType; + // the observer given in constructor. + MEventObserver& iObserver; + // the session given in constructor + REventMediator* iSession; + + // possible extra specifications on listened events + HBufC8* iSpecBuf; + + // Event data + HBufC8* iDataBuf; + + // Event data as a modifiable descriptor + TPtr8 iDataPtr; + + // Internal state + TListenerState iState; + }; + +#endif // __EVENTMEDIATOR_API_H__