epoc32/include/mw/senserviceconnection.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 senserviceconnection.h
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:        CSenServiceConnection offers public API for
       
    15 *                service consumers to access invocable services, 
       
    16 *                as a part of the Web Services Framework (WSF).
       
    17 *
       
    18 */
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 
       
    27 
       
    28 #ifndef SEN_SERVICE_CONNECTION_H
       
    29 #define SEN_SERVICE_CONNECTION_H
       
    30 
       
    31 //  INCLUDES
       
    32 #include <e32base.h> // for CActive
       
    33 #include <MSenServiceConsumer.h>
       
    34 #include <MSenServiceDescription.h>
       
    35 
       
    36 #include <MSenAuthenticationProvider.h>
       
    37 
       
    38 #include <SenSoapMessage.h>
       
    39 #include <SenSoapMessage2.h>
       
    40 //#include <SenAtomEntry.h>
       
    41 
       
    42 
       
    43 #include <MSenMessage.h>
       
    44 
       
    45 // CONSTANTS
       
    46 const TInt KErrSenNotInitialized                    =   -30291;
       
    47 const TInt KErrSenServiceConnectionBusy             =   -30292;
       
    48 const TInt KErrConnectionInitializing               =   -30293;
       
    49 const TInt KErrConnectionExpired                    =   -30294;
       
    50 const TInt KErrSubmitting                           =   -30295;
       
    51 const TInt KErrSenSoapFault                         =   -30296; 
       
    52 const TInt KErrSenInternal                          =   -30297;
       
    53 const TInt KErrSenNoEndpoint                        =   -30298;
       
    54 const TInt KErrSenNoContract                        =   -30299;
       
    55 
       
    56 const TInt KErrSenProviderIdInUseByAnotherEndpoint  =   -30305;
       
    57 const TInt KErrSenNoContractNoEndPoint              =   -30306;
       
    58 
       
    59 const TInt KErrSenBrokenSoapEnvelope                =   -30307;
       
    60 const TInt KErrSenBrokenSoapFault                   =   -30308;
       
    61 const TInt KErrSenCancelled                         =   -30309;
       
    62 
       
    63 
       
    64 // HTTP transport error codes:
       
    65 const TInt KErrSenNoHttpResponseBody                =   -30310;
       
    66 const TInt KErrSenNoHttpContentType                 =   -30311;
       
    67 const TInt KErrSenHttpRedirectRequiresConfirmation  =   -30312;
       
    68 
       
    69 // SOAP message verification error codes:
       
    70 const TInt KErrSenNoSoapBody                        =   -30313;
       
    71 const TInt KErrSenNoSoapHeader                      =   -30314;
       
    72 const TInt KErrSenNoPermission                      =   -30315; 
       
    73 
       
    74 const TInt KErrSenHostNotAvailable                  =   -30318;
       
    75 
       
    76 const TInt KErrSenAuthenticationFault               =   -30319;
       
    77 const TInt KErrSenNoEndUserPermission               =   -30321;
       
    78 
       
    79 
       
    80 const TInt KSenConnectionStatusCreateFailed         =  -1; // post-state
       
    81 const TInt KSenConnectionStatusNew                  =   0; // post-state
       
    82 const TInt KSenConnectionStatusReady                =   1; // post-state
       
    83 const TInt KSenConnectionStatusExpired              =   2; // post-state
       
    84 const TInt KSenConnectionStatusAuthentication       =   3; // pre-state
       
    85 const TInt KSenConnectionStatusDiscovery            =   4; // pre-state
       
    86 const TInt KSenConnectionStatusMetadataExchange     =   5; // pre-state
       
    87 
       
    88 _LIT8(KDefaultBasicWebServicesFrameworkID,          "WS-I");
       
    89 _LIT8(KDefaultIdWsfFrameworkID,                     "ID-WSF"); 
       
    90 _LIT8(KDefaultRestServicesFrameworkID,              "REST");
       
    91 _LIT8(KDefaultWSStarFrameworkID,                    "WS-STAR");
       
    92 _LIT8(KDefaultAtomPubFrameworkID,                   "ATOM-PUB");
       
    93 _LIT8(KDefaultOviFrameworkID,                       "OVI");
       
    94 
       
    95 const TInt KSenTransportStatusCodeOffsetBaseHttp = 1000;
       
    96 const TInt KSenTransportStatusCodeOffsetBaseVtcp = 2000;
       
    97 
       
    98 const TInt KSenTransportStatusCodeVtcpInit =        2001; // KSenTransportStatusCodeOffsetBaseVtcp +1 
       
    99 const TInt KSenTransportStatusCodeVtcpActive =      2002; // KSenTransportStatusCodeOffsetBaseVtcp +2 
       
   100 const TInt KSenTransportStatusCodeVtcpSuspended =   2003; // KSenTransportStatusCodeOffsetBaseVtcp +3 
       
   101 const TInt KSenTransportStatusCodeVtcpInactive =    2004; // KSenTransportStatusCodeOffsetBaseVtcp +4
       
   102 const TInt KSenTransportStatusCodeVtcpUnavailable = 2005; // KSenTransportStatusCodeOffsetBaseVtcp +5
       
   103 
       
   104 // FORWARD DECLARATIONS
       
   105 class CSenServicePattern;
       
   106 class CSenIdentityProvider;
       
   107 
       
   108 // CLASS DECLARATION
       
   109 
       
   110 /**
       
   111   * The class for connecting to service providers
       
   112   * through Web Services Framework (WSF). 
       
   113   *
       
   114   * The class offers asynchronous construction of a
       
   115   * service connection. Further, there are asynchronous
       
   116   * and synchronous interaction methods for e.g. sending 
       
   117   * and receiving data from (possibly remote) service.
       
   118   * 
       
   119   * WSF offers two default frameworks:
       
   120   *
       
   121   *   1. Identity Based Web Services Framework
       
   122   *      (ID-WSF). The framework ID for this is 
       
   123   *      KDefaultIdWsfFrameworkID ("ID-WSF").
       
   124   * 
       
   125   *   2. Basic Web Services Framework. Framework
       
   126   *      ID is KDefaultBasicWebServicesFrameworkID
       
   127   *      ("WS-I").
       
   128   * 
       
   129   * The most typical use of CSenServiceConnection
       
   130   * is to interact with a service of certain type
       
   131   * through some invocable framework and submitting
       
   132   * and receiving messages.
       
   133   *
       
   134   * In case of WebServices, the actual service is remote
       
   135   * and submitted messages are SOAP envelopes. However,
       
   136   * CSenServiceConnection supports accessing any
       
   137   * ServiceInvocationFramework which ECOM plug-in
       
   138   * implementation is present. These plug-ins may
       
   139   * further communicate with some service, including
       
   140   * local services. 
       
   141   * 
       
   142   * The link between CSenServiceConnection and any plug-in
       
   143   * implementation interacting with some service is the
       
   144   * framework ID, which is a property of ServiceDescription (SD)
       
   145   * and accessible via MSenServiceDescription interface, which
       
   146   * each SD class must implement. 
       
   147   * 
       
   148   * When creating a connection, one offers predefined SD as
       
   149   * an argument for asynchronous constructor. Or, optionally 
       
   150   * only a Liberty Alliance ID-WSF specific contract string 
       
   151   * - typically some URN. If only contract is offered, then
       
   152   * the created connection defaults to ID-WSF service and 
       
   153   * ID-WSF framework (ID) will be used.
       
   154   * 
       
   155   * The WSF further uses the offered framework ID while looking
       
   156   * up any matching framework plug-in implementation. As a
       
   157   * result the SD might be offered to several plug-ins.
       
   158 * 
       
   159 * @lib SenServConn.lib
       
   160 *  @since Series60 3.0
       
   161 */
       
   162 
       
   163 class CSenServiceConnection : public CActive, public MSenFragment
       
   164     {
       
   165     public: // Constructors and destructor
       
   166 
       
   167         /**
       
   168         * Two-phased constructor intended for Identity based service 
       
   169         * consumers (like ID-WSF). The pointer is left on the cleanup stack.
       
   170         * This constructor is ASYNCHRONOUS and the actual state of
       
   171         * created connection has to be observed from SetStatus() AND
       
   172         * HandleErrorL() functions.
       
   173         * If service is found, the SetStatus() call-back is performed
       
   174         * with a status value KSenConnectionStatusReady (1).
       
   175         * Contract of the service (typically some URN) is provided.
       
   176         * Authentication for the Web Service Provider (WSP) connection 
       
   177         * is resolved using one of the identity providers which have 
       
   178         * been associated with this contract (typically an URN).
       
   179         *
       
   180         * This constructor is ASYNCHRONOUS and the actual state of newly
       
   181         * created connection has to be observed from SetStatus() AND
       
   182         * HandleErrorL() functions.
       
   183         * If service is found, a SetStatus call-back with value
       
   184         * KSenConnectionStatusReady (1) is executed.
       
   185         * If some error occurs, HandleErrorL() will be called to inform the
       
   186         * creator of this connection (service consumer application)
       
   187         *
       
   188         *    For example, if service is not found, a system wide error
       
   189         *    code of -1 is deliver via HandleErrorL() to WSC.
       
   190         *
       
   191         *    Second example: server response HTTP 501 means, that this error
       
   192         *    code. 501 will be delivered via HandleErrorL() to WSC.
       
   193         *    This can happen in ID-WSF connection being initialized, if
       
   194         *    either Authentication Service (AS) or Discovery Service (DS)
       
   195         *    cannot be reached.
       
   196         *
       
   197         * @param aConsumer      (web) service consumer (for call-backs)
       
   198         * @param aContract      contract of the service, typically an URI.
       
   199         * @return a pointer to a CSenServiceConnection instance.
       
   200         *
       
   201         */
       
   202         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aConsumer,
       
   203                                                     const TDesC8& aContract);
       
   204 
       
   205         /**
       
   206         * Two-phased constructor intended for Identity based service 
       
   207         * consumers (like ID-WSF). 
       
   208         * This constructor is ASYNCHRONOUS and the actual state of
       
   209         * created connection has to be observed from SetStatus() and
       
   210         * HandleErrorL() functions.
       
   211         * If service is found, the SetStatus() call-back is performed
       
   212         * with a status value KSenConnectionStatusReady (1).
       
   213         * Contract of the service (typically some URN) is provided.
       
   214         * Authentication for the Web Service Provider (WSP) connection 
       
   215         * is resolved using one of the identity providers which have 
       
   216         * been associated with this contract (typically an URN).
       
   217         * This constructor is ASYNCHRONOUS and the actual state of newly
       
   218         * created connection has to be observed from SetStatus() AND
       
   219         * HandleErrorL() functions.
       
   220         * If service is found, a SetStatus call-back with value
       
   221         * KSenConnectionStatusReady (1) is executed.
       
   222         * If some error occurs, HandleErrorL() will be called to inform the
       
   223         * creator of this connection (service consumer application)
       
   224         *
       
   225         *    For example, if service is not found, a system wide error
       
   226         *    code of -1 is deliver via HandleErrorL() to WSC.
       
   227         *
       
   228         *    Second example: server response HTTP 501 means, that this error
       
   229         *    code. 501 will be delivered via HandleErrorL() to WSC.
       
   230         *    This can happen in ID-WSF connection being initialized, if
       
   231         *    either Authentication Service (AS) or Discovery Service (DS)
       
   232         *    cannot be reached.
       
   233         *
       
   234         * @param aConsumer      (web) service consumer (for call-backs)
       
   235         * @param aContract      contract of the service, typically an URI.
       
   236         * @return a pointer to a CSenServiceConnection instance.
       
   237         *                       The pointer is left on the cleanup stack.
       
   238         */
       
   239         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aObserver,
       
   240                                                      const TDesC8& aContract);
       
   241 
       
   242         /**
       
   243         * Two-phased constructor using a service description.
       
   244         * This constructor is ASYNCHRONOUS and the actual state of
       
   245         * created connection has to be observed from SetStatus() and
       
   246         * HandleErrorL() functions.
       
   247         * If service is found, the SetStatus() call-back is executed
       
   248         * with a status value KSenConnectionStatusReady (1)
       
   249         * For ID-WSF connections, the authentication for the Web Service
       
   250         * Provider (WSP) connection is resolved using one of the identity 
       
   251         * providers which have been associated with the contract found in 
       
   252         * the SD. At minimum, the contract of the service (typically some URN)
       
   253         * has to provided in the SD.
       
   254         * Basic Web Service consumers instantiate a SD where an endpoint
       
   255         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   256         * @param    aObserver connection observer.
       
   257         * @param    aServiceDescription is the description used to
       
   258         *               obtain a service connection.
       
   259         * @return   a pointer to a CSenServiceConnection instance.
       
   260         */
       
   261         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aObserver,
       
   262                                                     MSenServiceDescription& aServiceDescription);
       
   263 
       
   264         /**
       
   265         * Two-phased constructor using a service description. The pointer
       
   266         * is left on the cleanup stack.
       
   267         * This constructor is ASYNCHRONOUS and the actual state of
       
   268         * created connection has to be observed from SetStatus() AND
       
   269         * HandleErrorL() functions.
       
   270         * If service is found, the SetStatus() call-back is executed
       
   271         * with a status value KSenConnectionStatusReady (1)
       
   272         * For ID-WSF connections, the authentication for the Web Service
       
   273         * Provider (WSP) connection is resolved using one of the identity 
       
   274         * providers which have been associated with the contract found in 
       
   275         * the SD. At minimum, the contract of the service (typically some URN)
       
   276         * has to provided in the SD.
       
   277         * Basic Web Service consumers instantiate a SD where an endpoint
       
   278         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   279         * @param    aObserver connection observer.
       
   280         * @param    aServiceDescription is the description used to
       
   281         *               obtain a service connection.
       
   282         * @return   a pointer to a CSenServiceConnection instance.
       
   283         *               The pointer is left on the cleanup stack.
       
   284         */
       
   285         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aObserver,
       
   286                                                      MSenServiceDescription& aServiceDescription);
       
   287 
       
   288         /*
       
   289         * The ServicePattern version of two phased constructor. 
       
   290         * Note, that this method is intended to be used by service consumers
       
   291         * wishing to initialize connection in specific context called
       
   292         * consumer policy. In consumer policy, certain properties 
       
   293         * can be set to further define what kind of connection is acceptable
       
   294         * and how the connection interacts with transport (for example, which
       
   295         * Internet Access Point (IAP) will be used).
       
   296         * However, any ConsumerPolicy feature is applicable in 
       
   297         * one-policy-per-client scope and not used as a common policy.
       
   298         * To set permanent information about known WSP, please use the
       
   299         * CSenXmlServiceDescription, which implements MSenProviderPolicy
       
   300         * interface.
       
   301         * This constructor is ASYNCHRONOUS and the actual state of
       
   302         * created connection has to be observed from SetStatus() and
       
   303         * HandleErrorL() functions.
       
   304         * If service is found, the SetStatus() call-back is executed
       
   305         * with a status value KSenConnectionStatusReady (1)
       
   306         * For ID-WSF connections, the authentication for the Web Service
       
   307         * Provider (WSP) connection is resolved using one of the identity 
       
   308         * providers which have been associated with the contract found in 
       
   309         * the SD. At minimum, the contract of the service (typically some URN)
       
   310         * has to provided in the SD.
       
   311         * Basic Web Service consumers instantiate a SD where an endpoint
       
   312         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   313         * @param    aObserver connection observer.
       
   314         * @param    aServiceDescription is the description used to
       
   315         *               obtain a service connection. 
       
   316         * @return   a pointer to a CSenServiceConnection instance.
       
   317         */
       
   318         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aObserver,
       
   319                                                     CSenServicePattern& aServicePattern);
       
   320     
       
   321         /*
       
   322         * The ServicePattern version of two phased constructor. 
       
   323         * Note, that this method is intended to be used by service consumers
       
   324         * wishing to initialize connection in specific context called
       
   325         * consumer policy. In consumer policy, certain properties 
       
   326         * can be set to further define what kind of connection is acceptable
       
   327         * and how the connection interacts with transport (for example, which
       
   328         * Internet Access Point (IAP) will be used).
       
   329         * However, any ConsumerPolicy feature is applicable in 
       
   330         * one-policy-per-client scope and not used as a common policy.
       
   331         * To set permanent information about known WSP, please use the
       
   332         * CSenXmlServiceDescription, which implements MSenProviderPolicy
       
   333         * interface.
       
   334         * This constructor is ASYNCHRONOUS and the actual state of
       
   335         * created connection has to be observed from SetStatus() and
       
   336         * HandleErrorL() functions.
       
   337         * If service is found, the SetStatus() call-back is executed
       
   338         * with a status value KSenConnectionStatusReady (1)
       
   339         * For ID-WSF connections, the authentication for the Web Service
       
   340         * Provider (WSP) connection is resolved using one of the identity 
       
   341         * providers which have been associated with the contract found in 
       
   342         * the SD. At minimum, the contract of the service (typically some URN)
       
   343         * has to provided in the SD.
       
   344         * Basic Web Service consumers instantiate a SD where an endpoint
       
   345         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   346         * @param    aObserver connection observer.
       
   347         * @param    aServiceDescription is the description used to
       
   348         *               obtain a service connection. 
       
   349         * @return   a pointer to a CSenServiceConnection instance.
       
   350         *               The pointer is left on the cleanup stack.
       
   351         */
       
   352         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aObserver,
       
   353                                                      CSenServicePattern& aServicePattern);
       
   354         
       
   355         /**
       
   356         * Two-phased constructor intended for Identity based service 
       
   357         * consumers (like ID-WSF). The pointer is left on the cleanup stack.
       
   358         * This constructor is ASYNCHRONOUS and the actual state of
       
   359         * created connection has to be observed from SetStatus() AND
       
   360         * HandleErrorL() functions.
       
   361         * If service is found, the SetStatus() call-back is performed
       
   362         * with a status value KSenConnectionStatusReady (1).
       
   363         * Contract of the service (typically some URN) is provided.
       
   364         * Authentication for the Web Service Provider (WSP) connection 
       
   365         * is resolved using one of the identity providers which have 
       
   366         * been associated with this contract (typically an URN).
       
   367         *
       
   368         * This constructor is ASYNCHRONOUS and the actual state of newly
       
   369         * created connection has to be observed from SetStatus() AND
       
   370         * HandleErrorL() functions.
       
   371         * If service is found, a SetStatus call-back with value
       
   372         * KSenConnectionStatusReady (1) is executed.
       
   373         * If some error occurs, HandleErrorL() will be called to inform the
       
   374         * creator of this connection (service consumer application)
       
   375         *
       
   376         *    For example, if service is not found, a system wide error
       
   377         *    code of -1 is deliver via HandleErrorL() to WSC.
       
   378         *
       
   379         *    Second example: server response HTTP 501 means, that this error
       
   380         *    code. 501 will be delivered via HandleErrorL() to WSC.
       
   381         *    This can happen in ID-WSF connection being initialized, if
       
   382         *    either Authentication Service (AS) or Discovery Service (DS)
       
   383         *    cannot be reached.
       
   384         *
       
   385         * @param aConsumer      (web) service consumer (for call-backs)
       
   386         * @param aContract      contract of the service, typically an URI.
       
   387         * @return a pointer to a CSenServiceConnection instance.
       
   388         * @param aAuthProvider      Authentication Provider
       
   389         */        
       
   390         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aConsumer,
       
   391                                                     const TDesC8& aContract,
       
   392                                                     MSenExtendedConsumerInterface& aExtendedConsumer);
       
   393         /**
       
   394         * Two-phased constructor intended for Identity based service 
       
   395         * consumers (like ID-WSF). 
       
   396         * This constructor is ASYNCHRONOUS and the actual state of
       
   397         * created connection has to be observed from SetStatus() and
       
   398         * HandleErrorL() functions.
       
   399         * If service is found, the SetStatus() call-back is performed
       
   400         * with a status value KSenConnectionStatusReady (1).
       
   401         * Contract of the service (typically some URN) is provided.
       
   402         * Authentication for the Web Service Provider (WSP) connection 
       
   403         * is resolved using one of the identity providers which have 
       
   404         * been associated with this contract (typically an URN).
       
   405         * This constructor is ASYNCHRONOUS and the actual state of newly
       
   406         * created connection has to be observed from SetStatus() AND
       
   407         * HandleErrorL() functions.
       
   408         * If service is found, a SetStatus call-back with value
       
   409         * KSenConnectionStatusReady (1) is executed.
       
   410         * If some error occurs, HandleErrorL() will be called to inform the
       
   411         * creator of this connection (service consumer application)
       
   412         *
       
   413         *    For example, if service is not found, a system wide error
       
   414         *    code of -1 is deliver via HandleErrorL() to WSC.
       
   415         *
       
   416         *    Second example: server response HTTP 501 means, that this error
       
   417         *    code. 501 will be delivered via HandleErrorL() to WSC.
       
   418         *    This can happen in ID-WSF connection being initialized, if
       
   419         *    either Authentication Service (AS) or Discovery Service (DS)
       
   420         *    cannot be reached.
       
   421         *
       
   422         * @param aConsumer      (web) service consumer (for call-backs)
       
   423         * @param aContract      contract of the service, typically an URI.
       
   424         * @param aAuthProvider      Authentication Provider        
       
   425         * @return a pointer to a CSenServiceConnection instance.
       
   426         *                       The pointer is left on the cleanup stack.
       
   427         */    
       
   428         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aConsumer,
       
   429                                                      const TDesC8& aContract,
       
   430                                                      MSenExtendedConsumerInterface& aExtendedConsumer);
       
   431     
       
   432         /**
       
   433         * Two-phased constructor using a service description.
       
   434         * This constructor is ASYNCHRONOUS and the actual state of
       
   435         * created connection has to be observed from SetStatus() and
       
   436         * HandleErrorL() functions.
       
   437         * If service is found, the SetStatus() call-back is executed
       
   438         * with a status value KSenConnectionStatusReady (1)
       
   439         * For ID-WSF connections, the authentication for the Web Service
       
   440         * Provider (WSP) connection is resolved using one of the identity 
       
   441         * providers which have been associated with the contract found in 
       
   442         * the SD. At minimum, the contract of the service (typically some URN)
       
   443         * has to provided in the SD.
       
   444         * Basic Web Service consumers instantiate a SD where an endpoint
       
   445         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   446         * @param    aConsumer connection observer.
       
   447         * @param    aServiceDescription is the description used to
       
   448         *               obtain a service connection.
       
   449         * @param 	aAuthProvider      Authentication Provider                
       
   450         * @return   a pointer to a CSenServiceConnection instance.
       
   451         */    
       
   452         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aConsumer,
       
   453                                                     MSenServiceDescription& aServiceDescription,
       
   454                                                     MSenExtendedConsumerInterface& aExtendedConsumer);
       
   455     
       
   456         /**
       
   457         * Two-phased constructor using a service description. The pointer
       
   458         * is left on the cleanup stack.
       
   459         * This constructor is ASYNCHRONOUS and the actual state of
       
   460         * created connection has to be observed from SetStatus() AND
       
   461         * HandleErrorL() functions.
       
   462         * If service is found, the SetStatus() call-back is executed
       
   463         * with a status value KSenConnectionStatusReady (1)
       
   464         * For ID-WSF connections, the authentication for the Web Service
       
   465         * Provider (WSP) connection is resolved using one of the identity 
       
   466         * providers which have been associated with the contract found in 
       
   467         * the SD. At minimum, the contract of the service (typically some URN)
       
   468         * has to provided in the SD.
       
   469         * Basic Web Service consumers instantiate a SD where an endpoint
       
   470         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   471         * @param    aConsumer connection observer.
       
   472         * @param    aServiceDescription is the description used to
       
   473         *               obtain a service connection.
       
   474         * @param 	aAuthProvider      Authentication Provider                        
       
   475         * @return   a pointer to a CSenServiceConnection instance.
       
   476         *               The pointer is left on the cleanup stack.
       
   477         */    
       
   478         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aConsumer,
       
   479                                                      MSenServiceDescription& aServiceDescription,
       
   480                                                      MSenExtendedConsumerInterface& aExtendedConsumer);
       
   481     
       
   482         /*
       
   483         * The ServicePattern version of two phased constructor. 
       
   484         * Note, that this method is intended to be used by service consumers
       
   485         * wishing to initialize connection in specific context called
       
   486         * consumer policy. In consumer policy, certain properties 
       
   487         * can be set to further define what kind of connection is acceptable
       
   488         * and how the connection interacts with transport (for example, which
       
   489         * Internet Access Point (IAP) will be used).
       
   490         * However, any ConsumerPolicy feature is applicable in 
       
   491         * one-policy-per-client scope and not used as a common policy.
       
   492         * To set permanent information about known WSP, please use the
       
   493         * CSenXmlServiceDescription, which implements MSenProviderPolicy
       
   494         * interface.
       
   495         * This constructor is ASYNCHRONOUS and the actual state of
       
   496         * created connection has to be observed from SetStatus() and
       
   497         * HandleErrorL() functions.
       
   498         * If service is found, the SetStatus() call-back is executed
       
   499         * with a status value KSenConnectionStatusReady (1)
       
   500         * For ID-WSF connections, the authentication for the Web Service
       
   501         * Provider (WSP) connection is resolved using one of the identity 
       
   502         * providers which have been associated with the contract found in 
       
   503         * the SD. At minimum, the contract of the service (typically some URN)
       
   504         * has to provided in the SD.
       
   505         * Basic Web Service consumers instantiate a SD where an endpoint
       
   506         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   507         * @param    aConsumer connection observer.
       
   508         * @param    aServiceDescription is the description used to
       
   509         *               obtain a service connection.
       
   510         * @param 	aAuthProvider      Authentication Provider                                 
       
   511         * @return   a pointer to a CSenServiceConnection instance.
       
   512         */    
       
   513         IMPORT_C static CSenServiceConnection* NewL(MSenServiceConsumer& aConsumer,
       
   514                                                     CSenServicePattern& aServicePattern,
       
   515                                                     MSenExtendedConsumerInterface& aExtendedConsumer);
       
   516 
       
   517         /*
       
   518         * The ServicePattern version of two phased constructor. 
       
   519         * Note, that this method is intended to be used by service consumers
       
   520         * wishing to initialize connection in specific context called
       
   521         * consumer policy. In consumer policy, certain properties 
       
   522         * can be set to further define what kind of connection is acceptable
       
   523         * and how the connection interacts with transport (for example, which
       
   524         * Internet Access Point (IAP) will be used).
       
   525         * However, any ConsumerPolicy feature is applicable in 
       
   526         * one-policy-per-client scope and not used as a common policy.
       
   527         * To set permanent information about known WSP, please use the
       
   528         * CSenXmlServiceDescription, which implements MSenProviderPolicy
       
   529         * interface.
       
   530         * This constructor is ASYNCHRONOUS and the actual state of
       
   531         * created connection has to be observed from SetStatus() and
       
   532         * HandleErrorL() functions.
       
   533         * If service is found, the SetStatus() call-back is executed
       
   534         * with a status value KSenConnectionStatusReady (1)
       
   535         * For ID-WSF connections, the authentication for the Web Service
       
   536         * Provider (WSP) connection is resolved using one of the identity 
       
   537         * providers which have been associated with the contract found in 
       
   538         * the SD. At minimum, the contract of the service (typically some URN)
       
   539         * has to provided in the SD.
       
   540         * Basic Web Service consumers instantiate a SD where an endpoint
       
   541         * and framework ID KDefaultBasicWebServicesFrameworkID are defined.
       
   542         * @param    aConsumer connection observer.
       
   543         * @param    aServiceDescription is the description used to
       
   544         *               obtain a service connection.
       
   545         * @param 	aAuthProvider      Authentication Provider                                          
       
   546         * @return   a pointer to a CSenServiceConnection instance.
       
   547         *               The pointer is left on the cleanup stack.
       
   548         */
       
   549         IMPORT_C static CSenServiceConnection* NewLC(MSenServiceConsumer& aConsumer,
       
   550                                                      CSenServicePattern& aServicePattern,
       
   551                                                      MSenExtendedConsumerInterface& aExtendedConsumer);
       
   552 
       
   553         // New functions
       
   554 
       
   555         /**
       
   556         * Send an ASYNCHRONOUS request to a service.
       
   557         * In ID-WSF, the request data is a SOAP Body.
       
   558         * Response message is received either via 
       
   559         * HandleMessageL() or HandleErrorL() callback.
       
   560         * There are two default frameworks available - 
       
   561         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   562         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   563         * Please note, that Basic Web Services framework does NOT support this method.
       
   564         * Instead, one should send complete SOAP envelopes using SendL(CSenSoapEnvelope&).
       
   565         * So, currently this method is supported only in ID-WSF.
       
   566         * @param aRequest outgoing request message.
       
   567         * @return Transaction ID (positive integer) or error code, if method fails.
       
   568         * Transaction ids:
       
   569         * Positive integers                 SendL returns transaction ID of the request,
       
   570         *                                   which can be later on utilized inside
       
   571         *                                   HandleMessageL and HandleErrorL methods,
       
   572         *                                   in order to map request and its response
       
   573         *                                   together.
       
   574         * Error codes:
       
   575         * KErrSenNotInitialized             Connection has not been initialized.
       
   576         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   577         *                                   request.
       
   578         * KErrConnectionInitializing        Connection is still initializing and
       
   579         *                                   cannot yet process commands.
       
   580         * KErrConnectionExpired             Credential for the connection is 
       
   581         *                                   expired and needs to be renewed. 
       
   582         *                                   This can be done by instantiating a new
       
   583         *                                   ServiceConnection.
       
   584         * KErrSubmitting                    An error occurred
       
   585         * KErrNoMemory                      Not enough memory to process the message.
       
   586         * Other error codes are system-wide Symbian error codes.
       
   587         */
       
   588         virtual TInt SendL(const TDesC8& aRequest) = 0;
       
   589 
       
   590 
       
   591         /**
       
   592         * Submit a synchronous request to a service
       
   593         * (in ID-WSF, the SOAP message Body) and receive a response as XML.
       
   594         * There are two default frameworks available -
       
   595         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   596         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   597         * Please note, that Basic Web Services framework does NOT support this method.
       
   598         * Instead, one must send complete SOAP envelopes using SubmitL(CSenSoapEnvelope&).
       
   599         * So, currently this method is supported only in ID-WSF.
       
   600         * @param aRequest outgoing request message.
       
   601         * @param aResponse the resolved response message.
       
   602         *        The ownership of the aResponse is transfered to the caller.
       
   603         *        The response is service specific part of the response. 
       
   604         *        For ID-WSF services response contents is the SOAP Body, or complete SOAP 
       
   605         *        envelope as XML, depending on the complete server messages on/off setting 
       
   606         *       (default is off).
       
   607         * @return status/error code.
       
   608         * Status codes:
       
   609         * KErrNone                          ok
       
   610         * Error codes:
       
   611         * KErrSenNotInitialized             Connection has not been initialized.
       
   612         * KErrSenServiceConnectionBusy      Connection is already busy with another request.
       
   613         * KErrConnectionInitializing        Connection is still initializing and
       
   614         *                                   cannot yet process commands.
       
   615         * KErrConnectionExpired             Credential for the connection is 
       
   616         *                                   expired and needs to be renewed. 
       
   617         *                                   This can be done by instantiating a new
       
   618         *                                   ServiceConnection.
       
   619         * KErrSubmitting                    An internal error occurred.
       
   620         * KErrSenInternal                   Internal state is invalid.
       
   621         * Other error codes are system-wide Symbian error codes.
       
   622         */
       
   623         virtual TInt SubmitL(const TDesC8& aRequest, HBufC8*& aResponse) = 0;
       
   624 
       
   625         
       
   626         /**
       
   627         * Consumer application can use this method to check that 
       
   628         * service connection is in ready state.
       
   629         * In ID-WSF, this means that WSF interprets that credentials 
       
   630         * for the service connection are valid (not expired).
       
   631         * @param aReady indicates that the connection is ready to be used.
       
   632         * @return           status/error code.
       
   633         * Status codes:
       
   634         * KErrNone               ok
       
   635         * Error codes are system-wide Symbian error codes.
       
   636         */
       
   637         virtual TInt IsReady(TBool& aReady) = 0;
       
   638 
       
   639 
       
   640         /**
       
   641         * Check if the underlying service connection has a certain characteristic
       
   642         * called a facet.
       
   643         * Currently, only ID-WSF framework supports facets.
       
   644         * For example, if consumer application is interested to resolve if 
       
   645         * initialized service connection has a facet indicating that service
       
   646         * is free of charge (for e.g. "urn:framework.com.free:cost"), the 
       
   647         * method used to check this would be:
       
   648         * _LIT8(KFacetOfFreeService, "urn:some.service.free:cost");
       
   649         * int err = HasFacetL(KFacetOfFreeService, hasFacet);
       
   650         *
       
   651         * In the service session of initialed connection, this would be the form 
       
   652         * of the facet element:
       
   653         * <Facet name="urn:framework.com.free:cost"/>
       
   654         *
       
   655         * If there is no facet in the service connection then the element is not
       
   656         * present.
       
   657         * @param aURI           the name of the facet
       
   658         * @param aHasFacet      will indicate if underlying service has a certain
       
   659         *                       characteristic.
       
   660         * @return status/error code.
       
   661         * Status codes:
       
   662         * KErrNone                          ok
       
   663         * Error codes:
       
   664         * KErrSenNotInitialized             Connection has not been initialized.
       
   665         * KErrConnectionInitializing        Connection is still initializing and
       
   666         *                                   cannot yet process commands.
       
   667         * KErrConnectionExpired             Connection is expired and needs to be
       
   668         *                                   renewed.
       
   669         * KErrBadDescriptor                 The aUri parameter was an invalid
       
   670         *                                   descriptor.
       
   671         * Other error codes are system-wide Symbian error codes.
       
   672         */
       
   673         virtual TInt HasFacetL(const TDesC8& aURI, TBool& aHasFacet) = 0;
       
   674 
       
   675 
       
   676         /**
       
   677         * Consumer application can use this method to set flag which defines
       
   678         * whether or not the consumer wishes to receive complete SOAP envelope 
       
   679         * from the service.
       
   680         * If complete server messages mode is off, then only the <Body> element
       
   681         * is received from the SOAP envelope, otherwise full SOAP envelope.
       
   682         * Note: Calling this function must not be done before connection is 
       
   683         * initialized (the observer's SetStatus() has been called with value 
       
   684         * KSenConnectionStatusReady).
       
   685         * Calling this function should be done before sending or submitting
       
   686         * anything.
       
   687         * @param aCompleteOnOff defines the content of HandleMessageL() callback.   
       
   688         *              If set to ETrue (ON), then complete SOAP envelopes are
       
   689         *              received, including <Header> element.
       
   690         *              If set to EFalse (OFF), only the service specific
       
   691         *              content - SOAP envelope <Body> element - is received.
       
   692         *              In WSF frameworks the default settings are:
       
   693         *              1. In ID-WSF, the complete server messages is OFF.
       
   694         *              2. In Basic Web Services, the default is ON.
       
   695         * @return status/error code.
       
   696         * Status codes:
       
   697         * KErrNone                          ok
       
   698         * Error codes:
       
   699         * KErrSenNotInitialized             Connection has not been initialized.
       
   700         * KErrConnectionInitializing        Connection is still initializing and
       
   701         *                                   cannot yet process commands.
       
   702         * KErrConnectionExpired             Connection is expired and needs to be
       
   703         *                                   renewed.
       
   704         * Other error codes are system-wide Symbian error codes.
       
   705         */
       
   706         virtual TInt CompleteServerMessagesOnOff(const TBool& aCompleteOnOff) = 0;
       
   707 
       
   708 
       
   709         /*
       
   710         * Sends a SOAP message to the service. The SOAP envelope may contain
       
   711         * proprietary headers. The system will augment the message with the
       
   712         * appropriate headers specified in the service invocation framework,
       
   713         * so a client application should add only non-standard headers; and
       
   714         * if it doesn't need to set such headers it is strongly recommended
       
   715         * to use SendL(TDesC8&), which is meant for that.
       
   716         * This is an asynchronous function, that returns immediately.
       
   717         * When the service responds, the SOAP envelope content will
       
   718         * be received via HandleMessageL() callback. In case of an
       
   719         * error - like a SOAP fault - HandleErrorL() will be called
       
   720         * with appropriate error code.
       
   721         * There are two default frameworks available -
       
   722         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   723         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   724         * Please note, that ID-WSF does NOT support this method. 
       
   725         * Instead, one should send SOAP envelope Bodies using 
       
   726         * SendL(const TDesC8&).
       
   727         * So, currently this method is supported only in Basic Web Services framework.
       
   728         * @param aMessage  The service specific message - a full SOAP envelope 
       
   729         * @return Transaction ID (positive integer) or error code, if method fails.
       
   730         * Transaction ids:
       
   731         * Positive integers                 SendL returns transaction ID of the request,
       
   732         *                                   which can be later on utilized inside
       
   733         *                                   HandleMessageL and HandleErrorL methods,
       
   734         *                                   in order to map request and its response
       
   735         *                                   together.
       
   736         * Error codes:
       
   737         * KErrSenNotInitialized             Connection has not been initialized.
       
   738         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   739         *                                   request.
       
   740         * KErrConnectionInitializing        Connection is still initializing and
       
   741         *                                   cannot yet process commands.
       
   742         * KErrConnectionExpired             Connection is expired and needs to be
       
   743         *                                   renewed.
       
   744         * KErrSubmitting                    An internal error has occurred.
       
   745         * KErrNoMemory                      Not enough memory to process the 
       
   746         *                                   message.
       
   747         * Other error codes are system-wide Symbian error codes.
       
   748         */
       
   749         virtual TInt SendL(CSenSoapEnvelope& aMessage) = 0;
       
   750 
       
   751 
       
   752         /*
       
   753         * Submits a SOAP message to the service. This is a synchronous call,
       
   754         * returning  a SOAP envelope that was received from the service.
       
   755         * There are two default frameworks available:
       
   756         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   757         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   758         * Please note, that ID-WSF does NOT support this method. 
       
   759         * Instead, one should send SOAP envelope Bodies using SendL(const TDesC8&).
       
   760         * So, currently this method is supported only in Basic Web Services framework.
       
   761         * @param    aMessage SOAPEnvelope with the service specific message
       
   762         *                    without any framework wrapping
       
   763         * @param    aResponseTo  This is a ref-to-pointer where response 
       
   764         *                        from the service will be allocated. If the
       
   765         *                        complete server messages mode is set to OFF,
       
   766         *                        then only <Body> element will be returned, 
       
   767         *                        otherwise a complete SOAP envelope.
       
   768         *                        The ownership of aResponse is transfered to 
       
   769         *                        the caller.
       
   770         * @return status/error code
       
   771         * Status codes:
       
   772         * KErrNone                          ok
       
   773         * Error codes:
       
   774         * KErrSenNotInitialized             Connection has not been initialized.
       
   775         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   776         *                                   request.
       
   777         * KErrConnectionInitializing        Connection is still initializing and
       
   778         *                                   cannot yet process commands.
       
   779         * KErrConnectionExpired             Connection is expired and needs to be
       
   780         *                                   renewed.
       
   781         * KErrSubmitting                    An internal error has occurred.
       
   782         * KErrNoMemory                      Not enough memory to process the 
       
   783         *                                   message.
       
   784         * KErrSenInternal                   Internal state is invalid.
       
   785         * Other error codes are system-wide Symbian error codes.
       
   786         */
       
   787         virtual TInt SubmitL(CSenSoapEnvelope& aMessage, HBufC8*& aResponseTo) = 0;
       
   788 
       
   789 
       
   790         /**
       
   791         * Gets service description of current connection.
       
   792         * @param aServiceDescription Contains the service description on return
       
   793         * @return status/error code.
       
   794         * Status codes:
       
   795         * KErrNone                          ok
       
   796         * Error codes:
       
   797         * KErrSenNotInitialized             Connection has not been initialized.
       
   798         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   799         *                                   request.
       
   800         * KErrConnectionInitializing        Connection is still initializing and
       
   801         *                                   cannot yet process commands.
       
   802         * KErrConnectionExpired             Connection is expired and needs to be
       
   803         *                                   renewed.
       
   804         * KErrUnderFlow                     Server side returned invalid service
       
   805         *                                   description.
       
   806         * KErrUnknown                       Client-Server request mismatch.
       
   807         * Other error codes are system-wide Symbian error codes.
       
   808         */
       
   809         virtual TInt ServiceDescriptionL(HBufC8*& aServiceDescription) = 0;
       
   810 
       
   811 
       
   812         /**
       
   813         * Starts an application level transaction. The consumer may now start 
       
   814         * to communicate with some service withing a chain of correlated messages.
       
   815         * When responding to a certain SOAP message inside a transaction, the last
       
   816         * received message ID is used as "refToMessageId". 
       
   817         * From default frameworks, only ID-WSF supports transactions.
       
   818         * @return   KErrNone if no errors occur.
       
   819         *           Other error codes are system-wide Symbian error codes.
       
   820         */
       
   821         virtual TInt StartTransaction() = 0;
       
   822 
       
   823 
       
   824         /**
       
   825         * Stops application level transaction by resetting the "refToMessageId".
       
   826         * After stopping a transaction the next message will have no 
       
   827         * "refToMessageId"
       
   828         * @return   KErrNone if no errors occur.
       
   829         *           Other error codes are system-wide Symbian error codes.
       
   830         */
       
   831         virtual TInt TransactionCompleted() = 0;
       
   832 
       
   833 
       
   834         /*
       
   835         * Returns the transasction ID of this message or error. Id is guaranteed
       
   836         * to return unique ID  when called from inside HandleMessageL() or 
       
   837         * HandleErrorL callback. This transasction ID may be used to map the 
       
   838         * response with the preceedeing SendL() call (a request).
       
   839         * @return TInt transaction ID, or KErrNotFound, if no transaction is
       
   840         * on-going.
       
   841         */
       
   842         virtual TInt TxnId() = 0;
       
   843 
       
   844 
       
   845         /**
       
   846         * Sets transport specific properties which apply as long as this connection
       
   847         * is alive (session). Furthermore, the properties are effective for this session
       
   848         * in cumulative manner: each property has unique key (name) which is associated
       
   849         * to the actual value of that property. When SetTransportPropertiesL method is 
       
   850         * called multiple times - in sequence - the last value for each key overrides any
       
   851         * previous definitions. If any latter call introduces new keys (property names),
       
   852         * they are appended to the list of currently effective properties. 
       
   853         * Also note, that it is also possible to set message specific properties when making
       
   854         * a SendL/SubmitL call. If such transport properties for message are provided, and
       
   855         * those include updates to some properties, the new ones are effective only for that
       
   856         * certain message, i.e. those are transaction specific. For any following message,
       
   857         * that is sent over a service connection, the session specific properties apply,
       
   858         * assuming that the new message does not (again) override some of the property values.
       
   859         * @param aProperties contains the transport properties in serialized (UTF-8) form.
       
   860         * With HTTP, this descriptor is typically created by utilizing CSenHttpProperties class.
       
   861         * @return KErrNone if successful or otherwise some system-wide error code.
       
   862         */
       
   863         virtual TInt SetTransportPropertiesL(const TDesC8& aProperties) = 0;
       
   864 
       
   865 
       
   866         /*
       
   867         * Method returns currently effective transport properties as a serialized
       
   868         * descriptor. With HTTP, one may utilize CSenHttpProperities class in
       
   869         * order to read this data into properties object. Note that returned 
       
   870         * list of properties also includes properties, which are defined as default
       
   871         * for certain transport in the webservice framework.
       
   872         */
       
   873         virtual TInt TransportPropertiesL(HBufC8*& aProperties) = 0;
       
   874 
       
   875 
       
   876         /**
       
   877         * Send an ASYNCHRONOUS request to a service.
       
   878         * In ID-WSF, the request data is a SOAP Body.
       
   879         * Response message is received either via 
       
   880         * HandleMessageL() or HandleErrorL() callback.
       
   881         * There are two default frameworks available - 
       
   882         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   883         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   884         * Please note, that Basic Web Services framework does NOT support this method.
       
   885         * Instead, one should send complete SOAP envelopes using SendL(CSenSoapEnvelope&).
       
   886         * So, currently this method is supported only in ID-WSF.
       
   887         * @param aRequest outgoing request message.
       
   888         * @param aProperties contains transport spesific properties, serialized
       
   889         * into descriptor. With HTTP, one can create this by utilizing specialized
       
   890         * CSenHttpProperties class.
       
   891         * @return Transaction ID (positive integer) or error code, if method fails.
       
   892         * Transaction ids:
       
   893         * Positive integers                 SendL returns transaction ID of the request,
       
   894         *                                   which can be later on utilized inside
       
   895         *                                   HandleMessageL and HandleErrorL methods,
       
   896         *                                   in order to map request and its response
       
   897         *                                   together.
       
   898         * Error codes
       
   899         * KErrSenNotInitialized             Connection has not been initialized.
       
   900         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   901         *                                   request.
       
   902         * KErrConnectionInitializing        Connection is still initializing and
       
   903         *                                   cannot yet process commands.
       
   904         * KErrConnectionExpired             Credential for the connection is 
       
   905         *                                   expired and needs to be renewed. 
       
   906         *                                   This can be done by instantiating a new
       
   907         *                                   ServiceConnection.
       
   908         * KErrSubmitting                    An error occurred
       
   909         * KErrNoMemory                      Not enough memory to process the message.
       
   910         * Other error codes are system-wide Symbian error codes.
       
   911         */
       
   912         virtual TInt SendL(const TDesC8& aRequest, const TDesC8& aProperties) = 0;
       
   913 
       
   914         
       
   915         /**
       
   916         * Submit a request via SYNCHRONOUS call to a service
       
   917         * (in ID-WSF, the SOAP message Body) and receive a response as XML.
       
   918         * There are two default frameworks available -
       
   919         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   920         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   921         * Please note, that Basic Web Services framework does NOT support this method.
       
   922         * Instead, one must send complete SOAP envelopes using SubmitL(CSenSoapEnvelope&).
       
   923         * So, currently this method is supported only in ID-WSF.
       
   924         * @param aRequest outgoing request message.
       
   925         * @param aResponse the resolved response message.
       
   926         *        The ownership of the aResponse is transfered to the caller.
       
   927         *        The response is service specific part of the response. 
       
   928         *        For ID-WSF services response contents is the SOAP Body, or complete SOAP 
       
   929         *        envelope as XML, depending on the complete server messages on/off setting 
       
   930         *       (default is off).
       
   931         * @param aProperties contains transport spesific properties, serialized
       
   932         * into descriptor. With HTTP, one can create this by utilizing specialized
       
   933         * CSenHttpProperties class.
       
   934         * @return status/error code.
       
   935         * Status codes:
       
   936         * KErrNone                          ok
       
   937         * Error codes:
       
   938         * KErrSenNotInitialized             Connection has not been initialized.
       
   939         * KErrSenServiceConnectionBusy      Connection is already busy with another request.
       
   940         * KErrConnectionInitializing        Connection is still initializing and
       
   941         *                                   cannot yet process commands.
       
   942         * KErrConnectionExpired             Credential for the connection is 
       
   943         *                                   expired and needs to be renewed. 
       
   944         *                                   This can be done by instantiating a new
       
   945         *                                   ServiceConnection.
       
   946         * KErrSubmitting                    An internal error occurred.
       
   947         * KErrSenInternal                   Internal state is invalid.
       
   948         * Other error codes are system-wide Symbian error codes.
       
   949         */
       
   950         virtual TInt SubmitL(const TDesC8& aRequest, const TDesC8& aProperties, HBufC8*& aResponse) = 0;
       
   951 
       
   952 
       
   953         /*
       
   954         * Sends a SOAP message to the service. The SOAP envelope may contain
       
   955         * proprietary headers. The system will augment the message with the
       
   956         * appropriate headers specified in the service invocation framework,
       
   957         * so a client application should add only non-standard headers; and
       
   958         * if it doesn't need to set such headers it is strongly recommended
       
   959         * to use SendL(TDesC8&), which is meant for this.
       
   960         * This is an asynchronous function, that returns immediately.
       
   961         * When the service responds, the SOAP envelope content will
       
   962         * be received via HandleMessageL() callback. In case of an
       
   963         * error - like a SOAP fault - HandleErrorL() will be called
       
   964         * with appropriate error code.
       
   965         * There are two default frameworks available -
       
   966         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
   967         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
   968         * Please note, that ID-WSF does NOT support this method. 
       
   969         * Instead, one should send SOAP envelope Bodies using 
       
   970         * SendL(const TDesC8&).
       
   971         * So, currently this method is supported only in Basic Web Services framework.
       
   972         *
       
   973         * NOTE:
       
   974         * Message is send as serialized XML or Soap message to SendL 
       
   975         * aProperties could be "HTTP GET" or "HTTP DELETE"  
       
   976         * HTTP GET or HTTP DELETE transport property has been enabled via CSenHttpTransportProperties. 
       
   977         * This scenario is not supported  
       
   978         *
       
   979         * @param aMessage  The service specific message - a full SOAP envelope 
       
   980         * @param aProperties contains transport spesific properties, serialized
       
   981         * into descriptor. With HTTP, one can create this by utilizing specialized
       
   982         * CSenHttpProperties class.
       
   983         * @return Transaction ID (positive integer) or error code, if method fails.
       
   984         * Transaction ids:
       
   985         * Positive integers                 SendL returns transaction ID of the request,
       
   986         *                                   which can be later on utilized inside
       
   987         *                                   HandleMessageL and HandleErrorL methods,
       
   988         *                                   in order to map request and its response
       
   989         *                                   together.
       
   990         * Error codes:
       
   991         * KErrSenNotInitialized             Connection has not been initialized.
       
   992         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
   993         *                                   request.
       
   994         * KErrConnectionInitializing        Connection is still initializing and
       
   995         *                                   cannot yet process commands.
       
   996         * KErrConnectionExpired             Connection is expired and needs to be
       
   997         *                                   renewed.
       
   998         * KErrSubmitting                    An internal error has occurred.
       
   999         * KErrNoMemory                      Not enough memory to process the 
       
  1000         *                                   message.
       
  1001         * KErrNotSupported					HTTP GET or HTTP DELETE is enabled        
       
  1002         * Other error codes are system-wide Symbian error codes.
       
  1003         */
       
  1004         virtual TInt SendL(CSenSoapEnvelope& aMessage, const TDesC8& aProperties) = 0;
       
  1005 
       
  1006         /*
       
  1007         * Submits a SOAP message to the service. This is a synchronous call,
       
  1008         * returning  a SOAP envelope that was received from the service.
       
  1009         * There are two default frameworks available:
       
  1010         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
  1011         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
  1012         * Please note, that ID-WSF does NOT support this method. 
       
  1013         * Instead, one should send SOAP envelope Bodies using SendL(const TDesC8&).
       
  1014         * So, currently this method is supported only in Basic Web Services framework.
       
  1015         *
       
  1016         * NOTE:
       
  1017         * Message is send as serialized XML or Soap message to SubmitL 
       
  1018         * aProperties could be "HTTP GET" or "HTTP DELETE"  
       
  1019         * HTTP GET or HTTP DELETE transport property has been enabled via CSenHttpTransportProperties. 
       
  1020         * This scenario is not supported
       
  1021         *
       
  1022         * @param aMessage SOAPEnvelope with the service specific message
       
  1023         * without any framework wrapping
       
  1024         * @param aProperties contains transport spesific properties, serialized
       
  1025         * into descriptor. With HTTP, one can create this by utilizing specialized
       
  1026         * CSenHttpProperties class.
       
  1027         * @param    aResponseTo  This is a ref-to-pointer where response 
       
  1028         *                        from the service will be allocated. If the
       
  1029         *                        complete server messages mode is set to OFF,
       
  1030         *                        then only <Body> element will be returned, 
       
  1031         *                        otherwise a complete SOAP envelope.
       
  1032         *                        The ownership of aResponse is transfered to 
       
  1033         *                        the caller.
       
  1034         * @return status/error code
       
  1035         * Status codes:
       
  1036         * KErrNone                          ok
       
  1037         * Error codes:
       
  1038         * KErrSenNotInitialized             Connection has not been initialized.
       
  1039         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
  1040         *                                   request.
       
  1041         * KErrConnectionInitializing        Connection is still initializing and
       
  1042         *                                   cannot yet process commands.
       
  1043         * KErrConnectionExpired             Connection is expired and needs to be
       
  1044         *                                   renewed.
       
  1045         * KErrSubmitting                    An internal error has occurred.
       
  1046         * KErrNoMemory                      Not enough memory to process the 
       
  1047         *                                   message.
       
  1048         * KErrSenInternal                   Internal state is invalid.
       
  1049         * KErrNotSupported					HTTP GET or HTTP DELETE is enabled        
       
  1050         * Other error codes are system-wide Symbian error codes.
       
  1051         */
       
  1052         virtual TInt SubmitL(CSenSoapEnvelope& aMessage, const TDesC8& aProperties, HBufC8*& aResponseTo) = 0;
       
  1053 
       
  1054         /*
       
  1055         * Sends a SOAP message to the service. The SOAP envelope may contain
       
  1056         * proprietary headers. The system will augment the message with the
       
  1057         * appropriate headers specified in the service invocation framework,
       
  1058         * so a client application should add only non-standard headers.
       
  1059         * This is an asynchronous function, that returns immediately.
       
  1060         * When the service responds, the SOAP envelope content will
       
  1061         * be received via HandleMessageL() callback. In case of an
       
  1062         * error - like a SOAP fault - HandleErrorL() will be called
       
  1063         * with appropriate error code.
       
  1064         * There are two default frameworks available -
       
  1065         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
  1066         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
  1067         * Please note, that ID-WSF does NOT support this method. 
       
  1068         * Instead, one should send SOAP envelope Bodies using 
       
  1069         * SendL(const TDesC8&).
       
  1070         * So, currently this method is supported only in Basic Web Services framework.
       
  1071         *
       
  1072         * @param aMessage  The service specific message - a full SOAP envelope 
       
  1073         * @return Transaction ID (positive integer) or error code, if method fails.
       
  1074         * Transaction ids:
       
  1075         * Positive integers                 SendL returns transaction ID of the request,
       
  1076         *                                   which can be later on utilized inside
       
  1077         *                                   HandleMessageL and HandleErrorL methods,
       
  1078         *                                   in order to map request and its response
       
  1079         *                                   together.
       
  1080         * Error codes:
       
  1081         * KErrSenNotInitialized             Connection has not been initialized.
       
  1082         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
  1083         *                                   request.
       
  1084         * KErrConnectionInitializing        Connection is still initializing and
       
  1085         *                                   cannot yet process commands.
       
  1086         * KErrConnectionExpired             Connection is expired and needs to be
       
  1087         *                                   renewed.
       
  1088         * KErrSubmitting                    An internal error has occurred.
       
  1089         * KErrNoMemory                      Not enough memory to process the 
       
  1090         *                                   message.
       
  1091         * KErrNotSupported					HTTP GET or HTTP DELETE is enabled
       
  1092         * Other error codes are system-wide Symbian error codes.
       
  1093         */
       
  1094         virtual TInt SendL(MSenMessage& aMessage) = 0;
       
  1095 
       
  1096         /*
       
  1097         * Submits a SOAP message to the service. This is a synchronous call,
       
  1098         * returning  a SOAP envelope that was received from the service.
       
  1099         * There are two default frameworks available:
       
  1100         * the Identity Based Web Service Framework (which ID is "ID-WSF") 
       
  1101         * and the Basic Web Services Framework (which ID is "WS-I"). 
       
  1102         * Please note, that ID-WSF does NOT support this method. 
       
  1103         * Instead, one should send SOAP envelope Bodies using SendL(const TDesC8&).
       
  1104         * So, currently this method is supported only in Basic Web Services framework.
       
  1105         *
       
  1106         * @param aMessage SOAPEnvelope with the service specific message
       
  1107         * without any framework wrapping
       
  1108         * @param    aResponseTo  This is a ref-to-pointer where response 
       
  1109         *                        from the service will be allocated. If the
       
  1110         *                        complete server messages mode is set to OFF,
       
  1111         *                        then only <Body> element will be returned, 
       
  1112         *                        otherwise a complete SOAP envelope.
       
  1113         *                        The ownership of aResponse is transfered to 
       
  1114         *                        the caller.
       
  1115         * @return status/error code
       
  1116         * Status codes:
       
  1117         * KErrNone                          ok
       
  1118         * Error codes:
       
  1119         * KErrSenNotInitialized             Connection has not been initialized.
       
  1120         * KErrSenServiceConnectionBusy      Connection is already busy with another
       
  1121         *                                   request.
       
  1122         * KErrConnectionInitializing        Connection is still initializing and
       
  1123         *                                   cannot yet process commands.
       
  1124         * KErrConnectionExpired             Connection is expired and needs to be
       
  1125         *                                   renewed.
       
  1126         * KErrSubmitting                    An internal error has occurred.
       
  1127         * KErrNoMemory                      Not enough memory to process the 
       
  1128         *                                   message.
       
  1129         * KErrSenInternal                   Internal state is invalid.
       
  1130         * KErrNotSupported					HTTP GET or HTTP DELETE is enabled
       
  1131         * Other error codes are system-wide Symbian error codes.
       
  1132         */
       
  1133         virtual TInt SubmitL(MSenMessage& aMessage, CSenSoapEnvelope2*& aResponseTo) = 0;
       
  1134         
       
  1135         /**
       
  1136         * Getter for currently active transaction (service response) that is
       
  1137         * being handled by the service consumer.
       
  1138         * @return a pointer to currently active transaction (service response).
       
  1139         *         It is guarenteed, that the method returns a pointer to
       
  1140         *         transaction only when called inside HandleMessageL or
       
  1141         *         HandleErrorL callback methods of MSenServiceConsumer,
       
  1142         *         otherwise it will return NULL.
       
  1143         */
       
  1144         virtual MSenMessage* Response() = 0;
       
  1145         
       
  1146         /**
       
  1147         * Cancels any active request, if pending transaction 
       
  1148         * (txn) can be found with given txn ID.
       
  1149         * @param aTransactionID is the transaction ID to be cancelled. This id has earlier been
       
  1150         * acquired from a call to some of the asynchronous SendL variants.
       
  1151 
       
  1152         * @return KErrNone on success
       
  1153         *         KErrNotFound, if there is no pending transaction (active request),
       
  1154         *         or some of the system-wide error codes otheriwise.
       
  1155         */
       
  1156         virtual TInt CancelTransaction(TInt aTransactionID) = 0;
       
  1157         
       
  1158         /**
       
  1159         * Getter for the identity provider (XML) service description. 
       
  1160         * @param apIdentityProvider will point to a new IDP instance,
       
  1161         * if such is associated with this connection (and this connection
       
  1162         * was ready before calling this method), or NULL otherwise.
       
  1163         * @return KErrNone if IDP description can be found, or some
       
  1164         * of the system wide error code otherwise.
       
  1165         */
       
  1166         virtual TInt IdentityProviderL(CSenIdentityProvider*& apIdentityProvider) = 0;
       
  1167 
       
  1168         /**
       
  1169         * Getter for the identifier  of this connection.
       
  1170         * @return the identifier as integer.
       
  1171         */
       
  1172         virtual TInt Identifier() = 0;
       
  1173         
       
  1174         /**
       
  1175         * Registers observer of BLOBs transfer progress.
       
  1176         *
       
  1177         * @param aFilesObserver Implementation of transfer progress observer.
       
  1178         */
       
  1179     
       
  1180     protected:
       
  1181         
       
  1182         /**
       
  1183         * C++ default constructor.
       
  1184         */
       
  1185         CSenServiceConnection();
       
  1186     
       
  1187     };
       
  1188 
       
  1189 #endif //SEN_SERVICE_CONNECTION_H
       
  1190 
       
  1191 // End of File
       
  1192