telephonyprotocols/pdplayer/inc/pdp_contention.h
author hgs
Thu, 07 Oct 2010 11:24:36 +0100
changeset 76 91e0f833dd8b
parent 69 b982c3e940f3
permissions -rw-r--r--
201039_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     1
/**
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     3
* All rights reserved.
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     8
*
b982c3e940f3 201035_04
hgs
parents:
diff changeset
     9
* Initial Contributors:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    11
*
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    12
* Contributors:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    13
*
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    14
* Description:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    15
* Header file declaring the RawIP Provisioning structures.
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    16
* 
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    17
*
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    18
*/
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    19
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    20
/**
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    21
 @file
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    22
 @internalTechnology
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    23
*/
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    24
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    25
#ifdef SYMBIAN_NETWORKING_CONTENTION_MANAGEMENT
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    26
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    27
#ifndef PDP_CONTENTION_H
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    28
#define PDP_CONTENTION_H
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    29
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    30
#include <comms-infras/contentionmanager.h>
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    31
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    32
class CMBMSEngine;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    33
class CContextStatusMonitor;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    34
class CContextTypeChecker;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    35
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    36
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    37
class MContextEventsObserver
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    38
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    39
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    40
    virtual void PrimaryContextAddedL(const TName* aContextName) = 0;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    41
    virtual void SecondaryContextAdded(const TName* aContextName) = 0;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    42
    virtual void PrimaryContextDeleted(const CContextStatusMonitor* aContextStatusMonitor) = 0;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    43
    virtual void ContextMonitoringError(const CContextStatusMonitor* aContextStatusMonitor, TInt aError) = 0;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    44
    virtual void ContextTypeCheckingError(const TName* aContextName, TInt aError) = 0;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    45
    };
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    46
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    47
class CContextStatusMonitor : public CActive
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    48
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    49
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    50
    CContextStatusMonitor(RPacketService& aPacketService, MContextEventsObserver& aCallback);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    51
    ~CContextStatusMonitor();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    52
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    53
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    54
    TBool StartL(const TName& aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    55
    inline TBool IsPassedThroughActiveState() const;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    56
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    57
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    58
    void RunL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    59
    void DoCancel();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    60
    TInt RunError(TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    61
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    62
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    63
    RPacketService& iPacketService;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    64
    RPacketContext iPacketContext;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    65
    RPacketContext::TContextStatus iContextStatus;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    66
    MContextEventsObserver& iCallback;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    67
    TName iContextName;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    68
    TBool iWasActive;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    69
    };
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    70
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    71
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    72
class CPrimaryContextsMonitor : public CActive, MContextEventsObserver
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    73
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    74
    enum TState {EEnumeratingContexts, EGettingInfo, EListening};
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    75
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    76
    CPrimaryContextsMonitor(RPacketService& aPacketService, MContentionObserver& aCallback);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    77
    ~CPrimaryContextsMonitor();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    78
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    79
    void StartL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    80
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    81
// from MContextEventsObserver
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    82
    void PrimaryContextAddedL(const TName* aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    83
    void SecondaryContextAdded(const TName* aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    84
    void PrimaryContextDeleted(const CContextStatusMonitor* aContextStatusMonitor);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    85
    void ContextMonitoringError(const CContextStatusMonitor* aContextStatusMonitor, TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    86
    void ContextTypeCheckingError(const TName* aContextName, TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    87
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    88
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    89
    void RunL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    90
    void DoCancel();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    91
    TInt RunError(TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    92
    void DeleteContextStatusMonitor(const CContextStatusMonitor* aContextStatusMonitor);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    93
    void SwitchStateL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    94
    void StartContextStatusMonitoringL(const TName& aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    95
    void RemoveContextNameAndCheckNext(const TName* aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    96
    void ProcessError(TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    97
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    98
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
    99
    RPointerArray<CContextStatusMonitor> iContextMonitors;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   100
    RPointerArray<TName> iAddedContextsNames;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   101
    CContextTypeChecker* iContextTypeChecker;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   102
    RPacketService& iPacketService;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   103
    TState iState;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   104
    RPacketService::TNifInfoV2 iCurrentNifInfo;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   105
    TInt iInitialNifsCount;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   106
    TInt iCurrentNifIndex;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   107
    TBool iFirstContextAdded;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   108
    MContentionObserver& iCallback;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   109
    };
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   110
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   111
class CContextTypeChecker : public CActive
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   112
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   113
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   114
    CContextTypeChecker(RPacketService& aPacketService, MContextEventsObserver& aCallback);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   115
    ~CContextTypeChecker();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   116
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   117
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   118
    void Start(const TName* aContextName);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   119
    void RunL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   120
    TInt RunError(TInt aError);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   121
    void DoCancel();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   122
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   123
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   124
    RPacketService& iPacketService;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   125
    const TName* iContextName;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   126
    MContextEventsObserver& iCallback;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   127
    TInt iCountInNif;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   128
    };
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   129
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   130
class CPdpContentionManager : public CContentionManager
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   131
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   132
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   133
    static CPdpContentionManager* NewL(const ESock::CTierManagerBase& aTierManager, RPacketService& aPacketService);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   134
    ~CPdpContentionManager();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   135
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   136
public:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   137
    void StartMonitoringL();
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   138
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   139
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   140
    void ConstructL(RPacketService& aPacketService);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   141
    CPdpContentionManager(const ESock::CTierManagerBase& aTierManager);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   142
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   143
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   144
    // from CContentionManager
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   145
    virtual void ContentionResolved(const TContentionRequestItem& aContentionRequest, TBool aResult);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   146
    virtual void ContentionOccured(ESock::CMetaConnectionProviderBase& aMcpr);
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   147
    virtual void ReportContentionAvailabilityStatus(ESock::CMetaConnectionProviderBase& aMcpr, const ESock::TAvailabilityStatus& aStatus) const;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   148
    
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   149
private:
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   150
    CPrimaryContextsMonitor* iPrimaryContextsMonitor;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   151
    };
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   152
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   153
inline TBool CContextStatusMonitor::IsPassedThroughActiveState() const
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   154
    {
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   155
    return iWasActive;
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   156
    }
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   157
#endif
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   158
b982c3e940f3 201035_04
hgs
parents:
diff changeset
   159
#endif