contentstorage/caclient/s60/src/caclientnotifiersession.cpp
author hgs
Fri, 30 Apr 2010 15:22:08 +0300
changeset 93 82b66994846c
parent 85 7feec50967db
permissions -rw-r--r--
201017
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description:
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include "cautils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include "caclientnotifiersession.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
#include "caclientsubsession.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include "cainnerquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "caidsarray.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "caentriesarray.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "caclientnotifierproxy.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
// ======== MEMBER FUNCTIONS ========
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
TUint32 RCaClientNotifierSession::HashFunc(const TKey& key)
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
    return reinterpret_cast<TUint>(key.iFilterAddress) + key.iNotifierType;
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
TBool RCaClientNotifierSession::IdentityFunc(const TKey& key1,
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
        const TKey& key2)
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
    return key1.iFilterAddress == key2.iFilterAddress &&
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
        key1.iNotifierType == key2.iNotifierType;
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
const THashFunction32<RCaClientNotifierSession::TKey>
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
        RCaClientNotifierSession::iHashFunction(
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
            RCaClientNotifierSession::HashFunc);
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
const TIdentityRelation<RCaClientNotifierSession::TKey>
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
        RCaClientNotifierSession::iIdentityRelation(
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
            RCaClientNotifierSession::IdentityFunc);
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
// RCaClientNotifierSession::RCaClientNotifierSession
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
// C++ default constructor can NOT contain any code, that
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
// might leave.
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
RCaClientNotifierSession::RCaClientNotifierSession() :
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
    RSessionBase(), iSubsessions(iHashFunction, iIdentityRelation)
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
    // No implementation required
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
// RCAClientSession::Connect
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
// Connect to Content publisher server session.
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
TInt RCaClientNotifierSession::Connect()
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
    TInt error =
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
            CreateSession(KCaSrvName, Version(), KDefaultMessageSlots);
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
    if (error == KErrNone) {
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
        ShareAuto();
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
    return error;
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
void RCaClientNotifierSession::Close()
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
    RHashMap<TKey, RCaClientSubSession*>::TIter iter(iSubsessions);
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
    while(iter.NextValue()) {
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
        (*iter.CurrentValue())->Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
    iSubsessions.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
    RSessionBase::Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
//
93
hgs
parents: 85
diff changeset
   105
void RCaClientNotifierSession::ConnectAllL()
hgs
parents: 85
diff changeset
   106
{
hgs
parents: 85
diff changeset
   107
    if( !CreateSession(KCaSrvName, Version(), KDefaultMessageSlots) )
hgs
parents: 85
diff changeset
   108
        {
hgs
parents: 85
diff changeset
   109
        RHashMap<TKey, RCaClientSubSession*>::TIter iter(iSubsessions);
hgs
parents: 85
diff changeset
   110
        while(iter.NextValue()) 
hgs
parents: 85
diff changeset
   111
            {
hgs
parents: 85
diff changeset
   112
            (*iter.CurrentValue())->CreateL();
hgs
parents: 85
diff changeset
   113
            }
hgs
parents: 85
diff changeset
   114
        }
hgs
parents: 85
diff changeset
   115
}
hgs
parents: 85
diff changeset
   116
hgs
parents: 85
diff changeset
   117
// -----------------------------------------------------------------------------
hgs
parents: 85
diff changeset
   118
//
hgs
parents: 85
diff changeset
   119
//
hgs
parents: 85
diff changeset
   120
// -----------------------------------------------------------------------------
hgs
parents: 85
diff changeset
   121
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
TInt RCaClientNotifierSession::RegisterNotifier(
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
        CCaInnerNotifierFilter* innerNotifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
        const TAny* notifierFilter,
93
hgs
parents: 85
diff changeset
   125
        const IDataObserver* notifierProxy)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
    TRAPD(error, RegisterNotifierL(innerNotifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
                    notifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
                    notifierProxy));
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
    return error;
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
void RCaClientNotifierSession::RegisterNotifierL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
        CCaInnerNotifierFilter* innerNotifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
        const TAny* notifierFilter,
93
hgs
parents: 85
diff changeset
   141
        const IDataObserver *notifierProxy)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
    RCaClientSubSession* subsession = new RCaClientSubSession(this,
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
            notifierProxy, innerNotifierFilter);
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
    CleanupClosePushL(*subsession);
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
    subsession->CreateL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
    TKey key(notifierFilter, innerNotifierFilter->GetNotifierType());
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
    iSubsessions.InsertL(key, subsession);
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
    CleanupStack::Pop(subsession);
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
void RCaClientNotifierSession::UnregisterNotifier(
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
        const TAny* notifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
        CCaInnerNotifierFilter::TNotifierType innerNotifierType)
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
    TKey key(notifierFilter, innerNotifierType);
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
    RCaClientSubSession** subsession = iSubsessions.Find(key);
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
    if (subsession) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
        (*subsession)->Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
        delete (*subsession);
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
        iSubsessions.Remove(key);
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
TInt RCaClientNotifierSession::SubsessionsCount() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
    return iSubsessions.Count();
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
TBool RCaClientNotifierSession::ContainsSubsession(
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
        const TAny* notifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
        CCaInnerNotifierFilter::TNotifierType innerNotifierType) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
    TKey key(notifierFilter, innerNotifierType);
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
    return iSubsessions.Find(key) != NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
// RCPServerClient::Version
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
// Version information.
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
TVersion RCaClientNotifierSession::Version() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
    return (TVersion(KCaMajorVersion, KCaMinorVersion, KCaBuild));
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
}