vpnengine/eventmediatorapi/inc/eventmediatorapi.h
changeset 0 33413c0669b9
--- /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 <es_enum.h>
+#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<TSingleInterfaceNotification> 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<CEventListener*>* 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<TInt> iDataLengthPckg;
+    // buffer to receive the pointer to the data descriptor in servers address space.
+    TPckgBuf<TAny*> 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__