services/terminalmodeservice/src/upnptmserverimpl.cpp
author hgs
Fri, 03 Sep 2010 09:13:04 +0300
changeset 31 b51a6f4f15ba
parent 24 e9457ebcc4df
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
hgs
parents:
diff changeset
     1
/**
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 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: CUpnpTmServerImpl class implementation.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// Includes
hgs
parents:
diff changeset
    19
#include "upnptmserverimpl.h"
hgs
parents:
diff changeset
    20
#include "upnpiconfileservetransaction.h"
hgs
parents:
diff changeset
    21
#include "OstTraceDefinitions.h"
hgs
parents:
diff changeset
    22
#ifdef OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
    23
#include "upnptmserverimplTraces.h"
hgs
parents:
diff changeset
    24
#endif
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
//Literals
hgs
parents:
diff changeset
    28
_LIT8(KAppListStart,             "<appList>");
hgs
parents:
diff changeset
    29
_LIT8(KAppListEnd,               "</appList>");
hgs
parents:
diff changeset
    30
_LIT8(KAppIdStart,               "<appID>");
hgs
parents:
diff changeset
    31
_LIT8(KAppIdEnd,                 "</appID>");
hgs
parents:
diff changeset
    32
_LIT8(KNameStart,                "<name>");
hgs
parents:
diff changeset
    33
_LIT8(KNameEnd,                  "</name>");
hgs
parents:
diff changeset
    34
_LIT8(KIconStart,                "<icon>");
hgs
parents:
diff changeset
    35
_LIT8(KIconEnd,                  "</icon>");
hgs
parents:
diff changeset
    36
_LIT8(KMimeTypeStart,            "<mimetype>");
hgs
parents:
diff changeset
    37
_LIT8(KMimeTypeEnd,              "</mimetype>");
hgs
parents:
diff changeset
    38
_LIT8(KWidthStart,               "<width>");
hgs
parents:
diff changeset
    39
_LIT8(KWidthEnd,                 "</width>");
hgs
parents:
diff changeset
    40
_LIT8(KHeightStart,              "<height>");
hgs
parents:
diff changeset
    41
_LIT8(KHeightEnd,                "</height>");
hgs
parents:
diff changeset
    42
_LIT8(KDepthStart,               "<depth>");
hgs
parents:
diff changeset
    43
_LIT8(KDepthEnd,                 "</depth>");
hgs
parents:
diff changeset
    44
_LIT8(KUrlStart,                 "<url>");
hgs
parents:
diff changeset
    45
_LIT8(KUrlEnd,                   "</url>");
hgs
parents:
diff changeset
    46
_LIT8(KAllowedProfileIdsStart,   "<allowedProfileIDs>");
hgs
parents:
diff changeset
    47
_LIT8(KAllowedProfileIdsEnd,     "</allowedProfileIDs>");
hgs
parents:
diff changeset
    48
_LIT8(KResourceStatusStart,      "<resourceStatus>");
hgs
parents:
diff changeset
    49
_LIT8(KResourceStatusEnd,        "</resourceStatus>");
hgs
parents:
diff changeset
    50
_LIT8(KAppStatusListStart,       "<appStatusList>");
hgs
parents:
diff changeset
    51
_LIT8(KAppStatusListEnd,         "</appStatusList>");
hgs
parents:
diff changeset
    52
_LIT8(KAppStatusStart,           "<appStatus>");
hgs
parents:
diff changeset
    53
_LIT8(KAppStatusEnd,             "</appStatus>");
hgs
parents:
diff changeset
    54
_LIT8(KStatusStart,              "<status>");
hgs
parents:
diff changeset
    55
_LIT8(KStatusEnd,                "</status>");
hgs
parents:
diff changeset
    56
_LIT8(KProfileIdStart,           "<profileID>");
hgs
parents:
diff changeset
    57
_LIT8(KProfileIdEnd,             "</profileID>");
hgs
parents:
diff changeset
    58
_LIT8(KStatusTypeStart,          "<statusType>");
hgs
parents:
diff changeset
    59
_LIT8(KStatusTypeEnd,            "</statusType>");
hgs
parents:
diff changeset
    60
_LIT8(KStartTagOpenBracket,      "<");
hgs
parents:
diff changeset
    61
_LIT8(KEndTagOpenBracket,        "</");
hgs
parents:
diff changeset
    62
_LIT8(KCloseBracket,             ">");
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// ================= MEMBER FUNCTIONS ==============================================
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    68
// CUpnpTmServerImpl::NewL
hgs
parents:
diff changeset
    69
// Two-phased constructor.
hgs
parents:
diff changeset
    70
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    71
//
hgs
parents:
diff changeset
    72
CUpnpTmServerImpl* CUpnpTmServerImpl::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo,
hgs
parents:
diff changeset
    73
                                           MUpnpTmServerObserver& aTmServerObserver)
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
    CUpnpTmServerImpl* self = new (ELeave) CUpnpTmServerImpl( aTmServerObserver );   
hgs
parents:
diff changeset
    76
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    77
    self->ConstructL( aDeviceInfo );
hgs
parents:
diff changeset
    78
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    79
    return self;    
hgs
parents:
diff changeset
    80
    }
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
// CUpnpTmServerImpl::CUpnpTmServerImpl
hgs
parents:
diff changeset
    84
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    85
// might leave.
hgs
parents:
diff changeset
    86
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    87
//
hgs
parents:
diff changeset
    88
CUpnpTmServerImpl::CUpnpTmServerImpl( MUpnpTmServerObserver& aTmServerObserver )
hgs
parents:
diff changeset
    89
      :iTmServerObserver(aTmServerObserver)
hgs
parents:
diff changeset
    90
     {
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
     }
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    95
// CUpnpTmServerImpl::ConstructL
hgs
parents:
diff changeset
    96
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
//
hgs
parents:
diff changeset
    99
void CUpnpTmServerImpl::ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo )
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTL_ENTRY );
hgs
parents:
diff changeset
   102
    iIapSetting = CUpnpSettings::NewL( KCRUidUPnPStack );
hgs
parents:
diff changeset
   103
    /**
hgs
parents:
diff changeset
   104
     *  Retrieve the IAP ID which has been set by DLNA and store it so that 
hgs
parents:
diff changeset
   105
     *  it can be reverted back to the same when Automotive Server has stopped 
hgs
parents:
diff changeset
   106
     *  making use of TM Service.
hgs
parents:
diff changeset
   107
     */
hgs
parents:
diff changeset
   108
    iIapId = CUpnpSettings::GetIapL(); 
hgs
parents:
diff changeset
   109
    //Fetch the IAP ID set by the Automotive Server
hgs
parents:
diff changeset
   110
    TInt iapId = aDeviceInfo.IapId();
hgs
parents:
diff changeset
   111
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CONSTRUCTL, "CUpnpTmServerImpl::ConstructL;iapId=%d", iapId );
hgs
parents:
diff changeset
   112
    // writes the iap id to the cenrep
hgs
parents:
diff changeset
   113
    User::LeaveIfError( iIapSetting->Set( CUpnpSettings::KUPnPStackIapId, iapId ) ); 
hgs
parents:
diff changeset
   114
    iTmServerDevice = CUpnpTmServerDevice::NewL( aDeviceInfo, *this );
hgs
parents:
diff changeset
   115
    iAppStore = CUpnpRemotableAppStore::NewL();
hgs
parents:
diff changeset
   116
    iIconMapping = CUpnpTmIconMapping::NewL();
hgs
parents:
diff changeset
   117
    User::LeaveIfError( iIconFileSession.Connect() );
hgs
parents:
diff changeset
   118
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTL_EXIT );
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
// CUpnpTmServerImpl::~CUpnpTmServerImpl
hgs
parents:
diff changeset
   123
// Destructor
hgs
parents:
diff changeset
   124
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   125
//
hgs
parents:
diff changeset
   126
CUpnpTmServerImpl::~CUpnpTmServerImpl()
hgs
parents:
diff changeset
   127
    {
hgs
parents:
diff changeset
   128
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CUPNPTMSERVERIMPL_ENTRY );
hgs
parents:
diff changeset
   129
    //Restore the IAP ID for DLNA use
hgs
parents:
diff changeset
   130
    RestoreIap();
hgs
parents:
diff changeset
   131
    delete iIapSetting;
hgs
parents:
diff changeset
   132
    delete iFilteredAppList;
hgs
parents:
diff changeset
   133
    iIconFileSession.Close();
hgs
parents:
diff changeset
   134
    delete iAppStore;
hgs
parents:
diff changeset
   135
    delete iIconMapping;
hgs
parents:
diff changeset
   136
    iXmSignature.Close();
hgs
parents:
diff changeset
   137
    iResponseBuf.Close();
hgs
parents:
diff changeset
   138
    delete iTmServerDevice;
hgs
parents:
diff changeset
   139
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CUPNPTMSERVERIMPL_EXIT );
hgs
parents:
diff changeset
   140
    }
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   143
// CUpnpTmServerImpl::RestoreIap
hgs
parents:
diff changeset
   144
// Method is used to restore IAP ID which has been previously retreived so that
hgs
parents:
diff changeset
   145
// DLNA continues to make use of it.
hgs
parents:
diff changeset
   146
// This method is mainly provided to avoid codescanner tool error.
hgs
parents:
diff changeset
   147
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   148
//
hgs
parents:
diff changeset
   149
void CUpnpTmServerImpl::RestoreIap()
hgs
parents:
diff changeset
   150
    {
hgs
parents:
diff changeset
   151
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_RESTOREIAP_ENTRY );
hgs
parents:
diff changeset
   152
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_RESTOREIAP, "CUpnpTmServerImpl::RestoreIap;iIapId=%d", iIapId );
hgs
parents:
diff changeset
   153
    iIapSetting->Set( CUpnpSettings::KUPnPStackIapId, iIapId );    
hgs
parents:
diff changeset
   154
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_RESTOREIAP_EXIT );
hgs
parents:
diff changeset
   155
    }
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   158
// CUpnpTmServerImpl::GetApplicationListL
hgs
parents:
diff changeset
   159
// Method to create soap repsonse for GetApplicationList action.
hgs
parents:
diff changeset
   160
// It generates a list of applications, which can be launched and terminated remotely.
hgs
parents:
diff changeset
   161
// @param aAppListFilter Application Listing Filter. This is an optional parameter 
hgs
parents:
diff changeset
   162
//                     used by the UPnP Control Point to limit the AppListing value to 
hgs
parents:
diff changeset
   163
//                               those applications which meet the filter parameters.
hgs
parents:
diff changeset
   164
// @param aProfileId  ProfileID of client profile whose parameter settings will be 
hgs
parents:
diff changeset
   165
//                    applied for generating the application list
hgs
parents:
diff changeset
   166
// @param aErr[out]   TerminalMode error code
hgs
parents:
diff changeset
   167
// @return Returns soap response buffer 
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
//
hgs
parents:
diff changeset
   170
const TDesC8& CUpnpTmServerImpl::GetApplicationListL( const TDesC8& aAppListFilter,
hgs
parents:
diff changeset
   171
                                     TUint aProfileId, TTerminalModeErrorCode& aErr )
hgs
parents:
diff changeset
   172
    {
hgs
parents:
diff changeset
   173
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETAPPLICATIONLISTL_ENTRY );
hgs
parents:
diff changeset
   174
    iResponseBuf.Close();
hgs
parents:
diff changeset
   175
    iResponseBuf.CreateL(KActionBufferLength);
hgs
parents:
diff changeset
   176
    aErr = iTmServerObserver.OnGetApplicationList( aProfileId );  
hgs
parents:
diff changeset
   177
    if ( aErr == ETerminalModeSuccess )
hgs
parents:
diff changeset
   178
        {
hgs
parents:
diff changeset
   179
        // Check for availability of AppListingFilter input argument in the soap action
hgs
parents:
diff changeset
   180
        TInt filterStringFound = aAppListFilter.Find(Keq);
hgs
parents:
diff changeset
   181
        if ( filterStringFound != KErrNotFound )
hgs
parents:
diff changeset
   182
            {
hgs
parents:
diff changeset
   183
            delete iFilteredAppList;
hgs
parents:
diff changeset
   184
            iFilteredAppList = NULL;
hgs
parents:
diff changeset
   185
            
hgs
parents:
diff changeset
   186
            // Constructs a filter object and parses the input filter string
hgs
parents:
diff changeset
   187
            iFilteredAppList = CUpnpTmFilteredAppList::NewL(*this);
hgs
parents:
diff changeset
   188
            iFilteredAppList->ParseAppFilterStringL( aAppListFilter, aErr );
hgs
parents:
diff changeset
   189
            }
hgs
parents:
diff changeset
   190
        if ( aErr == ETerminalModeSuccess )
hgs
parents:
diff changeset
   191
            {
hgs
parents:
diff changeset
   192
            iProfileId = aProfileId; // Stored for generating app icon path in the soap response
hgs
parents:
diff changeset
   193
            AppendDataL(KAppListStart);
hgs
parents:
diff changeset
   194
            for ( TInt i(0) ; i < iAppStore->AppIdArray().Count(); i++)
hgs
parents:
diff changeset
   195
                 {
31
hgs
parents: 24
diff changeset
   196
                 // There can be 2 conditions associated with this
hgs
parents: 24
diff changeset
   197
                 // 1.  AppListingFilter value is "*" or empty 
24
hgs
parents:
diff changeset
   198
                 // 2.  AppListingFilter has some filter string set
hgs
parents:
diff changeset
   199
                 const RArray<TUint>& profileIdList = iAppStore->FetchRemotableApp(i).AllowedProfileIdList();
hgs
parents:
diff changeset
   200
                 if ( ( profileIdList.Find(aProfileId) != KErrNotFound ) ||
hgs
parents:
diff changeset
   201
                                                    ( profileIdList.Count() == KErrNone ))
hgs
parents:
diff changeset
   202
                     {
hgs
parents:
diff changeset
   203
                    
hgs
parents:
diff changeset
   204
                     // If the provided profileID is allowed profileID for the app
hgs
parents:
diff changeset
   205
                     if (  filterStringFound == KErrNotFound )                 
hgs
parents:
diff changeset
   206
                         {
hgs
parents:
diff changeset
   207
                         // Constructs a non-filtered soap response
hgs
parents:
diff changeset
   208
                         ConstructActionResponseBufferL(i);             
hgs
parents:
diff changeset
   209
                         }   
hgs
parents:
diff changeset
   210
                     else                            
hgs
parents:
diff changeset
   211
                         {  
hgs
parents:
diff changeset
   212
                         // Constructs a filtered soap response
hgs
parents:
diff changeset
   213
                         iFilteredAppList->ConstructFilteredGetAppListResponseL(i);
hgs
parents:
diff changeset
   214
                         }
hgs
parents:
diff changeset
   215
                     }
hgs
parents:
diff changeset
   216
                 }
hgs
parents:
diff changeset
   217
            if ( ( filterStringFound == KErrNotFound ) || ( (iFilteredAppList->SignatureElement()).Length() != KErrNone ))
hgs
parents:
diff changeset
   218
                {
31
hgs
parents: 24
diff changeset
   219
                // Append the xml signature value to the response buffer only if
hgs
parents: 24
diff changeset
   220
                // 1. Filter string contains the signature element or
hgs
parents: 24
diff changeset
   221
                // 2. Filter value is '*' or
hgs
parents: 24
diff changeset
   222
                // 3. Filter value is empty
24
hgs
parents:
diff changeset
   223
                AppendDataL(XmlSignature());
hgs
parents:
diff changeset
   224
                }
hgs
parents:
diff changeset
   225
            AppendDataL(KAppListEnd);        
hgs
parents:
diff changeset
   226
            }
hgs
parents:
diff changeset
   227
        }
hgs
parents:
diff changeset
   228
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETAPPLICATIONLISTL_EXIT );
hgs
parents:
diff changeset
   229
    return iResponseBuf;
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   233
// CUpnpTmServerImpl::LaunchApp
hgs
parents:
diff changeset
   234
// Method to create soap repsonse for LaunchApp action
hgs
parents:
diff changeset
   235
// @param aAppId App ID of the application to be launched remotely
hgs
parents:
diff changeset
   236
// @param aProfileId  ProfileID of client profile 
hgs
parents:
diff changeset
   237
// @param aUrl[out] URI of the remote application where it is running
hgs
parents:
diff changeset
   238
// @return Returns Terminal Mode error code
hgs
parents:
diff changeset
   239
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   240
//
hgs
parents:
diff changeset
   241
TTerminalModeErrorCode CUpnpTmServerImpl::LaunchApp( TUint aAppId, TUint aProfileId, 
hgs
parents:
diff changeset
   242
                                                                       RBuf8& aUrl )    
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_LAUNCHAPP_ENTRY );
hgs
parents:
diff changeset
   245
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_LAUNCHAPP, "CUpnpTmServerImpl::LaunchApp;aAppId=%d", aAppId );
hgs
parents:
diff changeset
   246
    
hgs
parents:
diff changeset
   247
    TTerminalModeErrorCode err = AuthorizeApp(aAppId);
hgs
parents:
diff changeset
   248
    if ( err == ETerminalModeSuccess )
hgs
parents:
diff changeset
   249
        {
hgs
parents:
diff changeset
   250
        // Launching of the app succeeded
hgs
parents:
diff changeset
   251
        err = iTmServerObserver.OnLaunchApp( aAppId,aUrl,aProfileId ); 
hgs
parents:
diff changeset
   252
        }
hgs
parents:
diff changeset
   253
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_LAUNCHAPP_EXIT );
hgs
parents:
diff changeset
   254
    return err;
hgs
parents:
diff changeset
   255
    }
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   258
// CUpnpTmServerImpl::TerminateApp
hgs
parents:
diff changeset
   259
// Method to create soap repsonse for TerminateApp action
hgs
parents:
diff changeset
   260
// @param aAppId App ID of the application to be terminated
hgs
parents:
diff changeset
   261
// @param aProfileId  ProfileID of client profile 
hgs
parents:
diff changeset
   262
// @return Returns Terminal Mode error code
hgs
parents:
diff changeset
   263
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   264
//
hgs
parents:
diff changeset
   265
TTerminalModeErrorCode CUpnpTmServerImpl::TerminateApp( TUint aAppId, TUint aProfileId )
hgs
parents:
diff changeset
   266
    {
hgs
parents:
diff changeset
   267
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_TERMINATEAPP_ENTRY );
hgs
parents:
diff changeset
   268
    TTerminalModeErrorCode err = AuthorizeApp(aAppId);
hgs
parents:
diff changeset
   269
    if ( err == ETerminalModeSuccess )
hgs
parents:
diff changeset
   270
        {
hgs
parents:
diff changeset
   271
        // Termination of the app succeeded
hgs
parents:
diff changeset
   272
        err = iTmServerObserver.OnTerminateApp( aAppId, aProfileId );
hgs
parents:
diff changeset
   273
        } 
hgs
parents:
diff changeset
   274
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_TERMINATEAPP, "CUpnpTmServerImpl::TerminateApp;err=%d", err );
hgs
parents:
diff changeset
   275
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_TERMINATEAPP_EXIT );
hgs
parents:
diff changeset
   276
    return err;
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   280
// CUpnpTmServerImpl::GetAppStatusL
hgs
parents:
diff changeset
   281
// Method to create soap repsonse for GetAppStatus action
hgs
parents:
diff changeset
   282
// @param aAppIdBuffer Buffer containing the appID or the wildcard character
hgs
parents:
diff changeset
   283
// @param aAppStatusResponse[out] soap response buffer 
hgs
parents:
diff changeset
   284
// @param aErr[out]  Terminal Mode error code
hgs
parents:
diff changeset
   285
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   286
//
hgs
parents:
diff changeset
   287
void CUpnpTmServerImpl::GetAppStatusL( const TDesC8& aAppIdBuffer,RBuf8& aAppStatusResponse,
hgs
parents:
diff changeset
   288
                                                              TTerminalModeErrorCode& aErr )
hgs
parents:
diff changeset
   289
    {
hgs
parents:
diff changeset
   290
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETAPPSTATUSL_ENTRY );
hgs
parents:
diff changeset
   291
    RArray<TUint> registeredAppIdArray;
hgs
parents:
diff changeset
   292
    CleanupClosePushL(registeredAppIdArray);
hgs
parents:
diff changeset
   293
    if ( aAppIdBuffer.Compare( KWildCard()) != KErrNone )
hgs
parents:
diff changeset
   294
        {
hgs
parents:
diff changeset
   295
        // If the appID is not wildcard character(*)
hgs
parents:
diff changeset
   296
        TInt appIdInt(0);
hgs
parents:
diff changeset
   297
        TLex8 lex( aAppIdBuffer );
hgs
parents:
diff changeset
   298
        lex.Val(appIdInt);  // No need to check the return code as it has been verified earlier
hgs
parents:
diff changeset
   299
        aErr = AuthorizeApp( appIdInt );
hgs
parents:
diff changeset
   300
        if ( aErr != ETerminalModeSuccess )
hgs
parents:
diff changeset
   301
             {
hgs
parents:
diff changeset
   302
             CleanupStack::PopAndDestroy(&registeredAppIdArray);
hgs
parents:
diff changeset
   303
             OstTrace0( TRACE_ERROR, CUPNPTMSERVERIMPL_GETAPPSTATUSL, "CUpnpTmServerImpl::GetAppStatusL" );
hgs
parents:
diff changeset
   304
             return;  // return if the requested appID is non-existent or un-authorized
hgs
parents:
diff changeset
   305
             }    
hgs
parents:
diff changeset
   306
        // add to the array for which get app status has to be retreived
hgs
parents:
diff changeset
   307
        registeredAppIdArray.AppendL(appIdInt);   
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
    else
hgs
parents:
diff changeset
   310
        {
hgs
parents:
diff changeset
   311
        // Fetch the list of registered apps from the App store
hgs
parents:
diff changeset
   312
        for ( TInt i(0); i < iAppStore->AppIdArray().Count(); i++ )
hgs
parents:
diff changeset
   313
            {
hgs
parents:
diff changeset
   314
            registeredAppIdArray.AppendL(iAppStore->AppIdArray()[i]);       
hgs
parents:
diff changeset
   315
            }
hgs
parents:
diff changeset
   316
        }
hgs
parents:
diff changeset
   317
    iResponseBuf.Close();
hgs
parents:
diff changeset
   318
    iResponseBuf.CreateL(KActionBufferLength);
hgs
parents:
diff changeset
   319
    AppendDataL(KAppStatusListStart);
hgs
parents:
diff changeset
   320
    for ( TInt i(0); i < registeredAppIdArray.Count(); i++ )
hgs
parents:
diff changeset
   321
        {
hgs
parents:
diff changeset
   322
        CreateGetAppStatusResponseL( registeredAppIdArray[i], aErr );
hgs
parents:
diff changeset
   323
        if ( aErr != ETerminalModeSuccess )
hgs
parents:
diff changeset
   324
            {
hgs
parents:
diff changeset
   325
            /* Should return an error code if it fails to retrieve the 
hgs
parents:
diff changeset
   326
               status for even a single application */
hgs
parents:
diff changeset
   327
            break;
hgs
parents:
diff changeset
   328
            }         
hgs
parents:
diff changeset
   329
        }
hgs
parents:
diff changeset
   330
    AppendDataL(KAppStatusListEnd);
hgs
parents:
diff changeset
   331
    aAppStatusResponse.CreateL(iResponseBuf);
hgs
parents:
diff changeset
   332
    CleanupStack::PopAndDestroy(&registeredAppIdArray);
hgs
parents:
diff changeset
   333
    OstTraceFunctionExit0( DUP2_CUPNPTMSERVERIMPL_GETAPPSTATUSL_EXIT );
hgs
parents:
diff changeset
   334
    }
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   337
// CUpnpTmServerImpl::CreateGetAppStatusResponseL
hgs
parents:
diff changeset
   338
// Helper method for GetApplicationStatus response buffer construction
hgs
parents:
diff changeset
   339
// @param aAppId AppID
hgs
parents:
diff changeset
   340
// @param aErr[out]  Terminal Mode error code
hgs
parents:
diff changeset
   341
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   342
//
hgs
parents:
diff changeset
   343
void CUpnpTmServerImpl::CreateGetAppStatusResponseL( TUint aAppId,TTerminalModeErrorCode& aErr )
hgs
parents:
diff changeset
   344
    {
hgs
parents:
diff changeset
   345
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CREATEGETAPPSTATUSRESPONSEL_ENTRY );
hgs
parents:
diff changeset
   346
    // Get the app statuses of all the requested apps one by one
hgs
parents:
diff changeset
   347
    TUint profileId;
hgs
parents:
diff changeset
   348
    RBuf8 statusType;
hgs
parents:
diff changeset
   349
    aErr = iTmServerObserver.OnGetAppStatus( aAppId, profileId, statusType);    
hgs
parents:
diff changeset
   350
    if ( aErr == ETerminalModeSuccess )
hgs
parents:
diff changeset
   351
       {
hgs
parents:
diff changeset
   352
       /* Append the status to the buffer only if the fetching of the actual status of the 
hgs
parents:
diff changeset
   353
          application from the Automotive Server is successful ,else just return the error */
hgs
parents:
diff changeset
   354
       CleanupClosePushL(statusType);
hgs
parents:
diff changeset
   355
       AppendDataL(KAppStatusStart);
hgs
parents:
diff changeset
   356
       AppendDataL(KAppIdStart);
hgs
parents:
diff changeset
   357
       AppendDataL(ConvertIntToDescriptor(aAppId));
hgs
parents:
diff changeset
   358
       AppendDataL(KAppIdEnd);
hgs
parents:
diff changeset
   359
       AppendDataL(KStatusStart);
hgs
parents:
diff changeset
   360
       AppendDataL(KProfileIdStart);
hgs
parents:
diff changeset
   361
       AppendDataL(ConvertIntToDescriptor(profileId));
hgs
parents:
diff changeset
   362
       AppendDataL(KProfileIdEnd);
hgs
parents:
diff changeset
   363
       AppendDataL(KStatusTypeStart);
hgs
parents:
diff changeset
   364
       AppendDataL(statusType);
hgs
parents:
diff changeset
   365
       AppendDataL(KStatusTypeEnd);
hgs
parents:
diff changeset
   366
       AppendDataL(KStatusEnd);
hgs
parents:
diff changeset
   367
       AppendDataL(KAppStatusEnd);
hgs
parents:
diff changeset
   368
       CleanupStack::Pop(&statusType);
hgs
parents:
diff changeset
   369
       }
hgs
parents:
diff changeset
   370
    statusType.Close();
hgs
parents:
diff changeset
   371
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CREATEGETAPPSTATUSRESPONSEL_EXIT );
hgs
parents:
diff changeset
   372
    }
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   375
// CUpnpTmServerImpl::GetMaxNumProfiles
hgs
parents:
diff changeset
   376
// Method is used to return the value of the state variable MaxNumProfiles, 
hgs
parents:
diff changeset
   377
// which denotes the maximum number of client profiles that are supported 
hgs
parents:
diff changeset
   378
// simultaneously by the TmClientProfile service.
hgs
parents:
diff changeset
   379
// @param aNumMaxProfiles[out] Maximum number of client profiles that are supported 
hgs
parents:
diff changeset
   380
// @return Returns Terminal Mode error code
hgs
parents:
diff changeset
   381
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   382
//
hgs
parents:
diff changeset
   383
TTerminalModeErrorCode CUpnpTmServerImpl::GetMaxNumProfiles( TUint& aNumMaxProfiles )
hgs
parents:
diff changeset
   384
    {
hgs
parents:
diff changeset
   385
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETMAXNUMPROFILES_ENTRY );
hgs
parents:
diff changeset
   386
    return iTmServerObserver.OnGetMaxNumProfiles(aNumMaxProfiles);
hgs
parents:
diff changeset
   387
    }
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   390
// CUpnpTmServerImpl::SetClientProfile
hgs
parents:
diff changeset
   391
// Method to create soap repsonse for SetClientProfile action.
hgs
parents:
diff changeset
   392
// Method allows the control point to register a client profile and
hgs
parents:
diff changeset
   393
// notify the Terminal Mode device about its preferences, settings and capabilities.
hgs
parents:
diff changeset
   394
// @param aProfileId     The identifier of the profile record where the client
hgs
parents:
diff changeset
   395
//                       profile settings must be stored
hgs
parents:
diff changeset
   396
// @param aInputClientProfile[out]  Profile information about Terminal Mode client and
hgs
parents:
diff changeset
   397
//                    its capabilities which needs to be updated in the profile record
hgs
parents:
diff changeset
   398
// @param aResultProfile[out] The updated client profile.
hgs
parents:
diff changeset
   399
// @return Returns Terminal Mode error code
hgs
parents:
diff changeset
   400
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   401
//
hgs
parents:
diff changeset
   402
TTerminalModeErrorCode CUpnpTmServerImpl::SetClientProfile( TUint aProfileId, 
hgs
parents:
diff changeset
   403
                        const TDesC8& aInputClientProfile, RBuf8& aResultProfile )
hgs
parents:
diff changeset
   404
    {
hgs
parents:
diff changeset
   405
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETCLIENTPROFILE_ENTRY );
hgs
parents:
diff changeset
   406
    return iTmServerObserver.OnSetClientProfile( aProfileId, aInputClientProfile,
hgs
parents:
diff changeset
   407
                                                                aResultProfile );
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   411
// CUpnpTmServerImpl::GetClientProfile
hgs
parents:
diff changeset
   412
// Method to create soap repsonse for GetClientProfile action.
hgs
parents:
diff changeset
   413
// Method allows the control point to access the contents of a client profile stored 
hgs
parents:
diff changeset
   414
// in the Terminal Mode device.
hgs
parents:
diff changeset
   415
// @param aProfileId  The identifier of the profile record where the client 
hgs
parents:
diff changeset
   416
//                     profile settings must be stored
hgs
parents:
diff changeset
   417
// @param aClientProfile[out] Client profile corresponding to the profileID input variable
hgs
parents:
diff changeset
   418
// @return Returns Terminal Mode error code
hgs
parents:
diff changeset
   419
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   420
//
hgs
parents:
diff changeset
   421
TTerminalModeErrorCode CUpnpTmServerImpl::GetClientProfile( TUint aProfileId, RBuf8& aClientProfile )
hgs
parents:
diff changeset
   422
    {
hgs
parents:
diff changeset
   423
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETCLIENTPROFILE_ENTRY );
hgs
parents:
diff changeset
   424
    return iTmServerObserver.OnGetClientProfile( aProfileId,aClientProfile );
hgs
parents:
diff changeset
   425
    }
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   428
// CUpnpTmServerImpl::GetIconInfoL
hgs
parents:
diff changeset
   429
// Method to fetch the icon file associated with the particular application. 
hgs
parents:
diff changeset
   430
// @param aUrl Relative URL of the application icon to be retreived
hgs
parents:
diff changeset
   431
// @param aResultTrans CUpnpHttpServerTransaction object
hgs
parents:
diff changeset
   432
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   433
//
hgs
parents:
diff changeset
   434
void CUpnpTmServerImpl::GetIconInfoL( const TDesC8& aUrl, CUpnpHttpServerTransaction*& aResultTrans )
hgs
parents:
diff changeset
   435
    {
hgs
parents:
diff changeset
   436
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETICONINFOL_ENTRY );
hgs
parents:
diff changeset
   437
    RBuf svgFilePath;   
hgs
parents:
diff changeset
   438
    // Fetch the original file path which has been mapped to the requesting file.
hgs
parents:
diff changeset
   439
    TInt fileIndex = iIconMapping->GetSvgIconPath( aUrl,svgFilePath );
hgs
parents:
diff changeset
   440
    if ( fileIndex == KErrNotFound )
hgs
parents:
diff changeset
   441
        {
hgs
parents:
diff changeset
   442
        // In case the requested icon file is not available, should return EHttpNotFound(404). 
hgs
parents:
diff changeset
   443
        // Sets the file source as an empty descriptor.
hgs
parents:
diff changeset
   444
        aResultTrans = CUpnpIconFileServeTransaction::NewL( KNullDesC(), iIconFileSession );  
hgs
parents:
diff changeset
   445
        svgFilePath.Close();
hgs
parents:
diff changeset
   446
        OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETICONINFOL_EXIT );
hgs
parents:
diff changeset
   447
        return;
hgs
parents:
diff changeset
   448
        }
hgs
parents:
diff changeset
   449
    CleanupClosePushL(svgFilePath);
hgs
parents:
diff changeset
   450
    /* Extracts the profileID from the relative URL.
hgs
parents:
diff changeset
   451
     * The relative URL will be of the form ( /<profileID>/<iconName> )
hgs
parents:
diff changeset
   452
     */
hgs
parents:
diff changeset
   453
    const TDesC8& urlWithoutLeadingSlash = aUrl.Mid((aUrl.Locate(KForwardSlash))+1);
hgs
parents:
diff changeset
   454
    TInt secondSlashPos = urlWithoutLeadingSlash.Locate(KForwardSlash);
hgs
parents:
diff changeset
   455
    User::LeaveIfError(secondSlashPos);
hgs
parents:
diff changeset
   456
    const TDesC8& profileIdBuf = urlWithoutLeadingSlash.Left(secondSlashPos);
hgs
parents:
diff changeset
   457
    // Converts descriptor to int
hgs
parents:
diff changeset
   458
    TLex8 lex( profileIdBuf );
hgs
parents:
diff changeset
   459
    TUint profileIdInt(KErrNone);
hgs
parents:
diff changeset
   460
    lex.Val(profileIdInt);
hgs
parents:
diff changeset
   461
    // Fetch the reference to client icon preference object from AutomotiveServer
hgs
parents:
diff changeset
   462
    const CUpnpTmClientIconPref& clientIconPref = iTmServerObserver.GetClientIconPrefsL(profileIdInt);
hgs
parents:
diff changeset
   463
    
hgs
parents:
diff changeset
   464
    TInt servingIconWidth(KErrNone);
hgs
parents:
diff changeset
   465
    TInt servingIconHeight(KErrNone);
hgs
parents:
diff changeset
   466
    /* 
hgs
parents:
diff changeset
   467
     * Checks whether the conversion of the icon file needed.
hgs
parents:
diff changeset
   468
     * If conversion is required, it also determines the dimension(width and height) 
hgs
parents:
diff changeset
   469
     * of the serving file.
hgs
parents:
diff changeset
   470
     */ 
hgs
parents:
diff changeset
   471
    TBool iconConversionNeeded = iIconMapping->IsConversionNeeded( fileIndex, clientIconPref, servingIconWidth,servingIconHeight );
hgs
parents:
diff changeset
   472
    if ( iconConversionNeeded )
hgs
parents:
diff changeset
   473
        {
hgs
parents:
diff changeset
   474
        // Icon file conversion is needed( svg to bmp )
hgs
parents:
diff changeset
   475
        CUpnpSvgImageConverter* decoder = CUpnpSvgImageConverter::NewL( servingIconWidth, servingIconHeight );
hgs
parents:
diff changeset
   476
        CleanupStack::PushL(decoder);
hgs
parents:
diff changeset
   477
        RBuf bitmapBuf;
hgs
parents:
diff changeset
   478
        CleanupClosePushL(bitmapBuf);
hgs
parents:
diff changeset
   479
        decoder->ConvertToBitmapL( svgFilePath, bitmapBuf );  // Method which in turn invokes the conversion
hgs
parents:
diff changeset
   480
        aResultTrans = CUpnpIconFileServeTransaction::NewL( bitmapBuf, iIconFileSession ); /* Sets the data source( file ) 
hgs
parents:
diff changeset
   481
                                                                                           which needs to be serverd*/
hgs
parents:
diff changeset
   482
        CleanupStack::PopAndDestroy( 2,decoder);
hgs
parents:
diff changeset
   483
        }
hgs
parents:
diff changeset
   484
    else
hgs
parents:
diff changeset
   485
        {
hgs
parents:
diff changeset
   486
        // No icon file conversion needed ( svg icon is served )
hgs
parents:
diff changeset
   487
        aResultTrans = CUpnpIconFileServeTransaction::NewL( svgFilePath, iIconFileSession );
hgs
parents:
diff changeset
   488
        }
hgs
parents:
diff changeset
   489
    CleanupStack::PopAndDestroy(&svgFilePath);
hgs
parents:
diff changeset
   490
    OstTraceFunctionExit0( DUP1_CUPNPTMSERVERIMPL_GETICONINFOL_EXIT );
hgs
parents:
diff changeset
   491
    }
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   494
// CUpnpTmServerImpl::StartDeviceL
hgs
parents:
diff changeset
   495
// Method is used to start publishing the terminal mode server device and 
hgs
parents:
diff changeset
   496
// its services
hgs
parents:
diff changeset
   497
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   498
//
hgs
parents:
diff changeset
   499
void CUpnpTmServerImpl::StartDeviceL()
hgs
parents:
diff changeset
   500
    {
hgs
parents:
diff changeset
   501
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_STARTDEVICEL_ENTRY );
hgs
parents:
diff changeset
   502
    iTmServerDevice->StartTmServerDeviceL();
hgs
parents:
diff changeset
   503
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_STARTDEVICEL_EXIT );
hgs
parents:
diff changeset
   504
    }
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   507
// CUpnpTmServerImpl::StopDeviceL
hgs
parents:
diff changeset
   508
// Method is used to stop publishing the terminal mode server device and 
hgs
parents:
diff changeset
   509
// its services
hgs
parents:
diff changeset
   510
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   511
//
hgs
parents:
diff changeset
   512
void CUpnpTmServerImpl::StopDeviceL()
hgs
parents:
diff changeset
   513
    {   
hgs
parents:
diff changeset
   514
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_STOPDEVICEL_ENTRY );
hgs
parents:
diff changeset
   515
    iTmServerDevice->StopTmServerDeviceL();
hgs
parents:
diff changeset
   516
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_STOPDEVICEL_EXIT );
hgs
parents:
diff changeset
   517
    }
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   520
// CUpnpTmServerImpl::GetRemotableApp
hgs
parents:
diff changeset
   521
// Method is invoked by the Automotive Server to get the access to the particular
hgs
parents:
diff changeset
   522
// instance of the remotable app corresponding to the app ID provided.
hgs
parents:
diff changeset
   523
// This is needed in case AS wishes to modify any paramters of the already 
hgs
parents:
diff changeset
   524
// registered remotable app
hgs
parents:
diff changeset
   525
// @param aAppId App ID of the application whose access is needed
hgs
parents:
diff changeset
   526
// @param aErr[out]  Error code
hgs
parents:
diff changeset
   527
// @returns Returns reference to the Remotable App object
hgs
parents:
diff changeset
   528
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   529
//
hgs
parents:
diff changeset
   530
CUpnpRemotableApp& CUpnpTmServerImpl::GetRemotableApp( TUint aAppId, TInt& aErr )
hgs
parents:
diff changeset
   531
    {
hgs
parents:
diff changeset
   532
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETREMOTABLEAPP_ENTRY );
hgs
parents:
diff changeset
   533
    aErr = KErrNotFound;
hgs
parents:
diff changeset
   534
    TInt appIndex = iAppStore->AppIdArray().Find(aAppId);
hgs
parents:
diff changeset
   535
    CUpnpRemotableApp* remotableApp = NULL;
hgs
parents:
diff changeset
   536
    if ( appIndex != KErrNotFound )
hgs
parents:
diff changeset
   537
        {
hgs
parents:
diff changeset
   538
        // The requested application is available
hgs
parents:
diff changeset
   539
        aErr = KErrNone;    
hgs
parents:
diff changeset
   540
        remotableApp = &(iAppStore->FetchRemotableApp(appIndex));  
hgs
parents:
diff changeset
   541
        }
hgs
parents:
diff changeset
   542
    OstTraceExt2( TRACE_NORMAL, CUPNPTMSERVERIMPL_GETREMOTABLEAPP, "CUpnpTmServerImpl::GetRemotableApp;aAppId=%d;aErr=%d", aAppId, aErr );
hgs
parents:
diff changeset
   543
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETREMOTABLEAPP_EXIT );
hgs
parents:
diff changeset
   544
    return *remotableApp;
hgs
parents:
diff changeset
   545
    }
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   548
// Method is used to un-register the individual applications 
hgs
parents:
diff changeset
   549
// @param aRemotableApp  Pointer to Remotable app object which needs to 
hgs
parents:
diff changeset
   550
 //                      be registered.Ownership is passed.
hgs
parents:
diff changeset
   551
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   552
//
hgs
parents:
diff changeset
   553
void CUpnpTmServerImpl::RegisterAppL( CUpnpRemotableApp* aRemotableApp )
hgs
parents:
diff changeset
   554
    {   
hgs
parents:
diff changeset
   555
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_REGISTERAPPL_ENTRY );
hgs
parents:
diff changeset
   556
    ASSERT( aRemotableApp );   
hgs
parents:
diff changeset
   557
    iAppStore->AddRemotableAppL( aRemotableApp );
hgs
parents:
diff changeset
   558
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_REGISTERAPPL_EXIT );
hgs
parents:
diff changeset
   559
    }
hgs
parents:
diff changeset
   560
hgs
parents:
diff changeset
   561
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   562
// CUpnpTmServerImpl::RegisterAppsL
hgs
parents:
diff changeset
   563
// Method is used to register multiple applications in one go
hgs
parents:
diff changeset
   564
// @param aRemotableAppList Array of Remotable App objects which needs to be
hgs
parents:
diff changeset
   565
//                          registered. Ownership is passed.
hgs
parents:
diff changeset
   566
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   567
//
hgs
parents:
diff changeset
   568
void CUpnpTmServerImpl::RegisterAppsL( const RPointerArray<CUpnpRemotableApp>& aRemotableAppList )
hgs
parents:
diff changeset
   569
    {
hgs
parents:
diff changeset
   570
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_REGISTERAPPSL_ENTRY );
hgs
parents:
diff changeset
   571
    for ( TInt i(0); i < aRemotableAppList.Count(); i++ )
hgs
parents:
diff changeset
   572
        {
hgs
parents:
diff changeset
   573
        iAppStore->AddRemotableAppL( aRemotableAppList[i] );
hgs
parents:
diff changeset
   574
        }
hgs
parents:
diff changeset
   575
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_REGISTERAPPSL_EXIT );
hgs
parents:
diff changeset
   576
    }
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   579
// CUpnpTmServerImpl::UnRegisterApp
hgs
parents:
diff changeset
   580
// Method is used to un-register the individual applications 
hgs
parents:
diff changeset
   581
// @param aAppId App ID which needs to be un-registered
hgs
parents:
diff changeset
   582
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   583
//
hgs
parents:
diff changeset
   584
TInt CUpnpTmServerImpl::UnRegisterApp( TUint aAppId )
hgs
parents:
diff changeset
   585
    {
hgs
parents:
diff changeset
   586
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UNREGISTERAPP_ENTRY );
hgs
parents:
diff changeset
   587
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVER_GETREMOTABLEAPP, "CUpnpTmServer::GetRemotableApp;aAppId=%u", aAppId );
hgs
parents:
diff changeset
   588
    return iAppStore->RemoveRemotableApp(aAppId);
hgs
parents:
diff changeset
   589
    }
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   592
// CUpnpTmServerImpl::UnRegisterApps
hgs
parents:
diff changeset
   593
// Method is used to un-register multiple applications in one go 
hgs
parents:
diff changeset
   594
// param aAppIdArray an array of appIDs which needs to be un-registered
hgs
parents:
diff changeset
   595
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   596
//
hgs
parents:
diff changeset
   597
TInt CUpnpTmServerImpl::UnRegisterApps( const RArray<TUint>& aAppIdArray )
hgs
parents:
diff changeset
   598
    {   
hgs
parents:
diff changeset
   599
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UNREGISTERAPPS_ENTRY );
hgs
parents:
diff changeset
   600
    /**
hgs
parents:
diff changeset
   601
     * Create a copy of the array.
hgs
parents:
diff changeset
   602
     * Only distinct and unique app IDs are copied into the array.
hgs
parents:
diff changeset
   603
     */
hgs
parents:
diff changeset
   604
    RArray<TUint> appIdList ;
hgs
parents:
diff changeset
   605
    TInt i;
hgs
parents:
diff changeset
   606
    for ( i = 0; i < aAppIdArray.Count(); i++ )
hgs
parents:
diff changeset
   607
        {
hgs
parents:
diff changeset
   608
        OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_UNREGISTERAPPS, "CUpnpTmServerImpl::UnRegisterApps;aAppIdArray[i]=%d", aAppIdArray[i] );
hgs
parents:
diff changeset
   609
        if ( appIdList.Find(aAppIdArray[i]) == KErrNotFound )
hgs
parents:
diff changeset
   610
            {
hgs
parents:
diff changeset
   611
            appIdList.Append(aAppIdArray[i]);
hgs
parents:
diff changeset
   612
            }
hgs
parents:
diff changeset
   613
        }
hgs
parents:
diff changeset
   614
    for ( i = 0; i < appIdList.Count(); i++ )
hgs
parents:
diff changeset
   615
        { 
hgs
parents:
diff changeset
   616
        // Now remove the remotable app from the array one by one
hgs
parents:
diff changeset
   617
        if ( ( iAppStore->RemoveRemotableApp( appIdList[i] )) == KErrNotFound )
hgs
parents:
diff changeset
   618
            {
hgs
parents:
diff changeset
   619
            /** 
hgs
parents:
diff changeset
   620
              * Even if a single app from the requested array is unable 
hgs
parents:
diff changeset
   621
              * to get un-registered the method should return KErrNotFound 
hgs
parents:
diff changeset
   622
              */
hgs
parents:
diff changeset
   623
            OstTrace1( TRACE_ERROR, DUP1_CUPNPTMSERVERIMPL_UNREGISTERAPPS, "CUpnpTmServerImpl::UnRegisterApps;appIdList[i]=%d", appIdList[i] );
hgs
parents:
diff changeset
   624
            appIdList.Close();
hgs
parents:
diff changeset
   625
            OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UNREGISTERAPPS_EXIT );
hgs
parents:
diff changeset
   626
            return KErrNotFound;
hgs
parents:
diff changeset
   627
            }
hgs
parents:
diff changeset
   628
        }  
hgs
parents:
diff changeset
   629
    appIdList.Close();
hgs
parents:
diff changeset
   630
    OstTraceFunctionExit0( DUP1_CUPNPTMSERVERIMPL_UNREGISTERAPPS_EXIT );
hgs
parents:
diff changeset
   631
    return KErrNone;      
hgs
parents:
diff changeset
   632
    }
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   635
// CUpnpTmServerImpl::SetXmlSignatureL
hgs
parents:
diff changeset
   636
// Method is used to add xml formatted signature value to the list of remotable 
hgs
parents:
diff changeset
   637
// apps which is provided in response to the GetApplicationList action.
hgs
parents:
diff changeset
   638
// XML signature is applied over entire contents of the appList element
hgs
parents:
diff changeset
   639
// @param aSignature XML formatted signature value
hgs
parents:
diff changeset
   640
//                              objects
hgs
parents:
diff changeset
   641
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   642
//
hgs
parents:
diff changeset
   643
void CUpnpTmServerImpl::SetXmlSignatureL( const TDesC8& aSignature )
hgs
parents:
diff changeset
   644
    {
hgs
parents:
diff changeset
   645
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETXMLSIGNATUREL_ENTRY );
hgs
parents:
diff changeset
   646
    iXmSignature.Close();
hgs
parents:
diff changeset
   647
    iXmSignature.CreateL(aSignature);
hgs
parents:
diff changeset
   648
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETXMLSIGNATUREL_EXIT );
hgs
parents:
diff changeset
   649
    }
hgs
parents:
diff changeset
   650
hgs
parents:
diff changeset
   651
// --------------------------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   652
// CUpnpTmServerImpl::XmlSignature
hgs
parents:
diff changeset
   653
// Method is used to fetch xml formatted signature value 
hgs
parents:
diff changeset
   654
// @return Returns xml formatted signature buffer 
hgs
parents:
diff changeset
   655
// --------------------------------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   656
//
hgs
parents:
diff changeset
   657
const TDesC8& CUpnpTmServerImpl::XmlSignature( )const
hgs
parents:
diff changeset
   658
    {
hgs
parents:
diff changeset
   659
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_XMLSIGNATURE_ENTRY );
hgs
parents:
diff changeset
   660
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_XMLSIGNATURE_EXIT );
hgs
parents:
diff changeset
   661
    return iXmSignature;
hgs
parents:
diff changeset
   662
    }
hgs
parents:
diff changeset
   663
hgs
parents:
diff changeset
   664
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   665
// CUpnpTmServerImpl::UpdateAppStatusL
hgs
parents:
diff changeset
   666
// Method is used to update the status of applications which have undergone some 
hgs
parents:
diff changeset
   667
// change. This method is invoked by Automotive Server
hgs
parents:
diff changeset
   668
// @param aUpdatedAppIdList An array of app IDs corresponding to the applications
hgs
parents:
diff changeset
   669
//                          whose status have have undergone change
hgs
parents:
diff changeset
   670
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   671
//
hgs
parents:
diff changeset
   672
void CUpnpTmServerImpl::UpdateAppStatusL( const RArray<TUint>& aUpdatedAppIdList )
hgs
parents:
diff changeset
   673
    {
hgs
parents:
diff changeset
   674
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEAPPSTATUSL_ENTRY );
hgs
parents:
diff changeset
   675
    CreateEventMessageL(aUpdatedAppIdList);
hgs
parents:
diff changeset
   676
    iTmServerDevice->AppStatusUpdateL(iResponseBuf);
hgs
parents:
diff changeset
   677
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEAPPSTATUSL_EXIT );
hgs
parents:
diff changeset
   678
    }
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   681
// CUpnpTmServerImpl::UpdateAppListL
hgs
parents:
diff changeset
   682
// Method is used to update the list of applications which have been either added,
hgs
parents:
diff changeset
   683
// removed or modified. This method is invoked by Automotive Server
hgs
parents:
diff changeset
   684
// @param aUpdatedAppIdList An array of app IDs corresponding to the applications
hgs
parents:
diff changeset
   685
//                          which have added, removed or modified to/from the list
hgs
parents:
diff changeset
   686
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   687
//
hgs
parents:
diff changeset
   688
void CUpnpTmServerImpl::UpdateAppListL( const RArray<TUint>& aUpdatedAppIdList )
hgs
parents:
diff changeset
   689
    {
hgs
parents:
diff changeset
   690
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEAPPLISTL_ENTRY );
hgs
parents:
diff changeset
   691
    CreateEventMessageL(aUpdatedAppIdList);
hgs
parents:
diff changeset
   692
    iTmServerDevice->AppListUpdateL(iResponseBuf);    
hgs
parents:
diff changeset
   693
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEAPPLISTL_EXIT );
hgs
parents:
diff changeset
   694
    }
hgs
parents:
diff changeset
   695
hgs
parents:
diff changeset
   696
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   697
// CUpnpTmServerImpl::UpdateUnusedProfileIdsL
hgs
parents:
diff changeset
   698
// Method is used to update the list of profile IDs for profiles which are currently  
hgs
parents:
diff changeset
   699
// not being used by any Terminal Mode service hosted.on the Terminal Mode device
hgs
parents:
diff changeset
   700
// This method is invoked by Automotive Server
hgs
parents:
diff changeset
   701
// @param aUnusedProfileIdList List of profile IDs for profiles which are currently 
hgs
parents:
diff changeset
   702
//                             not being used
hgs
parents:
diff changeset
   703
//                             
hgs
parents:
diff changeset
   704
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   705
//
hgs
parents:
diff changeset
   706
void CUpnpTmServerImpl::UpdateUnusedProfileIdsL( const RArray<TUint>& aUnusedProfileIdList )
hgs
parents:
diff changeset
   707
    {
hgs
parents:
diff changeset
   708
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEUNUSEDPROFILEIDSL_ENTRY );
hgs
parents:
diff changeset
   709
    CreateEventMessageL(aUnusedProfileIdList);
hgs
parents:
diff changeset
   710
    iTmServerDevice->UnUsedProfileIdUpdateL(iResponseBuf);     
hgs
parents:
diff changeset
   711
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEUNUSEDPROFILEIDSL_EXIT );
hgs
parents:
diff changeset
   712
    }
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   715
// CUpnpTmServerImpl::AuthorizeApp
hgs
parents:
diff changeset
   716
// This method is used to verify whether the requested appID exists and whether
hgs
parents:
diff changeset
   717
// the client is authorized to perform the oprations on that App ID
hgs
parents:
diff changeset
   718
// @param aAppID  appID which for which operation is requested
hgs
parents:
diff changeset
   719
// @return Returns ETerminalModeSuccess if appID is valid and authorized 
hgs
parents:
diff changeset
   720
//         else the error code
hgs
parents:
diff changeset
   721
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   722
//
hgs
parents:
diff changeset
   723
TTerminalModeErrorCode CUpnpTmServerImpl::AuthorizeApp( TUint aAppId )
hgs
parents:
diff changeset
   724
    {
hgs
parents:
diff changeset
   725
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_AUTHORIZEAPP_ENTRY );
hgs
parents:
diff changeset
   726
    OstTrace1( TRACE_NORMAL, DUP2_CUPNPTMSERVERIMPL_AUTHORIZEAPP, "CUpnpTmServerImpl::AuthorizeApp;aAppId=%u", aAppId );
hgs
parents:
diff changeset
   727
    
hgs
parents:
diff changeset
   728
    TTerminalModeErrorCode err;
hgs
parents:
diff changeset
   729
    if ( iAppStore->AppIdArray().Find(aAppId) != KErrNotFound )
hgs
parents:
diff changeset
   730
        {
hgs
parents:
diff changeset
   731
        // requested appID is a valid one
hgs
parents:
diff changeset
   732
        err = ETerminalModeSuccess;
hgs
parents:
diff changeset
   733
        }
hgs
parents:
diff changeset
   734
    else
hgs
parents:
diff changeset
   735
        {
hgs
parents:
diff changeset
   736
        // Requested appID does not exist
hgs
parents:
diff changeset
   737
        err = ETerminalModeBadAppId;
hgs
parents:
diff changeset
   738
        }
hgs
parents:
diff changeset
   739
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_AUTHORIZEAPP, "CUpnpTmServerImpl::AuthorizeApp;err=%d", err );
hgs
parents:
diff changeset
   740
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_AUTHORIZEAPP_EXIT );
hgs
parents:
diff changeset
   741
    return err;
hgs
parents:
diff changeset
   742
    }
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   745
// CUpnpTmServerImpl::AppendDataL
hgs
parents:
diff changeset
   746
// Appends data to the buffer and also reallocates when needed
hgs
parents:
diff changeset
   747
// @param aData data to be appended to the buffer
hgs
parents:
diff changeset
   748
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   749
//
hgs
parents:
diff changeset
   750
void CUpnpTmServerImpl::AppendDataL( const TDesC8& aData )
hgs
parents:
diff changeset
   751
    {
hgs
parents:
diff changeset
   752
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_APPENDDATAL_ENTRY );
hgs
parents:
diff changeset
   753
    TInt actionBufMaxLen = iResponseBuf.MaxLength();
hgs
parents:
diff changeset
   754
    TInt actionBufLen = iResponseBuf.Length();
hgs
parents:
diff changeset
   755
    TInt dataLen = aData.Length();
hgs
parents:
diff changeset
   756
    if ( actionBufMaxLen < ( actionBufLen + dataLen ) )
hgs
parents:
diff changeset
   757
        {
hgs
parents:
diff changeset
   758
        TInt lenToAllocate = (dataLen > KActionBufferLength) ? dataLen : KActionBufferLength;
hgs
parents:
diff changeset
   759
        iResponseBuf.ReAllocL ( actionBufLen + lenToAllocate );
hgs
parents:
diff changeset
   760
        }   
hgs
parents:
diff changeset
   761
    iResponseBuf.Append( aData );
hgs
parents:
diff changeset
   762
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_APPENDDATAL_EXIT );
hgs
parents:
diff changeset
   763
    }
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   766
// CUpnpTmServerImpl::ConstructActionResponseBufferL
hgs
parents:
diff changeset
   767
// Constructs the actual soap response buffer
hgs
parents:
diff changeset
   768
// @param aAppIndex Index of the registered App
hgs
parents:
diff changeset
   769
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   770
//
hgs
parents:
diff changeset
   771
void CUpnpTmServerImpl::ConstructActionResponseBufferL( TInt aAppIndex )    
hgs
parents:
diff changeset
   772
    {
hgs
parents:
diff changeset
   773
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTACTIONRESPONSEBUFFERL_ENTRY );
hgs
parents:
diff changeset
   774
    ConstructLeadingSoapBufferL(aAppIndex);
hgs
parents:
diff changeset
   775
    const TDesC8& appDesc = iAppStore->FetchRemotableApp(aAppIndex).AppDescription();
hgs
parents:
diff changeset
   776
    if ( appDesc.Length() != KErrNone )
hgs
parents:
diff changeset
   777
        {
hgs
parents:
diff changeset
   778
        // Appends the application desciption
hgs
parents:
diff changeset
   779
        AppendDataL(KStartNameDesc);
hgs
parents:
diff changeset
   780
        AppendDataL(appDesc);
hgs
parents:
diff changeset
   781
        AppendDataL(KEndNameDesc);   
hgs
parents:
diff changeset
   782
        } 
hgs
parents:
diff changeset
   783
    // Appends the optional icon information to the soap response buffer only 
hgs
parents:
diff changeset
   784
    // if its available.
hgs
parents:
diff changeset
   785
    const RPointerArray<CUpnpTerminalModeIcon>& iconList = iAppStore->FetchRemotableApp(aAppIndex).IconList();
hgs
parents:
diff changeset
   786
    TInt iconCount = iconList.Count();
hgs
parents:
diff changeset
   787
    if ( iconCount > KErrNone )
hgs
parents:
diff changeset
   788
        {
hgs
parents:
diff changeset
   789
        // Icon information is present
hgs
parents:
diff changeset
   790
        AppendDataL(KStartIconList);                     
hgs
parents:
diff changeset
   791
        for ( TInt j(0); j < iconCount; j++ )
hgs
parents:
diff changeset
   792
            {
hgs
parents:
diff changeset
   793
            // Adds all the icons associated with this app one by one
hgs
parents:
diff changeset
   794
            SetRemotableAppIconInfoL( *iconList[j] );
hgs
parents:
diff changeset
   795
            }
hgs
parents:
diff changeset
   796
        AppendDataL(KEndIconList);
hgs
parents:
diff changeset
   797
        }
hgs
parents:
diff changeset
   798
    //Apends the allowedProfileIDs element
hgs
parents:
diff changeset
   799
    SetAllowedProfileIdListL(aAppIndex);
hgs
parents:
diff changeset
   800
    //Appends the different terminalmode info elements
hgs
parents:
diff changeset
   801
    const RPointerArray<CUpnpTmInfoElement>& tmInfoElementList = 
hgs
parents:
diff changeset
   802
                                 iAppStore->FetchRemotableApp(aAppIndex).TmInfoElementList();
hgs
parents:
diff changeset
   803
    for ( TInt k(0); k < tmInfoElementList.Count(); k++)
hgs
parents:
diff changeset
   804
        {
hgs
parents:
diff changeset
   805
        // Called for each terminal mode element associated with the App
hgs
parents:
diff changeset
   806
        SetTerminalModeInfoElementL( *tmInfoElementList[k] );
hgs
parents:
diff changeset
   807
        }
hgs
parents:
diff changeset
   808
    // Appends the resource status element for the app if it is available 
hgs
parents:
diff changeset
   809
    SetResourceStatusL(aAppIndex);
hgs
parents:
diff changeset
   810
    // End of an application
hgs
parents:
diff changeset
   811
    AppendDataL(KEndApp);
hgs
parents:
diff changeset
   812
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTACTIONRESPONSEBUFFERL_EXIT );
hgs
parents:
diff changeset
   813
    }
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   816
// CUpnpTmServerImpl::ConstructLeadingSoapBufferL
hgs
parents:
diff changeset
   817
// Constructs leading soap buffer
hgs
parents:
diff changeset
   818
// It adds appID and appName to the soap response
hgs
parents:
diff changeset
   819
// @param aAppIndex Index of the remotable app
hgs
parents:
diff changeset
   820
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   821
//
hgs
parents:
diff changeset
   822
void CUpnpTmServerImpl::ConstructLeadingSoapBufferL( TInt aAppIndex )
hgs
parents:
diff changeset
   823
    {
hgs
parents:
diff changeset
   824
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTLEADINGSOAPBUFFERL_ENTRY );
hgs
parents:
diff changeset
   825
    AppendDataL(KStartApp);
hgs
parents:
diff changeset
   826
    AppendDataL(KAppIdStart);
hgs
parents:
diff changeset
   827
    AppendDataL(ConvertIntToDescriptor(iAppStore->FetchRemotableApp(aAppIndex).AppId()));
hgs
parents:
diff changeset
   828
    AppendDataL(KAppIdEnd);
hgs
parents:
diff changeset
   829
    AppendDataL(KNameStart);
hgs
parents:
diff changeset
   830
    AppendDataL(iAppStore->FetchRemotableApp(aAppIndex).AppName());
hgs
parents:
diff changeset
   831
    AppendDataL(KNameEnd);
hgs
parents:
diff changeset
   832
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTLEADINGSOAPBUFFERL_EXIT );
hgs
parents:
diff changeset
   833
    }
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   836
// CUpnpTmServerImpl::SetRemotableAppIconInfoL
hgs
parents:
diff changeset
   837
// Appends application icon information to the soap response buffer.
hgs
parents:
diff changeset
   838
// It stores the icon information in Tm Icon Mapping object for further reference.
hgs
parents:
diff changeset
   839
// @param aTmIcon  Reference to icon object 
hgs
parents:
diff changeset
   840
// @param aWidth   Width of the application icon.
hgs
parents:
diff changeset
   841
// @param aHeight  Height of the application icon.
hgs
parents:
diff changeset
   842
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   843
//
hgs
parents:
diff changeset
   844
void CUpnpTmServerImpl::SetRemotableAppIconInfoL( const CUpnpTerminalModeIcon& aTmIcon )
hgs
parents:
diff changeset
   845
    {
hgs
parents:
diff changeset
   846
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETREMOTABLEAPPICONINFOL_ENTRY );
hgs
parents:
diff changeset
   847
    AppendDataL(KIconStart);
hgs
parents:
diff changeset
   848
    AppendDataL(KMimeTypeStart);
hgs
parents:
diff changeset
   849
    AppendDataL(aTmIcon.MimeType());
hgs
parents:
diff changeset
   850
    AppendDataL(KMimeTypeEnd);
hgs
parents:
diff changeset
   851
    AppendDataL(KWidthStart);
hgs
parents:
diff changeset
   852
    TInt width = aTmIcon.Width();
hgs
parents:
diff changeset
   853
    AppendDataL(ConvertIntToDescriptor(width));
hgs
parents:
diff changeset
   854
    AppendDataL(KWidthEnd);
hgs
parents:
diff changeset
   855
    AppendDataL(KHeightStart);
hgs
parents:
diff changeset
   856
    TInt height = aTmIcon.Height();
hgs
parents:
diff changeset
   857
    AppendDataL(ConvertIntToDescriptor(height));
hgs
parents:
diff changeset
   858
    AppendDataL(KHeightEnd);
hgs
parents:
diff changeset
   859
    AppendDataL(KDepthStart);
hgs
parents:
diff changeset
   860
    AppendDataL(ConvertIntToDescriptor(aTmIcon.Depth()));
hgs
parents:
diff changeset
   861
    AppendDataL(KDepthEnd);
hgs
parents:
diff changeset
   862
    //Application icon URL creation
hgs
parents:
diff changeset
   863
    AppendDataL(KUrlStart);
hgs
parents:
diff changeset
   864
    AppendDataL(UpnpHTTP::KHTTPUrl());        
hgs
parents:
diff changeset
   865
    AppendDataL(iAddrBuf);  // Adds IP address
hgs
parents:
diff changeset
   866
    AppendDataL(KColon);
hgs
parents:
diff changeset
   867
    AppendDataL(iPortBuf);  // Adds port number
hgs
parents:
diff changeset
   868
    
hgs
parents:
diff changeset
   869
    // Fetch the icon file path
hgs
parents:
diff changeset
   870
    const TDesC& filePath = aTmIcon.IconFilename();
hgs
parents:
diff changeset
   871
    // Extract just filename from the complete file path
hgs
parents:
diff changeset
   872
    const TDesC& fileName = filePath.Mid((filePath.LocateReverse(KDirectorySeparator))+1);
hgs
parents:
diff changeset
   873
    TBuf8<UpnpString::KDefaultStringLength> fileName8;
hgs
parents:
diff changeset
   874
    fileName8.Copy(fileName);  // 16-bit to 8-bit conversion( icon filename )
hgs
parents:
diff changeset
   875
    
hgs
parents:
diff changeset
   876
    TBuf8<UpnpString::KDefaultStringLength> iconRelativeUrl(UpnpString::KSlash);
hgs
parents:
diff changeset
   877
    // Appends the client profileID
hgs
parents:
diff changeset
   878
    iconRelativeUrl.Append(ConvertIntToDescriptor(iProfileId));
hgs
parents:
diff changeset
   879
    iconRelativeUrl.Append(UpnpString::KSlash);   
hgs
parents:
diff changeset
   880
    // Appends the icon filename and creates the relative url
hgs
parents:
diff changeset
   881
    iconRelativeUrl.Append(fileName8);
hgs
parents:
diff changeset
   882
    AppendDataL(iconRelativeUrl);
hgs
parents:
diff changeset
   883
    /** Icon information is stored for making decision during http request for app icon file.
hgs
parents:
diff changeset
   884
     *  Depth is not taken into consideration while deciding on the final icon dimension
hgs
parents:
diff changeset
   885
     *  because it is not a requirement and playing with the depth of the icon may lead
hgs
parents:
diff changeset
   886
     *  to a poorly converted image which may not be displayed properly in the car 
hgs
parents:
diff changeset
   887
     *  kit screen.
hgs
parents:
diff changeset
   888
     */
hgs
parents:
diff changeset
   889
    iIconMapping->AddIconFileInfoL( iconRelativeUrl,filePath,width,height );
hgs
parents:
diff changeset
   890
    AppendDataL(KUrlEnd);
hgs
parents:
diff changeset
   891
    AppendDataL(KIconEnd);
hgs
parents:
diff changeset
   892
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETREMOTABLEAPPICONINFOL_EXIT );
hgs
parents:
diff changeset
   893
    }
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   896
// CUpnpTmServerImpl::SetAllowedProfileIdListL
hgs
parents:
diff changeset
   897
// Appends  the list of allowed profile IDs information to the soap response buffer
hgs
parents:
diff changeset
   898
// @param aAppIndex Index of the registered app
hgs
parents:
diff changeset
   899
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   900
//
hgs
parents:
diff changeset
   901
void CUpnpTmServerImpl::SetAllowedProfileIdListL( TInt aAppIndex )
hgs
parents:
diff changeset
   902
    {
hgs
parents:
diff changeset
   903
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETALLOWEDPROFILEIDLISTL_ENTRY );
hgs
parents:
diff changeset
   904
    const RArray<TUint>& profileIdList = iAppStore->FetchRemotableApp(aAppIndex).AllowedProfileIdList();
hgs
parents:
diff changeset
   905
    TInt profileIdCount = profileIdList.Count();
hgs
parents:
diff changeset
   906
    if ( profileIdCount > KErrNone )
hgs
parents:
diff changeset
   907
        {
hgs
parents:
diff changeset
   908
        AppendDataL(KAllowedProfileIdsStart);
hgs
parents:
diff changeset
   909
        for ( TInt i(0); i < profileIdCount; i++ )
hgs
parents:
diff changeset
   910
            {
hgs
parents:
diff changeset
   911
            AppendDataL(ConvertIntToDescriptor(profileIdList[i]));
hgs
parents:
diff changeset
   912
            if ( i < (profileIdCount-1) )
hgs
parents:
diff changeset
   913
                {
hgs
parents:
diff changeset
   914
                // Adds comma after each profile ID except last 
hgs
parents:
diff changeset
   915
                AppendDataL(UpnpString::KComa);
hgs
parents:
diff changeset
   916
                }
hgs
parents:
diff changeset
   917
            }
hgs
parents:
diff changeset
   918
        AppendDataL(KAllowedProfileIdsEnd);
hgs
parents:
diff changeset
   919
        }
hgs
parents:
diff changeset
   920
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETALLOWEDPROFILEIDLISTL_EXIT );
hgs
parents:
diff changeset
   921
    }
hgs
parents:
diff changeset
   922
hgs
parents:
diff changeset
   923
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   924
// CUpnpTmServerImpl::SetTerminalModeInfoElementL
hgs
parents:
diff changeset
   925
// Appends terminal mode info elements to the soap buffer
hgs
parents:
diff changeset
   926
// @param aTmInfoElement Reference to CUpnpTmInfoElement object
hgs
parents:
diff changeset
   927
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   928
//
hgs
parents:
diff changeset
   929
void CUpnpTmServerImpl::SetTerminalModeInfoElementL( const CUpnpTmInfoElement&  aTmInfoElement )                                                              
hgs
parents:
diff changeset
   930
    {  
hgs
parents:
diff changeset
   931
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETTERMINALMODEINFOELEMENTL_ENTRY );
hgs
parents:
diff changeset
   932
    AppendDataL(KStartTagOpenBracket);
hgs
parents:
diff changeset
   933
    AppendDataL(aTmInfoElement.TerminalModeInfoType());
hgs
parents:
diff changeset
   934
    AppendDataL(KCloseBracket);
hgs
parents:
diff changeset
   935
    for ( TInt i(0); i < aTmInfoElement.TmInfoElementCount(); i++ )
hgs
parents:
diff changeset
   936
        {
hgs
parents:
diff changeset
   937
        RBuf8 elementName;
hgs
parents:
diff changeset
   938
        CleanupClosePushL(elementName);
hgs
parents:
diff changeset
   939
        RBuf8 elementValue;
hgs
parents:
diff changeset
   940
        CleanupClosePushL(elementValue);
hgs
parents:
diff changeset
   941
        // Fetch the key-value pair
hgs
parents:
diff changeset
   942
        aTmInfoElement.GetTmInfoElementL( elementName, elementValue, i );
hgs
parents:
diff changeset
   943
        AppendDataL(KStartTagOpenBracket);
hgs
parents:
diff changeset
   944
        AppendDataL(elementName);
hgs
parents:
diff changeset
   945
        AppendDataL(KCloseBracket);
hgs
parents:
diff changeset
   946
        AppendDataL(elementValue); 
hgs
parents:
diff changeset
   947
        AppendDataL(KEndTagOpenBracket);
hgs
parents:
diff changeset
   948
        AppendDataL(elementName);
hgs
parents:
diff changeset
   949
        AppendDataL(KCloseBracket);
hgs
parents:
diff changeset
   950
        CleanupStack::PopAndDestroy(2,&elementName);
hgs
parents:
diff changeset
   951
        }   
hgs
parents:
diff changeset
   952
    AppendDataL(KEndTagOpenBracket);
hgs
parents:
diff changeset
   953
    AppendDataL(aTmInfoElement.TerminalModeInfoType());
hgs
parents:
diff changeset
   954
    AppendDataL(KCloseBracket);
hgs
parents:
diff changeset
   955
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETTERMINALMODEINFOELEMENTL_EXIT );
hgs
parents:
diff changeset
   956
    }
hgs
parents:
diff changeset
   957
hgs
parents:
diff changeset
   958
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   959
// CUpnpTmServerImpl::SetResourceStatusL
hgs
parents:
diff changeset
   960
// Appends resource status element(optional element)to the soap response buffer.
hgs
parents:
diff changeset
   961
// Provides the status of the resource of the application.
hgs
parents:
diff changeset
   962
// @param aAppIndex Index of the registered app
hgs
parents:
diff changeset
   963
// --------------------------------------------------------------------------------- 
hgs
parents:
diff changeset
   964
//
hgs
parents:
diff changeset
   965
void CUpnpTmServerImpl::SetResourceStatusL( TInt aAppIndex )
hgs
parents:
diff changeset
   966
    {  
hgs
parents:
diff changeset
   967
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETRESOURCESTATUSL_ENTRY );
hgs
parents:
diff changeset
   968
    const TDesC8& rscStatus = iAppStore->FetchRemotableApp(aAppIndex).ResourceStatus();
hgs
parents:
diff changeset
   969
    if ( rscStatus.Length() > KErrNone ) 
hgs
parents:
diff changeset
   970
        {
hgs
parents:
diff changeset
   971
        AppendDataL(KResourceStatusStart);
hgs
parents:
diff changeset
   972
        AppendDataL(rscStatus);
hgs
parents:
diff changeset
   973
        AppendDataL(KResourceStatusEnd);
hgs
parents:
diff changeset
   974
        }
hgs
parents:
diff changeset
   975
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETRESOURCESTATUSL_EXIT );
hgs
parents:
diff changeset
   976
    }
hgs
parents:
diff changeset
   977
hgs
parents:
diff changeset
   978
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   979
// CUpnpTmServerImpl::GenerateUrlComponents
hgs
parents:
diff changeset
   980
// Utility method to generate Server's IP address and port number which is used 
hgs
parents:
diff changeset
   981
// in constructing the icon url in action responses
hgs
parents:
diff changeset
   982
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   983
//
hgs
parents:
diff changeset
   984
void CUpnpTmServerImpl::GenerateUrlComponents( CUpnpHttpServerSession& aHttpServerSession )   
hgs
parents:
diff changeset
   985
   {
hgs
parents:
diff changeset
   986
   OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GENERATEURLCOMPONENTS_ENTRY );
hgs
parents:
diff changeset
   987
   TInetAddr servAddr;
hgs
parents:
diff changeset
   988
   servAddr.SetFamily(KAfInet);
hgs
parents:
diff changeset
   989
   aHttpServerSession.GetAddress( servAddr );
hgs
parents:
diff changeset
   990
   TBuf<UpnpString::KShortStringLength> addrBuf8;
hgs
parents:
diff changeset
   991
   servAddr.Output( addrBuf8 );
hgs
parents:
diff changeset
   992
   iAddrBuf.Copy(addrBuf8); //Sets the IP address of the server
hgs
parents:
diff changeset
   993
   iPortBuf.Num(servAddr.Port()); //Sets the port number
hgs
parents:
diff changeset
   994
   OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GENERATEURLCOMPONENTS_EXIT );
hgs
parents:
diff changeset
   995
   }
hgs
parents:
diff changeset
   996
hgs
parents:
diff changeset
   997
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
   998
// CUpnpTmServerImpl::CreateEventMessageL
hgs
parents:
diff changeset
   999
// Utility method to generate GENA notificatiion messages.
hgs
parents:
diff changeset
  1000
// Its is called in case of updateapplist, updateappstatuslist and
hgs
parents:
diff changeset
  1001
// unusedprofileidlist events.
hgs
parents:
diff changeset
  1002
// @param aIdList Reference to the changed ID list. It could be appID list or 
hgs
parents:
diff changeset
  1003
//                profileID list.
hgs
parents:
diff changeset
  1004
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1005
//
hgs
parents:
diff changeset
  1006
void CUpnpTmServerImpl::CreateEventMessageL( const RArray<TUint>& aIdList )   
hgs
parents:
diff changeset
  1007
    {
hgs
parents:
diff changeset
  1008
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL_ENTRY );
hgs
parents:
diff changeset
  1009
    iResponseBuf.Close();
hgs
parents:
diff changeset
  1010
    iResponseBuf.CreateL(KActionBufferLength);
hgs
parents:
diff changeset
  1011
    /**
hgs
parents:
diff changeset
  1012
     * Create a copy of the array.
hgs
parents:
diff changeset
  1013
     * Only distinct and unique elements are copied into the array.
hgs
parents:
diff changeset
  1014
     */
hgs
parents:
diff changeset
  1015
    RArray<TUint> idList;
hgs
parents:
diff changeset
  1016
    CleanupClosePushL(idList);
hgs
parents:
diff changeset
  1017
    TInt i;
hgs
parents:
diff changeset
  1018
    for ( i = 0; i < aIdList.Count(); i++ )
hgs
parents:
diff changeset
  1019
        {
hgs
parents:
diff changeset
  1020
        OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL, "CUpnpTmServerImpl::CreateEventMessageL;aIdList[i]=%d", aIdList[i] );
hgs
parents:
diff changeset
  1021
        if ( idList.Find(aIdList[i]) == KErrNotFound )
hgs
parents:
diff changeset
  1022
            {
hgs
parents:
diff changeset
  1023
            idList.AppendL(aIdList[i]);
hgs
parents:
diff changeset
  1024
            }
hgs
parents:
diff changeset
  1025
        }
hgs
parents:
diff changeset
  1026
    TInt idCount = idList.Count();
hgs
parents:
diff changeset
  1027
    for ( i = 0; i < idCount; i++ )
hgs
parents:
diff changeset
  1028
        {  
hgs
parents:
diff changeset
  1029
        AppendDataL(ConvertIntToDescriptor( idList[i]));
hgs
parents:
diff changeset
  1030
        if ( i < ( idCount-1) )
hgs
parents:
diff changeset
  1031
            {
hgs
parents:
diff changeset
  1032
            //Add comma(,) after each ID except the last
hgs
parents:
diff changeset
  1033
            AppendDataL(UpnpString::KComa);
hgs
parents:
diff changeset
  1034
            }
hgs
parents:
diff changeset
  1035
    }
hgs
parents:
diff changeset
  1036
   CleanupStack::PopAndDestroy(&idList);
hgs
parents:
diff changeset
  1037
   OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL_EXIT );
hgs
parents:
diff changeset
  1038
   }
hgs
parents:
diff changeset
  1039
hgs
parents:
diff changeset
  1040
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1041
// CUpnpTmServerImpl::ConvertIntToDescriptor
hgs
parents:
diff changeset
  1042
// Utility method to convert integer to descriptor
hgs
parents:
diff changeset
  1043
// @param  aIntVal  Integer value
hgs
parents:
diff changeset
  1044
// @return  Returns corresponding descriptor value
hgs
parents:
diff changeset
  1045
// ---------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1046
//
31
hgs
parents: 24
diff changeset
  1047
const TDesC8& CUpnpTmServerImpl::ConvertIntToDescriptor( TUint aIntVal )
24
hgs
parents:
diff changeset
  1048
    {
hgs
parents:
diff changeset
  1049
    OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR_ENTRY );
31
hgs
parents: 24
diff changeset
  1050
    OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR, "CUpnpTmServerImpl::ConvertIntToDescriptor;aIntVal=%u", aIntVal );
24
hgs
parents:
diff changeset
  1051
    iBufVal.Num( aIntVal );
hgs
parents:
diff changeset
  1052
    OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR_EXIT );
hgs
parents:
diff changeset
  1053
    return iBufVal;
hgs
parents:
diff changeset
  1054
    }
hgs
parents:
diff changeset
  1055
hgs
parents:
diff changeset
  1056
//End of File