201015
authorhgs
Sat, 24 Apr 2010 00:43:26 +0300
changeset 31 3b92f7acdc91
parent 30 64b3172ba347
child 32 51f207bebb06
201015
localconnectivityservice/dun/atext/group/dunatext.mmp
localconnectivityservice/dun/atext/inc/DunAtCmdHandler.h
localconnectivityservice/dun/atext/inc/DunAtSpecialCmdHandler.h
localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp
localconnectivityservice/dun/atext/src/DunAtSpecialCmdHandler.cpp
localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp
localconnectivityservice/dun/utils/inc/DunDataPusher.h
localconnectivityservice/dun/utils/inc/DunDownstream.h
localconnectivityservice/dun/utils/inc/DunSignalCopy.h
localconnectivityservice/dun/utils/inc/DunSignalNotify.h
localconnectivityservice/dun/utils/inc/DunTransporter.h
localconnectivityservice/dun/utils/src/DunDataPusher.cpp
localconnectivityservice/dun/utils/src/DunDownstream.cpp
localconnectivityservice/dun/utils/src/DunSignalCopy.cpp
localconnectivityservice/dun/utils/src/DunSignalNotify.cpp
localconnectivityservice/dun/utils/src/DunTransUtils.cpp
localconnectivityservice/obexreceiveservices/mtmuibluetooth/src/btmtmuidata.cpp
localconnectivityservice/obexserviceman/group/obexserviceman.mmp
localconnectivityservice/obexserviceman/utils/inc/obexutilsuilayer.h
localconnectivityservice/obexserviceman/utils/src/obexutilsglobalprogressdialog.cpp
localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp
localconnectivityservice/obexserviceman/utils/src/obexutilsmessagehandler.cpp
localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp
shortlinkconn_plat/dun_secondary_display_notification_api/group/bld.inf
shortlinkconn_plat/obex_secondary_display_notification_api/group/bld.inf
--- a/localconnectivityservice/dun/atext/group/dunatext.mmp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/atext/group/dunatext.mmp	Sat Apr 24 00:43:26 2010 +0300
@@ -33,6 +33,7 @@
 SOURCE                  DunAtModeListen.cpp
 SOURCE                  DunAtEcomListen.cpp
 SOURCE                  DunAtNvramListen.cpp
+SOURCE                  DunAtSpecialCmdHandler.cpp
 
 USERINCLUDE             ../inc ../../utils/inc
 
@@ -48,4 +49,5 @@
 LIBRARY                 atextclient.lib
 LIBRARY                 atextcommon.lib
 LIBRARY                 euser.lib
+LIBRARY                 bafl.lib
 DEBUGLIBRARY            flogger.lib
--- a/localconnectivityservice/dun/atext/inc/DunAtCmdHandler.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/atext/inc/DunAtCmdHandler.h	Sat Apr 24 00:43:26 2010 +0300
@@ -26,6 +26,7 @@
 #include "DunAtEcomListen.h"
 #include "DunAtModeListen.h"
 #include "DunAtNvramListen.h"
+#include "DunAtSpecialCmdHandler.h"
 
 const TInt KDunChSetMaxCharLen = 1;          // Only ASCII supported for now
 const TInt KDunOkBufLength     = 1+1+2+1+1;  // <CR>+<LF>+"OK"+<CR>+<LF>
@@ -839,6 +840,10 @@
      */
     RATExtCommon iAtCmdExtCommon;
 
+    /**
+     * Special AT command handler for handling commands like AT&FE0Q0V1&C1&D2+IFC=3,1.
+     */
+    CDunAtSpecialCmdHandler* iAtSpecialCmdHandler;
     };
 
 #endif  // C_CDUNATCMDHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/atext/inc/DunAtSpecialCmdHandler.h	Sat Apr 24 00:43:26 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Special AT command handler
+*
+*/
+
+#ifndef C_CDUNATSPECIALCMDHANDLER_H
+#define C_CDUNATSPECIALCMDHANDLER_H
+
+#include <e32base.h>
+#include <badesca.h>
+
+const TInt KInputBufLength  = (512 + 1);  // 512 chars for command + <CR>
+
+/**
+ *  Class for special AT command handler
+ *
+ *  @lib dunatext.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CDunAtSpecialCmdHandler ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param None
+     * @return Instance of self
+     */
+	static CDunAtSpecialCmdHandler* NewL();
+
+    /**
+    * Destructor.
+    */
+    ~CDunAtSpecialCmdHandler();
+    
+public:
+    
+    TBool IsCompleteSubCommand(TChar aCharacter);
+    TBool IsCompleteSubCommand(TDesC8& aDes, TInt aStartIndex, TInt& aEndIndex);
+
+private:
+
+    CDunAtSpecialCmdHandler();
+
+    void ConstructL();
+    
+    TBool IsDataReadyForComparison(TInt aLength);
+    TInt MinimumLength();
+
+
+private:  // data
+    /**
+     * Buffer for temporary AT command input
+     */
+    TBuf8<KInputBufLength> iBuffer;
+
+    /**
+     * Special commands for parsing
+     */
+    CDesC8Array *iSpecialCmds;    
+    };
+
+#endif  // C_CDUNATSPECIALCMDHANDLER_H
--- a/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -85,6 +85,8 @@
     iModeListen = NULL;
     delete iEcomListen;
     iEcomListen = NULL;
+    delete iAtSpecialCmdHandler;
+    iAtSpecialCmdHandler = NULL;
     if ( iAtCmdExtCommon.Handle() )
         {
         iAtCmdExtCommon.SynchronousClose();
@@ -331,6 +333,8 @@
     iEcomListen = ecomListen;
     iModeListen = modeListen;
     iNvramListen = nvramListen;
+    
+    iAtSpecialCmdHandler = CDunAtSpecialCmdHandler::NewL();
     FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() complete") ));
     }
 
@@ -860,7 +864,10 @@
     TInt endIndex = KErrNotFound;
     if ( extendedCmd )
         {
-        extendedEnd = CheckExtendedCommand( startIndex, endIndex );
+        if( iAtSpecialCmdHandler->IsCompleteSubCommand(iInputBuffer, startIndex, endIndex) == EFalse )
+            {
+            extendedEnd = CheckExtendedCommand( startIndex, endIndex );
+            }
         }
     else
         {
@@ -1007,7 +1014,7 @@
     FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter()") ));
     if ( aCharacter.IsSpace() || aCharacter==';' || aCharacter==0x00 )
         {
-        FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedCharacter() complete") ));
+        FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter() complete") ));
         return ETrue;
         }
     FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter() (not delimiter) complete") ));
@@ -1071,6 +1078,16 @@
             endFound = ETrue;
             break;
             }
+        if( IsExtendedCharacter(character) && (aEndIndex != aStartIndex) && iDecodeInfo.iPrevExists )
+            {
+            if( iDecodeInfo.iPrevChar.IsAlphaDigit() )
+                {
+                aEndIndex--;
+                // End found but return EFalse in order to calling function can proceed correct way,
+                // no extended end.
+                return EFalse;
+                }
+            }
         iDecodeInfo.iPrevExists = ETrue;
         iDecodeInfo.iPrevChar = character;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/atext/src/DunAtSpecialCmdHandler.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Special AT command handler
+*
+*/
+
+#include "DunAtSpecialCmdHandler.h"
+#include "DunDebug.h"
+
+// AT command(s) below is part of the AT&FE0Q0V1&C1&D2+IFC=3,1. command which
+// is sent by MAC
+_LIT8(KSpecialATCmd1, "AT&F");
+// Number of special commands
+const TInt KDefaultGranularity = 1;
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CDunAtSpecialCmdHandler* CDunAtSpecialCmdHandler::NewL()
+    {
+    CDunAtSpecialCmdHandler* self = new (ELeave) CDunAtSpecialCmdHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDunAtSpecialCmdHandler::CDunAtSpecialCmdHandler
+// ---------------------------------------------------------------------------
+//
+CDunAtSpecialCmdHandler::CDunAtSpecialCmdHandler()
+    {    
+    }
+
+// ---------------------------------------------------------------------------
+// CDunAtSpecialCmdHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CDunAtSpecialCmdHandler::ConstructL()
+    {
+    iSpecialCmds = new (ELeave) CDesC8ArrayFlat(KDefaultGranularity);
+    // Add here all special commands which need to be handled    
+    iSpecialCmds->AppendL(KSpecialATCmd1);
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler()
+    {
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler()") ));
+    delete iSpecialCmds;
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler() complete") ));
+    }
+
+// ---------------------------------------------------------------------------
+// Checks if the command has to be treated special way
+// For example in case of MAC, it sends command AT&FE0Q0V1&C1&D2+IFC=3,1.
+// meaning there is no delimiters in the command.
+// In case of MAC we try to search AT&F (sub command) string from the beginning
+// of the command. 
+// Search is done character by character basis.
+// ---------------------------------------------------------------------------
+//
+TBool CDunAtSpecialCmdHandler::IsCompleteSubCommand (TChar aCharacter)
+    {
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand()") ));
+    iBuffer.Append(aCharacter);
+    TBool completeSubCmd = EFalse;
+    
+    if( !IsDataReadyForComparison( iBuffer.Length()) )
+        {
+        // No need to do comparison because we don't have correct amount of data
+        FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), no need to compare") ));
+        return completeSubCmd;
+        }   
+    
+    TInt count = iSpecialCmds->Count();
+    for( TInt i = 0 ; i < count ; i++ )
+        {
+        if( iSpecialCmds->MdcaPoint(i).Compare(iBuffer) == 0 )
+            {
+            FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), match found, cmd index %d"), i ));
+            // Reset internal buffer for next comparison.
+            iBuffer.FillZ();
+            iBuffer.Zero();            
+            completeSubCmd = ETrue;
+            break;
+            }
+        }
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand() complete") ));
+    return completeSubCmd;
+    }
+
+// ---------------------------------------------------------------------------
+// Checks if the command has to be treated special way
+// For example in case of MAC, it sends command AT&FE0Q0V1&C1&D2+IFC=3,1.
+// meaning there is no delimiters in the command.
+// In case of MAC we try to search AT&F (sub command) string from the beginning
+// of the command. 
+// Search is done string basis.
+// ---------------------------------------------------------------------------
+//
+TBool CDunAtSpecialCmdHandler::IsCompleteSubCommand(TDesC8& aDes, TInt aStartIndex, TInt& aEndIndex)
+    {
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand()") ));
+    TBool completeSubCmd = EFalse;
+    if( aDes.Length() <  MinimumLength() || aStartIndex != 0 )
+        {
+        // No need to do comparison because we don't have correct amount of data or
+        // we are not at the beginning of the input buffer (non decoded buffer)
+        FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), no need to compare") ));
+        return completeSubCmd;
+        }   
+        
+    TInt count = iSpecialCmds->Count();
+    for( TInt i = 0 ; i < count ; i++ )
+        {
+        TInt length = iSpecialCmds->MdcaPoint(i).Length();
+        TPtrC8 cmd = aDes.Mid(0, length);
+        if( iSpecialCmds->MdcaPoint(i).Compare(cmd) == 0 )
+            {
+            FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), match found, cmd index %d"), i ));
+            aEndIndex = length - 1;
+            completeSubCmd = ETrue;
+            break;
+            }
+        }
+    FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand() complete") ));
+    return completeSubCmd;
+    }
+
+// ---------------------------------------------------------------------------
+// Defines when comparison is excecuted, checks if the data lengths are equal.
+// ---------------------------------------------------------------------------
+//
+TBool CDunAtSpecialCmdHandler::IsDataReadyForComparison(TInt aLength)
+    {
+    TInt count = iSpecialCmds->Count();
+    for( TInt i = 0 ; i < count ; i++ )
+        {
+        if( iSpecialCmds->MdcaPoint(i).Length() == aLength )
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// Defines minimum length of the special commands.
+// ---------------------------------------------------------------------------
+//
+TInt CDunAtSpecialCmdHandler::MinimumLength()
+    {
+    TInt length = iSpecialCmds->MdcaPoint(0).Length();
+    TInt count = iSpecialCmds->Count();
+    for( TInt i = 1 ; i < count ; i++ )
+        {
+        if( iSpecialCmds->MdcaPoint(i).Length() < length )
+            {
+            length = iSpecialCmds->MdcaPoint(i).Length();
+            break;
+            }
+        }
+    return length;
+    }
--- a/localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -28,6 +28,9 @@
 const TInt KListenQueSize   = 1;
 const TInt KDunFixedChannel = 22;  // Hack/kludge for Apple Bug ID 6527598
 
+//Service Class Bits supported by DUN
+static const TUint16 KCoDDunServiceClass = EMajorServiceTelephony | EMajorServiceNetworking;
+
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -340,6 +343,11 @@
         return KErrInUse;
         }
     aChannelNum = aListenSocket.LocalPort();
+    
+    // We try to set the Telephony and Networking bits in our service class.  If this fails we
+    // ignore it, as it's better to carry on without it than to fail to start listening.
+    (void)aListenSocket.SetOpt(KBTRegisterCodService, KSolBtRFCOMM, KCoDDunServiceClass);
+    
     retTemp = aListenSocket.Listen( KListenQueSize );
     if ( retTemp != KErrNone )
         {
--- a/localconnectivityservice/dun/utils/inc/DunDataPusher.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/inc/DunDataPusher.h	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -78,8 +78,7 @@
  *  @lib dunutils.lib
  *  @since S60 v3.2
  */
-NONSHARABLE_CLASS( CDunDataPusher ) : public CActive,
-                                      public MDunEndpointReady
+NONSHARABLE_CLASS( CDunDataPusher ) : public CActive
     {
 
 public:
@@ -238,24 +237,6 @@
      */
     void DoCancel();
 
-// from base class MDunEndpointReady
-
-    /**
-     * Gets called when endpoint is ready
-     *
-     * @since S60 5.0
-     * @return None
-     */
-    void NotifyEndpointReady();
-
-    /**
-     * Gets called when endpoint is not ready
-     *
-     * @since S60 5.0
-     * @return None
-     */
-    void NotifyEndpointNotReady();
-
 private:  // data
 
     /**
@@ -285,11 +266,6 @@
     TInt iEventIndex;
 
     /**
-     * Flag to be set when endpoint is ready or not
-     */
-    TBool iEPReady;
-
-    /**
      * RSocket object of local media side
      * If this is set then iComm is not used
      * Not own.
--- a/localconnectivityservice/dun/utils/inc/DunDownstream.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/inc/DunDownstream.h	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -156,14 +156,6 @@
     TInt AddToQueueAndSend( const TDesC8 *aPushedData,
                             MDunCompletionReporter* aCallback );
 
-    /**
-     * Gets the endpoint readiness handler
-     *
-     * @since S60 5.0
-     * @return Endpoint readiness handler
-     */
-    MDunEndpointReady* EndpointReadyHandler();
-
 private:
 
     CDunDownstream( MDunTransporterUtilityAux* aUtility );
--- a/localconnectivityservice/dun/utils/inc/DunSignalCopy.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/inc/DunSignalCopy.h	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -64,16 +64,6 @@
     TInt AddCallback( MDunConnMon* aCallback );
 
     /**
-     * Adds callback for endpoint readiness
-     * The callback will be called when the endpoint is ready or not ready
-     *
-     * @since S60 5.0
-     * @param aEPCallback Callback to call when writes can/can't be done
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    TInt AddEndpointReadyCallback( MDunEndpointReady* aEPCallback );
-
-    /**
      * Sets media to use for this endpoint monitor
      *
      * @since S60 3.2
@@ -160,15 +150,6 @@
      */
     void ChangeDownstreamSignal( TUint aSetMask, TUint aClearMask );
 
-    /**
-     * Reports endpoint ready or not ready
-     *
-     * @since S60 5.0
-     * @param aReady ETrue if endpoint ready, EFalse otherwise
-     * @return None
-     */
-    void ReportEndpointReady( TBool aReady );
-
 // from base class CActive
 
     /*
@@ -198,12 +179,6 @@
     RPointerArray<MDunConnMon> iCallbacks;
 
     /**
-     * Callback(s) to call when notification(s) via MDunEndpointReady to be made
-     * Normally contains only one callback for upstream
-     */
-    RPointerArray<MDunEndpointReady> iERCallbacks;
-
-    /**
      * Callback(s) to call when command mode starts or ends
      * Usually two needed: one for upstream and second for downstream
      */
--- a/localconnectivityservice/dun/utils/inc/DunSignalNotify.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/inc/DunSignalNotify.h	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -65,16 +65,6 @@
     TInt AddCallback( MDunConnMon* aCallback );
 
     /**
-     * Adds callback for endpoint readiness
-     * The callback will be called when the endpoint is ready or not ready
-     *
-     * @since S60 5.0
-     * @param aERCallback Callback to call when writes can/can't be done
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    TInt AddEndpointReadyCallback( MDunEndpointReady* aERCallback );
-
-    /**
      * Sets media to use for this endpoint monitor (network side)
      *
      * @since S60 3.2
@@ -131,15 +121,6 @@
      */
     void ReportSignalChange( TUint aSetMask, TUint aClearMask );
 
-    /**
-     * Reports endpoint ready or not ready
-     *
-     * @since S60 5.0
-     * @param aReady ETrue if endpoint ready, EFalse otherwise
-     * @return None
-     */
-    void ReportEndpointReady( TBool aReady );
-
 // from base class CActive
 
     /*
@@ -169,12 +150,6 @@
     RPointerArray<MDunConnMon> iCallbacks;
 
     /**
-     * Callback(s) to call when notification(s) via MDunEndpointReady to be made
-     * Normally contains only one callback for upstream
-     */
-    RPointerArray<MDunEndpointReady> iERCallbacks;
-
-    /**
      * Pointer to common utility class
      * Not own.
      */
--- a/localconnectivityservice/dun/utils/inc/DunTransporter.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/inc/DunTransporter.h	Sat Apr 24 00:43:26 2010 +0300
@@ -188,35 +188,6 @@
 	};
 
 /**
- *  Notification interface class to report endpoint readiness
- *
- *  @lib dunutils.lib
- *  @since S60 v5.0
- */
-NONSHARABLE_CLASS( MDunEndpointReady )
-	{
-
-public:
-
-    /**
-     * Gets called when endpoint is ready
-     *
-     * @since S60 5.0
-     * @return None
-     */
-    virtual void NotifyEndpointReady() = 0;
-
-    /**
-     * Gets called when endpoint is not ready
-     *
-     * @since S60 5.0
-     * @return None
-     */
-    virtual void NotifyEndpointNotReady() = 0;
-
-	};
-
-/**
  *  Notification interface class to report service advertisement status changes
  *
  *  @lib dunutils.lib
--- a/localconnectivityservice/dun/utils/src/DunDataPusher.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/src/DunDataPusher.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -312,7 +312,6 @@
     // Don't initialize iStreamCallback here (it is set through NewL)
     iPushState = EDunStateIdle;
     iEventIndex = 0;
-    iEPReady = EFalse;
     iSocket = NULL;
     iComm = NULL;
     }
@@ -336,13 +335,6 @@
         return KErrGeneral;
         }
     iStatus = KRequestPending;
-    if ( !iEPReady )
-        {
-        SetActive();
-        TRequestStatus* requestStatus = &iStatus;
-        User::RequestComplete( requestStatus, KErrNone );
-        return KErrNone;
-        }
     const TDesC8 *pushedData = iEventQueue[iEventIndex].iPushedData;
     if ( iComm )
         {
@@ -455,27 +447,3 @@
         }
     FTRACE(FPrint( _L("CDunDataPusher::DoCancel() complete" )));
     }
-
-// ---------------------------------------------------------------------------
-// From class MDunEndpointReady.
-// Gets called when endpoint is ready
-// ---------------------------------------------------------------------------
-//
-void CDunDataPusher::NotifyEndpointReady()
-    {
-    FTRACE(FPrint( _L("CDunDataPusher::NotifyEndpointReady()" )));
-    iEPReady = ETrue;
-    FTRACE(FPrint( _L("CDunDataPusher::NotifyEndpointReady() complete" )));
-    }
-
-// ---------------------------------------------------------------------------
-// From class MDunEndpointReady.
-// Gets called when endpoint is not ready
-// ---------------------------------------------------------------------------
-//
-void CDunDataPusher::NotifyEndpointNotReady()
-    {
-    FTRACE(FPrint( _L("CDunDataPusher::NotifyEndpointNotReady()" )));
-    iEPReady = EFalse;
-    FTRACE(FPrint( _L("CDunDataPusher::NotifyEndpointNotReady() complete" )));
-    }
--- a/localconnectivityservice/dun/utils/src/DunDownstream.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/src/DunDownstream.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -143,17 +143,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Gets the endpoint readiness handler
-// ---------------------------------------------------------------------------
-//
-MDunEndpointReady* CDunDownstream::EndpointReadyHandler()
-    {
-    FTRACE(FPrint( _L("CDunDownstream::EndpointReadyHandler()" ) ));
-    FTRACE(FPrint( _L("CDunDownstream::EndpointReadyHandler() complete" ) ));
-    return iPushData.iDataPusher;
-    }
-
-// ---------------------------------------------------------------------------
 // Starts downstream by issuing read request
 // ---------------------------------------------------------------------------
 //
--- a/localconnectivityservice/dun/utils/src/DunSignalCopy.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/src/DunSignalCopy.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -65,8 +65,6 @@
     Stop();
     // AddCallback()
     iCallbacks.Close();
-    // AddWriteReadyCallback()
-    iERCallbacks.Close();
     // Internal
     Initialize();
     FTRACE(FPrint( _L("CDunSignalCopy::ResetData() complete") ));
@@ -102,35 +100,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Adds callback for endpoint readiness
-// The callback will be called when the endpoint is ready or not ready
-// ---------------------------------------------------------------------------
-//
-TInt CDunSignalCopy::AddEndpointReadyCallback( MDunEndpointReady* aERCallback )
-    {
-    FTRACE(FPrint( _L("CDunSignalCopy::AddEndpointReadyCallback()" ) ));
-    if ( !aERCallback )
-        {
-        FTRACE(FPrint( _L("CDunSignalCopy::AddEndpointReadyCallback() (aERCallback) not initialized!" ) ));
-        return KErrGeneral;
-        }
-    TInt retTemp = iERCallbacks.Find( aERCallback );
-    if ( retTemp != KErrNotFound )
-        {
-        FTRACE(FPrint( _L("CDunSignalCopy::AddEndpointReadyCallback() (already exists) complete" ) ));
-        return KErrAlreadyExists;
-        }
-    retTemp = iERCallbacks.Append( aERCallback );
-    if ( retTemp != KErrNone )
-        {
-        FTRACE(FPrint( _L("CDunSignalCopy::AddEndpointReadyCallback() (append failed!) complete" ) ));
-        return retTemp;
-        }
-    FTRACE(FPrint( _L("CDunSignalCopy::AddEndpointReadyCallback() complete" ) ));
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
 // Sets media to use for this endpoint monitor
 // ---------------------------------------------------------------------------
 //
@@ -336,13 +305,11 @@
         FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() checking RTS..." ) ));
         if ( iSignals & KSignalRTS )  // RTS changed to high
             {
-            ReportEndpointReady( ETrue );
             ChangeUpstreamSignal( KSignalRTS, 0 );
             FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() RTS changed high" ) ));
             }
         else  // RTS changed to low
             {
-            ReportEndpointReady( EFalse );
             ChangeUpstreamSignal( 0, KSignalRTS );
             FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() RTS changed low" ) ));
             }
@@ -465,28 +432,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Reports endpoint ready or not ready
-// ---------------------------------------------------------------------------
-//
-void CDunSignalCopy::ReportEndpointReady( TBool aReady )
-    {
-    FTRACE(FPrint( _L("CDunSignalCopy::ReportEndpointReady()" ) ));
-    TInt count = iERCallbacks.Count();
-    for ( TInt i=0; i<count; i++ )
-        {
-        if ( aReady )
-            {
-            iERCallbacks[i]->NotifyEndpointReady();
-            }
-        else  // not ready
-            {
-            iERCallbacks[i]->NotifyEndpointNotReady();
-            }
-        }
-    FTRACE(FPrint( _L("CDunSignalCopy::ReportEndpointReady() complete" ) ));
-    }
-
-// ---------------------------------------------------------------------------
 // From class CActive.
 // Gets called when line status changes
 // ---------------------------------------------------------------------------
--- a/localconnectivityservice/dun/utils/src/DunSignalNotify.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/src/DunSignalNotify.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -65,8 +65,6 @@
     Stop();
     // AddCallback()
     iCallbacks.Close();
-    // AddEndpointReadyCallback()
-    iERCallbacks.Close();
     // Internal
     Initialize();
     FTRACE(FPrint( _L("CDunSignalNotify::ResetData() complete") ));
@@ -103,37 +101,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Adds callback for endpoint readiness
-// The callback will be called when the endpoint is ready or not ready
-// ---------------------------------------------------------------------------
-//
-TInt CDunSignalNotify::AddEndpointReadyCallback(
-    MDunEndpointReady* aERCallback )
-    {
-    FTRACE(FPrint( _L("CDunSignalNotify::AddEndpointReadyCallback()" ) ));
-    if ( !aERCallback )
-        {
-        FTRACE(FPrint( _L("CDunSignalNotify::AddEndpointReadyCallback() (aERCallback) not initialized!" ) ));
-        return KErrGeneral;
-        }
-    TInt retTemp = iERCallbacks.Find( aERCallback );
-    if ( retTemp != KErrNotFound )
-        {
-        FTRACE(FPrint( _L("CDunSignalNotify::AddEndpointReadyCallback() (already exists) complete" ) ));
-        return KErrAlreadyExists;
-        }
-    retTemp = iERCallbacks.Append( aERCallback );
-    if ( retTemp != KErrNone )
-        {
-        FTRACE(FPrint( _L("CDunSignalNotify::AddEndpointReadyCallback() (append failed!) complete" ) ));
-        return retTemp;
-        }
-    ReportEndpointReady( ETrue );  // report immediately as this is a hack
-    FTRACE(FPrint( _L("CDunSignalNotify::AddEndpointReadyCallback() complete" ) ));
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
 // Sets media to use for this endpoint monitor
 // ---------------------------------------------------------------------------
 //
@@ -375,28 +342,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Reports endpoint ready or not ready
-// ---------------------------------------------------------------------------
-//
-void CDunSignalNotify::ReportEndpointReady( TBool aReady )
-    {
-    FTRACE(FPrint( _L("CDunSignalNotify::ReportEndpointReady()" ) ));
-    TInt count = iERCallbacks.Count();
-    for ( TInt i=0; i<count; i++ )
-        {
-        if ( aReady )
-            {
-            iERCallbacks[i]->NotifyEndpointReady();
-            }
-        else  // not ready
-            {
-            iERCallbacks[i]->NotifyEndpointNotReady();
-            }
-        }
-    FTRACE(FPrint( _L("CDunSignalNotify::ReportEndpointReady() complete" ) ));
-    }
-
-// ---------------------------------------------------------------------------
 // From class CActive.
 // Gets called when line status changes
 // ---------------------------------------------------------------------------
--- a/localconnectivityservice/dun/utils/src/DunTransUtils.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/dun/utils/src/DunTransUtils.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -651,7 +651,6 @@
     CDunUpstream* upstream = channelData.iUpstreamRW;
     CDunDownstream* downstream = channelData.iDownstreamRW;
 
-    // Set command notify endpoint readiness callbacks
     if ( aDirection == EDunReaderUpstream )
         {
         // Initialize stream for AT parsing (ignore errors)
@@ -676,9 +675,6 @@
             {
             // Add callback (ignore errors)
             channelData.iUpstreamSignalCopy->AddCallback( aCallback );
-            // Add endpoint readiness callback (ignore errors )
-            MDunEndpointReady* erHandler = downstream->EndpointReadyHandler();
-            channelData.iUpstreamSignalCopy->AddEndpointReadyCallback( erHandler );
             }
         }
     else if ( streamType == EDunStreamTypeDownstream )
@@ -688,8 +684,6 @@
             {
             // Add callback (ignore errors)
             channelData.iDownstreamSignalCopy->AddCallback( aCallback );
-            // Note: Nokia's adaptation doesn't support full signals so don't
-            // add the endpoint readiness callback here
             }
         }
     else
@@ -709,9 +703,6 @@
             }
         // Add callback (ignore errors)
         channelData.iSignalNotify->AddCallback( aCallback );
-        // Add endpoint readiness callback (ignore errors )
-        MDunEndpointReady* erHandler = downstream->EndpointReadyHandler();
-        channelData.iSignalNotify->AddEndpointReadyCallback( erHandler );
         }
 
     // Add callback (ignore errors)
--- a/localconnectivityservice/obexreceiveservices/mtmuibluetooth/src/btmtmuidata.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexreceiveservices/mtmuibluetooth/src/btmtmuidata.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -31,6 +31,8 @@
 #include <obexutilsmessagehandler.h>
 
 
+const TInt KBtMtmUiNfcContext       = 2;
+
 // ================= MEMBER FUNCTIONS =======================
 
 // Two-phased constructor.
@@ -129,7 +131,16 @@
 const CBaseMtmUiData::CBitmapArray& CBtMtmUiData::ContextIcon( const TMsvEntry& aContext, 
                                                               TInt /*aStateFlags*/) const
 	{
-	TInt icon = TObexUtilsUiLayer::ContextIcon( aContext, EBluetooth );
+	// Check if NFC context
+	TInt icon = 0;
+	if ( aContext.MtmData1() == KBtMtmUiNfcContext )
+	    {
+      icon = TObexUtilsUiLayer::ContextIcon( aContext, ENfc );
+	    }
+	else
+	    {
+	    icon = TObexUtilsUiLayer::ContextIcon( aContext, EBluetooth );
+	    }
 
 	return *iIconArrays->At( icon/2 ); 
 	}
--- a/localconnectivityservice/obexserviceman/group/obexserviceman.mmp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/group/obexserviceman.mmp	Sat Apr 24 00:43:26 2010 +0300
@@ -28,7 +28,7 @@
 CAPABILITY	CAP_SERVER CommDD NetworkControl LocalServices
 VENDORID	VID_DEFAULT
 
-EPOCHEAPSIZE  0x500 0x400000
+EPOCHEAPSIZE  0x500 0x800000
 
 EPOCSTACKSIZE  0x4000
 
--- a/localconnectivityservice/obexserviceman/utils/inc/obexutilsuilayer.h	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/inc/obexutilsuilayer.h	Sat Apr 24 00:43:26 2010 +0300
@@ -52,7 +52,8 @@
 enum TContextMedia
     {
     EBluetooth,
-    EInfrared
+    EInfrared,
+	ENfc
     };
 
 /**
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilsglobalprogressdialog.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsglobalprogressdialog.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -28,7 +28,7 @@
 #include <avkon.mbg>
 #include <avkon.rsg>
 #include <bautils.h>
-#include <BtuiViewResources.rsg>     // Compiled resource ids
+//#include <BtuiViewResources.rsg>     // Compiled resource ids
 #include <e32math.h>
 
 #include <StringLoader.h>            // Localisation stringloader
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -90,7 +90,7 @@
     TDataType dataType = attachInfo->MimeType();
     TFileName filePath;
     filePath = attachInfo->FilePath();
-    
+  
     TInt error = KErrNone;
     TBool isCompleteSelf = EFalse;      
     CEikonEnv* eikEnv = CEikonEnv::Static();
@@ -123,18 +123,35 @@
         paramList->AppendL( paramSave );
         
         if ( eikEnv )
-            {
-            
+            {            
             iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
             iDocumentHandler->SetExitObserver( this );
-            RFile64 shareableFile;
-            TRAP( error, iDocumentHandler->OpenTempFileL(filePath,shareableFile));
-            if ( error == KErrNone)
+            RFs rfs;
+            User::LeaveIfError( rfs.Connect() );
+            if ( BaflUtils::FileExists( rfs, filePath ) )                                 
                 {
-                TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList));
-                }
-            shareableFile.Close();
-            if ( error == KErrNotFound )
+                RFile64 shareableFile;
+                TRAP( error, iDocumentHandler->OpenTempFileL(filePath,shareableFile));
+                if ( error == KErrNone)
+                    {
+                    TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList));
+                    }
+                shareableFile.Close();
+                
+                if ( error == KErrNotSupported )  
+                    {                    
+                    delete iDocumentHandler;
+                    iDocumentHandler = NULL;
+                    
+                    const TInt sortMethod = 2;  // 0 = 'By name', 1 = 'By type', 
+                                                // 2 = 'Most recent first' and 3 = 'Largest first'
+                    TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( filePath, 
+                                                                        sortMethod, 
+                                                                        ETrue )); // ETrue -> launch file manager in embedded mode.
+                    isCompleteSelf = ETrue;
+                    }  // KErrNotSupported
+                }            
+            else 
                 {
                 error = KErrNone;
                 TFileName fileName;
@@ -152,25 +169,14 @@
                         }            
                     }    
                 isCompleteSelf = ETrue;
-                } // KErrNotFound
+                }  
+           
+            rfs.Close();
             } // eikEnv
-                   
-       		else if ( error == KErrNotSupported )  
-            	{                    
-            	delete iDocumentHandler;
-            	iDocumentHandler = NULL;
-                                   
-            	const TInt sortMethod = 2;  // 0 = 'By name', 1 = 'By type', 
-                                  			// 2 = 'Most recent first' and 3 = 'Largest first'
-            	TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( filePath, 
-                                                                sortMethod, 
-                                                                ETrue )); // ETrue -> launch file manager in embedded mode.
-            	isCompleteSelf = ETrue;
-            	}  // KErrNotSupported
-                
+        
         CleanupStack::PopAndDestroy(); // paramList                                     
         } // EMsvLinkedFile
-    
+     
     
     // Set message to READ     
     TMsvEntry entry = aMessage->Entry();
@@ -178,9 +184,7 @@
     aMessage->ChangeL( entry );
     
     User::LeaveIfError ( error );
-    CleanupStack::PopAndDestroy(3); //  attachInfo, store, attachEntry
-    
-    
+    CleanupStack::PopAndDestroy(3); //  attachInfo, store, attachEntry        
     
     iObserverRequestStatus = KRequestPending;  // CMsvOperation (observer)
     iStatus = KRequestPending;  // CMsvOperation
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilsmessagehandler.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsmessagehandler.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002,2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -137,40 +137,51 @@
     {
     FLOG(_L("[OBEXUTILS]\t StoreAsRichTextL()"));
 
-    // Read the file into buffer
-    
-    CBufFlat* buffer = CBufFlat::NewL( 16 );
-    CleanupStack::PushL(buffer);  // 1st push
-
     TInt fileLength = 0;
     User::LeaveIfError( aFile.Size( fileLength ) );
-    
-    buffer->ResizeL( fileLength );
-    TPtr8 bufferPtr = buffer->Ptr(0);
-    
-    User::LeaveIfError( aFile.Read( bufferPtr ) );
+
+    // Calculate the number of blocks to read
+    const TInt blockSize = 128 * 1024;
+    TInt fullBlockCnt = fileLength / blockSize;
+    if (fileLength % blockSize > 0)
+        {
+        fullBlockCnt++;
+        }
+
+    CRichText* richText = ConstructRichTextLC(); // 1st, 2nd, 3rd push
+
+    RBuf8 buffer8;
+    CleanupClosePushL(buffer8);  // 4th push
+    buffer8.CreateL( blockSize );
+    RBuf buffer16;
+    CleanupClosePushL(buffer16); // 5th push
+    buffer16.CreateL(blockSize);
     
-    // In order for Bio to understand 8-bit binary data, 
-    // it needs to be stored in wide rich text object
-    // in the low byte of each word with the upper byte as 0.
-    // Do not use UTF8, just convert 8-bit to 16-bit.
-
-    CRichText* richText = ConstructRichTextLC(); // 2nd, 3rd, 4th push
-    HBufC* convert8BitTo16Bit = HBufC::NewLC(fileLength);  // 5th push
-    convert8BitTo16Bit->Des().Copy( bufferPtr );
-    buffer->Reset();  // free unused memory before InsertL()
+    // Read the file into buffer in small chunks  
+    TInt readBytes = 0;
+    for (TInt i = 0; i < fullBlockCnt; ++i)
+        {
+        User::LeaveIfError( aFile.Read( buffer8 ) );
     
-    richText->InsertL(0, *convert8BitTo16Bit);
-    CleanupStack::PopAndDestroy(convert8BitTo16Bit);
-    // -1 pop: free unused memory before StoreBodyTextL()
+        // In order for Bio to understand 8-bit binary data, 
+        // it needs to be stored in wide rich text object
+        // in the low byte of each word with the upper byte as 0.
+        // Do not use UTF8, just convert 8-bit to 16-bit.  
+        buffer16.Copy( buffer8 );
+        
+        richText->InsertL(readBytes, buffer16);
+        readBytes += buffer8.Length();
+        }
+    CleanupStack::PopAndDestroy(2, &buffer8);
+    // -2 pop: free unused memory before StoreBodyTextL()
 
     CMsvStore* parentStore = aParentEntry->EditStoreL();
-    CleanupStack::PushL(parentStore);   // 5th push
+    CleanupStack::PushL(parentStore);   // 4th push
     parentStore->StoreBodyTextL(*richText);
     parentStore->CommitL();
 
-    CleanupStack::PopAndDestroy(5);  // parentStore, richText, richParaFormatLayer,
-                                     // richCharFormatLayer, buffer
+    CleanupStack::PopAndDestroy(4);  // parentStore, richText, richParaFormatLayer,
+                                     // richCharFormatLayer
 
     FLOG(_L("[OBEXUTILS]\t StoreAsRichTextL() completed"));
     }
@@ -327,10 +338,10 @@
     TPtrC mimeType16(buf16->Des());
     CleanupStack::PopAndDestroy();   //   buf16
     
-    CUpdateMusicCollection* updateMusiccollection =CUpdateMusicCollection::NewL() ;
-    if (updateMusiccollection->isSupported(mimeType16))
+    CUpdateMusicCollection* updateMusicCollection = CUpdateMusicCollection::NewL() ;
+    if (updateMusicCollection->isSupported(mimeType16))
         {
-        updateMusiccollection->addToCollectionL(aFileName);
+        updateMusicCollection->addToCollectionL(aFileName);
         }
     
     aAttachInfo->SetMimeTypeL( mimeType );
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp	Sat Apr 24 00:27:31 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp	Sat Apr 24 00:43:26 2010 +0300
@@ -59,6 +59,9 @@
 const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3
 const TInt KUiNumberOfZoomStates = 2;          // second for the mask
 const TInt KSortNumMax = 2;
+const TInt KNfcUnreadIconIndex = 10;
+const TInt KNfcReadIconIndex = 8;
+
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -389,6 +392,17 @@
             icon = EMbmMuiuQgn_prop_mce_ir_read - EMbmMuiuQgn_prop_mce_ir_unread;
             }
         }
+    else if( aMedia == ENfc )
+        {
+        if( aContext.Unread() )
+            {
+            icon = KNfcUnreadIconIndex;
+            }
+        else
+            {
+            icon = KNfcReadIconIndex;
+            }
+        }
 
     FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ContextIcon() completed"));
 
@@ -505,6 +519,14 @@
             KAknsIIDQgnPropMceBtRead,
             EMbmMuiuQgn_prop_mce_bt_read,
             aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcRead,
+            0,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcUnread,
+            0,
+            aIconArrays);        
         }
     else //Infrared
         {
--- a/shortlinkconn_plat/dun_secondary_display_notification_api/group/bld.inf	Sat Apr 24 00:27:31 2010 +0300
+++ b/shortlinkconn_plat/dun_secondary_display_notification_api/group/bld.inf	Sat Apr 24 00:43:26 2010 +0300
@@ -23,4 +23,4 @@
 DEFAULT
 
 PRJ_EXPORTS
-../inc/secondarydisplay/dunsecondarydisplayapi.h    MW_LAYER_PLATFORM_EXPORT_PATH(secondarydisplay/dunsecondarydisplayapi.h)
+../inc/secondarydisplay/dunsecondarydisplayapi.h    MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/dunsecondarydisplayapi.h)
--- a/shortlinkconn_plat/obex_secondary_display_notification_api/group/bld.inf	Sat Apr 24 00:27:31 2010 +0300
+++ b/shortlinkconn_plat/obex_secondary_display_notification_api/group/bld.inf	Sat Apr 24 00:43:26 2010 +0300
@@ -24,4 +24,4 @@
 
 PRJ_EXPORTS
 
-../inc/secondarydisplay/obexutilssecondarydisplayapi.h     MW_LAYER_PLATFORM_EXPORT_PATH(secondarydisplay/obexutilssecondarydisplayapi.h)
+../inc/secondarydisplay/obexutilssecondarydisplayapi.h     MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/obexutilssecondarydisplayapi.h)