localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp
author hgs
Fri, 25 Jun 2010 16:54:01 +0800
changeset 29 3ae5cb0b4c02
child 31 a26669f87b46
permissions -rw-r--r--
201025_07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     1
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     3
* All rights reserved.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     8
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     9
* Initial Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    11
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    12
* Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    13
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    14
* Description:  AT command handler and notifier
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    15
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    16
*/
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    17
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    18
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    19
 * Points to consider:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
 * - Each of the AT commands sent to ATEXT are converted to upper case form.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
 *   Thus the ATEXT plugins don't need to check for case. The conversion to
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
 *   upper case form stops when carriage return or '=' character is found.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
 * This file has the following functionality:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
 * 1) Line buffer filler:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
 *    AddDataForParsing(), ManagePartialCommand(), ExtractLineFromInputBuffer(),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
 *    etc. This buffer is used for parsing. These functions are used for
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
 *    splitter-combiner logic described below. CDunAtCmdPusher is used
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
 *    separately for each element in the line buffer.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
 * 2) Parser and splitter-combiner to handle the separater elements (subcommands)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
 *    in the line buffer. When end of line is detected, iEndIndex is used to
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
 *    extract the next line in iInput to the line buffer (ManageEndOfCmdHandling()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
 *    and ExtractLineFromInputBuffer()).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
 * 3) When end of iEndIndex is found (ExtractLineFromInputBuffer()), more data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
 *    is asked from CDunUpstream.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
 * Note: There is separate handling for "one character input data" and "A/"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
 * command handling which should be supported only for one line based data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
 * (ManagePartialCommand()).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
 * The AT command handling is splitted to two parts on high level:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
 * 1) Splitter: splitting the sub-commands in a command line to multiple ones
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
 *    for ATEXT to process.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
 * 2) Combiner: combining the replies coming from ATEXT using a filter
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
 *    (the filter categories are explained in DunAtCmdPusher.cpp)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
 * Note1: This file uses AT command parsing based on heuristics.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
 * Refer to test specification if planning to change the heuristic.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
 * Note2: Input buffer management (ExtractLineFromInputBuffer()) can be tested
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
 * with non-line based terminals such as HyperTerminal or Realterm.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
#include "DunAtCmdHandler.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
#include "DunAtUrcHandler.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
#include "DunDownstream.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
const TInt8 KDunCancel = 24;  // Used for line editing, cancel character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
const TInt8 KDunEscape = 27;  // Used for editor ending, escape character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
EXPORT_C CDunAtCmdHandler* CDunAtCmdHandler::NewL(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    MDunAtCmdStatusReporter* aUpstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    MDunStreamManipulator* aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
    const TDesC8* aConnectionName )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
    CDunAtCmdHandler* self = new (ELeave) CDunAtCmdHandler(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
        aUpstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
        aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
        aConnectionName );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
CDunAtCmdHandler::~CDunAtCmdHandler()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
    FTRACE(FPrint( _L("CDunAtCmdHandler::~CDunAtCmdHandler()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
    ResetData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
    FTRACE(FPrint( _L("CDunAtCmdHandler::~CDunAtCmdHandler() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
// Resets data to initial values
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
EXPORT_C void CDunAtCmdHandler::ResetData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
    FTRACE(FPrint( _L("CDunAtCmdHandler::ResetData()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
    // APIs affecting this:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
    // IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
    // NewL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
    DeletePluginHandlers();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
    delete iCmdEchoer;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
    iCmdEchoer = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
    delete iNvramListen;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
    iNvramListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
    delete iModeListen;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
    iModeListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
    delete iEcomListen;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
    iEcomListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
    delete iAtSpecialCmdHandler;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
    iAtSpecialCmdHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
    if ( iAtCmdExtCommon.Handle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
        iAtCmdExtCommon.SynchronousClose();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
        iAtCmdExtCommon.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
    if ( iAtCmdExt.Handle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
        iAtCmdExt.SynchronousClose();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
        iAtCmdExt.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
    iSpecials.ResetAndDestroy();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
    iSpecials.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
    // AddCmdModeCallback()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
    iCmdCallbacks.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
    // Internal
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
    FTRACE(FPrint( _L("CDunAtCmdHandler::ResetData() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
// Adds callback for command mode notification
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
// The callback will be called when command mode starts or ends
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
EXPORT_C TInt CDunAtCmdHandler::AddCmdModeCallback( MDunCmdModeMonitor* aCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
    if ( !aCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (aCallback) not initialized!" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
    TInt retTemp = iCmdCallbacks.Find( aCallback );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
    if ( retTemp != KErrNotFound )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (already exists) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
        return KErrAlreadyExists;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
    retTemp = iCmdCallbacks.Append( aCallback );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (append failed!) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
// Adds data for parsing and parses if necessary
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
EXPORT_C TInt CDunAtCmdHandler::AddDataForParsing( TDesC8& aInput,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
                                                   TBool& aMoreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() received (%d bytes):"), aInput.Length() ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
    FTRACE(FPrintRaw(aInput) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
    TBool editorMode = iCmdPusher->EditorMode();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
    if ( editorMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
        // Note: return here with "no more data needed" and some error to fool
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
        // CDunUpstream into not reissuing the read request.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
        iCmdPusher->IssueRequest( aInput, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
        aMoreNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
    iInput = &aInput;  // iInput only for normal mode
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
    // Manage partial AT command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
    TBool moreNeeded = ManagePartialCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
    if ( moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
        aMoreNeeded = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (more partial) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
    if ( iHandleState != EDunStateIdle )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
        aMoreNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
        ManageEndOfCmdHandling( EFalse, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   198
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (not ready) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
    TBool pushStarted = HandleASlashCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
    if ( pushStarted )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
        // Note: return here with "partial input" status to fool CDunUpstream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
        // into reissuing the read request. The AT command has not really
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
        // started yet so this is necessary.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
        aMoreNeeded = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
        ManageEndOfCmdHandling( EFalse, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
        FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (A/) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
    iHandleState = EDunStateAtCmdHandling;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
    iDecodeInfo.iFirstDecode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
    iDecodeInfo.iDecodeIndex = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
    iDecodeInfo.iPrevExists = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   216
    iParseInfo.iLimit = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   217
    iParseInfo.iSendBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   218
    iEditorModeInfo.iContentFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   219
    HandleNextSubCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
    aMoreNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   226
// Manages request to abort command handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   227
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   228
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   229
EXPORT_C TInt CDunAtCmdHandler::ManageAbortRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
    // Just forward the request, do no other own processing
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
    TInt retVal = iCmdPusher->ManageAbortRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   239
// Sends a character to be echoed
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
EXPORT_C TInt CDunAtCmdHandler::SendEchoCharacter( const TDesC8* aInput,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
                                                   MDunAtCmdEchoer* aCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
    FTRACE(FPrint( _L("CDunAtCmdHandler::SendEchoCharacter()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
    TInt retVal = iCmdEchoer->SendEchoCharacter( aInput, aCallback );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
    FTRACE(FPrint( _L("CDunAtCmdHandler::SendEchoCharacter() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
// Stops sending of AT command from parse buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
EXPORT_C TInt CDunAtCmdHandler::Stop()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
    FTRACE(FPrint( _L("CDunAtCmdHandler::Stop()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
    // Only stop iCmdPusher here, not iUrcHandlers!
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
    if ( iHandleState != EDunStateAtCmdHandling )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   261
        FTRACE(FPrint( _L("CDunAtCmdHandler::Stop() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
    iCmdPusher->Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
    // The line below is used in the case when this function is called by
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
    // CDunUpstream as a result of "data mode ON" change notification.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   267
    // In this case it is possible that HandleNextSubCommand() returns
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
    // without resetting the iSendBuffer because of the way it checks the
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
    // iHandleState.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
    ManageEndOfCmdHandling( ETrue, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
    FTRACE(FPrint( _L("CDunAtCmdHandler::Stop() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
// Starts URC message handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   278
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
EXPORT_C TInt CDunAtCmdHandler::StartUrc()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
    FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
    TInt count = iUrcHandlers.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
    for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
        TInt retTemp = iUrcHandlers[i]->IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
        if ( retTemp!=KErrNone && retTemp!=KErrNotReady )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   289
            FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc() (ERROR) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
            return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   291
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
    FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   297
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
// Stops URC message handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   299
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
EXPORT_C TInt CDunAtCmdHandler::StopUrc()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
    FTRACE(FPrint( _L("CDunAtCmdHandler::StopUrc()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
    TInt retVal = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
    TInt count = iUrcHandlers.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
    for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
        retVal = iUrcHandlers[i]->Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   310
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
    FTRACE(FPrint( _L("CDunAtCmdHandler::StopUrc() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   312
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
// CDunAtCmdHandler::CDunAtCmdHandler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
CDunAtCmdHandler::CDunAtCmdHandler( MDunAtCmdStatusReporter* aUpstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
                                    MDunStreamManipulator* aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
                                    const TDesC8* aConnectionName ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
    iUpstream( aUpstream ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
    iDownstream( aDownstream ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
    iConnectionName( aConnectionName )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
// CDunAtCmdHandler::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
void CDunAtCmdHandler::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
    FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
    if ( !iUpstream || !iDownstream || !iConnectionName )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
    // Connect to AT command extension (must succeed)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
    TInt retTemp = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
    CleanupClosePushL( iAtCmdExt );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
    retTemp = iAtCmdExt.Connect( EDunATExtension, *iConnectionName );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
        FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() connect (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
        User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
    CleanupClosePushL( iAtCmdExtCommon );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
    retTemp = iAtCmdExtCommon.Connect( *iConnectionName );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
        FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() common connect (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
        User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
    // Create the array of special commands
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
    CreateSpecialCommandsL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
    // Create the plugin handlers
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
    CreatePluginHandlersL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
    // Create the echo handler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
    iCmdEchoer = CDunAtCmdEchoer::NewL( iDownstream );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
    // Create the listeners
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
    iEcomListen = CDunAtEcomListen::NewL( &iAtCmdExt, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
    iModeListen = CDunAtModeListen::NewL( &iAtCmdExtCommon, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
    iNvramListen = CDunAtNvramListen::NewL( &iAtCmdExt, &iAtCmdExtCommon );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
    iAtSpecialCmdHandler = CDunAtSpecialCmdHandler::NewL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
    // Set the default modes (+report) and characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
    GetAndSetDefaultSettingsL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
    // Start listening
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
    iEcomListen->IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
    iModeListen->IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
    iNvramListen->IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
    CleanupStack::Pop( &iAtCmdExtCommon );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
    CleanupStack::Pop( &iAtCmdExt );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
    FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
void CDunAtCmdHandler::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
    // Don't initialize iUpstream here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
    // Don't initialize iDownstream here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
    // Don't initialize iConnectionName here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
    iHandleState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
    iCarriageReturn = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
    iLineFeed = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
    iBackspace = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
    iInput = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
    iDecodeInfo.iFirstDecode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
    iDecodeInfo.iDecodeIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
    iDecodeInfo.iExtendedIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
    iDecodeInfo.iPrevChar = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
    iDecodeInfo.iPrevExists = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
    iDecodeInfo.iAssignFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
    iDecodeInfo.iInQuotes = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
    iDecodeInfo.iSpecialFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
    iDecodeInfo.iCmdsHandled = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
    iEditorModeInfo.iContentFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
    iCmdPusher = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
    iEcomListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
    iModeListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
    iNvramListen = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
    iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
    iEchoOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
    iQuietOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
    iVerboseOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
    iEndIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
// Creates plugin handlers for this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
void CDunAtCmdHandler::CreatePluginHandlersL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   418
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   419
    FTRACE(FPrint( _L("CDunAtCmdHandler::CreatePluginHandlersL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   420
    if ( !iAtCmdExt.Handle() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   421
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   422
        FTRACE(FPrint( _L("CDunAtCmdHandler::CreatePluginHandlersL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   423
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   424
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   425
    // First create the command reply pusher
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   426
    CDunAtCmdPusher* cmdPusher = CDunAtCmdPusher::NewLC( &iAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   427
                                                         this,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   428
                                                         iDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   429
                                                         &iOkBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   430
    // Next create the URC handlers
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   431
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   432
    TInt numOfPlugins = iAtCmdExt.NumberOfPlugins();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   433
    for ( i=0; i<numOfPlugins; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   434
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   435
        AddOneUrcHandlerL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   436
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   437
    CleanupStack::Pop( cmdPusher );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   438
    iCmdPusher = cmdPusher;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   439
    FTRACE(FPrint( _L("CDunAtCmdHandler::CreatePluginHandlersL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   440
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   441
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   442
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   443
// Creates an array of special commands
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   444
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   445
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
void CDunAtCmdHandler::CreateSpecialCommandsL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
    FTRACE(FPrint( _L("CDunAtCmdHandler::CreateSpecialCommandsL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
    TInt retTemp = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
    TBool firstSearch = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
    for ( ;; )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   453
        // Let's borrow iLineBuffer for this purpose
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   454
        retTemp = iAtCmdExt.GetNextSpecialCommand( iLineBuffer, firstSearch );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
        if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   456
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   457
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   458
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   459
        TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   460
        HBufC8* specialCmd = HBufC8::NewMaxLC( lineLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   461
        *specialCmd = iLineBuffer;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   462
        iSpecials.AppendL( specialCmd );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   463
        CleanupStack::Pop( specialCmd );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   464
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   465
    iLineBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   466
    FTRACE(FPrint( _L("CDunAtCmdHandler::CreateSpecialCommandsL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   467
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   468
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   469
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   470
// Recreates special command data.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   471
// This is done when a plugin is installed or uninstalled.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   472
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   473
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   474
TInt CDunAtCmdHandler::RecreateSpecialCommands()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   475
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   476
    FTRACE(FPrint( _L("CDunAtCmdHandler::RecreateSpecialCommands()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   477
    iSpecials.ResetAndDestroy();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   478
    TRAPD( retTrap, CreateSpecialCommandsL() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   479
    FTRACE(FPrint( _L("CDunAtCmdHandler::RecreateSpecialCommands() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   480
    return retTrap;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   481
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   482
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   483
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   484
// Gets default settings from RATExtCommon and sets them to RATExt
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   485
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   486
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   487
void CDunAtCmdHandler::GetAndSetDefaultSettingsL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   488
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   489
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetAndSetDefaultSettingsL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   490
    // Note: Let's assume command mode is off by default
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   491
    TUint modeSet = GetCurrentModeL( KModeEcho | KModeQuiet | KModeVerbose );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   492
    iEchoOn    = ( modeSet & KEchoModeBase    ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   493
    iQuietOn   = ( modeSet & KQuietModeBase   ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   494
    iVerboseOn = ( modeSet & KVerboseModeBase ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   495
    iCarriageReturn = GetCurrentModeL( KModeCarriage );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   496
    iLineFeed = GetCurrentModeL( KModeLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   497
    iBackspace = GetCurrentModeL( KModeBackspace );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   498
    iAtCmdExt.ReportQuietModeChange( iQuietOn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   499
    iAtCmdExt.ReportVerboseModeChange( iVerboseOn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   500
    iAtCmdExt.ReportCharacterChange( ECharTypeCarriage, iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   501
    iAtCmdExt.ReportCharacterChange( ECharTypeLineFeed, iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   502
    iAtCmdExt.ReportCharacterChange( ECharTypeBackspace, iBackspace );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   503
    RegenerateReplyStrings();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   504
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetAndSetDefaultSettingsL() settings: E=%d, Q=%d, V=%d"), iEchoOn, iQuietOn, iVerboseOn ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   505
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetAndSetDefaultSettingsL() settings: CR=%u, LF=%u, BS=%u"), iCarriageReturn, iLineFeed, iBackspace ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   506
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetAndSetDefaultSettingsL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   507
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   508
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   509
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   510
// Regenerates the reply strings based on settings
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   511
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   512
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   513
TBool CDunAtCmdHandler::RegenerateReplyStrings()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   514
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   515
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateReplyStrings()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   516
    TBool retVal = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   517
    retVal |= RegenerateOkReply();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   518
    retVal |= RegenerateErrorReply();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   519
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateReplyStrings() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   520
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   521
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   522
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   523
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   524
// Regenerates the ok reply based on settings
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   525
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   526
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   527
TBool CDunAtCmdHandler::RegenerateOkReply()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   528
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   529
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   530
    if ( iDownstream->IsDataInQueue(&iOkBuffer) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   531
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   532
        FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() (in queue!) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   533
        return iQuietOn;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   534
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   535
    iOkBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   536
    if ( iQuietOn )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   537
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   538
        FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() (quiet) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   539
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   540
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   541
    if ( iVerboseOn )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   542
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   543
        _LIT8( KVerboseOk, "OK" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   544
        iOkBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   545
        iOkBuffer.Append( iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   546
        iOkBuffer.Append( KVerboseOk );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   547
        iOkBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   548
        iOkBuffer.Append( iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   549
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   550
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   551
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   552
        _LIT8( KNumericOk, "0" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   553
        iOkBuffer.Append( KNumericOk );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   554
        iOkBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   555
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   556
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   557
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   558
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   559
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   560
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   561
// Regenerates the error reply based on settings
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   562
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   563
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   564
TBool CDunAtCmdHandler::RegenerateErrorReply()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   565
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   566
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   567
    if ( iDownstream->IsDataInQueue(&iErrorBuffer) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   568
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   569
        FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() (in queue!) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   570
        return iQuietOn;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   571
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   572
    iErrorBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   573
    if ( iQuietOn )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   574
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   575
        FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() (quiet) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   576
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   577
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   578
    if ( iVerboseOn )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   579
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   580
        _LIT8( KVerboseError, "ERROR" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   581
        iErrorBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   582
        iErrorBuffer.Append( iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   583
        iErrorBuffer.Append( KVerboseError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   584
        iErrorBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   585
        iErrorBuffer.Append( iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   586
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   587
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   588
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   589
        _LIT8( KNumericError, "4" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   590
        iErrorBuffer.Append( KNumericError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   591
        iErrorBuffer.Append( iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   592
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   593
    FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   594
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   595
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   596
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   597
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   598
// Gets current mode
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   599
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   600
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   601
TUint CDunAtCmdHandler::GetCurrentModeL( TUint aMask )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   602
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   603
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   604
    TUint maskCheck = aMask & ( ~KSupportedModes );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   605
    if ( maskCheck != 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   606
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   607
        FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() (not supported) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   608
        User::Leave( KErrNotSupported );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   609
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   610
    TUint newMode = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   611
    TInt retTemp = iAtCmdExtCommon.GetMode( aMask, newMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   612
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   613
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   614
        FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() (ERROR) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   615
        User::Leave( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   616
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   617
    FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   618
    return newMode & (KModeChanged-1);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   619
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   620
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   621
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   622
// Instantiates one URC message handling class instance and adds it to the URC
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   623
// message handler array
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   624
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   625
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   626
CDunAtUrcHandler* CDunAtCmdHandler::AddOneUrcHandlerL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   627
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   628
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddOneUrcHandlerL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   629
    CDunAtUrcHandler* urcHandler = CDunAtUrcHandler::NewLC( &iAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   630
                                                            iDownstream );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   631
    iUrcHandlers.AppendL( urcHandler );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   632
    CleanupStack::Pop( urcHandler );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   633
    FTRACE(FPrint( _L("CDunAtCmdHandler::AddOneUrcHandlerL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   634
    return urcHandler;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   635
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   636
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   637
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   638
// Deletes all instantiated URC message handlers
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   639
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   640
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   641
void CDunAtCmdHandler::DeletePluginHandlers()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   642
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   643
    FTRACE(FPrint( _L("CDunAtCmdHandler::DeletePluginHandlers()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   644
    delete iCmdPusher;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   645
    iCmdPusher = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   646
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   647
    TInt count = iUrcHandlers.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   648
    for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   649
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   650
        delete iUrcHandlers[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   651
        iUrcHandlers[i] = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   652
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   653
    iUrcHandlers.Reset();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   654
    iUrcHandlers.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   655
    FTRACE(FPrint( _L("CDunAtCmdHandler::DeletePluginHandlers() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   656
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   657
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   658
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   659
// Manages partial AT command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   660
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   661
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   662
TBool CDunAtCmdHandler::ManagePartialCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   663
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   664
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   665
    // Check one character (or unit) based input data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   666
    if ( iInput->Length() == KDunChSetMaxCharLen )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   667
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   668
        EchoCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   669
        // Handle backspace and cancel characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   670
        TBool found = HandleSpecialCharacters();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   671
        if ( found )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   672
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   673
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (special) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   674
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   675
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   676
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   677
    TBool moreNeeded = ExtractLineFromInputBuffer();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   678
    if ( moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   679
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   680
        // More data is not needed with "A/" (no carriage return), check that
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   681
        // special case here, otherwise continue processing
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   682
        if ( !IsASlashCommand() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   683
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   684
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (more) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   685
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   686
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   687
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   688
    // If something went wrong, do nothing (return consumed)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   689
    if ( iLineBuffer.Length() <= 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   690
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   691
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (length) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   692
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   693
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   694
    // For other commands, just return with consumed
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   695
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   696
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   697
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   698
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   699
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   700
// Echoes a command if echo is on
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   701
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   702
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   703
TBool CDunAtCmdHandler::EchoCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   704
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   705
    FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   706
    if ( iInput->Length() > KDunChSetMaxCharLen )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   707
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   708
        FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (wrong length) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   709
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   710
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   711
    if ( iEchoOn )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   712
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   713
        if ( iDownstream->IsDataInQueue(&iEchoBuffer) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   714
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   715
            FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (in queue!) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   716
            return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   717
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   718
        iEchoBuffer.Copy( *iInput );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   719
        iDownstream->NotifyDataPushRequest( &iEchoBuffer, NULL );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   720
        FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   721
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   722
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   723
    FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (not started) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   724
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   725
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   726
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   727
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   728
// Handles backspace and cancel characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   729
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   730
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   731
TBool CDunAtCmdHandler::HandleSpecialCharacters()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   732
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   733
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   734
    if ( iInput->Length() != KDunChSetMaxCharLen )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   735
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   736
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (wrong length) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   737
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   738
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   739
    if ( (*iInput)[0] == iBackspace )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   740
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   741
        TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   742
        if ( lineLength > 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   743
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   744
            iLineBuffer.SetLength( lineLength-1 );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   745
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   746
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (backspace) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   747
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   748
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   749
    if ( (*iInput)[0] == KDunCancel )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   750
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   751
        ManageEndOfCmdHandling( EFalse, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   752
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (cancel) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   753
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   754
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   755
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   756
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   757
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   758
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   759
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   760
// Extracts line from input buffer to line buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   761
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   762
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   763
TBool CDunAtCmdHandler::ExtractLineFromInputBuffer()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   764
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   765
    FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   766
    FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() before (%d bytes):"), iLineBuffer.Length() ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   767
    FTRACE(FPrintRaw(iLineBuffer) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   768
    // Case1: If no data in iLineBuffer and end-of-line character in iInputBuffer[start]:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   769
    //     - Skip end-of-line characters, find start-of-line condition, find end-of-line character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   770
    //     - If partial line found (start-of-line condition and no end-of-line character):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   771
    //           - Save partial line to iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   772
    //           - Set iEndIndex to end of iInputBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   773
    //     - If full line found (start-of-line condition and end-of-line character):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   774
    //           - Save full line to iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   775
    //           - Skip multiple end-of-line characters until next start-of-line
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   776
    //             condition or end of iInputBuffer -> save this position to iEndIndex
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   777
    // Case2: If no data in iLineBuffer and non-end-of-line character in iInputBuffer[start]:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   778
    //     - Find end-of-line character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   779
    //     - If partial line found (no end-of-line character):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   780
    //           - Save partial line to iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   781
    //           - Set iEndIndex to end of iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   782
    //     - If full line found (end-of-line character):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   783
    //           - Save full line to iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   784
    //           - Skip multiple end-of-line characters until next start-of-line
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   785
    //             condition or end of iInputBuffer -> save this position to iEndIndex
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   786
    // Case3: If data in iLineBuffer and end-of-line character in iInputBuffer[start]:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   787
    //     - Skip end-of-line characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   788
    //     - Keep string currently in iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   789
    //     - Skip end-of-line characters until non-end-of-line or end of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   790
    //       iInputBuffer -> save this position to iEndIndex
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   791
    // Case4: If data in iLineBuffer and non-end-of-line character in iInputBuffer[start]:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   792
    //     - Processed the same way as Case1, however "Skip end-of-line characters" does
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   793
    //       not have any effect
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   794
    if ( iInput->Length() <= 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   795
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   796
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (wrong length) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   797
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   798
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   799
    TBool moreNeeded = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   800
    TBool copyNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   801
    TInt copyLength = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   802
    TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   803
    TInt lineMaxLength = iLineBuffer.MaxLength();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   804
    TInt freeLineSpace = lineMaxLength - lineLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   805
    TInt inputLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   806
    TInt startIndex = ( iEndIndex>=0 ) ? iEndIndex : 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   807
    if ( startIndex >= inputLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   808
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   809
        iEndIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   810
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (input end) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   811
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   812
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   813
    // Cases here:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   814
    // Case1: If no data in iLineBuffer and end-of-line character in iInputBuffer[start]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   815
    // Case2: If no data in iLineBuffer and non-end-of-line character in iInputBuffer[start]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   816
    // Case3: If data in iLineBuffer and end-of-line character in iInputBuffer[start]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   817
    // Case4: If data in iLineBuffer and non-end-of-line character in iInputBuffer[start]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   818
    // Summary: Cases 1, 2 and 4 can be combined. Case 3 needs a separate check.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   819
    TChar character = (*iInput)[startIndex];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   820
    TBool endOfLine = IsEndOfLine(character);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   821
    if ( lineLength>0 && endOfLine )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   822
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   823
        moreNeeded = HandleSpecialBufferManagement( startIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   824
                                                    copyLength,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   825
                                                    copyNeeded );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   826
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   827
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   828
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   829
        moreNeeded = HandleGenericBufferManagement( startIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   830
                                                    copyLength,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   831
                                                    copyNeeded );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   832
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   833
    if ( copyNeeded && copyLength>0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   834
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   835
        // Check the case copyLength does not fit to iLineBuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   836
        // This case should be handled by returning "more data needed"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   837
        // Also reset the iLineBuffer to ensure the handling doesn't stuck
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   838
        // for rest of the commands (usability case)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   839
        if ( copyLength > freeLineSpace )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   840
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   841
            iLineBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   842
            iEndIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   843
            FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() after (%d bytes):"), iLineBuffer.Length() ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   844
            FTRACE(FPrintRaw(iLineBuffer) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   845
            FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (overflow) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   846
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   847
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   848
        iLineBuffer.Append( &(*iInput)[startIndex], copyLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   849
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() after (%d bytes):"), iLineBuffer.Length() ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   850
        FTRACE(FPrintRaw(iLineBuffer) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   851
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   852
    if ( moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   853
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   854
        iEndIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   855
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (more needed) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   856
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   857
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   858
    // As a last step adjust the possible multiple IsDelimiterCharacter()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   859
    // characters and set length of iLineBuffer. Leave iEndIndex untouched.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   860
    lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   861
    for ( TInt i=lineLength-1; i>=0; i-- )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   862
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   863
        TChar character = iLineBuffer[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   864
        if ( !IsDelimiterCharacter(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   865
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   866
            iLineBuffer.SetLength( i + 1 );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   867
            FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() after (%d bytes):"), iLineBuffer.Length() ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   868
            FTRACE(FPrintRaw(iLineBuffer) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   869
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   870
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   871
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   872
    FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (line found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   873
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   874
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   875
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   876
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   877
// Handles generic buffer management
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   878
// (explanation in ExtractLineFromInputBuffer())
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   879
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   880
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   881
TBool CDunAtCmdHandler::HandleGenericBufferManagement( TInt& aStartIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   882
                                                       TInt& aCopyLength,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   883
                                                       TBool& aCopyNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   884
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   885
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   886
    TInt inputLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   887
    TInt currentIndex = SkipEndOfLineCharacters( aStartIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   888
    if ( currentIndex >= inputLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   889
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   890
        // No data in iLineBuffer and only end-of-lines in new buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   891
        // return with "need more data"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   892
        iEndIndex = inputLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   893
        aCopyLength = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   894
        aCopyNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   895
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (new end for old no data) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   896
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   897
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   898
    // No data in iLineBuffer and non-end-of-line character found
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   899
    // Try to find the first start-of-line condition
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   900
    TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   901
    if ( lineLength == 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   902
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   903
        currentIndex = SkipSubCommandDelimiterCharacters( aStartIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   904
        if ( currentIndex >= inputLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   905
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   906
            // No data in iLineBuffer and only end-of-lines+delimiter in new buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   907
            // return with "need more data"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   908
            iEndIndex = inputLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   909
            aCopyLength = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   910
            aCopyNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   911
            FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (new end+delim for old no data) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   912
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   913
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   914
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   915
    aStartIndex = currentIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   916
    // No data in iLineBuffer and other than end-of-line or delimiter character found
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   917
    // Variable currentIndex is now the start of new command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   918
    // Next try to find the end of the command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   919
    TInt endIndex = FindEndOfLine( aStartIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   920
    if ( endIndex >= inputLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   921
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   922
        // No data in iLineBuffer and start of command found without end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   923
        // return with "need more data"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   924
        iEndIndex = inputLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   925
        aCopyLength = inputLength - aStartIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   926
        aCopyNeeded = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   927
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (start but no end for old no data) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   928
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   929
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   930
    // No data in iLineBuffer and end-of-line character found
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   931
    // Try to skip possible multiple end-of-line characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   932
    currentIndex = SkipEndOfLineCharacters( endIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   933
    // Variable currentIndex is now either start of next command or end of iInput
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   934
    // Note that this requires that Case 2 must skip the possible IsDelimiterCharacter()s
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   935
    iEndIndex = currentIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   936
    aCopyLength = endIndex - aStartIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   937
    aCopyNeeded = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   938
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (line found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   939
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   940
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   941
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   942
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   943
// Handles special buffer management
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   944
// (explanation in ExtractLineFromInputBuffer())
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   945
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   946
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   947
TBool CDunAtCmdHandler::HandleSpecialBufferManagement( TInt aStartIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   948
                                                       TInt& aCopyLength,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   949
                                                       TBool& aCopyNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   950
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   951
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialBufferManagement()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   952
    TInt currentIndex = SkipEndOfLineCharacters( aStartIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   953
    // Variable currentIndex is now either start of next command or end of iInput
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   954
    iEndIndex = currentIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   955
    aCopyLength = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   956
    aCopyNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   957
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialBufferManagement() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   958
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   959
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   960
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   961
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   962
// Skips end-of-line characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   963
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   964
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   965
TInt CDunAtCmdHandler::SkipEndOfLineCharacters( TInt aStartIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   966
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   967
    FTRACE(FPrint( _L("CDunAtCmdHandler::SkipEndOfLineCharacters()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   968
    TInt foundIndex = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   969
    TInt inputLength = foundIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   970
    for ( TInt i=aStartIndex; i<inputLength; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   971
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   972
        TChar character = (*iInput)[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   973
        if ( !IsEndOfLine(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   974
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   975
            foundIndex = i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   976
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   977
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   978
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   979
    FTRACE(FPrint( _L("CDunAtCmdHandler::SkipEndOfLineCharacters() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   980
    return foundIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   981
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   982
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   983
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   984
// Skips subcommand delimiter characters
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   985
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   986
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   987
TInt CDunAtCmdHandler::SkipSubCommandDelimiterCharacters( TInt aStartIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   988
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   989
    FTRACE(FPrint( _L("CDunAtCmdHandler::SkipSubCommandDelimiterCharacters()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   990
    TInt inputLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   991
    TInt foundIndex = inputLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   992
    for ( TInt i=aStartIndex; i<inputLength; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   993
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   994
        TChar character = (*iInput)[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   995
        if ( !IsDelimiterCharacter(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   996
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   997
            foundIndex = i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   998
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   999
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1000
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1001
    FTRACE(FPrint( _L("CDunAtCmdHandler::SkipSubCommandDelimiterCharacters() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1002
    return foundIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1003
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1004
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1005
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1006
// Finds the end of the line
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1007
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1008
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1009
TInt CDunAtCmdHandler::FindEndOfLine( TInt aStartIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1010
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1011
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindEndOfLine()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1012
    TInt inputLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1013
    TInt foundIndex = inputLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1014
    for ( TInt i=aStartIndex; i<inputLength; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1015
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1016
        TChar character = (*iInput)[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1017
        // Checking for IsDelimiterCharacter() here needs more logic (a parser).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1018
        // Just check with "IsEndOfLine()"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1019
        if ( IsEndOfLine(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1020
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1021
            foundIndex = i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1022
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1023
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1024
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1025
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindEndOfLine() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1026
    return foundIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1027
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1028
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1029
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1030
// Handles next subcommand from line buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1031
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1032
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1033
TBool CDunAtCmdHandler::HandleNextSubCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1034
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1035
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleNextSubCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1036
    if ( iHandleState != EDunStateAtCmdHandling )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1037
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1038
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleNextSubCommand() (not ready) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1039
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1040
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1041
    TBool extracted = ExtractNextSubCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1042
    if ( !extracted )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1043
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1044
        ManageEndOfCmdHandling( ETrue, ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1045
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleNextSubCommand() (last) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1046
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1047
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1048
    // Next convert the decoded AT command to uppercase
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1049
    // Don't check for case status -> let mixed cases pass
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1050
    TInt oldLength = iParseInfo.iSendBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1051
    iParseInfo.iSendBuffer.SetLength( iParseInfo.iLimit );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1052
    iParseInfo.iSendBuffer.UpperCase();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1053
    iParseInfo.iSendBuffer.SetLength( oldLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1054
    // Next always send the command to ATEXT
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1055
    iCmdPusher->IssueRequest( iParseInfo.iSendBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1056
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleNextSubCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1057
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1058
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1059
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1060
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1061
// Manages end of AT command handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1062
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1063
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1064
void CDunAtCmdHandler::ManageEndOfCmdHandling( TBool aNotifyLocal,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1065
                                               TBool aNotifyExternal )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1066
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1067
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1068
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling() (loc=%d, ext=%d)"), aNotifyLocal, aNotifyExternal ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1069
    // If iEndIndex is (>=0 && <iInput.Length()) it means more data waits in
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1070
    // iInput that didn't fit in iInputBuffer.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1071
    TInt cmdLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1072
    TBool subBlock = ( iEndIndex>=0&&iEndIndex<cmdLength ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1073
    if ( iLineBuffer.Length()>0 && !subBlock )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1074
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1075
        // Line buffer set and no partial subblock, copy to lastbuffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1076
        iLastBuffer.Copy( iLineBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1077
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1078
    iLineBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1079
    iDecodeInfo.iFirstDecode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1080
    iDecodeInfo.iDecodeIndex = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1081
    iDecodeInfo.iPrevExists = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1082
    iParseInfo.iLimit = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1083
    iParseInfo.iSendBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1084
    iEditorModeInfo.iContentFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1085
    iHandleState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1086
    if ( aNotifyLocal )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1087
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1088
        iCmdPusher->SetEndOfCmdLine();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1089
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1090
    // iEndIndex must not be reset to KErrNotFound only when
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1091
    // ExtractLineFromInputBuffer() found the next line
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1092
    // (when moreNeeded is EFalse)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1093
    TBool resetIndex = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1094
    if ( aNotifyExternal )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1095
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1096
        TBool moreNeeded = ExtractLineFromInputBuffer();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1097
        if ( moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1098
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1099
            iUpstream->NotifyParserNeedsMoreData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1100
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1101
        else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1102
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1103
            // AppendBlockToInputBuffer() was able to fill with known end, handle next
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1104
            iHandleState = EDunStateAtCmdHandling;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1105
            HandleNextSubCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1106
            resetIndex = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1107
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1108
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1109
    if ( resetIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1110
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1111
        iEndIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1112
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1113
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1114
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1115
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1116
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1117
// Extracts next subcommand from line buffer to send buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1118
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1119
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1120
TBool CDunAtCmdHandler::ExtractNextSubCommand( TBool aPeek )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1121
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1122
    FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1123
    TDunDecodeInfo oldInfo = iDecodeInfo;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1124
    iParseInfo.iLimit = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1125
    iParseInfo.iSendBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1126
    // Find start of subcommand from line buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1127
    TInt startIndex = FindStartOfSubCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1128
    if ( startIndex < 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1129
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1130
        RestoreOldDecodeInfo( aPeek, oldInfo );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1131
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextDecodedCommand() (no start) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1132
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1133
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1134
    iDecodeInfo.iDecodeIndex = startIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1135
    TBool specialCmd = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1136
    TInt endIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1137
    specialCmd = CheckSpecialCommand( endIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1138
    if ( !specialCmd )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1139
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1140
        FindSubCommand( endIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1141
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1142
    TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1143
    TBool inStartLimits = ( startIndex >= 0 && startIndex < lineLength ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1144
    TBool inEndLimits   = ( endIndex   >= 0 && endIndex   < lineLength ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1145
    if ( !inStartLimits || !inEndLimits )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1146
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1147
        RestoreOldDecodeInfo( aPeek, oldInfo );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1148
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() (no end) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1149
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1150
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1151
    TInt cmdLength = endIndex - startIndex + 1;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1152
    // If the limit was not already set then do it now
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1153
    if ( iParseInfo.iLimit < 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1154
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1155
        iParseInfo.iLimit = cmdLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1156
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1157
    // Next create a new command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1158
    if ( !iDecodeInfo.iFirstDecode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1159
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1160
        _LIT( KAtPrefix, "AT" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1161
        iParseInfo.iSendBuffer.Append( KAtPrefix );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1162
        if ( !specialCmd )  // Already added with CheckSpecialCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1163
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1164
            iParseInfo.iLimit += 2;  // Length of "AT"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1165
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1166
        // Note: The length of iDecodeBuffer is not exceeded here because "AT"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1167
        // is added only for the second commands after that.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1168
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1169
    iParseInfo.iSendBuffer.Append( &iLineBuffer[startIndex], cmdLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1170
    // Change settings for the next decode round
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1171
    iDecodeInfo.iFirstDecode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1172
    iDecodeInfo.iDecodeIndex = endIndex + 1;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1173
    RestoreOldDecodeInfo( aPeek, oldInfo );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1174
    if ( !aPeek )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1175
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1176
        iDecodeInfo.iCmdsHandled++;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1177
        FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() (handled=%d)"), iDecodeInfo.iCmdsHandled ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1178
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1179
    FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1180
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1181
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1182
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1183
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1184
// Finds the start of subcommand from line buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1185
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1186
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1187
TBool CDunAtCmdHandler::FindStartOfSubCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1188
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1189
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindStartOfSubCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1190
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1191
    TInt foundIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1192
    TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1193
    for ( i=iDecodeInfo.iDecodeIndex; i<lineLength; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1194
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1195
        TChar character = iLineBuffer[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1196
        if ( !IsDelimiterCharacter(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1197
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1198
            foundIndex = i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1199
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1200
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1201
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1202
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindStartOfSubCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1203
    return foundIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1204
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1205
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1206
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1207
// Restores old decode info. For ExtractNextDecodedCommand() when aPeeks is
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1208
// ETrue.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1209
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1210
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1211
void CDunAtCmdHandler::RestoreOldDecodeInfo( TBool aPeek,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1212
                                             TDunDecodeInfo& aOldInfo )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1213
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1214
    FTRACE(FPrint( _L("CDunAtCmdHandler::RestoreOldDecodeInfo()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1215
    if ( aPeek )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1216
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1217
        iEditorModeInfo.iPeekInfo = iDecodeInfo;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1218
        iDecodeInfo = aOldInfo;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1219
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1220
    FTRACE(FPrint( _L("CDunAtCmdHandler::RestoreOldDecodeInfo() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1221
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1222
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1223
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1224
// Tests for end of AT command line
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1225
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1226
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1227
TBool CDunAtCmdHandler::IsEndOfLine( TChar& aCharacter )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1228
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1229
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsEndOfCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1230
    if ( aCharacter==iCarriageReturn || aCharacter==iLineFeed )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1231
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1232
        FTRACE(FPrint( _L("CDunAtCmdHandler::IsEndOfCommand() (found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1233
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1234
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1235
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsEndOfCommand() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1236
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1237
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1238
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1239
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1240
// Checks if character is delimiter character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1241
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1242
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1243
TBool CDunAtCmdHandler::IsDelimiterCharacter( TChar aCharacter )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1244
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1245
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1246
    if ( aCharacter.IsSpace() || aCharacter==';' || aCharacter==0x00 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1247
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1248
        FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1249
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1250
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1251
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsDelimiterCharacter() (not delimiter) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1252
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1253
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1254
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1255
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1256
// Checks if character is of extended group
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1257
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1258
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1259
TBool CDunAtCmdHandler::IsExtendedCharacter( TChar aCharacter )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1260
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1261
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedCharacter()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1262
    if ( aCharacter=='+'  || aCharacter=='&' || aCharacter=='%' ||
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1263
         aCharacter=='\\' || aCharacter=='*' || aCharacter=='#' ||
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1264
         aCharacter=='$'  || aCharacter=='^' )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1265
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1266
        FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedCharacter() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1267
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1268
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1269
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedCharacter() (not extended) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1270
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1271
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1272
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1273
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1274
// Checks special command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1275
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1276
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1277
TBool CDunAtCmdHandler::CheckSpecialCommand( TInt& aEndIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1278
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1279
    FTRACE(FPrint( _L("CDunAtCmdHandler::CheckSpecialCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1280
    TInt atPrefixLen = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1281
    TInt startIndex = iDecodeInfo.iDecodeIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1282
    TInt newLength = iLineBuffer.Length() - startIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1283
    TBuf8<KDunLineBufLength> upperBuf;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1284
    if ( !iDecodeInfo.iFirstDecode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1285
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1286
        // For cases such as "ATM1L3DT*99#" "DT" must have "AT"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1287
        _LIT8( KAtPrefix, "AT" );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1288
        upperBuf.Copy( KAtPrefix );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1289
        atPrefixLen = 2;  // "AT"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1290
        newLength += atPrefixLen;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1291
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1292
    upperBuf.Append( &iLineBuffer[startIndex], newLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1293
    upperBuf.UpperCase();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1294
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1295
    TInt count = iSpecials.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1296
    for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1297
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1298
        HBufC8* specialCmd = iSpecials[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1299
        TInt specialLength = specialCmd->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1300
        if ( newLength < specialLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1301
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1302
            continue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1303
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1304
        TInt origLength = newLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1305
        if ( newLength > specialLength )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1306
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1307
            upperBuf.SetLength( specialLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1308
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1309
        TInt cmpResult = upperBuf.Compare( *specialCmd );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1310
        upperBuf.SetLength( origLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1311
        if ( cmpResult == 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1312
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1313
            iParseInfo.iLimit = specialLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1314
            aEndIndex = (origLength-1) + startIndex - atPrefixLen;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1315
            FTRACE(FPrint( _L("CDunAtCmdHandler::CheckSpecialCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1316
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1317
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1318
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1319
    FTRACE(FPrint( _L("CDunAtCmdHandler::CheckSpecialCommand() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1320
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1321
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1322
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1323
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1324
// Saves character decode state for a found character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1325
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1326
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1327
void CDunAtCmdHandler::SaveFoundCharDecodeState( TChar aCharacter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1328
                                                 TBool aAddSpecial )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1329
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1330
    FTRACE(FPrint( _L("CDunAtCmdHandler::SaveFoundCharDecodeState()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1331
    iDecodeInfo.iPrevExists = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1332
    iDecodeInfo.iPrevChar = aCharacter;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1333
    if ( aAddSpecial )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1334
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1335
        iDecodeInfo.iSpecialFound =
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1336
                iAtSpecialCmdHandler->IsCompleteSubCommand( aCharacter );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1337
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1338
    FTRACE(FPrint( _L("CDunAtCmdHandler::SaveFoundCharDecodeState() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1339
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1340
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1341
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1342
// Saves character decode state for a not found character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1343
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1344
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1345
void CDunAtCmdHandler::SaveNotFoundCharDecodeState()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1346
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1347
    FTRACE(FPrint( _L("CDunAtCmdHandler::SaveNotFoundCharDecodeState()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1348
    iDecodeInfo.iPrevExists = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1349
    // Note: don't set iAssignFound or iInQuotes here
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1350
    iDecodeInfo.iSpecialFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1351
    FTRACE(FPrint( _L("CDunAtCmdHandler::SaveNotFoundCharDecodeState() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1352
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1353
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1354
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1355
// Find quotes within subcommands
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1356
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1357
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1358
TBool CDunAtCmdHandler::FindSubCommandQuotes( TChar aCharacter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1359
                                              TInt aStartIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1360
                                              TInt& aEndIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1361
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1362
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1363
    if ( aCharacter == '"' )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1364
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1365
        if ( iParseInfo.iLimit < 0 )  // Only first the first '"'
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1366
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1367
            iParseInfo.iLimit = aEndIndex - aStartIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1368
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1369
        iDecodeInfo.iInQuotes ^= ETrue;  // EFalse to ETrue or ETrue to EFalse
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1370
        SaveFoundCharDecodeState( aCharacter, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1371
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (quote) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1372
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1373
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1374
    // The next ones are those that are not in quotes.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1375
    // We still need to save the iParseInfo.iLimit and skip non-delimiter characters.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1376
    if ( aCharacter == '=' )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1377
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1378
        if ( iParseInfo.iLimit < 0 )  // Only first the first '"'
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1379
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1380
            iParseInfo.iLimit = aEndIndex - aStartIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1381
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1382
        iDecodeInfo.iAssignFound = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1383
        SaveFoundCharDecodeState( aCharacter, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1384
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (equals) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1385
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1386
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1387
    if ( iDecodeInfo.iInQuotes )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1388
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1389
        SaveNotFoundCharDecodeState();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1390
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (in quotes) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1391
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1392
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1393
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1394
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1395
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1396
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1397
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1398
// Check if in next subcommand's extended border
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1399
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1400
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1401
TBool CDunAtCmdHandler::IsExtendedBorder( TChar aCharacter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1402
                                          TInt aStartIndex,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1403
                                          TInt& aEndIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1404
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1405
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1406
    TInt expectedIndex = 0;  // "+CMD" when iDecodeInfo.iFirstDecode is EFalse
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1407
    TInt extendedIndex = aEndIndex - aStartIndex;  // absolute index to the extended character
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1408
    if ( iDecodeInfo.iFirstDecode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1409
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1410
        expectedIndex = 2;  // "AT+CMD"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1411
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1412
    if ( extendedIndex == expectedIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1413
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1414
        iDecodeInfo.iExtendedIndex = aEndIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1415
        SaveFoundCharDecodeState( aCharacter );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1416
        FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder() (no border) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1417
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1418
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1419
    aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1420
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder() (border) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1421
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1422
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1423
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1424
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1425
// Finds subcommand with alphanumeric borders
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1426
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1427
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1428
TBool CDunAtCmdHandler::FindSubCommandAlphaBorder( TChar aCharacter,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1429
                                                   TInt& aEndIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1430
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1431
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1432
    if ( iDecodeInfo.iAssignFound && !iDecodeInfo.iInQuotes )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1433
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1434
        // Check the special case when assigning a number with "basic" command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1435
        // and there is no delimiter after it. In this case <Numeric>|<Alpha>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1436
        // border must be detected but only for a "basic" command, not for
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1437
        // extended.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1438
        if ( iDecodeInfo.iExtendedIndex<0    && iDecodeInfo.iPrevExists &&
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1439
             iDecodeInfo.iPrevChar.IsDigit() && aCharacter.IsAlpha() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1440
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1441
            aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1442
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (N|A) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1443
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1444
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1445
        // The code below is for the following type of cases:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1446
        // (do not check alphanumeric borders if "=" set without quotes):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1447
        // AT+CMD=a
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1448
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (skip) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1449
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1450
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1451
    if ( !iDecodeInfo.iPrevExists || !aCharacter.IsAlpha() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1452
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1453
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1454
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1455
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1456
    if ( iDecodeInfo.iPrevChar.IsAlpha() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1457
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1458
        // The check below detects the following type of cases
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1459
        // (note that special handling is needed to separate the Alpha|Alpha boundary):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1460
        // AT&FE0
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1461
        if ( iDecodeInfo.iSpecialFound )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1462
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1463
            // Special command was found before and this is Alpha|Alpha boundary -> end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1464
            aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1465
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (special) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1466
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1467
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1468
        // The code below is for the following type of cases
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1469
        // (note there is no border between C|M, for example -> continue):
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1470
        // ATCMD
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1471
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (continue) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1472
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1473
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1474
    // The code below is for skipping the following type of cases:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1475
    // AT+CMD [the '+' must be skipped]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1476
    if ( aEndIndex-1 == iDecodeInfo.iExtendedIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1477
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1478
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (extended) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1479
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1480
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1481
    // The code below is for the following type of cases:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1482
    // ATCMD?ATCMD
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1483
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (boundary) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1484
    aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1485
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1486
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1487
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1488
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1489
// Finds subcommand
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1490
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1491
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1492
TInt CDunAtCmdHandler::FindSubCommand( TInt& aEndIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1493
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1494
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1495
    TInt startIndex = iDecodeInfo.iDecodeIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1496
    aEndIndex = startIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1497
    TBool found = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1498
    TInt lineLength = iLineBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1499
    iDecodeInfo.iAssignFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1500
    iDecodeInfo.iInQuotes = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1501
    iDecodeInfo.iExtendedIndex = KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1502
    SaveNotFoundCharDecodeState();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1503
    iAtSpecialCmdHandler->ResetComparisonBuffer();  // just to be sure
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1504
    for ( ; aEndIndex<lineLength; aEndIndex++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1505
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1506
        TChar character = iLineBuffer[aEndIndex];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1507
        found = FindSubCommandQuotes( character, startIndex, aEndIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1508
        if ( found )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1509
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1510
            continue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1511
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1512
        if ( character == '?' )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1513
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1514
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (?) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1515
            return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1516
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1517
        // The check below detects the following type of cases:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1518
        // ATCMD<delimiter>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1519
        if ( IsDelimiterCharacter(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1520
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1521
            aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1522
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (delimiter) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1523
            return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1524
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1525
        // The check below detects the following type of cases:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1526
        // ATCMD+CMD [first + as delimiter]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1527
        // AT+CMD+CMD [second + as delimiter]
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1528
        if ( IsExtendedCharacter(character) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1529
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1530
            found = IsExtendedBorder( character, startIndex, aEndIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1531
            if ( !found )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1532
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1533
                continue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1534
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1535
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (extended) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1536
            return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1537
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1538
        found = FindSubCommandAlphaBorder( character, aEndIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1539
        if ( found )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1540
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1541
            FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (alpha sub) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1542
            return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1543
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1544
        SaveFoundCharDecodeState( character );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1545
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1546
    aEndIndex--;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1547
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1548
    return KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1549
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1550
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1551
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1552
// Check if "A/" command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1553
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1554
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1555
TBool CDunAtCmdHandler::IsASlashCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1556
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1557
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1558
    if ( iLineBuffer.Length() == 2 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1559
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1560
        if ( iLineBuffer[1] == '/' &&
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1561
            (iLineBuffer[0] == 'A' || iLineBuffer[0] == 'a') )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1562
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1563
            FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand() (found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1564
            return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1565
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1566
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1567
    FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1568
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1569
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1570
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1571
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1572
// Handles "A/" command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1573
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1574
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1575
TBool CDunAtCmdHandler::HandleASlashCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1576
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1577
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1578
    // If not "A/" command, return
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1579
    if ( !IsASlashCommand() )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1580
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1581
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() (no push) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1582
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1583
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1584
    iEndIndex = iInput->Length();  // Causes skipping of last '/' in ManageEndOfCmdHandling()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1585
    // If "A/" command and last buffer exist, set the last buffer as the current buffer
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1586
    if ( iLastBuffer.Length() > 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1587
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1588
        iLineBuffer.Copy( iLastBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1589
        FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() (copy) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1590
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1591
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1592
    // Last buffer not set so return "ERROR"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1593
    iDownstream->NotifyDataPushRequest( &iErrorBuffer, NULL );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1594
    FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1595
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1596
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1597
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1598
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1599
// Manages command mode change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1600
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1601
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1602
TBool CDunAtCmdHandler::ManageCommandModeChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1603
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1604
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1605
    if ( aMode & KCommandModeChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1606
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1607
        if ( aMode & KModeCommand )  // command mode ON
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1608
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1609
            ReportCommandModeChange( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1610
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() command mode changed ON" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1611
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1612
        else  // command mode OFF
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1613
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1614
            ReportCommandModeChange( EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1615
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() command mode changed OFF" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1616
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1617
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() (change) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1618
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1619
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1620
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1621
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1622
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1623
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1624
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1625
// Reports command mode start/end change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1626
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1627
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1628
void CDunAtCmdHandler::ReportCommandModeChange( TBool aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1629
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1630
    FTRACE(FPrint( _L("CDunAtCmdHandler::ReportCommandModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1631
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1632
    TInt count = iCmdCallbacks.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1633
    if ( aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1634
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1635
        if ( iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1636
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1637
            for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1638
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1639
                iCmdCallbacks[i]->NotifyCommandModeStart();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1640
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1641
            iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1642
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1643
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1644
    else  // end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1645
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1646
        if ( !iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1647
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1648
            for ( i=0; i<count; i++ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1649
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1650
                iCmdCallbacks[i]->NotifyCommandModeEnd();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1651
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1652
            iDataMode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1653
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1654
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1655
    FTRACE(FPrint( _L("CDunAtCmdHandler::ReportCommandModeChange() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1656
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1657
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1658
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1659
// Manages echo mode change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1660
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1661
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1662
TBool CDunAtCmdHandler::ManageEchoModeChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1663
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1664
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1665
    if ( aMode & KEchoModeChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1666
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1667
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() checking echo mode..." ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1668
        if ( aMode & KModeEcho )  // echo mode ON
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1669
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1670
            iEchoOn = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1671
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() echo mode changed ON" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1672
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1673
        else  // echo mode OFF
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1674
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1675
            iEchoOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1676
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() echo mode changed OFF" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1677
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1678
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() (change) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1679
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1680
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1681
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1682
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1683
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1684
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1685
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1686
// Manages quiet mode change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1687
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1688
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1689
TBool CDunAtCmdHandler::ManageQuietModeChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1690
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1691
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1692
    if ( aMode & KQuietModeChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1693
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1694
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() checking quiet mode..." ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1695
        if ( aMode & KModeQuiet )  // quiet mode ON
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1696
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1697
            iAtCmdExt.ReportQuietModeChange( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1698
            iQuietOn = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1699
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() quiet mode changed ON" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1700
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1701
        else  // quiet mode OFF
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1702
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1703
            iAtCmdExt.ReportQuietModeChange( EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1704
            iQuietOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1705
            FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() quiet mode changed OFF" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1706
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1707
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() (change) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1708
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1709
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1710
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1711
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1712
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1713
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1714
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1715
// Manages quiet mode change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1716
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1717
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1718
TBool CDunAtCmdHandler::ManageVerboseModeChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1719
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1720
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1721
    if ( aMode & KVerboseModeChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1722
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1723
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() checking verbose mode..." ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1724
        if ( aMode & KModeVerbose )  // verbose mode ON
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1725
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1726
            iAtCmdExt.ReportVerboseModeChange( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1727
            iVerboseOn = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1728
            FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed ON" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1729
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1730
        else  // verbose mode OFF
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1731
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1732
            iAtCmdExt.ReportVerboseModeChange( EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1733
            iVerboseOn = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1734
            FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed OFF" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1735
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1736
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() (change) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1737
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1738
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1739
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1740
    return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1741
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1742
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1743
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1744
// Manages character change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1745
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1746
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1747
void CDunAtCmdHandler::ManageCharacterChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1748
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1749
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1750
    if ( aMode & KCarriageChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1751
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1752
        iCarriageReturn = aMode & (KModeChanged-1);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1753
        iAtCmdExt.ReportCharacterChange( ECharTypeCarriage, iCarriageReturn );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1754
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() carriage return changed" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1755
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1756
    else if ( aMode & KLineFeedChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1757
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1758
        iLineFeed = aMode & (KModeChanged-1);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1759
        iAtCmdExt.ReportCharacterChange( ECharTypeLineFeed, iLineFeed );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1760
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() line feed changed" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1761
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1762
    else if ( aMode & KBackspaceChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1763
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1764
        iBackspace = aMode & (KModeChanged-1);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1765
        iAtCmdExt.ReportCharacterChange( ECharTypeBackspace, iBackspace );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1766
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() backspace changed" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1767
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1768
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1769
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1770
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1771
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1772
// Manages editor mode reply
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1773
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1774
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1775
TInt CDunAtCmdHandler::ManageEditorModeReply( TBool aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1776
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1777
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1778
    // Two modes possible here:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1779
    // 1) Sending data directly from DTE to DCE, i.e. no subsequent data in
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1780
    //    the input buffer -> Reissue read request from DTE.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1781
    // 2) Sending data from input buffer to DCE -> Do not reissue read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1782
    //    from DTE: send the data in a loop
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1783
    // In summary: send data byte-by-byte in editor mode until end of input.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1784
    // When end of input notify CDunUpstream to reissue the read request.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1785
    TBool nextContentFound = FindNextContent( aStart );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1786
    if ( !nextContentFound )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1787
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1788
        iUpstream->NotifyEditorModeReply( aStart );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1789
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1790
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1791
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1792
    // In block mode end the block mode by sending <ESC> and hope it works.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1793
    iEscapeBuffer.Zero();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1794
    iEscapeBuffer.Append( KDunEscape );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1795
    iCmdPusher->IssueRequest( iEscapeBuffer, EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1796
    FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1797
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1798
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1799
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1800
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1801
// Finds the next content from the input data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1802
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1803
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1804
TBool CDunAtCmdHandler::FindNextContent( TBool aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1805
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1806
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindNextContent()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1807
    if ( !aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1808
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1809
        FTRACE(FPrint( _L("CDunAtCmdHandler::FindNextContent() (skip) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1810
        return iEditorModeInfo.iContentFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1811
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1812
    // If iEndIndex is (>=0 && <iInput.Length()) it means more data waits in
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1813
    // iInput that didn't fit in iInputBuffer. Only check FindStartOfCommand()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1814
    // if iEndIndex < 0, meaning more data is needed from CDunUpstream.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1815
    TBool contentFound = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1816
    TInt cmdLength = iInput->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1817
    TBool subBlock = ( iEndIndex>=0&&iEndIndex<cmdLength ) ? ETrue : EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1818
    if ( subBlock )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1819
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1820
        contentFound = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1821
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1822
    if ( !contentFound )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1823
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1824
        contentFound = ExtractNextSubCommand( ETrue );  // peek
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1825
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1826
    iEditorModeInfo.iContentFound = contentFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1827
    FTRACE(FPrint( _L("CDunAtCmdHandler::FindNextContent() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1828
    return contentFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1829
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1830
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1831
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1832
// From class MDunAtCmdPusher.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1833
// Notifies about end of AT command processing. This is after all reply data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1834
// for an AT command is multiplexed to the downstream.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1835
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1836
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1837
TInt CDunAtCmdHandler::NotifyEndOfProcessing( TInt /*aError*/ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1838
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1839
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfProcessing()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1840
    TBool editorMode = iCmdPusher->EditorMode();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1841
    if ( editorMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1842
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1843
        ManageEditorModeReply( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1844
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfProcessing() (editor) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1845
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1846
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1847
    HandleNextSubCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1848
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfProcessing() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1849
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1850
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1851
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1852
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1853
// From class MDunAtCmdPusher.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1854
// Notifies about request to stop AT command handling for the rest of the
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1855
// command line data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1856
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1857
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1858
void CDunAtCmdHandler::NotifyEndOfCmdLineProcessing()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1859
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1860
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfCmdLineProcessing()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1861
    ManageEndOfCmdHandling( ETrue, ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1862
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfCmdLineProcessing() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1863
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1864
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1865
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1866
// From class MDunAtCmdPusher.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1867
// Notifies about request to peek for the next command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1868
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1869
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1870
TBool CDunAtCmdHandler::NotifyNextCommandPeekRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1871
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1872
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyNextCommandPeekRequest()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1873
    TBool extracted = ExtractNextSubCommand( ETrue );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1874
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyNextCommandPeekRequest() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1875
    return extracted;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1876
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1877
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1878
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1879
// From class MDunAtCmdPusher.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1880
// Notifies about editor mode reply
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1881
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1882
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1883
TInt CDunAtCmdHandler::NotifyEditorModeReply()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1884
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1885
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEditorModeReply()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1886
    TInt retVal = ManageEditorModeReply( EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1887
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEditorModeReply() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1888
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1889
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1890
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1891
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1892
// From class MDunAtEcomListen.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1893
// Notifies about new plugin installation
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1894
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1895
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1896
TInt CDunAtCmdHandler::NotifyPluginInstallation( TUid& /*aPluginUid*/ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1897
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1898
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1899
    CDunAtUrcHandler* urcHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1900
    TRAPD( retTrap, urcHandler=AddOneUrcHandlerL() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1901
    if ( retTrap != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1902
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1903
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (trapped!) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1904
        return retTrap;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1905
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1906
    TInt retTemp = urcHandler->IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1907
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1908
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1909
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (issuerequest) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1910
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1911
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1912
    TUid ownerUid = urcHandler->OwnerUid();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1913
    iAtCmdExt.ReportListenerUpdateReady( ownerUid, EEcomTypeInstall );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1914
    // As a last step recreate the special command data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1915
    retTemp = RecreateSpecialCommands();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1916
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1917
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1918
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (recreate) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1919
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1920
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1921
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1922
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1923
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1924
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1925
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1926
// From class MDunAtEcomListen.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1927
// Notifies about existing plugin uninstallation
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1928
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1929
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1930
TInt CDunAtCmdHandler::NotifyPluginUninstallation( TUid& aPluginUid )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1931
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1932
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1933
    TInt i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1934
    TInt count = iUrcHandlers.Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1935
    for ( i=count-1; i>=0; i-- )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1936
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1937
        TUid ownerUid = iUrcHandlers[i]->OwnerUid();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1938
        if ( ownerUid == aPluginUid )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1939
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1940
            delete iUrcHandlers[i];
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1941
            iUrcHandlers.Remove( i );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1942
            iAtCmdExt.ReportListenerUpdateReady( ownerUid,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1943
                                                 EEcomTypeUninstall );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1944
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1945
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1946
    // As a last step recreate the special command data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1947
    TInt retTemp = RecreateSpecialCommands();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1948
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1949
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1950
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation() (recreate) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1951
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1952
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1953
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1954
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1955
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1956
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1957
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1958
// From class MDunAtModeListen.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1959
// Gets called on mode status change
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1960
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1961
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1962
TInt CDunAtCmdHandler::NotifyModeStatusChange( TUint aMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1963
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1964
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1965
    TBool commandModeSet = ManageCommandModeChange( aMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1966
    TBool echoModeSet = ManageEchoModeChange( aMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1967
    TBool quietModeSet = ManageQuietModeChange( aMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1968
    TBool verboseModeSet = ManageVerboseModeChange( aMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1969
    if ( quietModeSet || verboseModeSet )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1970
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1971
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: E=%d, Q=%d, V=%d"), iEchoOn, iQuietOn, iVerboseOn ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1972
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() (regenerate) mode set" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1973
        RegenerateReplyStrings();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1974
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1975
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1976
    // Keep the following after "quietModeSet || verboseModeSet" in order to
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1977
    // regenerate the reply also if two modes change at the same time
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1978
    if ( commandModeSet || echoModeSet )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1979
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1980
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: E=%d, Q=%d, V=%d"), iEchoOn, iQuietOn, iVerboseOn ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1981
        FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() mode set" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1982
        return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1983
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1984
    ManageCharacterChange( aMode );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1985
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: CR=%u, LF=%u, BS=%u"), iCarriageReturn, iLineFeed, iBackspace ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1986
    RegenerateReplyStrings();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1987
    FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1988
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
  1989
    }