| author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> | 
| Fri, 15 Jan 2010 08:13:17 +0200 | |
| changeset 0 | 29b1cd4cb562 | 
| permissions | -rw-r--r-- | 
| 0 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 1 | // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 2 | // All rights reserved. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 3 | // This component and the accompanying materials are made available | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 4 | // under the terms of "Eclipse Public License v1.0" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 5 | // which accompanies this distribution, and is available | 
| 
29b1cd4cb562
Revision: 200951_001
 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". | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 7 | // | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 8 | // Initial Contributors: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 9 | // Nokia Corporation - initial contribution. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 10 | // | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 11 | // Contributors: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 12 | // | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 13 | // Description: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 14 | // | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 15 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 16 | #include <bluetooth/logger.h> | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 17 | #include <btsdp.h> | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 18 | #include "reqhandler.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 19 | #include "pduhandler.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 20 | #include "listener.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 21 | #include "sdpconsts.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 22 | #include "SDPDatabase.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 23 | #include "MAttributeVisitor.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 24 | #include "ExtractorVisitor.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 25 | #include "responsesizevisitor.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 26 | #include "DataEncoder.h" | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 27 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 28 | #ifdef __FLOG_ACTIVE | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 29 | _LIT8(KLogComponent, LOG_COMPONENT_SDP_SERVER); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 30 | #endif | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 31 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 32 | // statics | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 33 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 34 | void SdpReqHandler::HandleL(CSdpDatabase &aDatabase, const TSdpPdu &aReqPdu, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 35 | 	{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 36 | switch (aReqPdu.iPduId) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 37 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 38 | case EServiceSearchRequest: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 39 | HandleServiceSearchL(aDatabase, aReqPdu, aRespPdu); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 40 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 41 | case EServiceAttributeRequest: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 42 | HandleServiceAttributeL(aDatabase, aReqPdu, aRespPdu); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 43 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 44 | case EServiceSearchAttributeRequest: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 45 | HandleServiceSearchAttributeL(aDatabase, aReqPdu, aRespPdu); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 46 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 47 | default: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 48 | User::Leave(KErrArgument); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 49 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 50 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 51 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 52 | #ifdef __FLOGGING__ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 53 | TInt SdpReqHandler::RunError(TInt aError, const TSdpPdu& aReqPdu, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 54 | #else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 55 | TInt SdpReqHandler::RunError(TInt aError, const TSdpPdu& /*aReqPdu*/, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 56 | #endif | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 57 | /** | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 58 | Send an appropriate error. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 59 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 60 | Parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 61 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 62 | Error Code TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 63 | Error Info Variable (0 in 1.0B) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 64 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 65 | **/ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 66 | 	{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 67 | TSdpErrorCodes code; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 68 | switch (aError) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 69 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 70 | case KErrNotSupported: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 71 | code = EInvalidSdpVersion; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 72 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 73 | case KErrBadHandle: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 74 | code = EInvalidServiceRecordHandle; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 75 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 76 | case KErrOverflow: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 77 | case KErrUnderflow: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 78 | case KErrTooBig: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 79 | code = EInvalidPduSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 80 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 81 | case KErrNotReady: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 82 | case KErrUnknown: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 83 | case KErrLocked: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 84 | code = EInvalidContinuationState; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 85 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 86 | case KErrNoMemory: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 87 | case KErrHardwareNotAvailable: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 88 | code = EInsufficientResources; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 89 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 90 | case KErrCorrupt: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 91 | case KErrArgument: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 92 | default: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 93 | code = EInvalidRequestSyntax; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 94 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 95 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 96 | aRespPdu.iPduId = EErrorResponse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 97 | aRespPdu.iParams.SetLength(2); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 98 | BigEndian::Put16(&aRespPdu.iParams[0], TUint16(code)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 99 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 100 | 	LOG1(_L("SdpReqHandler::RunError(%d)"), aError);
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 101 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 102 | return KErrNone; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 103 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 104 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 105 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 106 | void SdpReqHandler::HandleServiceSearchL(CSdpDatabase &aDatabase, const TSdpPdu &aReqPdu, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 107 | /** | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 108 | Handle Service Search request. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 109 | Request parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 110 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 111 | Service search pattern DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 112 | Max record handle count TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 113 | Continuation state 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 114 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 115 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 116 | Response parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 117 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 118 | Total record count TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 119 | Records in this response TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 120 | Record handle list TUint32 * N | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 121 | Continuation State 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 122 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 123 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 124 | **/ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 125 | 	{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 126 | // Parse the request parameters | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 127 | TPtr8 params(aReqPdu.iParams); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 128 | CSdpPDUHandler* pHandler = new (ELeave) CSdpPDUHandler(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 129 | CleanupStack::PushL(pHandler); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 130 | TInt maxTotalRecCount; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 131 | TInt len; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 132 | TInt rem; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 133 | TInt sentRecords=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 134 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 135 | CSizeAccumulator* collector = CSizeAccumulator::NewL(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 136 | CleanupStack::PushL(collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 137 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 138 | CSdpSearchPattern* pattern = pHandler->UUIDListLC(params, KRecHandleCountSize, len, rem, maxTotalRecCount); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 139 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 140 | // first level checks for continuation parameter | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 141 | TBool inContFlag = pHandler->ContinuationL(params, len, rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 142 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 143 | CResponseSizeVisitor::SizeRespSSL(aDatabase, *pattern, *collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 144 | CleanupStack::PopAndDestroy(/*pattern*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 145 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 146 | TInt fullSize = collector->HandleCount(); // we only have handles here | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 147 | fullSize = Min(fullSize, maxTotalRecCount); // we may not be able to send all the handles anyway | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 148 | // TInt16 localCRC = collector->CRC(); this is for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 149 | if (inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 150 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 151 | if (fullSize != (TInt)pHandler->FullLength()) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 152 | sentRecords = pHandler->ContinuationOffset(); // this is in count of handles, not bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 153 | if (fullSize <= sentRecords) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 154 | // if (localCRC != pHandler->ReqCRC()) User::Leave(KErrUnknown); continuation check for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 155 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 156 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 157 | sentRecords = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 158 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 159 | /* | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 160 | working out if we can send all or some of the data: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 161 | if there is a maxhandles outstanding, comply with that | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 162 | if we can send all the data (handles) fine | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 163 | if we can't send all the data, reduce the buffer by the continuation | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 164 | */ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 165 | TInt pduSize = fullSize - sentRecords; // the count of handles left to send | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 166 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 167 | // start with the buffer size less: the minimum allocated, the total and this time handle count size and the empty continuation header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 168 | TInt bufferUsableLen = aRespPdu.iParams.MaxLength() - ((KRspHandleCountSize * 2) + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 169 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 170 | TBool outContFlag; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 171 | if (bufferUsableLen < (pduSize * KSdpRecordHandleSize)) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 172 | 		{// has to be a continuation
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 173 | outContFlag = ETrue; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 174 | bufferUsableLen -= KSdpContinuationStateLength; // we need the header now | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 175 | /* | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 176 | when sending attributes (AR, SAS) make sure we don't leave a single byte | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 177 | to be sent in the next continuation. Otherwise, reduce the payload this | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 178 | time by 1 to make sure we comply with the specification and send a minimum | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 179 | of two bytes in the response. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 180 | */ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 181 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 182 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 183 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 184 | outContFlag = EFalse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 185 | // we can complete this request this time | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 186 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 187 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 188 | TUint handleCount = bufferUsableLen >> 2; // get the length in handle speak | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 189 | pduSize = Min(pduSize, handleCount); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 190 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 191 | // end of common second stage continuation processing | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 192 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 193 | // Write the response packet | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 194 | aRespPdu.iPduId = EServiceSearchResponse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 195 | aRespPdu.iParams.SetMax(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 196 | TPtr8 responseHandles(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 197 | responseHandles.Set(&aRespPdu.iParams[0], 0, aRespPdu.iParams.MaxLength()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 198 | TInt oldLen = responseHandles.Length(); // erm, zero | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 199 | responseHandles.SetLength(oldLen + (KRspHandleCountSize * 2)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 200 | BigEndian::Put16(&responseHandles[KRspTotalCountOffset], (TUint16)fullSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 201 | BigEndian::Put16(&responseHandles[KRspHandleCountOffset], (TUint16)pduSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 202 | for (TInt i = 0; i < pduSize; i++) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 203 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 204 | oldLen = responseHandles.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 205 | responseHandles.SetLength(oldLen + KSdpRecordHandleSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 206 | BigEndian::Put32(&responseHandles[oldLen], collector->HandleAt(sentRecords+i)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 207 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 208 | oldLen = responseHandles.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 209 | if (outContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 210 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 211 | responseHandles.SetLength(oldLen + KSdpContinuationStateLength + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 212 | responseHandles[oldLen] = KSdpContinuationStateLength; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 213 | BigEndian::Put32(&responseHandles[oldLen + KContContOff + KContStateHeader], (sentRecords + pduSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 214 | BigEndian::Put32(&responseHandles[oldLen + KContTotOff + KContStateHeader], fullSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 215 | BigEndian::Put16(&responseHandles[oldLen + KContCrcOff + KContStateHeader], 0); // CRC not used | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 216 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 217 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 218 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 219 | responseHandles.SetLength(oldLen + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 220 | responseHandles[oldLen] = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 221 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 222 | aRespPdu.iParams.SetLength(responseHandles.Length()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 223 | CleanupStack::PopAndDestroy(2 /*collector, pHandler*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 224 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 225 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 226 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 227 | void SdpReqHandler::HandleServiceAttributeL(CSdpDatabase &aDatabase, const TSdpPdu &aReqPdu, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 228 | /** | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 229 | Handle Service Attribute request. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 230 | Request parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 231 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 232 | Service record handle TUint32 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 233 | Max Attribute byte count TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 234 | Attribute ID/range list DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 235 | Continuation state 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 236 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 237 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 238 | Response parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 239 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 240 | byte count of attr list TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 241 | Attribute ID & Value DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 242 | Continuation State 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 243 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 244 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 245 | **/ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 246 | 	{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 247 | // Parse the request parameters | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 248 | TPtr8 fullParams(aReqPdu.iParams); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 249 | if (fullParams.Length() < KRecAttribListOffset) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 250 | 	    {
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 251 | User::Leave(KErrUnderflow); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 252 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 253 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 254 | TPtrC8 params = fullParams.Right(fullParams.Length() - KRecAttribListOffset); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 255 | TInt len = params.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 256 | TInt rem; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 257 | TInt sentRecords=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 258 | TInt sentAttributes=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 259 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 260 | CSdpPDUHandler* pHandler = new (ELeave) CSdpPDUHandler(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 261 | CleanupStack::PushL(pHandler); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 262 | CSizeAccumulator* collector = CSizeAccumulator::NewL(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 263 | CleanupStack::PushL(collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 264 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 265 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 266 | // record handle to search | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 267 | TSdpServRecordHandle recordHandle = BigEndian::Get32(&fullParams[KRecHandleOffset]); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 268 | // maximum byte count for results | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 269 | TInt maxTotalAttributeCount = BigEndian::Get16(&fullParams[KAttributeCountOffset]); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 270 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 271 | // list of Attributes or ranges | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 272 | CSdpAttrIdMatchList *attMatchList = pHandler->AttrListLC(params, rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 273 | // check for the continuation header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 274 | TBool inContFlag = pHandler->ContinuationL(params, len, rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 275 | // find the record | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 276 | CSdpServRecord* theRecord=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 277 | // changed to allow testing with Tsdpdp.cpp | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 278 | for(TServRecordIter recIter(aDatabase.RecordIter()); recIter; recIter++) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 279 | 	{// Iterate thru records in Db
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 280 | if ((*recIter).Handle() == recordHandle) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 281 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 282 | theRecord = recIter; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 283 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 284 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 285 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 286 | // record not found | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 287 | if (!theRecord) User::Leave(KErrBadHandle); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 288 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 289 | // size the response | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 290 | CResponseSizeVisitor::SizeRespARL(*theRecord, *attMatchList, *collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 291 | CleanupStack::PopAndDestroy(/*attMatchList*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 292 | // should only have one record in the size list | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 293 | if (collector->HandleCount() != 1) User::Leave(KErrArgument); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 294 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 295 | // some checks on continuation | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 296 | TUint fullSize = collector->SizeLeft(); // we can always send all bytes the max is only per PDU | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 297 | // the sizer includes the DES size, but we need the record size less the header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 298 | // NOTE in the SAS case we have a set (DES) of DES, but no DES header in front of them. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 299 | TUint innerRecSize = collector->HandleSize(0); // should be totalSize less the DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 300 | TInt desSize = CSdpPDUHandler::DesSize(innerRecSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 301 | if (fullSize == 0) fullSize += desSize; // give it the smallest header if there are no attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 302 | TInt16 localCRC=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 303 | TUint sentBytes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 304 | TUint sentBytesCurAttr; // bytes left to send on current attribute | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 305 | if (inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 306 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 307 | if (fullSize != pHandler->FullLength()) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 308 | sentBytes = pHandler->ContinuationOffset(); // this is in bytes, not handles like service search | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 309 | if (fullSize <= sentBytes) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 310 | // FIXME removed CRC handling until continuation works | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 311 | // localCRC = collector->CrcAttribs(); // CRC is only for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 312 | if (localCRC != pHandler->ReqCRC()) User::Leave(KErrUnknown); // continuation check for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 313 | // collector->StartAt uses the bytes already sent to discover how far through an | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 314 | // attribute we are at the beginning of a new pdu in a continued response | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 315 | TBool adj = collector->StartAt(sentBytes, sentBytesCurAttr, sentRecords, sentAttributes); // this is for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 316 | if (!adj) User::Leave(KErrUnknown); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 317 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 318 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 319 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 320 | sentBytes = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 321 | sentBytesCurAttr = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 322 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 323 | /* | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 324 | working out if we can send all or some of the data: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 325 | if there is a maxbytes outstanding, comply with that | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 326 | if we can send all the data (bytes) fine | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 327 | if we can't send all the data, reduce the buffer by the continuation | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 328 | */ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 329 | TInt pduSize = fullSize - sentBytes; // the data left to send | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 330 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 331 | // start with the buffer size less: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 332 | // the byte count size and the empty continuation header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 333 | TInt bufferUsableLen = aRespPdu.iParams.MaxLength() - (KRspAttributeCountSize + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 334 | TInt bufferThisSize = Min(maxTotalAttributeCount, bufferUsableLen); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 335 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 336 | TBool outContFlag; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 337 | if (bufferThisSize < pduSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 338 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 339 | outContFlag = ETrue; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 340 | bufferUsableLen -= KSdpContinuationStateLength; // we need the header now | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 341 | bufferThisSize = Min(maxTotalAttributeCount, bufferUsableLen); // again the smallest | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 342 | // when sending attributes (AR, SAS) make sure we don't leave a single byte | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 343 | // to be sent in the next continuation. Otherwise, reduce the payload this | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 344 | // time by 1 to make sure we comply with the specification and send a minimum | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 345 | // of two bytes in the response. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 346 | if ((pduSize - bufferThisSize) == 1) bufferThisSize -= 1; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 347 | if (!inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 348 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 349 | // FIXME CRC removed until continuation works | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 350 | // localCRC = collector->CrcAttribs(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 351 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 352 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 353 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 354 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 355 | outContFlag = EFalse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 356 | // we can complete this request this time | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 357 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 358 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 359 | pduSize = Min(pduSize, bufferThisSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 360 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 361 | // end of common second stage continuation processing | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 362 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 363 | TInt writtenSize = pduSize; // we will be reducing the pduSize | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 364 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 365 | // Write the response packet | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 366 | aRespPdu.iPduId = EServiceAttributeResponse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 367 | aRespPdu.iParams.SetMax(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 368 | TPtr8 responseAttributes(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 369 | responseAttributes.Set(&aRespPdu.iParams[0], 0, aRespPdu.iParams.MaxLength()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 370 | TElementEncoder attributeEncoder(responseAttributes); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 371 | TInt oldLen = responseAttributes.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 372 | responseAttributes.SetLength(oldLen + KRspAttributeCountSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 373 | BigEndian::Put16(&responseAttributes[KRspAttributeCountOffset], (TUint16)(pduSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 374 | CAttrSizeItem* currentAttItem = collector->AttributeOf(sentRecords, sentAttributes); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 375 | TInt lastAttr = collector->AttrCount(sentRecords); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 376 | TPtrC8 attrValPtr(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 377 | TBuf8<1> wBuffer(1); // used for byte insertion | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 378 | if (!inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 379 | 		{// write the outer DES
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 380 | attributeEncoder.WriteDES(innerRecSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 381 | pduSize -= desSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 382 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 383 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 384 | 		{ // we are writing a continuation so straight into attribute data
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 385 | if (sentBytesCurAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 386 | 			{ // we have to write the rest of a previous attribute
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 387 | TPtrC8 partPtr(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 388 | attrValPtr.Set(currentAttItem->Attr()->Value().Des()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 389 | TInt unsentBytes = attrValPtr.Length() + KAttributeIdSize - sentBytesCurAttr; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 390 | switch(sentBytesCurAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 391 | 				{ // we may have to send some of the attribute ID
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 392 | case 1: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 393 | // Append most significant byte to responseAttributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 394 | wBuffer[0] = (TUint8)(currentAttItem->AttID() >> 8); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 395 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 396 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 397 | unsentBytes--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 398 | // No break statement is deliberate because we want to append | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 399 | // the least significant byte to responseAttributes too | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 400 | case 2: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 401 | wBuffer[0] = (TUint8)(currentAttItem->AttID() & 0xff); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 402 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 403 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 404 | unsentBytes--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 405 | partPtr.Set(attrValPtr); // it's a whole pointer | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 406 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 407 | default: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 408 | partPtr.Set(attrValPtr.Right(unsentBytes)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 409 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 410 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 411 | if (unsentBytes - pduSize > 0) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 412 | 				{// we don't even get to send one complete attribute...
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 413 | partPtr.Set(partPtr.Left(pduSize)); // adjust the size of the des we send. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 414 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 415 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 416 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 417 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 418 | pduSize -= unsentBytes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 419 | sentAttributes++; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 420 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 421 | attributeEncoder.WriteDesc(partPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 422 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 423 | // what should be here ? | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 424 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 425 | // now send bytes up to what's left of pduSize | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 426 | TInt currentAttr = sentAttributes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 427 | TInt attrSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 428 | while (pduSize > 0 && currentAttr < lastAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 429 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 430 | if (currentAttr > lastAttr) User::Leave(KErrUnknown); // should go past the last attribute | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 431 | currentAttItem = collector->AttributeOf(sentRecords, currentAttr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 432 | if (pduSize < 3) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 433 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 434 | wBuffer[0] = KAttrIdHeader; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 435 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 436 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 437 | if (pduSize == 0) break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 438 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 439 | if (pduSize == 1) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 440 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 441 | wBuffer[0] = (TUint8)(currentAttItem->AttID() >> 8); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 442 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 443 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 444 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 445 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 446 | attributeEncoder.WriteUint(currentAttItem->AttID(), 2); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 447 | pduSize -= KAttributeIdSize; // the attrID with its header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 448 | if (pduSize == 0) break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 449 | attrSize = currentAttItem->Size(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 450 | attrValPtr.Set(currentAttItem->Attr()->Value().Des()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 451 | if (attrSize > pduSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 452 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 453 | TPtrC8 partPtr; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 454 | partPtr.Set(attrValPtr.Left(pduSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 455 | attributeEncoder.WriteDesc(partPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 456 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 457 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 458 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 459 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 460 | attributeEncoder.WriteDesc(attrValPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 461 | pduSize -= attrSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 462 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 463 | currentAttr++; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 464 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 465 | oldLen = responseAttributes.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 466 | if (outContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 467 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 468 | responseAttributes.SetLength(oldLen + KSdpContinuationStateLength + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 469 | responseAttributes[oldLen] = KSdpContinuationStateLength; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 470 | BigEndian::Put32(&responseAttributes[oldLen + KContContOff + KContStateHeader], (sentBytes + writtenSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 471 | BigEndian::Put32(&responseAttributes[oldLen + KContTotOff + KContStateHeader], fullSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 472 | BigEndian::Put16(&responseAttributes[oldLen + KContCrcOff + KContStateHeader], localCRC); // CRC not used | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 473 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 474 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 475 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 476 | responseAttributes.SetLength(oldLen + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 477 | responseAttributes[oldLen] = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 478 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 479 | aRespPdu.iParams.SetLength(responseAttributes.Length()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 480 | CleanupStack::PopAndDestroy(2 /*collector, pHandler*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 481 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 482 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 483 | void SdpReqHandler::HandleServiceSearchAttributeL(CSdpDatabase &aDatabase, const TSdpPdu &aReqPdu, TSdpPdu &aRespPdu) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 484 | /** | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 485 | Handle Service Attribute Search request. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 486 | Request parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 487 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 488 | Service search pattern DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 489 | Max Attribute byte count TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 490 | Attribute ID/range list DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 491 | Continuation state 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 492 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 493 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 494 | Response parameter format is | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 495 | @verbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 496 | Total byte count TUint16 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 497 | for each record matched DES of | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 498 | Attribute ID & Value DES | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 499 | Continuation State 1 + 0-16 bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 500 | @endverbatim | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 501 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 502 | **/ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 503 | 	{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 504 | // Parse the request parameters | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 505 | TPtr8 params(aReqPdu.iParams); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 506 | TInt len = params.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 507 | TInt rem; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 508 | TInt sentRecords=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 509 | TInt sentAttributes=0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 510 | TInt maxTotalAttributeCount = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 511 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 512 | CSdpPDUHandler* pHandler = new (ELeave) CSdpPDUHandler(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 513 | CleanupStack::PushL(pHandler); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 514 | CSizeAccumulator* collector = CSizeAccumulator::NewL(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 515 | CleanupStack::PushL(collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 516 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 517 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 518 | CSdpSearchPattern* pattern = pHandler->UUIDListLC(params, KRecHandleCountSize, len, rem, maxTotalAttributeCount); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 519 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 520 | // list of Attributes or ranges | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 521 | TPtrC8 attrParams = params.Right(rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 522 | CSdpAttrIdMatchList *attMatchList = pHandler->AttrListLC(attrParams, rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 523 | // check for the continuation header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 524 | TBool inContFlag = pHandler->ContinuationL(params, len, rem); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 525 | // size the response | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 526 | CResponseSizeVisitor::SizeRespSAL(aDatabase, *pattern, *attMatchList, *collector); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 527 | CleanupStack::PopAndDestroy(2 /*attMatchList, pattern*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 528 | TInt totalHandles = collector->HandleCount(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 529 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 530 | // some checks on continuation | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 531 | TUint fullSize = collector->SizeLeft(); // we can always send all bytes the max is only per PDU | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 532 | // the sizer includes the DES size, but we need the record size less the header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 533 | // NOTE in the SAS case we have a set (DES) of DES, but no DES header in front of them. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 534 | TInt desSize = CSdpPDUHandler::DesSize(fullSize);// the DES of DES length is not calculated by SizeLeft | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 535 | fullSize += desSize; // this avoids the case of zero attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 536 | TInt16 localCRC = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 537 | TUint sentBytes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 538 | TUint sentBytesCurAttr; // bytes on current attribute already sent | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 539 | if (inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 540 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 541 | if (fullSize != pHandler->FullLength()) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 542 | sentBytes = pHandler->ContinuationOffset(); // this is in bytes, not handles like service search | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 543 | if (fullSize <= sentBytes) User::Leave(KErrUnknown); // continuation check | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 544 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 545 | // FIXME removed CRC handling until continuation works | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 546 | // localCRC = collector->CrcAttribs(); // CRC is only for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 547 | if (localCRC != pHandler->ReqCRC()) User::Leave(KErrUnknown); // continuation check for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 548 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 549 | // collector->StartAt uses the bytes already sent to discover how far through an | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 550 | // attribute we are at the beginning of a new pdu in a continued response.... | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 551 | // ....in SAS we need to remove the desSize from any sent bytes as the outer DES is not | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 552 | // counted in StartAt. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 553 | // ....also NOTE: because further down we ensure that no new record DES or part thereof) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 554 | // is sent at the end of a pdu any non-zero value returned in sentBytesCurAttr will not be | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 555 | // just that (bytes already sent of current attribute split in process of continuation) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 556 | TBool adj = collector->StartAt(sentBytes - desSize, sentBytesCurAttr, sentRecords, sentAttributes); // this is for attributes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 557 | if (!adj) User::Leave(KErrUnknown); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 558 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 559 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 560 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 561 | sentBytes = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 562 | sentBytesCurAttr = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 563 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 564 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 565 | /* | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 566 | working out if we can send all or some of the data: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 567 | if there is a maxbytes outstanding, comply with that | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 568 | if we can send all the data (bytes) fine | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 569 | if we can't send all the data, reduce the buffer by the continuation | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 570 | and then take the minimum of the maxbytes or what is left of the buffer | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 571 | */ | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 572 | TInt pduSize = fullSize - sentBytes; // the data left to send | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 573 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 574 | // start with the buffer size less: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 575 | // the byte count size and the empty continuation header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 576 | TInt bufferUsableLen = aRespPdu.iParams.MaxLength() - (KRspAttributeCountSize + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 577 | TInt bufferThisSize = Min(maxTotalAttributeCount, bufferUsableLen); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 578 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 579 | TBool outContFlag; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 580 | if (bufferThisSize < pduSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 581 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 582 | outContFlag = ETrue; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 583 | bufferUsableLen -= KSdpContinuationStateLength; // we need the header now | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 584 | bufferThisSize = Min(maxTotalAttributeCount, bufferUsableLen); // again the smallest | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 585 | // when sending attributes (AR, SAS) make sure we don't leave a single byte | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 586 | // to be sent in the next continuation. Otherwise, reduce the payload this | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 587 | // time by 1 to make sure we comply with the specification and send a minimum | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 588 | // of two bytes in the response. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 589 | if ((pduSize - bufferThisSize) == 1) bufferThisSize -= 1; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 590 | if (!inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 591 | 			{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 592 | // FIXME CRC removed until continuation works | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 593 | // localCRC = collector->CrcAttribs(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 594 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 595 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 596 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 597 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 598 | outContFlag = EFalse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 599 | // we can complete this request this time | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 600 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 601 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 602 | pduSize = Min(pduSize, bufferThisSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 603 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 604 | // end of common second stage continuation processing | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 605 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 606 | TInt writtenSize = pduSize; // we will be reducing the pduSize | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 607 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 608 | // Write the response packet | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 609 | aRespPdu.iPduId = EServiceSearchAttributeResponse; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 610 | aRespPdu.iParams.SetMax(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 611 | TPtr8 responseAttributes(0,0); //used to point along aRespPdu.iParams, and manage this | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 612 | responseAttributes.Set(&aRespPdu.iParams[0], 0, aRespPdu.iParams.MaxLength()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 613 | //NB attributeEncoder below writes to responseAttributes (pointing at response PDU)... | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 614 | TElementEncoder attributeEncoder(responseAttributes); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 615 | TInt oldLen = responseAttributes.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 616 | responseAttributes.SetLength(oldLen + KRspAttributeCountSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 617 | BigEndian::Put16(&responseAttributes[KRspAttributeCountOffset], (TUint16)(pduSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 618 | CAttrSizeItem* currentAttItem = collector->AttributeOf(sentRecords, sentAttributes); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 619 | TInt lastAttr = collector->AttrCount(sentRecords); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 620 | TPtrC8 attrValPtr(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 621 | TBuf8<1> wBuffer(1); // used for byte insertion | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 622 | if (!inContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 623 | 		{// write the outer DES
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 624 | attributeEncoder.WriteDES(fullSize - desSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 625 | pduSize -= desSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 626 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 627 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 628 | 		{ // we are writing a continuation so straight into attribute data
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 629 | if (sentBytesCurAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 630 | 			{ // we have to write the rest of a previous attribute
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 631 | TPtrC8 partPtr(0,0); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 632 | attrValPtr.Set(currentAttItem->Attr()->Value().Des()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 633 | TInt unsentBytes = attrValPtr.Length() + KAttributeIdSize - sentBytesCurAttr; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 634 | switch(sentBytesCurAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 635 | 				{ // we may have to send some of the attribute ID
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 636 | // coverity[unterminated_case] | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 637 | case 1: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 638 | wBuffer[0] = (TUint8)(currentAttItem->AttID() >> 8); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 639 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 640 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 641 | unsentBytes--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 642 | // coverity[fallthrough] | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 643 | case 2: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 644 | wBuffer[0] = (TUint8)(currentAttItem->AttID() & 0xff); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 645 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 646 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 647 | unsentBytes--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 648 | partPtr.Set(attrValPtr); // it's a whole pointer | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 649 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 650 | default: | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 651 | partPtr.Set(attrValPtr.Right(unsentBytes)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 652 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 653 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 654 | if (unsentBytes - pduSize > 0) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 655 | 				{// we don't even get to send one complete attribute...
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 656 | partPtr.Set(partPtr.Left(pduSize)); // adjust the size of the des we send. | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 657 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 658 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 659 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 660 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 661 | pduSize -= unsentBytes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 662 | sentAttributes++; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 663 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 664 | attributeEncoder.WriteDesc(partPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 665 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 666 | // what should be here ? | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 667 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 668 | // now send bytes up to what's left of pduSize | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 669 | TInt currentAttr = sentAttributes; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 670 | TInt currentRec = sentRecords; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 671 | TInt attrSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 672 | while (pduSize > 0 && currentRec < totalHandles) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 673 | 		{ // for all handles
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 674 | if (currentAttr == 0) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 675 | 			{ // write the DES header for this list of attributes
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 676 | TUint lRecordSize = collector->HandleSize(currentRec); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 677 | TInt lDesSize = CSdpPDUHandler::DesSize(lRecordSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 678 | if (pduSize <= lDesSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 679 | 				{ // a new record DES: don't write it if it or part of it would
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 680 | // come on the end of the data part of a pdu - leave it | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 681 | // for the next pdu | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 682 | writtenSize -= pduSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 683 | BigEndian::Put16(&responseAttributes[KRspAttributeCountOffset], (TUint16)(writtenSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 684 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 685 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 686 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 687 | if(lRecordSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 688 | 				{//only if record has any attributes to return 
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 689 | //(=> lastAttr will be > 0 when calculated below) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 690 | attributeEncoder.WriteDES(lRecordSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 691 | pduSize -= lDesSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 692 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 693 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 694 | lastAttr = collector->AttrCount(currentRec); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 695 | while (pduSize > 0 && currentAttr < lastAttr) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 696 | 			{ // for all attributes
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 697 | currentAttItem = collector->AttributeOf(currentRec, currentAttr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 698 | //if clauses below put part of attribute id on the end of a pdu | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 699 | if (pduSize < 3) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 700 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 701 | wBuffer[0] = KAttrIdHeader; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 702 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 703 | pduSize--; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 704 | if (pduSize == 0) break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 705 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 706 | if (pduSize == 1) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 707 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 708 | wBuffer[0] = (TUint8)(currentAttItem->AttID() >> 8); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 709 | responseAttributes.Append(&wBuffer[0], 1); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 710 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 711 | break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 712 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 713 | //if we've got here we can at least write a complete attr id onto the pdu | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 714 | attributeEncoder.WriteUint(currentAttItem->AttID(), 2); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 715 | pduSize -= KAttributeIdSize; // the attrID with its header | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 716 | if (pduSize == 0) break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 717 | attrSize = currentAttItem->Size(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 718 | attrValPtr.Set(currentAttItem->Attr()->Value().Des()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 719 | if (attrSize > pduSize) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 720 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 721 | TPtrC8 partPtr; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 722 | partPtr.Set(attrValPtr.Left(pduSize)); //from left pduSize bytes | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 723 | attributeEncoder.WriteDesc(partPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 724 | pduSize = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 725 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 726 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 727 | 				{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 728 | attributeEncoder.WriteDesc(attrValPtr); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 729 | pduSize -= attrSize; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 730 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 731 | currentAttr++; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 732 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 733 | if (pduSize == 0) break; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 734 | currentRec++; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 735 | currentAttr = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 736 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 737 | oldLen = responseAttributes.Length(); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 738 | if (outContFlag) | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 739 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 740 | responseAttributes.SetLength(oldLen + KSdpContinuationStateLength + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 741 | responseAttributes[oldLen] = KSdpContinuationStateLength; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 742 | BigEndian::Put32(&responseAttributes[oldLen + KContContOff + KContStateHeader], (sentBytes + writtenSize)); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 743 | BigEndian::Put32(&responseAttributes[oldLen + KContTotOff + KContStateHeader], fullSize); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 744 | BigEndian::Put16(&responseAttributes[oldLen + KContCrcOff + KContStateHeader], localCRC); // CRC not used | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 745 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 746 | else | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 747 | 		{
 | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 748 | responseAttributes.SetLength(oldLen + KContStateHeader); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 749 | responseAttributes[oldLen] = 0; | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 750 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 751 | aRespPdu.iParams.SetLength(responseAttributes.Length()); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 752 | CleanupStack::PopAndDestroy(2 /*collector, pHandler*/); | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 753 | } | 
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 754 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 755 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 756 | |
| 
29b1cd4cb562
Revision: 200951_001
 Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> parents: diff
changeset | 757 |