diff -r 87d139e87731 -r 031b9cffe6e4 localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp --- a/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp Wed Mar 31 23:02:31 2010 +0300 +++ b/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp Wed Apr 14 16:52:35 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; }