imsrv_plat/ximp_core_protocol_plugin_api/inc/ximpprotocolconnection.h
author hgs
Wed, 03 Nov 2010 09:32:20 +0530
changeset 51 61fad867f68e
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006, 2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Interface for presence protocol connection object.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef MXIMPFWPROTOCOLCONNECTION_H
hgs
parents:
diff changeset
    19
#define MXIMPFWPROTOCOLCONNECTION_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <e32std.h>
hgs
parents:
diff changeset
    23
#include <badesca.h>
hgs
parents:
diff changeset
    24
#include <ximpprotocolpluginifids.hrh>
hgs
parents:
diff changeset
    25
#include <ximpbase.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
class MXIMPContextClientInfo;
hgs
parents:
diff changeset
    29
class MXIMPProtocolConnectionHost;
hgs
parents:
diff changeset
    30
class MProtocolPresenceFeatures;
hgs
parents:
diff changeset
    31
class MProtocolImFeatures;
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
/**
hgs
parents:
diff changeset
    36
 * Interface for presence protocol connection object.
hgs
parents:
diff changeset
    37
 * Interface must be implemented by a XIMP Framework protocol
hgs
parents:
diff changeset
    38
 * plug-ins.
hgs
parents:
diff changeset
    39
 *
hgs
parents:
diff changeset
    40
 * This interface models a connection from XIMP Framework to
hgs
parents:
diff changeset
    41
 * single remote presence service, over certain presence protocol
hgs
parents:
diff changeset
    42
 * implementation. XIMP Framework calls methods on this interface
hgs
parents:
diff changeset
    43
 * based on XIMP Framework client requests.
hgs
parents:
diff changeset
    44
 *
hgs
parents:
diff changeset
    45
 * XIMP Framework retrieves MXIMPProtocolConnection
hgs
parents:
diff changeset
    46
 * instances through MXIMPProtocolPlugin::AcquireConnectionL().
hgs
parents:
diff changeset
    47
 * Same MXIMPProtocolConnection instance may be returned by multiple
hgs
parents:
diff changeset
    48
 * MXIMPProtocolPlugin::AcquireConnectionL() calls. In this case
hgs
parents:
diff changeset
    49
 * XIMP Framework shares MXIMPProtocolConnection instance
hgs
parents:
diff changeset
    50
 * by multiple clients, and MXIMPProtocolConnection lifetime is
hgs
parents:
diff changeset
    51
 * extended over utilizing client sessions. When last utilizing
hgs
parents:
diff changeset
    52
 * client session is succesfully closed with
hgs
parents:
diff changeset
    53
 * MXIMPProtocolConnection::CloseSession(), XIMP Framework
hgs
parents:
diff changeset
    54
 * disposes the MXIMPProtocolConnection instance with
hgs
parents:
diff changeset
    55
 * MXIMPProtocolPlugin::ReleaseConnection().
hgs
parents:
diff changeset
    56
 *
hgs
parents:
diff changeset
    57
 *
hgs
parents:
diff changeset
    58
 * MXIMPProtocolConnection implementation must provide
hgs
parents:
diff changeset
    59
 * access following feature specific sub-interfaces:
hgs
parents:
diff changeset
    60
 * - MProtocolPresenceWatching
hgs
parents:
diff changeset
    61
 * - MProtocolPresencePublishing
hgs
parents:
diff changeset
    62
 * - MProtocolPresentityGroups
hgs
parents:
diff changeset
    63
 * - MProtocolPresenceAuthorization
hgs
parents:
diff changeset
    64
 *
hgs
parents:
diff changeset
    65
 * Each provided sub-interface defines a set of its own
hgs
parents:
diff changeset
    66
 * presence managements requests, relating to presence watching
hgs
parents:
diff changeset
    67
 * and subscribing, presence publication, presentity groups and
hgs
parents:
diff changeset
    68
 * presentity group member management and to presence authorizations.
hgs
parents:
diff changeset
    69
 * XIMP Framework calls these sub-interfaces to request on
hgs
parents:
diff changeset
    70
 * spesific presence requests from protocol connection.
hgs
parents:
diff changeset
    71
 *
hgs
parents:
diff changeset
    72
 * @see MXIMPProtocolConnectionHost
hgs
parents:
diff changeset
    73
 * @ingroup ximpprotocolpluginapi
hgs
parents:
diff changeset
    74
 * @since S60 v3.2
hgs
parents:
diff changeset
    75
 */
hgs
parents:
diff changeset
    76
class MXIMPProtocolConnection : public MXIMPBase
hgs
parents:
diff changeset
    77
    {
hgs
parents:
diff changeset
    78
public:
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
    /** Interface ID for the MXIMPProtocolConnection. */
hgs
parents:
diff changeset
    81
    enum { KInterfaceId = XIMP_IF_ID_PROTOCOL_CONNECTION };
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
protected:
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    /**
hgs
parents:
diff changeset
    87
     * Protected destructor. MXIMPProtocolConnection
hgs
parents:
diff changeset
    88
     * objects can't be deleted through this interface.
hgs
parents:
diff changeset
    89
     *
hgs
parents:
diff changeset
    90
     * XIMP Framework disposes MXIMPProtocolConnection
hgs
parents:
diff changeset
    91
     * instances through MXIMPProtocolPlugin::ReleaseConnection().
hgs
parents:
diff changeset
    92
     */
hgs
parents:
diff changeset
    93
    virtual inline ~MXIMPProtocolConnection() {};
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
public: // Common
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    /**
hgs
parents:
diff changeset
   101
     * Primes protocol connection with its callback interface.
hgs
parents:
diff changeset
   102
     *
hgs
parents:
diff changeset
   103
     * Primes the presence protocol connection instance with
hgs
parents:
diff changeset
   104
     * its XIMP Framework side callback interface.
hgs
parents:
diff changeset
   105
     * Here given MXIMPProtocolConnectionHost interface is
hgs
parents:
diff changeset
   106
     * implemented and owned by the XIMP Framework, and
hgs
parents:
diff changeset
   107
     * presence protocol connection must use it to communicate back to
hgs
parents:
diff changeset
   108
     * XIMP Framework direction.
hgs
parents:
diff changeset
   109
     *
hgs
parents:
diff changeset
   110
     * Call and interface lifetime convention:
hgs
parents:
diff changeset
   111
     * - This method is called by XIMP Framework before
hgs
parents:
diff changeset
   112
     *   requesting any other requests from protocol connection
hgs
parents:
diff changeset
   113
     *   instance.
hgs
parents:
diff changeset
   114
     *
hgs
parents:
diff changeset
   115
     * - This method is called just once for each MXIMPProtocolConnection,
hgs
parents:
diff changeset
   116
     *   even the same MXIMPProtocolConnection instance is returned
hgs
parents:
diff changeset
   117
     *   multiple times from MXIMPProtocolPlugin::AcquireConnectionL().
hgs
parents:
diff changeset
   118
     *
hgs
parents:
diff changeset
   119
     * - Each presence protocol connection instance must use here
hgs
parents:
diff changeset
   120
     *   given specific host interface instance to communicate back
hgs
parents:
diff changeset
   121
     *   to XIMP Framework direction
hgs
parents:
diff changeset
   122
     *
hgs
parents:
diff changeset
   123
     * - The presence protocol connection implementation must
hgs
parents:
diff changeset
   124
     *   store the here given host reference internally, so
hgs
parents:
diff changeset
   125
     *   protocol connection implementation can access the host
hgs
parents:
diff changeset
   126
     *   when needed.
hgs
parents:
diff changeset
   127
     *
hgs
parents:
diff changeset
   128
     * - Here given MXIMPProtocolConnectionHost instance, is guaranteed
hgs
parents:
diff changeset
   129
     *   to remain valid (usable), untill the presence protocol connection
hgs
parents:
diff changeset
   130
     *   has completed the last MXIMPProtocolConnection::CloseSession()
hgs
parents:
diff changeset
   131
     *   request.
hgs
parents:
diff changeset
   132
     *
hgs
parents:
diff changeset
   133
     *
hgs
parents:
diff changeset
   134
     * @param [in] aHost
hgs
parents:
diff changeset
   135
     *        Reference to host interface, what this MXIMPProtocolConnection
hgs
parents:
diff changeset
   136
     *        instance must use to communicate back to XIMP Framework
hgs
parents:
diff changeset
   137
     *        direction. Object ownership is not trasfered.
hgs
parents:
diff changeset
   138
     */
hgs
parents:
diff changeset
   139
    virtual void PrimeHost(
hgs
parents:
diff changeset
   140
                    MXIMPProtocolConnectionHost& aHost ) = 0;
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
public: // Connection handling
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    /**
hgs
parents:
diff changeset
   148
     * Opens a session for the identified client through
hgs
parents:
diff changeset
   149
     * the presence protocol connection.
hgs
parents:
diff changeset
   150
     *
hgs
parents:
diff changeset
   151
     * XIMP Framework calls this method to open a session to
hgs
parents:
diff changeset
   152
     * remote presence service, for here specified client.
hgs
parents:
diff changeset
   153
     * Remote presence service was identified when the
hgs
parents:
diff changeset
   154
     * MXIMPProtocolConnection instance was retrieved through
hgs
parents:
diff changeset
   155
     * MXIMPProtocolPlugin::AcquireConnectionL().
hgs
parents:
diff changeset
   156
     *
hgs
parents:
diff changeset
   157
     * @param [in] aContextClient
hgs
parents:
diff changeset
   158
     *        Object describing the presence connection client.
hgs
parents:
diff changeset
   159
     *
hgs
parents:
diff changeset
   160
     * @param [in] aReqId
hgs
parents:
diff changeset
   161
     *        Request ID identifying the request. Presence protocol
hgs
parents:
diff changeset
   162
     *        connection implementation must cache here given ID and
hgs
parents:
diff changeset
   163
     *        use it when completing the request later through the
hgs
parents:
diff changeset
   164
     *        MXIMPProtocolConnectionHost::HandleRequestCompleted().
hgs
parents:
diff changeset
   165
     */
hgs
parents:
diff changeset
   166
    virtual void OpenSessionL(
hgs
parents:
diff changeset
   167
                const MXIMPContextClientInfo& aContextClient,
hgs
parents:
diff changeset
   168
                TXIMPRequestId aReqId ) = 0;
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    /**
hgs
parents:
diff changeset
   172
     * Opens a session for the identified client through
hgs
parents:
diff changeset
   173
     * the presence protocol connection.
hgs
parents:
diff changeset
   174
     *
hgs
parents:
diff changeset
   175
     * XIMP Framework calls this method to open a session to
hgs
parents:
diff changeset
   176
     * remote presence service, for here specified client.
hgs
parents:
diff changeset
   177
     * Remote presence service was identified when the
hgs
parents:
diff changeset
   178
     * MXIMPProtocolConnection instance was retrieved through
hgs
parents:
diff changeset
   179
     * MXIMPProtocolPlugin::AcquireConnectionL().
hgs
parents:
diff changeset
   180
     *
hgs
parents:
diff changeset
   181
     * @param [in] aSettingsId
hgs
parents:
diff changeset
   182
     *        SettingsId for the presence connection client.
hgs
parents:
diff changeset
   183
     *
hgs
parents:
diff changeset
   184
     * @param [in] aReqId
hgs
parents:
diff changeset
   185
     *        Request ID identifying the request. Presence protocol
hgs
parents:
diff changeset
   186
     *        connection implementation must cache here given ID and
hgs
parents:
diff changeset
   187
     *        use it when completing the request later through the
hgs
parents:
diff changeset
   188
     *        MXIMPProtocolConnectionHost::HandleRequestCompleted().
hgs
parents:
diff changeset
   189
     */
hgs
parents:
diff changeset
   190
    virtual void OpenSessionL(
hgs
parents:
diff changeset
   191
                const TInt& aSettingsId,
hgs
parents:
diff changeset
   192
                TXIMPRequestId aReqId ) = 0;
hgs
parents:
diff changeset
   193
     
hgs
parents:
diff changeset
   194
    
hgs
parents:
diff changeset
   195
    /**
hgs
parents:
diff changeset
   196
     * Closes the identified client session from the
hgs
parents:
diff changeset
   197
     * presence connection.
hgs
parents:
diff changeset
   198
     *
hgs
parents:
diff changeset
   199
     * XIMP Framework calls this method to close
hgs
parents:
diff changeset
   200
     * the remote presence service session, for here specified
hgs
parents:
diff changeset
   201
     * client. When last using client session is closed,
hgs
parents:
diff changeset
   202
     * XIMP Framework consideres the remote presence connection
hgs
parents:
diff changeset
   203
     * as disconnect, and disposes MXIMPProtocolConnection instance
hgs
parents:
diff changeset
   204
     * with MXIMPProtocolPlugin::ReleaseConnection().
hgs
parents:
diff changeset
   205
     *
hgs
parents:
diff changeset
   206
     * @param [in] aContextClient
hgs
parents:
diff changeset
   207
     *        Client which session to close.
hgs
parents:
diff changeset
   208
     *
hgs
parents:
diff changeset
   209
     * @param [in] aReqId
hgs
parents:
diff changeset
   210
     *        Request ID identifying the request. Presence protocol
hgs
parents:
diff changeset
   211
     *        connection implementation must cache here given ID and
hgs
parents:
diff changeset
   212
     *        use it when completing the request later through the
hgs
parents:
diff changeset
   213
     *        MXIMPProtocolConnectionHost::HandleRequestCompleted().
hgs
parents:
diff changeset
   214
     */
hgs
parents:
diff changeset
   215
    virtual void CloseSession(
hgs
parents:
diff changeset
   216
                const MXIMPContextClientInfo& aContextClient,
hgs
parents:
diff changeset
   217
                TXIMPRequestId aReqId ) = 0;
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    /**
hgs
parents:
diff changeset
   221
     * Gets features that presence protocol connection supports.
hgs
parents:
diff changeset
   222
     *
hgs
parents:
diff changeset
   223
     * Presence protocol connection should negotiate
hgs
parents:
diff changeset
   224
     * available features during the connection establish
hgs
parents:
diff changeset
   225
     * and this method should return the supported features
hgs
parents:
diff changeset
   226
     * from presence protocol connection internal cache.
hgs
parents:
diff changeset
   227
     *
hgs
parents:
diff changeset
   228
     * @param [out] aFeatures
hgs
parents:
diff changeset
   229
     *        Return parameter where to append supported
hgs
parents:
diff changeset
   230
     *        presence protocol connection features.
hgs
parents:
diff changeset
   231
     *        Feature IDs are defined in NXIMPFeature namespace.
hgs
parents:
diff changeset
   232
     */
hgs
parents:
diff changeset
   233
    virtual void GetSupportedFeaturesL(
hgs
parents:
diff changeset
   234
                CDesC8Array& aFeatures ) const = 0;
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
public: // Access to sub-interfaces
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
    /**
hgs
parents:
diff changeset
   242
     * Gets reference to presence watching interface.
hgs
parents:
diff changeset
   243
     *
hgs
parents:
diff changeset
   244
     * XIMP Framework calls this method to retrieve a reference
hgs
parents:
diff changeset
   245
     * to protocols MProtocolPresenceWatching interface
hgs
parents:
diff changeset
   246
     * implementation.
hgs
parents:
diff changeset
   247
     *
hgs
parents:
diff changeset
   248
     * Call and interface lifetime convention:
hgs
parents:
diff changeset
   249
     * - This method isn't called before protocol has signalled
hgs
parents:
diff changeset
   250
     *   MXIMPProtocolConnection::OpenSessionL() succesfully completed.
hgs
parents:
diff changeset
   251
     *
hgs
parents:
diff changeset
   252
     * - XIMP Framework may call this method multiple times for
hgs
parents:
diff changeset
   253
     *   for one MXIMPProtocolConnection instance.
hgs
parents:
diff changeset
   254
     *
hgs
parents:
diff changeset
   255
     * - Each call per one MXIMPProtocolConnection instance,
hgs
parents:
diff changeset
   256
     *   must return reference to same interface instance.
hgs
parents:
diff changeset
   257
     *
hgs
parents:
diff changeset
   258
     * - Returned interface instance must remain valid (usable)
hgs
parents:
diff changeset
   259
     *   untill last client session, using originating presence protocol
hgs
parents:
diff changeset
   260
     *   connection is successfully closed with
hgs
parents:
diff changeset
   261
     *   MXIMPProtocolConnection::CloseSession().
hgs
parents:
diff changeset
   262
     *
hgs
parents:
diff changeset
   263
     * @return Requested interface.
hgs
parents:
diff changeset
   264
     *         interface ownership is not returned caller.
hgs
parents:
diff changeset
   265
     */
hgs
parents:
diff changeset
   266
    virtual MProtocolPresenceFeatures& ProtocolPresenceFeatures() = 0;
hgs
parents:
diff changeset
   267
    
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
    /**
hgs
parents:
diff changeset
   270
     * Gets reference to protocol specific interface.
hgs
parents:
diff changeset
   271
     *
hgs
parents:
diff changeset
   272
     * XIMP Framework calls this method to retrieve a reference
hgs
parents:
diff changeset
   273
     * to protocol interface implementation.
hgs
parents:
diff changeset
   274
     *
hgs
parents:
diff changeset
   275
     * Call and interface lifetime convention:
hgs
parents:
diff changeset
   276
     * - This method isn't called before protocol has signalled
hgs
parents:
diff changeset
   277
     *   MXIMPProtocolConnection::OpenSessionL() succesfully completed.
hgs
parents:
diff changeset
   278
     *
hgs
parents:
diff changeset
   279
     * - XIMP Framework may call this method multiple times for
hgs
parents:
diff changeset
   280
     *   for one MXIMPProtocolConnection instance.
hgs
parents:
diff changeset
   281
     *
hgs
parents:
diff changeset
   282
     * - Each call per one MXIMPProtocolConnection instance,
hgs
parents:
diff changeset
   283
     *   must return reference to same interface instance.
hgs
parents:
diff changeset
   284
     *
hgs
parents:
diff changeset
   285
     * - Returned interface instance must remain valid (usable)
hgs
parents:
diff changeset
   286
     *   untill last client session, using originating presence protocol
hgs
parents:
diff changeset
   287
     *   connection is successfully closed with
hgs
parents:
diff changeset
   288
     *   MXIMPProtocolConnection::CloseSession().
hgs
parents:
diff changeset
   289
     *
hgs
parents:
diff changeset
   290
     * @return Requested interface.
hgs
parents:
diff changeset
   291
     *         interface ownership is not returned caller.
hgs
parents:
diff changeset
   292
     */
hgs
parents:
diff changeset
   293
    virtual TAny* GetProtocolInterface(TInt aInterfaceId) = 0;
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    };
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
#endif // MXIMPFWPROTOCOLCONNECTION_H