localconnectivityservice/dun/utils/src/DunUpstream.cpp
author hgs
Tue, 28 Sep 2010 20:14:08 +0800
changeset 52 866b4af7ffbe
parent 29 3ae5cb0b4c02
child 54 4dc88a4ac6f4
permissions -rw-r--r--
201039_01
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
    if ( iTransferState != EDunStateTransferring )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
        FTRACE(FPrint( _L("CDunUpstream::Stop() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
    // Stop only current operation
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
    if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
        if ( iComm )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
            iComm->ReadCancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
            FTRACE(FPrint( _L("CDunUpstream::Stop() (RComm) cancelled" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
        else if ( iSocket )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
            iSocket->CancelRecv();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
            FTRACE(FPrint( _L("CDunUpstream::Stop() (RSocket) cancelled" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
    else if ( iOperationType == EDunOperationTypeWrite )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
        if ( iNetwork )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
            iNetwork->WriteCancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
            FTRACE(FPrint( _L("CDunUpstream::Stop() (Network) cancelled" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
    Cancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
    iTransferState = EDunStateIdle;
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   198
    iOperationType = EDunOperationTypeUndefined;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
    // Notify parent about inactivity
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
    if ( iActivityData.iActivityCallback && iActivityData.iNotified )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
        iActivityData.iActivityCallback->NotifyChannelInactivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
        iActivityData.iNotified = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
    FTRACE(FPrint( _L("CDunUpstream::Stop() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
// Data transmission state (if read completed)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
TBool CDunUpstream::DataReadStatus()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
    return iActivityData.iDataRead;
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
// CDunUpstream::CDunUpstream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
CDunUpstream::CDunUpstream( MDunTransporterUtilityAux* aUtility ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
    iUtility( aUtility )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
    Initialize();
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
// CDunUpstream::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
void CDunUpstream::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
    FTRACE(FPrint( _L("CDunUpstream::ConstructL()" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
    if ( !iUtility )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   239
    FTRACE(FPrint( _L("CDunUpstream::ConstructL() complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
void CDunUpstream::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
    // Don't initialize iUtility here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
    iActivityData.iActivityCallback = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
    iActivityData.iDataRead = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
    iActivityData.iNotified = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
    iParseData.iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
    iParseData.iAtCmdHandler = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
// Issues transfer request for this stream
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
TInt CDunUpstream::IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   261
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
    // Set direction
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
    iDirection = static_cast<TDunDirection>( EDunStreamTypeUpstream | iOperationType );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
    FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d)" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   267
    if ( iTransferState != EDunStateIdle )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (not ready) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
    if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
        iBufferPtr->SetLength( iBufferPtr->MaxLength() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() trying to read %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   278
    else // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
        FTRACE(FPrint( _L("CDunUpstream::IssueRequest() writing %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
    switch ( iDirection )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
        case EDunReaderUpstream:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
            if ( iComm )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
                iStatus = KRequestPending;
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   289
                iTransferState = EDunStateTransferring;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
                iComm->ReadOneOrMore( iStatus, *iBufferPtr );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   291
                SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm ReadOneOrMore() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
            else if ( iSocket )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
                iStatus = KRequestPending;
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   297
                iTransferState = EDunStateTransferring;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
                iSocket->RecvOneOrMore( *iBufferPtr, 0, iStatus, iReadLengthSocket );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   299
                SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RSocket RecvOneOrMore() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
            else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
                FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
                return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
        case EDunWriterUpstream:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
            iStatus = KRequestPending;
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   310
            iTransferState = EDunStateTransferring;
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
            iNetwork->Write( iStatus, *iBufferPtr );
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   312
            SetActive();
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
            FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm Write() requested" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
            FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
            return KErrGeneral;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
    FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d) complete" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
// Processes data that was read
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
TBool CDunUpstream::ProcessReadData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
    FTRACE(FPrint( _L("CDunUpstream::ProcessReadData()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
    // The following will be transferred to Dataport
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
    if ( iParseData.iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
        iOperationType = EDunOperationTypeWrite;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (next write) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
    if ( !iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no handler) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
        return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
    // The following will be transferred to parser
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
    TInt retTemp = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
    TBool moreNeeded = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
    retTemp = iParseData.iAtCmdHandler->AddDataForParsing( *iBufferPtr,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
                                                           moreNeeded );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
    if ( retTemp!=KErrNone || !moreNeeded )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
        // If error or no error but no more data needed, don't reissue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
        FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no reissue) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
        return EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
    // If no error and more data needed, reissue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
    FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (reissue) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
    return ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
// Manages activity in a channel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
TInt CDunUpstream::ManageChannelActivity()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
    FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
    if ( iActivityData.iDataRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
        FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
    iActivityData.iDataRead = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
    if ( iActivityData.iActivityCallback && !iActivityData.iNotified )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
        iActivityData.iActivityCallback->NotifyChannelActivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
        iActivityData.iNotified = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
    FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
// Gets called when endpoint data read/write complete
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
void CDunUpstream::RunL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
    FTRACE(FPrint( _L("CDunUpstream::RunL() (Dir=%d)" ), iDirection));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
    iTransferState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
    TBool isError;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
    TInt retTemp = iStatus.Int();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
    TInt stop = ProcessErrorCondition( retTemp, isError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
    if ( !stop )  // no real error detected -> continue
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
        TBool reIssue = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
        if ( !isError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
            if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
                ManageChannelActivity();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
                reIssue = ProcessReadData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
                }  // if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
            else // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
                iOperationType = EDunOperationTypeRead;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
            }  // if ( !isError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
        if ( reIssue )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
            IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
        }  // if ( !stop )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
    else  // stop -> tear down connection
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   418
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   419
        FTRACE(FPrint( _L("CDunUpstream::RunL() stop" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   420
        TDunConnectionReason connReason;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   421
        connReason.iReasonType = EDunReasonTypeRW;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   422
        connReason.iContext = GetMediaContext( EDunStreamTypeUpstream );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   423
        connReason.iSignalType = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   424
        connReason.iSignalHigh = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   425
        connReason.iDirection = iDirection;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   426
        connReason.iErrorCode = retTemp;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   427
        if ( iOperationType == EDunOperationTypeRead )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   428
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   429
            iUtility->DoNotifyConnectionNotOk( iComm,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   430
                                               iSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   431
                                               connReason,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   432
                                               iCallbacksR );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   433
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   434
        else  // iOperationType == EDunOperationTypeWrite
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   435
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   436
            iUtility->DoNotifyConnectionNotOk( iComm,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   437
                                               iSocket,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   438
                                               connReason,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   439
                                               iCallbacksW );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   440
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   441
        }  // else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   442
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   443
    FTRACE(FPrint( _L("CDunUpstream::RunL() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   444
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   445
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
// Gets called on cancel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
void CDunUpstream::DoCancel()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
    {
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   453
    FTRACE(FPrint( _L("CDunUpstream::DoCancel()" )));
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   454
    FTRACE(FPrint( _L("CDunUpstream::DoCancel() complete" )));
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   456
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   457
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   458
// From class MDunAtCmdStatusReporter
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   459
// Notifies about parser's need to get more data
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   460
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   461
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   462
void CDunUpstream::NotifyParserNeedsMoreData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   463
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   464
    FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData()" )));
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   465
    if ( iOperationType != EDunOperationTypeRead )
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   466
        {
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   467
        FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData() (not ready) complete" )));
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   468
        return;
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   469
        }
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   470
    IssueRequest();  // iOperationType must be read here (don't set)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   471
    FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   472
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   473
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   474
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   475
// From class MDunAtCmdStatusReporter
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   476
// Notifies about editor mode reply
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   477
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   478
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   479
void CDunUpstream::NotifyEditorModeReply( TBool aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   480
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   481
    FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   482
    if ( iParseData.iDataMode )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   483
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   484
        FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   485
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   486
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   487
    // If start of editor mode then just reissue the read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   488
    // If continuation then echo and reissue the read request
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   489
    if ( aStart )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   490
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   491
        IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   492
        FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (start) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   493
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   494
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   495
    iParseData.iAtCmdHandler->SendEchoCharacter( iBufferPtr, this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   496
    FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   497
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   498
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   499
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   500
// From class MDunAtCmdHandler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   501
// Starts URC message handling
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   502
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   503
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   504
TInt CDunUpstream::StartUrc()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   505
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   506
    FTRACE(FPrint( _L("CDunUpstream::StartUrc()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   507
    TInt retVal = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   508
    if ( iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   509
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   510
        retVal = iParseData.iAtCmdHandler->StartUrc();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   511
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   512
    FTRACE(FPrint( _L("CDunUpstream::StartUrc() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   513
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   514
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   515
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   516
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   517
// From class MDunAtCmdHandler
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   518
// Stops AT command handling downstream related activity (also URC)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   519
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   520
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   521
TInt CDunUpstream::StopAtCmdHandling()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   522
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   523
    FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   524
    TInt retVal = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   525
    if ( iParseData.iAtCmdHandler )  // optional
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   526
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   527
        retVal = iParseData.iAtCmdHandler->StopUrc();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   528
        if ( retVal != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   529
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   530
            iParseData.iAtCmdHandler->Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   531
            FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling() (iAtCmdHandler) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   532
            return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   533
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   534
        retVal = iParseData.iAtCmdHandler->Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   535
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   536
    FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   537
    return retVal;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   538
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   539
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   540
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   541
// From class MDunCmdModeMonitor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   542
// Notifies about command mode start
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   543
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   544
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   545
void CDunUpstream::NotifyCommandModeStart()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   546
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   547
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   548
    iParseData.iDataMode = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   549
    // Stop processing (just to be sure).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   550
    // This will stop any possibly pending operations of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   551
    // CDunAtCmdHandler and CDunAtUrcHandler. CDunDownstream will take care of
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   552
    // clearing (and stopping) non-callback write queues.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   553
    StopAtCmdHandling();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   554
    // Also restart the URC handling after the data mode
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   555
    StartUrc();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   556
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   557
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   558
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   559
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   560
// From class MDunCmdModeMonitor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   561
// Notifies about command mode end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   562
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   563
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   564
void CDunUpstream::NotifyCommandModeEnd()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   565
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   566
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd()" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   567
    iParseData.iDataMode = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   568
    // Stop processing (mandatory).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   569
    // This will stop any possibly pending operations of
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   570
    // CDunAtCmdHandler and CDunAtUrcHandler(s). CDunDownstream will take care
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   571
    // of clearing (and stopping) non-callback write queues.
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   572
    StopAtCmdHandling();
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   573
    // The following is needed here because stopping the AT command handling
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   574
    // causes CDunAtCmdHandler not to call NotifyParserNeedsMoreData().
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   575
    // In command mode iOperationType is always EDunOperationTypeRead.
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   576
    IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   577
    FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   578
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   579
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   580
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   581
// From class MDunAtCmdEchoer.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   582
// Notifies about command mode end
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   583
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   584
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   585
void CDunUpstream::NotifyEchoComplete()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   586
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   587
    FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete()" )));
52
866b4af7ffbe 201039_01
hgs
parents: 29
diff changeset
   588
    // iOperationType is always EDunOperationTypeRead here
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   589
    IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   590
    FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete() complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   591
    }