localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp
changeset 16 c3bac82c6ce0
parent 13 0feebc799606
child 18 6743bfee309e
--- a/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Fri Apr 16 15:55:04 2010 +0300
+++ b/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Mon May 03 13:21:36 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;
         }