| author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> | 
| Tue, 02 Feb 2010 01:41:59 +0200 | |
| changeset 0 | 3553901f7fa8 | 
| permissions | -rw-r--r-- | 
| 0 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 1 | // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 2 | // All rights reserved. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 3 | // This component and the accompanying materials are made available | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 4 | // under the terms of "Eclipse Public License v1.0" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 5 | // which accompanies this distribution, and is available | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 6 | // at the URL "http://www.eclipse.org/legal/epl-v10.html". | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 7 | // | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 8 | // Initial Contributors: | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 9 | // Nokia Corporation - initial contribution. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 10 | // | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 11 | // Contributors: | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 12 | // | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 13 | // Description: | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 14 | // | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 15 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 16 | #include <es_ini.h> | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 17 | #include <flow.h> | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 18 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 19 | #include "iface.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 20 | #include "context.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 21 | #include "async_request.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 22 | #include "tc.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 23 | #include "guqos_log.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 24 | #include "guqos.h" | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 25 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 26 | #ifdef _LOG | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 27 | // Ugly use of function from another module (context.cpp), but this debugging only! | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 28 | extern void LogPacketFilter(const TPacketFilter& aFilter); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 29 | #endif | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 30 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 31 | CFlowData* CFlowData::NewL(CFlowContext& aHandle, CNif& aNif, CFlowData *aNext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 32 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 33 | CFlowData* flowData = new (ELeave) CFlowData(aHandle, aNif); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 34 | CleanupStack::PushL(flowData); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 35 | flowData->ConstructL(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 36 | CleanupStack::Pop(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 37 | flowData->iNext = aNext; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 38 | return flowData; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 39 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 40 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 41 | CFlowData* CFlowData::Find(const CFlowContext* aHandle, CFlowData *aList) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 42 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 43 | while (aList) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 44 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 45 | if (&aList->iFlowContext == aHandle) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 46 | break; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 47 | aList = aList->iNext; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 48 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 49 | return aList; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 50 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 51 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 52 | CFlowData* CFlowData::Remove(const CFlowContext* aHandle, CFlowData **aList) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 53 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 54 | CFlowData* p = NULL; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 55 | for ( ; (p = *aList) != NULL; aList = &p->iNext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 56 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 57 | if (&p->iFlowContext == aHandle) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 58 | 			{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 59 | *aList = p->iNext; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 60 | break; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 61 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 62 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 63 | return p; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 64 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 65 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 66 | void CFlowData::SetContext(CPdpContext *aContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 67 | /** | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 68 | * Associate the flow with a new context (or none). | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 69 | * | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 70 | * Move the flow from one context to another. The | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 71 | * internal CClose reuqest is not triggered. (It's | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 72 | * only used in destructor). | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 73 | * | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 74 | * @param aContext The new context (or NULL) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 75 | */ | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 76 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 77 | if (iContext == aContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 78 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 79 | // Already attache to this context (or NONE) -- nothing to do. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 80 | return; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 81 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 82 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 83 | if (iContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 84 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 85 | // Remove from previous context. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 86 | iLink.Deque(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 87 | iContext->FlowDetached(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 88 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 89 | iContext = aContext; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 90 | if (iContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 91 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 92 | // Add to new context. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 93 | iContext->Flows().AddLast(*this); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 94 | iContext->FlowAttached(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 95 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 96 | MEventInterface *notifier = Nif().Module().QoSEvent(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 97 | if (notifier) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 98 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 99 | // Determine the blocked or unblocked status for the flow | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 100 | // and notify upwards accordingly... | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 101 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 102 | // Throw away "const". The MEventInterface is misdeclared to | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 103 | // use non-const reference parameter, when const reference | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 104 | // would be the correct way... | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 105 | if (iContext == NULL || iContext->IsFlowBlocked()) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 106 | notifier->BlockFlow((CFlowContext &)iFlowContext); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 107 | else | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 108 | notifier->UnBlockFlow((CFlowContext &)iFlowContext); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 109 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 110 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 111 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 112 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 113 | CFlowData::CFlowData(CFlowContext& aHandle, CNif& aNif) : | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 114 | iNif(aNif), iFlowContext(aHandle) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 115 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 116 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 117 | iContext = NULL; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 118 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 119 | // Initialize constant filter values from TPacketHead. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 120 | const TPacketHead& h = aHandle.iHead; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 121 | Mem::Copy(iPacketFilter.iSrcAddr, h.ip6.DstAddr().u.iAddr8, sizeof(iPacketFilter.iSrcAddr)); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 122 | Mem::Fill(iPacketFilter.iSrcAddrSubnetMask, sizeof(iPacketFilter.iSrcAddrSubnetMask), 0xFF); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 123 | iPacketFilter.iProtocolNumberOrNextHeader = h.iProtocol; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 124 | iPacketFilter.iSrcPortMin = h.iDstPort; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 125 | iPacketFilter.iSrcPortMax = h.iDstPort; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 126 | iPacketFilter.iDestPortMin = h.iSrcPort; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 127 | iPacketFilter.iDestPortMax = h.iSrcPort; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 128 | iPacketFilter.iTOSorTrafficClass = 0; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 129 | 	LOG(Log::Printf(_L("new\tflow[%u] size=%d"), (TInt)this, sizeof(*this)));
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 130 | LOG(LogPacketFilter(iPacketFilter)); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 131 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 132 | // The filter is for the *INCOMING* traffic! Predicting the values | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 133 | // of the following fields from the *OUTGOING* flow would be | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 134 | // dubious!! | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 135 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 136 | /* iPacketFilter.iIPSecSPI = ??? */ | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 137 | /* iPacketFilter.iTOSorTrafficClass = h.ip6.TrafficClass() ? */ | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 138 | /* iPacketFilter.iFlowLabel = h.ip6.FlowLabel() ? */ | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 139 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 140 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 141 | CFlowData::~CFlowData() | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 142 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 143 | if (iContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 144 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 145 | // The flow is still attached to a contex. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 146 | iLink.Deque(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 147 | iContext->FlowDetached(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 148 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 149 | 	LOG(Log::Printf(_L("~\tflow[%u]"), (TInt)this));
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 150 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 151 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 152 | void CFlowData::ConstructL() | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 153 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 154 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 155 | |
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 156 | TInt CFlowData::Send(RMBufChain& aPacket, RMBufSendInfo& aInfo) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 157 | 	{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 158 | // Note: the fact that we are here, means that the CFlowContex in the aInfo | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 159 | // is same as CFlowContext associated with CFlowData. ASSERT is only a | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 160 | // remainder of this and never expect to fire. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 161 | ASSERT(aInfo.iFlow.FlowContext() == &iFlowContext); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 162 | if (iContext) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 163 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 164 | aInfo.iDstAddr.SetPort(iContext->ContextId()); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 165 | // Note: this assumes that the Send below does to come back | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 166 | // and delete structures from under us! If this becomes | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 167 | // possible, then at least CFlowData and possibly CPdpContext | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 168 | // need to be protected against destruction... | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 169 | const TInt ret = aInfo.iFlow.FlowContext()->Send(aPacket); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 170 | if (ret <= 0) | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 171 | 			{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 172 | // Packet accepted, but cannot send any more packets | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 173 | // to this context, until it is unblocked. | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 174 | 			LOG(Log::Printf(_L("Send\tflow[%u] returns %d, blocking PDP context id = %d"), (TInt)this, ret, iContext->ContextId()));
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 175 | iContext->Block(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 176 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 177 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 178 | else | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 179 | 		{
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 180 | 		LOG(Log::Printf(_L("Send\tflow[%u] has no PDP context -- packet dropped"), (TInt)this));
 | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 181 | aInfo.iFlow.Close(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 182 | aPacket.Free(); | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 183 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 184 | // Always eat the packet! | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 185 | return 1; | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 186 | } | 
| 
3553901f7fa8
Revision: 201005
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 187 |