localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp
author hgs
Fri, 15 Oct 2010 15:05:57 +0800
changeset 54 4dc88a4ac6f4
parent 52 866b4af7ffbe
permissions -rw-r--r--
201041_02
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) 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 pusher for downstream
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
 * Filtering categories for multiple commands on one line (DunAtCmdPusher.cpp)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
 * (here "OTHER" reply means a reply which is something else than "OK" and "ERROR")
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
 * One reply:     OK           -> OK
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
 * One reply:     OTHER        -> OTHER
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
 * One reply:     ERROR        -> ERROR
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
 * Two replies:   OK, OK       -> OK
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
 * Two replies:   OTHER, OTHER -> OTHER, OTHER
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
 * Two replies:   OK, OTHER    -> OTHER
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
 * Two replies:   OTHER, OK    -> OTHER
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
 * Two replies:   OK, ERROR    -> ERROR
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
 * Two replies:   OTHER, ERROR -> OTHER, ERROR
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
 * Note: "OK" replies are skipped. The "OK" string is stripped from the "OTHER"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
 * replies and manually added the the downstream as the last operation if either
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
 * "OK" or "OTHER" was received before.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
#include "DunAtCmdPusher.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
#include "DunDownstream.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
CDunAtCmdPusher* CDunAtCmdPusher::NewL(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
    RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
    MDunAtCmdPusher* aCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
    MDunStreamManipulator* aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
    TDesC8* aOkBuffer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
    CDunAtCmdPusher* self = NewLC( aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
                                   aCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
                                   aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
                                   aOkBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
CDunAtCmdPusher* CDunAtCmdPusher::NewLC(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
    RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
    MDunAtCmdPusher* aCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
    MDunStreamManipulator* aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
    TDesC8* aOkBuffer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
    CDunAtCmdPusher* self = new (ELeave) CDunAtCmdPusher( aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
                                                          aCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
                                                          aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
                                                          aOkBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
CDunAtCmdPusher::~CDunAtCmdPusher()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    FTRACE(FPrint( _L("CDunAtCmdPusher::~CDunAtCmdPusher()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
    ResetData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
    FTRACE(FPrint( _L("CDunAtCmdPusher::~CDunAtCmdPusher() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
// Resets data to initial values
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
void CDunAtCmdPusher::ResetData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
    FTRACE(FPrint( _L("CDunAtCmdPusher::ResetData()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    // APIs affecting this:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
    // IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
    // Internal
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
    FTRACE(FPrint( _L("CDunAtCmdPusher::ResetData() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
// Starts AT command handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
TInt CDunAtCmdPusher::IssueRequest( TDesC8& aInput, TBool aNormalMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
    FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
    FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() send ATEXT:") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
    FTRACE(FPrintRaw(aInput) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
    if ( iAtPushState!=EDunStateIdle && aNormalMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
        FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() (not ready) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
    if ( iDownstream->IsDataInQueue(&iRecvBuffer) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
        FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() (in queue!) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
        }
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   121
    iAtPushState = EDunStateAtCmdPushing;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
    iAtCmdExt->HandleCommand( iStatus,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
                              aInput,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
                              iRecvBuffer,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
                              iReplyLeftPckg,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
                              iReplyTypePckg );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
    SetActive();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
    FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
// Stops AT command handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
//
54
4dc88a4ac6f4 201041_02
hgs
parents: 52
diff changeset
   136
void CDunAtCmdPusher::Stop()
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
    FTRACE(FPrint( _L("CDunAtCmdPusher::Stop()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
    SetEndOfCmdLine();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
    Cancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
    iAtPushState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
    FTRACE(FPrint( _L("CDunAtCmdPusher::Stop() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
// Manages request to abort command handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
TInt CDunAtCmdPusher::ManageAbortRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
    if ( iAtPushState != EDunStateAtCmdPushing )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
        FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
    if ( iCmdAbort )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
        FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() (already exists) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
        return KErrAlreadyExists;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
    TInt retTemp = iAtCmdExt->ReportHandleCommandAbort( iStop );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
        FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() (ERROR) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
        return retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
    iCmdAbort = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
// Sets end of command line marker on for the possible series of AT commands.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
void CDunAtCmdPusher::SetEndOfCmdLine()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
    FTRACE(FPrint( _L("CDunAtCmdPusher::SetEndOfCmdLine()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
    iNoErrorReceived = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
    iLastOkPush = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
    iCmdAbort = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
    iStop = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
    iEditorMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
    FTRACE(FPrint( _L("CDunAtCmdPusher::SetEndOfCmdLine() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
// Gets the editor mode status
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
TBool CDunAtCmdPusher::EditorMode()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
    FTRACE(FPrint( _L("CDunAtCmdPusher::EditorMode()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
    FTRACE(FPrint( _L("CDunAtCmdPusher::EditorMode() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
    return iEditorMode;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   198
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
// CDunAtCmdPusher::CDunAtCmdPusher
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
CDunAtCmdPusher::CDunAtCmdPusher( RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
                                  MDunAtCmdPusher* aCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
                                  MDunStreamManipulator* aDownstream,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
                                  TDesC8* aOkBuffer ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
    CActive( EPriorityHigh ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
    iAtCmdExt( aAtCmdExt ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
    iCallback( aCallback ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
    iDownstream( aDownstream ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
    iOkBuffer( aOkBuffer ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
    iReplyLeftPckg( iReplyBytesLeft ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
    iReplyTypePckg( iReplyType )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   216
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   217
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   218
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   219
// CDunAtCmdPusher::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
void CDunAtCmdPusher::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
    FTRACE(FPrint( _L("CDunAtCmdPusher::ConstructL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
    if ( !iAtCmdExt || !iCallback || !iDownstream || !iOkBuffer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   226
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   227
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   228
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   229
    CActiveScheduler::Add( this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
    FTRACE(FPrint( _L("CDunAtCmdPusher::ConstructL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
void CDunAtCmdPusher::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   239
    // Don't initialize iAtCmdExt here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
    // Don't initialize iCallback here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
    // Don't initialize iDownstream here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
    // Don't initialize iOkBuffer here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
    iAtPushState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
    iReplyBytesLeft = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
    iReplyType = EReplyTypeUndefined;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
    SetEndOfCmdLine();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
// Sets state to idle and notifies about subcommand handling completion
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
void CDunAtCmdPusher::SetToIdleAndNotifyEnd( TInt aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
    FTRACE(FPrint( _L("CDunAtCmdPusher::SetToIdleAndNotifyEnd()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
    iCmdAbort = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
    iAtPushState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
    iCallback->NotifyEndOfProcessing( aError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
    FTRACE(FPrint( _L("CDunAtCmdPusher::SetToIdleAndNotifyEnd() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   261
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
// Checks if "OK" (verbose) or "0" (numeric) string or exists at the end of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
// buffer and removes it
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   267
TInt CDunAtCmdPusher::CheckAndRemoveOkString()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
    FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
    TInt recvBufferLength = iRecvBuffer.Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
    TInt okBufferLength = iOkBuffer->Length();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
    // Skip the removal if removing not possible, if removal results in zero
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
    // length (plugin should have used KErrReplyTypeOk) or if string to be
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
    // removed is zero.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
    // Note also that if plugin sends a final reply when quiet mode is on, DUN
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
    // can't remove the possibly existing result code as it is different from
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
    // iOkReply (zero length).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   278
    if ( recvBufferLength<=okBufferLength || okBufferLength<=0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
        FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() (skip) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
    TInt lengthWithNoOk = recvBufferLength - okBufferLength;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
    TPtr8 recvBufferDes( &iRecvBuffer[lengthWithNoOk], okBufferLength, okBufferLength );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
    if ( recvBufferDes.Compare(*iOkBuffer) != 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
        FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() (not found) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
        return KErrNotFound;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   289
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
    iRecvBuffer.SetLength( lengthWithNoOk );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   291
    FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
// Sends reply data to downstream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   297
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   299
void CDunAtCmdPusher::SendReplyData( TBool aRecvBuffer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
    FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
    TDesC8* sendBuffer = iOkBuffer;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
    if ( aRecvBuffer )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
        sendBuffer = &iRecvBuffer;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
        // Check if last block of long push and remove "OK" if exists
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
        if ( iReplyType==EReplyTypeOther && iReplyBytesLeft==0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
            CheckAndRemoveOkString();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   310
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   312
    FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData() send reply:") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
    FTRACE(FPrintRaw(*sendBuffer) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
    iDownstream->NotifyDataPushRequest( sendBuffer, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
    FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
// Manages change in reply type to EReplyTypeOther
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
void CDunAtCmdPusher::ManageReplyTypeChangeToOther()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOther()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
    iNoErrorReceived = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
    SendReplyData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOther() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
// Manages change in reply type to EReplyTypeOk
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
void CDunAtCmdPusher::ManageReplyTypeChangeToOk()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOk()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
    // Skip the "OK" replies if not last. Only push the "OK" reply at the end.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
    // iStop changes it so that the we have to send the "OK" immediately and
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
    // only stop with NotifyDataPushComplete()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
    TBool found = iCallback->NotifyNextCommandPeekRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
    if ( !found || iStop )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
        SendReplyData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
        iNoErrorReceived = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
        SetToIdleAndNotifyEnd( KErrNone );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOk() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
// Manages change in reply type to EReplyTypeError
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
void CDunAtCmdPusher::ManageReplyTypeChangeToError()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToError()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
    if ( iNoErrorReceived )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
       {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
       iAtCmdExt->ReportExternalHandleCommandError();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
       }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
    SendReplyData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToError() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
// Manages change in reply type to EReplyTypeEditor
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
void CDunAtCmdPusher::ManageReplyTypeChangeToEditor()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
    if ( !iEditorMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
        // First change to editor mode: manage it as EReplyTypeOther (prompt)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
        iEditorMode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
        ManageReplyTypeChangeToOther();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
        FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor() (editor) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
    // The same reply to editor mode as before: no reply, only notification for
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
    // echo/forwarding purposes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
    iCallback->NotifyEditorModeReply();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
    // Do nothing after notifying. The next ForwardEditorModeInput() triggers
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
    // the next call of this function.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
// Manages change in reply type
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
void CDunAtCmdPusher::ManageReplyTypeChange()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
    switch ( iReplyType )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
        case EReplyTypeOther:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
            FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeOther") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
            iEditorMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
            ManageReplyTypeChangeToOther();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
        case EReplyTypeOk:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
            FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeOk") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
            iEditorMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
            ManageReplyTypeChangeToOk();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
        case EReplyTypeError:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
            FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeError") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
            iEditorMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   418
            ManageReplyTypeChangeToError();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   419
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   420
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   421
        case EReplyTypeEditor:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   422
            FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeEditor") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   423
            ManageReplyTypeChangeToEditor();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   424
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   425
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   426
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   427
            FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeUndefined") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   428
            iEditorMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   429
            SetToIdleAndNotifyEnd( KErrNone );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   430
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   431
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   432
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   433
    FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   434
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   435
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   436
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   437
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   438
// Gets called when AT command handled
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   439
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   440
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   441
void CDunAtCmdPusher::RunL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   442
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   443
    FTRACE(FPrint( _L("CDunAtCmdPusher::RunL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   444
    TInt retTemp = iStatus.Int();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   445
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
        SetToIdleAndNotifyEnd( retTemp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
        FTRACE(FPrint( _L("CDunAtCmdPusher::RunL() (ERROR) complete (%d)"), retTemp));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
    ManageReplyTypeChange();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
    FTRACE(FPrint( _L("CDunAtCmdPusher::RunL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   453
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   454
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   456
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   457
// Gets called on cancel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   458
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   459
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   460
void CDunAtCmdPusher::DoCancel()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   461
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   462
    FTRACE(FPrint( _L("CDunAtCmdPusher::DoCancel()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   463
    iAtCmdExt->CancelHandleCommand();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   464
    FTRACE(FPrint( _L("CDunAtCmdPusher::DoCancel() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   465
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   466
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   467
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   468
// From class MDunCompletionReporter.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   469
// Gets called when data push is complete
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   470
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   471
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   472
void CDunAtCmdPusher::NotifyDataPushComplete( TBool /*aAllPushed*/ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   473
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   474
    FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   475
    // First check if error or stop condition detected
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   476
    if ( iReplyType==EReplyTypeError || iStop )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   477
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   478
        SetEndOfCmdLine();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   479
        iAtPushState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   480
        iCallback->NotifyEndOfCmdLineProcessing();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   481
        FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (error reply) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   482
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   483
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   484
    // Secondly check only the case where push restart is required
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   485
    if ( iReplyType==EReplyTypeOther && iReplyBytesLeft>0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   486
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   487
        iAtCmdExt->GetNextPartOfReply( iRecvBuffer, iReplyBytesLeft );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   488
        SendReplyData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   489
        FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (push restart) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   490
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   491
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   492
    // Next check the case where other than "OK" and "ERROR" reply is received
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   493
    // and that is the last one in the command line. Then just send "OK".
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   494
    if ( !iLastOkPush && iReplyType==EReplyTypeOther )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   495
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   496
        TBool found = iCallback->NotifyNextCommandPeekRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   497
        if ( !found )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   498
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   499
            // Force iReplyType here to match the correct one in NotifyDataPushComplete()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   500
            iReplyType = EReplyTypeOk;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   501
            iLastOkPush = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   502
            SendReplyData( EFalse );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   503
            FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (last OK) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   504
            return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   505
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   506
        // Now the next command was found so just fall through
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   507
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   508
    // As a last step just set to idle
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   509
    SetToIdleAndNotifyEnd( KErrNone );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   510
    FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   511
    }