localconnectivityservice/dun/utils/src/DunUpstream.cpp
author hgs
Thu, 04 Nov 2010 15:31:42 +0800
changeset 60 841f70763fbe
parent 52 866b4af7ffbe
permissions -rw-r--r--
201044_04
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) 2008-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:  Definitions needed for one "stream" of CDunTransporter
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
 * TODO: When local media is of type RComm, listening on it is started with
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
 * RComm::NotifyDataAvailable() call. Check that USB ACM port and Irda RCOMM
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
 * (and any other new media in the future) behaves correctly so that when
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
 * RComm::ReadOneOrMore() is issued, the read is issued immediately without
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
 * checking for new data. If waiting for new data happens in this
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
 * NotifyDataAvailable/ReadOneOrMore combination, raise a defect to Symbian.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
 */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
#include "DunTransporter.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
#include "DunUpstream.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
CDunUpstream* CDunUpstream::NewL( MDunTransporterUtilityAux* aUtility )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
    CDunUpstream* self = new (ELeave) CDunUpstream( aUtility );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
CDunUpstream::~CDunUpstream()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
    FTRACE(FPrint( _L("CDunUpstream::~CDunUpstream()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
    ResetData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
    FTRACE(FPrint( _L("CDunUpstream::~CDunUpstream() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
// Resets data to initial values
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
void CDunUpstream::ResetData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
    // APIs affecting this:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
    // IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
    // InitializeForAtParsing()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
    delete iParseData.iAtCmdHandler;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
    iParseData.iAtCmdHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
    // AddConnMonCallbackL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
    iCallbacksR.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
    iCallbacksW.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
    // AddSkippedErrorL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    iOkErrorsR.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    iOkErrorsW.Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
    // Internal
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
// Sets activity callback for this stream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
TInt CDunUpstream::SetActivityCallback(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    MDunActivityManager* aActivityCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
    if ( !aActivityCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
        FTRACE(FPrint( _L("CDunUpstream::SetActivityCallback() (aActivityCallback) not initialized!" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
    if ( iActivityData.iActivityCallback )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
        FTRACE(FPrint( _L("CDunUpstream::SetActivityCallback() (already exists) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
        return KErrAlreadyExists;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    iActivityData.iActivityCallback = aActivityCallback;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
// Initializes this stream for AT command notifications
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
TInt CDunUpstream::InitializeForAtParsing(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
    MDunStreamManipulator* aStreamCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
    const TDesC8* aConnectionName,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
    MDunCmdModeMonitor* aCallbackUp,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
    MDunCmdModeMonitor* aCallbackDown )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
    FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
    if ( iParseData.iAtCmdHandler )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
        FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() (already exists) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
        return KErrAlreadyExists;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
    TInt retTrap = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
    CDunAtCmdHandler* atCmdHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
    TRAP( retTrap, atCmdHandler = CDunAtCmdHandler::NewL(this,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
                                                         aStreamCallback,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
                                                         aConnectionName) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
    if ( retTrap != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
        FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() (trapped!) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
        return retTrap;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
        }
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   124
    // Note: the order of the added callbacks is important. When a mode change
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   125
    // occurs, it is best to do the most important stuff with the first callback
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   126
    // object and after this cleanups with the second. Example: Data mode start
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   127
    // should stop command handling; first callback stops command handling,
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   128
    // second callback stops multiplexer (doing this differently could cause the
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   129
    // multiplexer to re-activate).
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
    atCmdHandler->AddCmdModeCallback( aCallbackUp );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
    atCmdHandler->AddCmdModeCallback( aCallbackDown );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
    iParseData.iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
    iParseData.iAtCmdHandler = atCmdHandler;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
    FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
// Starts upstream by issuing read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
TInt CDunUpstream::StartStream()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
    FTRACE(FPrint( _L("CDunUpstream::StartStream()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
    if ( !iNetwork )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
        FTRACE(FPrint( _L("CDunUpstream::StartStream() (iNetwork) 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
    if ( !iComm && !iSocket )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
        FTRACE(FPrint( _L("CDunUpstream::StartStream() (iComm&iSocket) not initialized!" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
        return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
    iOperationType = EDunOperationTypeRead;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
    TInt retVal = IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
    FTRACE(FPrint( _L("CDunUpstream::StartStream() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
// Stops transfer for read or write endpoints
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
TInt CDunUpstream::Stop()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
    FTRACE(FPrint( _L("CDunUpstream::Stop() (Dir=%d)" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
    // Don't stop CDunAtCmdHandler here as it is downstream related!
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
    Cancel();
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   170
    iOperationType = EDunOperationTypeUndefined;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
    // Notify parent about inactivity
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
    if ( iActivityData.iActivityCallback && iActivityData.iNotified )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
        iActivityData.iActivityCallback->NotifyChannelInactivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
        iActivityData.iNotified = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
    FTRACE(FPrint( _L("CDunUpstream::Stop() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
// Data transmission state (if read completed)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
TBool CDunUpstream::DataReadStatus()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
    return iActivityData.iDataRead;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
// CDunUpstream::CDunUpstream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
CDunUpstream::CDunUpstream( MDunTransporterUtilityAux* aUtility ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
    iUtility( aUtility )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   198
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
// CDunUpstream::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
void CDunUpstream::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
    FTRACE(FPrint( _L("CDunUpstream::ConstructL()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
    if ( !iUtility )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
    FTRACE(FPrint( _L("CDunUpstream::ConstructL() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   216
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   217
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   218
void CDunUpstream::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   219
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
    // Don't initialize iUtility here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
    iActivityData.iActivityCallback = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
    iActivityData.iDataRead = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
    iActivityData.iNotified = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
    iParseData.iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
    iParseData.iAtCmdHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   226
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   227
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   228
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   229
// Issues transfer request for this stream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
TInt CDunUpstream::IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
    // Set direction
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
    iDirection = static_cast<TDunDirection>( EDunStreamTypeUpstream | iOperationType );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
    FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d)" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   239
    if ( IsActive() )
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (not ready) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
    if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
        iBufferPtr->SetLength( iBufferPtr->MaxLength() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() trying to read %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
    else // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() writing %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
    switch ( iDirection )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
        case EDunReaderUpstream:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
            if ( iComm )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
                iComm->ReadOneOrMore( iStatus, *iBufferPtr );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   261
                SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm ReadOneOrMore() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
            else if ( iSocket )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
                iSocket->RecvOneOrMore( *iBufferPtr, 0, iStatus, iReadLengthSocket );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   267
                SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RSocket RecvOneOrMore() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
            else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
                return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
        case EDunWriterUpstream:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
            iNetwork->Write( iStatus, *iBufferPtr );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   278
            SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
            FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm Write() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
            FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
            return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
    FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d) complete" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   289
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   291
// Processes data that was read
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
TBool CDunUpstream::ProcessReadData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
    FTRACE(FPrint( _L("CDunUpstream::ProcessReadData()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   297
    // The following will be transferred to Dataport
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
    if ( iParseData.iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   299
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
        iOperationType = EDunOperationTypeWrite;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (next write) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
    if ( !iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no handler) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
    // The following will be transferred to parser
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   310
    TInt retTemp = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
    TBool moreNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   312
    retTemp = iParseData.iAtCmdHandler->AddDataForParsing( *iBufferPtr,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
                                                           moreNeeded );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
    if ( retTemp!=KErrNone || !moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
        // If error or no error but no more data needed, don't reissue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no reissue) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
    // If no error and more data needed, reissue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
    FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (reissue) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
// Manages activity in a channel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
TInt CDunUpstream::ManageChannelActivity()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
    FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
    if ( iActivityData.iDataRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
        FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
    iActivityData.iDataRead = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
    if ( iActivityData.iActivityCallback && !iActivityData.iNotified )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
        iActivityData.iActivityCallback->NotifyChannelActivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
        iActivityData.iNotified = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
    FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
// Gets called when endpoint data read/write complete
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
void CDunUpstream::RunL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
    FTRACE(FPrint( _L("CDunUpstream::RunL() (Dir=%d)" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
    TBool isError;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
    TInt retTemp = iStatus.Int();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
    TInt stop = ProcessErrorCondition( retTemp, isError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
    if ( !stop )  // no real error detected -> continue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
        TBool reIssue = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
        if ( !isError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
            if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
                ManageChannelActivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
                reIssue = ProcessReadData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
                }  // if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
            else // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
                iOperationType = EDunOperationTypeRead;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
            }  // if ( !isError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
        if ( reIssue )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
            IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
        }  // if ( !stop )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
    else  // stop -> tear down connection
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
        FTRACE(FPrint( _L("CDunUpstream::RunL() stop" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
        TDunConnectionReason connReason;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
        connReason.iReasonType = EDunReasonTypeRW;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
        connReason.iContext = GetMediaContext( EDunStreamTypeUpstream );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
        connReason.iSignalType = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
        connReason.iSignalHigh = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
        connReason.iDirection = iDirection;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
        connReason.iErrorCode = retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
        if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
            iUtility->DoNotifyConnectionNotOk( iComm,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
                                               iSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
                                               connReason,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
                                               iCallbacksR );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
        else  // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
            iUtility->DoNotifyConnectionNotOk( iComm,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
                                               iSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
                                               connReason,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
                                               iCallbacksW );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
        }  // else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
    FTRACE(FPrint( _L("CDunUpstream::RunL() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
// Gets called on cancel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
void CDunUpstream::DoCancel()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
    {
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   418
    FTRACE(FPrint( _L("CDunUpstream::DoCancel()" )));
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   419
    // Stop only current operation
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   420
    if ( iOperationType == EDunOperationTypeRead )
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   421
        {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   422
        if ( iComm )
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   423
            {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   424
            iComm->ReadCancel();
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   425
            FTRACE(FPrint( _L("CDunUpstream::DoCancel() (RComm) cancelled" )));
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   426
            }
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   427
        else if ( iSocket )
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   428
            {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   429
            iSocket->CancelRecv();
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   430
            FTRACE(FPrint( _L("CDunUpstream::DoCancel() (RSocket) cancelled" )));
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   431
            }
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   432
        }
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   433
    else if ( iOperationType == EDunOperationTypeWrite )
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   434
        {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   435
        if ( iNetwork )
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   436
            {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   437
            iNetwork->WriteCancel();
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   438
            FTRACE(FPrint( _L("CDunUpstream::DoCancel() (Network) cancelled" )));
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   439
            }
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   440
        }
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   441
    else
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   442
        {
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   443
        FTRACE(FPrint( _L("CDunUpstream::DoCancel() (ERROR) complete" )));
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   444
        }
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   445
    FTRACE(FPrint( _L("CDunUpstream::DoCancel() complete" )));
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
// From class MDunAtCmdStatusReporter
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
// Notifies about parser's need to get more data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   453
void CDunUpstream::NotifyParserNeedsMoreData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   454
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
    FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData()" )));
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   456
    if ( iOperationType != EDunOperationTypeRead )
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   457
        {
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   458
        FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData() (not ready) complete" )));
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   459
        return;
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   460
        }
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   461
    IssueRequest();  // iOperationType must be read here (don't set)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   462
    FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   463
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   464
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   465
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   466
// From class MDunAtCmdStatusReporter
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   467
// Notifies about editor mode reply
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   468
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   469
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   470
void CDunUpstream::NotifyEditorModeReply( TBool aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   471
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   472
    FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   473
    if ( iParseData.iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   474
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   475
        FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   476
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   477
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   478
    // If start of editor mode then just reissue the read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   479
    // If continuation then echo and reissue the read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   480
    if ( aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   481
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   482
        IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   483
        FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (start) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   484
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   485
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   486
    iParseData.iAtCmdHandler->SendEchoCharacter( iBufferPtr, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   487
    FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   488
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   489
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   490
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   491
// From class MDunAtCmdHandler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   492
// Starts URC message handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   493
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   494
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   495
TInt CDunUpstream::StartUrc()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   496
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   497
    FTRACE(FPrint( _L("CDunUpstream::StartUrc()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   498
    TInt retVal = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   499
    if ( iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   500
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   501
        retVal = iParseData.iAtCmdHandler->StartUrc();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   502
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   503
    FTRACE(FPrint( _L("CDunUpstream::StartUrc() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   504
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   505
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   506
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   507
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   508
// From class MDunAtCmdHandler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   509
// Stops AT command handling downstream related activity (also URC)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   510
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   511
//
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   512
void CDunUpstream::StopAtCmdHandling()
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   513
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   514
    FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   515
    if ( iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   516
        {
60
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   517
        iParseData.iAtCmdHandler->StopUrc();
841f70763fbe 201044_04
hgs
parents: 52
diff changeset
   518
        iParseData.iAtCmdHandler->Stop();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   519
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   520
    FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling() complete" )));
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
// From class MDunCmdModeMonitor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   525
// Notifies about command mode start
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   526
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   527
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   528
void CDunUpstream::NotifyCommandModeStart()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   529
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   530
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   531
    iParseData.iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   532
    // Stop processing (just to be sure).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   533
    // This will stop any possibly pending operations of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   534
    // CDunAtCmdHandler and CDunAtUrcHandler. CDunDownstream will take care of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   535
    // clearing (and stopping) non-callback write queues.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   536
    StopAtCmdHandling();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   537
    // Also restart the URC handling after the data mode
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   538
    StartUrc();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   539
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   540
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   541
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   542
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   543
// From class MDunCmdModeMonitor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   544
// Notifies about command mode end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   545
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   546
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   547
void CDunUpstream::NotifyCommandModeEnd()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   548
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   549
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   550
    iParseData.iDataMode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   551
    // Stop processing (mandatory).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   552
    // This will stop any possibly pending operations of
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   553
    // CDunAtCmdHandler and CDunAtUrcHandler(s). CDunDownstream will take care
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   554
    // of clearing (and stopping) non-callback write queues.
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   555
    StopAtCmdHandling();
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   556
    // The following is needed here because stopping the AT command handling
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   557
    // causes CDunAtCmdHandler not to call NotifyParserNeedsMoreData().
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   558
    // In command mode iOperationType is always EDunOperationTypeRead.
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   559
    IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   560
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   561
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   562
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   563
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   564
// From class MDunAtCmdEchoer.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   565
// Notifies about command mode end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   566
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   567
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   568
void CDunUpstream::NotifyEchoComplete()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   569
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   570
    FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete()" )));
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   571
    // iOperationType is always EDunOperationTypeRead here
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   572
    IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   573
    FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   574
    }