--- a/obex/obexprotocol/obex/src/OBEX.CPP Tue Sep 28 20:14:08 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,962 +0,0 @@
-// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-/**
- @file
- @internalComponent
-*/
-
-
-#include <charconv.h>
-#include <utf.h>
-#include <obex.h>
-#include <obex/internal/obexinternalheader.h>
-#include <obextransportinfo.h>
-#include <obexirtransportinfo.h>
-#include <obex/transport/obextransportcontrollerbase.h>
-#include <obex/internal/obexpacket.h>
-#include "logger.h"
-#include "obexsetpathdata.h"
-#include "OBEXUTIL.H"
-#include "authentication.h"
-#include <ecom/ecom.h>
-
-#ifdef __FLOG_ACTIVE
-_LIT8(KLogComponent, "OBEX");
-#endif
-
-/**
-Constructor - set initial values and copy in protocol policy information
-@internalComponent
-*/
-CObex::CObex()
- {
-#ifdef _DEBUG
- CObexLog::Connect();
-#endif
- FLOG(_L("Creating CObex"));
- SetConnectState(EConnIdle);
- }
-
-void CObex::ConstructL(TObexTransportInfo& aObexTransportInfo)
- {
- iTransportController = CObexTransportControllerBase::NewL(aObexTransportInfo);
- iAuthEngine = CObexAuthenticator::NewL();
- iSuppressedObexAuthElements = EObexNoSuppressedAuthElements;
- }
-
-/**
-Destructor.
-*/
-CObex::~CObex()
- {
-
- delete iTransportController;
- delete iAuthEngine;
- delete iChallPassword;
- delete iRespPassword;
- delete iRemoteUID;
- delete iRemoteRealm;
- delete iRxChallenge;
-
- // This must be done AFTER destroying the transport controller.
- REComSession::FinalClose();
-
- // iNotifyHandler is deleted in the derived classes where it is instantiated
-
-#ifdef _DEBUG
- CObexLog::Close();
-#endif
- }
-
-/**
-Get the socket address of the remote device.
-
-This is the address of the device OBEX is connected to over an IrDA or Bluetooth
-socket.
-
-@param aAddr Socket address.
-
-@publishedAll
-@released
-*/
-EXPORT_C void CObex::RemoteAddr(TSockAddr& aAddr)
- {
- LOG_LINE
- LOG_FUNC
-
- // iTransportController must be valid for all the CObex life cycle
- __ASSERT_DEBUG(iTransportController, IrOBEXUtil::Fault(ETransportControllerNotCreated));
-
- iTransportController->RemoteAddr(aAddr);
- }
-
-/**
-Sets the local Who field.
-
-This is used to identify the local end of the OBEX session when the OBEX connection
-is made. If it is required, set it before establishing the connection.
-
-@param aInfo Who field
-@return KErrNone or KErrArgument if aInfo is empty
-
-@publishedAll
-@released
-*/
-EXPORT_C TInt CObex::SetLocalWho(const TDesC8& aInfo)
- {
- LOG_LINE
- LOG_FUNC
-
- if(aInfo.Length())
- { iLocalInfo.iWho.Copy(aInfo); return KErrNone;}
- else
- return KErrArgument;
- }
-
-/**
-Indicates if the Server / Client is currently authenticating the OBEX
-connection.
-
-@return ETrue if the Server / Client is currently authenticating the OBEX connection otherwise EFalse.
-
-@publishedAll
-@released
-*/
-EXPORT_C TBool CObex::IsAuthenticating() const
- {
- return (ConnectState() >= EConnChallRxed && ConnectState() <= EWaitForUserInput);
- }
-
-
-/**
-@param aPassword Password to use in challenge response
-@internalComponent
-*/
-void CObex::PrepareChallResponseL(const TDesC& aPassword)
- {
-
- FLOG(_L("CObex::PrepareChallResponse\r\n"));
- iOutgoingChallResp.Zero();
- TRequestDigest response;
- delete iRespPassword;
- iRespPassword = NULL;
- iRespPassword = HBufC8::NewL(aPassword.Length());
- TPtr8 ptr = iRespPassword->Des();
- CnvUtfConverter::ConvertFromUnicodeToUtf8(ptr, aPassword);
-
- iAuthEngine->GenerateResponseL(ptr, iIncomingNonce, response);
- FLOG(_L("PrepareChallResponse: Digest response generated"));
-
- FLOG(_L("PrepareChallResponse: Adding response hash"));
- iOutgoingChallResp.Append(KObexRespTag); //0x00
- iOutgoingChallResp.Append(KObexRespSize); //16
- iOutgoingChallResp.Append(response);
-
- //only reply with UserID if requested
- if (iUserIDRequested )
- {
- FLOG(_L("PrepareChallResponse: User ID required, adding zero length field"));
- iOutgoingChallResp.Append(KObexRespUserIDTag); //0x01
- //Fixme, add in the size of the user ID
- iOutgoingChallResp.Append(0); //assume no UserID size of 0
- //any user ID would have to be inserted here
- //iOutgoingChallResp.Append(userID); //Fixme what is the user ID?
- }
-
- FLOG(_L("PrepareChallResponse: Adding nonce of challenge we're replying to"));
- iOutgoingChallResp.Append(KObexRespNonceTag);
- iOutgoingChallResp.Append(KObexNonceSize);
- iOutgoingChallResp.Append(iIncomingNonce);
-
- FLOG(_L(" PrepareChallResponse - complete response generated"));
- }
-
-/**
-@internalComponent
-*/
-TInt CObex::GenerateChallenge(CObexPacket& aPacket)
- {
- TInt retValue = KErrNone;
-
- FLOG(_L("CObex::GenerateChallenge\r\n"));
- iOutgoingNonce.Zero();
- iAuthEngine->GenerateNonce(iOutgoingNonce);
- //now pack all the data together for the overall challenge
- TBuf8<KObexChallHeaderSize> outGoingHeader; //this size assumes no Realm data
- outGoingHeader.Zero();
- outGoingHeader.Append(KObexChallNonceTag);
- outGoingHeader.Append(KObexNonceSize);
- outGoingHeader.Append(iOutgoingNonce);
-
- // Add authentication header only if the client has not disallowed it
- if (!(iSuppressedObexAuthElements & EObexSuppressChallengeOptionsAuthElement))
- {
- outGoingHeader.Append(KObexChallOptionsTag);
- outGoingHeader.Append(1); //size is always 1
- outGoingHeader.Append(0); //all options off
- }
-
- // Add realm header only if the client has not disallowed it
- if (!(iSuppressedObexAuthElements & EObexSuppressRealmAuthElement))
- {
- outGoingHeader.Append(KObexChallRealmTag);
- outGoingHeader.Append(0); //no realm so size = 0
- }
-
- TObexInternalHeader hdr;
- hdr.Set(TObexInternalHeader::EAuthChallenge, (const_cast<TUint8*> (outGoingHeader.Ptr())), outGoingHeader.Size());
- if(!aPacket.InsertData(hdr))
- retValue = KErrOverflow;
-
- return (retValue);
- }
-
-/**
-@internalComponent
-*/
-void CObex::ProcessChallResponseL(const TObexInternalHeader& hdr)
- {
- FLOG(_L("CObex::ProcessChallResponse"));
- TBool retValue = ETrue;
- TInt responseSize = hdr.HVSize();
- TInt elementsLeft = responseSize; //keep track of how many elements still to be removed
-
- if ( responseSize > KChallResponseSize )
- {
- retValue = EFalse;
- FLOG(_L("ProcessChallResponse - Response header too big FAILED"));
- }
- else if (responseSize < KMinChallResponseSize)
- {
- retValue = EFalse;
- FLOG(_L("ProcessChallResponse - Response header too small FAILED"));
- }
-
- //get the response
- iIncomingChallResp.Zero();
- iIncomingChallResp.Copy(hdr.HVByteSeq(), responseSize);
-
- //there is no reason to assume that the data is going to arrive
- //in any particular order
- TInt extractionPosn = 0;
-
- //ensure space enough for the tag and size
- while ((extractionPosn < (responseSize-1) ) && retValue)
- {
- switch (iIncomingChallResp[extractionPosn++])
- {
- case KObexRespTag:
- {
- elementsLeft--; //moved passed the tag
- if ((iIncomingChallResp[extractionPosn++] == KObexRespSize)&&
- (elementsLeft > KObexRespSize)) //must be greater to allow for size field
- {
- elementsLeft--; //moved passed the size
- FLOG(_L("ProcessChallResponse - iIncoming Request Response extracted"));
- iIncomingRequestDigest.Zero();
- iIncomingRequestDigest.Append((TUint8*)iIncomingChallResp.Ptr() + extractionPosn, KObexRespSize);
- extractionPosn += KObexRespSize;
- elementsLeft -= KObexRespSize;
- }
- else
- {
- FLOG(_L("ProcessChallResponse - iIncoming Request Response extraction FAILED"));
- retValue = EFalse;
- }
- }
- break;
- case KObexRespUserIDTag:
- {
- elementsLeft--; //moved passed the tag
- TInt userIDSize = iIncomingChallResp[extractionPosn++];
- if ( userIDSize > 0)
- {
- elementsLeft--; //moved passed the User ID size
- if (( userIDSize > 0 )&&(userIDSize <= elementsLeft ))
- {
- elementsLeft -= userIDSize;
- FLOG(_L("ProcessChallResponse - iIncoming ASCII UserID Extracted"));
- delete iRemoteUID;
- iRemoteUID = NULL;
- iRemoteUID = HBufC::NewL(userIDSize);
- TPtrC8 ptr((TUint8*)iIncomingChallResp.Ptr() + extractionPosn, userIDSize);
- TPtr ptrUID((TUint16*)iRemoteUID->Ptr(), userIDSize);
- CnvUtfConverter::ConvertToUnicodeFromUtf8(ptrUID, ptr);
- extractionPosn += userIDSize;
- }
- }
- else
- {
- retValue = EFalse;
- FLOG(_L("ProcessChallResponse - iIncoming UserID Extraction FAILED"));
- }
- }
- break;
- //don't bother extracting the Nonce as we do not support multiple Nonce replies
- //the assumption is the reply received is for the Nonce we sent out
- case KObexRespNonceTag:
- {
- FLOG(_L("ProcessChallResponse: extracting incoming nonce"));
- elementsLeft--; //moved passed the tag
- TInt nonceSize = iIncomingChallResp[extractionPosn++];
- if ( nonceSize > 0 )
- {
- elementsLeft--; //moved passed size
- if ( nonceSize <= elementsLeft )
- {
- FTRACE(
- TPtrC8 incomingNonce(iIncomingChallResp.Ptr() + extractionPosn, nonceSize);
- if (incomingNonce != iOutgoingNonce)
- {
- FLOG(_L("ProcessChallResponse: incoming nonce does not match our challenge. Continuing anyway."));
- }
- );
-
- elementsLeft -= nonceSize;
- extractionPosn += nonceSize;
- }
- else
- {
- FLOG(_L("ProcessChallResponse - iIncoming Request Response extraction, bad nonce size FAILED"));
- retValue = EFalse;
- }
- }
- }
- break;
- default:
- {
- FLOG(_L("ProcessChallResponse - iIncoming Request Response extraction,unknown tag type FAILED"));
- retValue = EFalse;
- }
- break;
-
- }
- TRAPD(err, iAuthEngine->ChallengeResponseL(*iChallPassword, iOutgoingNonce, iIncomingRequestDigest));
- if ( err != KErrNone)
- {
- FLOG(_L("ProcessChallResponse - Responsed Denied"));
- User::Leave(err);
- }
- }
- if (!retValue )
- User::Leave(KErrGeneral);
- }
-
-/**
-@internalComponent
-*/
-void CObex::ProcessChallengeL(const TObexInternalHeader& hdr)
- {
- FLOG(_L("CObex::ProcessChallenge\n\r"));
-
- //extract all the necessary data
- TInt challengeSize = hdr.HVSize();
- TInt extractionPosn = 0;
- TInt elementsLeft = challengeSize;
- TBool nonceExtracted = EFalse;
-
- delete iRxChallenge;
- iRxChallenge = NULL;
- iRxChallenge = HBufC8::NewL(challengeSize);
- iRxChallenge->Des().Copy(hdr.HVByteSeq(), challengeSize);
- delete iRemoteRealm;
- iRemoteRealm = NULL;
-
-
-
- //can't make any assumptions about the order
- //in which anything may arrive, so allow any old order
- TBool exit = EFalse;
- if ( challengeSize < (KObexNonceSize + 2))
- {
- FLOG(_L("CObex::ProcessChallenge incoming Challenge too small\n\r"));
- User::Leave(KErrGeneral);
- }
-
- //must be space for Tag and size
- while ((elementsLeft > 2) && (!exit))
- {
- switch (iRxChallenge->Des()[extractionPosn++])
- {
- case KObexChallNonceTag: //check the Nonce tag has arrived
- {
- elementsLeft--; //passed the tag posn
- if (( iRxChallenge->Des()[extractionPosn++] == KObexNonceSize )
- && (elementsLeft > KObexNonceSize))
- {
- FLOG(_L("CObex::ProcessChallenge incoming Nonce Extracted\n\r"));
- iIncomingNonce.Zero();
- //extract the Nonce data
- TPtr8 ptr((TUint8*)iRxChallenge->Ptr() + extractionPosn
- ,KObexNonceSize, KObexNonceSize);
- iIncomingNonce.Append(ptr);
- elementsLeft -= (KObexNonceSize + 1);
- nonceExtracted = ETrue;
- extractionPosn += KObexNonceSize;
- }
- else
- {
- FLOG(_L("CObex::ProcessChallenge Incorrect Nonce size\n\r"));
- exit = ETrue;
- }
- }
- break;
- case KObexChallOptionsTag:
- {
- elementsLeft--; //passed the tag posn
- //check the options flag
- iUserIDRequested = EFalse;
- if (( iRxChallenge->Des()[extractionPosn++] == KObexChallOptionSize )
- && (elementsLeft > KObexChallOptionSize))
- {
- //check if the user ID is required in the reply
- if ( iRxChallenge->Des()[extractionPosn++] & KObexRequireUID )
- {
- //the userID has been requested so it MUST be sent back in the chall response
- iUserIDRequested = ETrue;
- FLOG(_L("CObex::ProcessChallenge User ID Requested\n\r"));
- }
- elementsLeft -= (KObexChallOptionSize + 1);
-
- }
- else
- {
- FLOG(_L("CObex::ProcessChallenge Incorrect Options size\n\r"));
- exit = ETrue;
- }
- }
- break;
- case KObexChallRealmTag:
- {
- elementsLeft--; //passed the tag posn
- TInt size = iRxChallenge->Des()[ extractionPosn++ ];
- elementsLeft--;
- if ( (size > 0 ) && (size <= elementsLeft ) )
- {
- elementsLeft -= size;
- size--; //remove the first byte
- //check which format the data is in
- TUint convertType=0;
- switch(iRxChallenge->Des()[extractionPosn++])
- {
- case 0:
- convertType=KCharacterSetIdentifierAscii;
- break;
- case 1:
- convertType=KCharacterSetIdentifierIso88591;
- break;
- case 2:
- convertType=KCharacterSetIdentifierIso88592;
- break;
- case 3:
- convertType=KCharacterSetIdentifierIso88593;
- break;
- case 4:
- convertType=KCharacterSetIdentifierIso88594;
- break;
- case 5:
- convertType=KCharacterSetIdentifierIso88595;
- break;
- case 6:
- convertType=KCharacterSetIdentifierIso88596;
- break;
- case 7:
- convertType=KCharacterSetIdentifierIso88597;
- break;
- case 8:
- convertType=KCharacterSetIdentifierIso88598;
- break;
- case 9:
- convertType=KCharacterSetIdentifierIso88599;
- break;
- case 0xFF:
- // Unicode, no conversion needed
- break;
- default:
- User::Leave(KErrGeneral);
- }
-
- if(convertType)
- {
- RFs fs;
- LEAVEIFERRORL(fs.Connect());
- CleanupClosePushL(fs);
- CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
- if (converter->PrepareToConvertToOrFromL(convertType, fs) != CCnvCharacterSetConverter::EAvailable)
- User::Leave(KErrGeneral);
-
- iRemoteRealm = HBufC::NewL(size);
- TPtr16 dest = iRemoteRealm->Des();
- TInt state=CCnvCharacterSetConverter::KStateDefault;
- TInt err = converter->ConvertToUnicode(dest, iRxChallenge->Mid(extractionPosn, size), state);
- if (err < 0)
- User::Leave(err);
- CleanupStack::PopAndDestroy(2); // fs, converter
- }
- else //can only be unicode
- { //if unicode
- FLOG(_L("CObex::ProcessChallenge incoming UNICODE Realm extracted\n\r"));
- size = size/2; //if it's UNICODE then should be an even number
- iRemoteRealm = HBufC::NewMaxL(size);
- TPtr16 dest = iRemoteRealm->Des();
- for ( TInt x = 0; x < size; x++ )
- dest[x] = LittleEndian::Get16((TUint8*)iRxChallenge->Ptr() + extractionPosn + (2*x));
- extractionPosn += size * 2;
- }
-
- }
- else
- {
- FLOG(_L("CObex::ProcessChallenge Incorrect Realm size\n\r"));
- exit = ETrue;
- }
- }
- break;
- default:
- {
- FLOG(_L("CObex::ProcessChallenge Unknown Tag type\n\r"));
- exit = ETrue;
- }
- break;
- }
- }
- if ( !nonceExtracted) //the nonce is mandatory so must exist
- {
- FLOG(_L("CObex::ProcessChallenge Nonce was not extracted\n\r"));
- exit = ETrue;
- }
- if ( exit )
- User::Leave(KErrGeneral);
- }
-
-
-/**
-Sets the authentication challenge handler.
-
-The caller must supply a MObexAuthChallengeHandler implementation to handle
-calls from the Server/Client for a request for a password.
-
-@param aCallBack Authentication challenge handler
-
-@publishedAll
-@released
-*/
-EXPORT_C void CObex::SetCallBack(MObexAuthChallengeHandler& aCallBack)
- {
- LOG_LINE
- LOG_FUNC
-
- iCallBack = &aCallBack;
- }
-
-/**
-@internalTechnology
-
-This function is retained for backwards compatibility and should not be called.
-
-Calling this function has undefined behaviour.
-*/
-void CObex::Process(CObexPacket& aPacket)
- {
- NotifyProcess(aPacket);
- }
-
-/**
-@internalTechnology
-
-This function is retained for backwards compatibility and should not be called.
-
-Calling this function has undefined behaviour.
-*/
-void CObex::Error(TInt aError)
- {
- NotifyError(aError);
- }
-
-/**
-@internalTechnology
-
-This function is retained for backwards compatibility and should not be called.
-
-Calling this function has undefined behaviour.
-*/
-void CObex::TransportUp()
- {
- NotifyTransportUp();
- }
-
-/**
-@internalTechnology
-
-This function is retained for backwards compatibility and should not be called.
-Use ControlledTransportDown() or ForcedTransportDown() to disconnect the transport layer.
-Calling this function will result in an ETransportDownCalled panic.
-
-@panic ObexFault ETransportDownCalled
-@see ControlledTransportDown()
-@see ForcedTransportDown()
-*/
-void CObex::TransportDown(TBool)
- {
- IrOBEXUtil::Fault(ETransportDownCalled);
- }
-
-
-void CObex::NotifyProcess(CObexPacket& aPacket)
- {
- LOG2(_L8("Packet Received, opcode: 0x%2X, Length: %d"),
- aPacket.Opcode(), aPacket.PacketSize());
- FTRACE(aPacket.Dump());
- OnPacketReceive(aPacket);
- // The queuing of the next read packet varies between Server and Client
- // Client is done at the end of CObexClient::OnPacketReceive
- // Server is done once the write packet completes in CObexServer::SignalPacketProcessEvent
- // This is because the Server may be mid-way through an asynchronous operation after OnPacketReceive
- // so we have to keep the current read packet
- if ((GetConnectState() == EWaitForUserInput )&&(iCallBack))
- {
- TRAPD(err, iCallBack->GetUserPasswordL(iRemoteRealm ? static_cast<TDesC&>(*iRemoteRealm) : KNullDesC()));
- if ( err )
- {
- Error(err);
- }
- }
- }
-
-void CObex::NotifyError(TInt aError)
- {
- LOG1(_L8("Error Called: %d"), aError);
-
- // This call has been moved to before ForcedTransportDown(), because it
- // needs to check whether the current operation is "disconnect" or
- // not, and ForcedTransportDown() sets it to "idle".
- OnError(aError);
-
- if(iConnectState >= EConnTransport)
- {
- ForcedTransportDown();
- }
- }
-
-void CObex::NotifyTransportUp()
- {
- FLOG(_L("CObex::NotifyTransportUp\n\r"));
- SetConnectState(EConnTransport);
- OnTransportUp();
- }
-
-void CObex::NotifyTransportDown(TBool)
- {
- IrOBEXUtil::Fault(ETransportDownCalled);
- }
-
-/**
-This function forces the transport to be taken down
-regardless of whether or not the underlying transport can recover without
-restarting obex applications
-However if the transport controller fails to bring the transport down, then only
-the obex connection is cancelled.
-This is called in error conditions
-
-@see ControlledTransportDown()
-@internalComponent
-*/
-void CObex::ForcedTransportDown()
- {
- // iTransportController must be valid for all the CObex life cycle
- __ASSERT_DEBUG(iTransportController, IrOBEXUtil::Fault(ETransportControllerNotCreated));
-
- if (iTransportController->BringTransportDown())
- {
- SetConnectState(EConnIdle);
- OnTransportDown();
- }
- else
- {
- //the transport failed to be taken down
- CancelObexConnection();
- }
- RemoteInfoCleanup();
- }
-
-/**
-This function will tear down the transport if the transport layer supports
-transport reconnection on obex reconnection
-This is called in conditions other than error conditions
-
-@see ForcedTransportDown()
-@internalComponent
-*/
-void CObex::ControlledTransportDown()
- {
- // iTransportController must be valid for all the CObex life cycle
- __ASSERT_DEBUG(iTransportController, IrOBEXUtil::Fault(ETransportControllerNotCreated));
-
- TBool canBringTransportDown = iTransportController->IsTransportRestartable();
- if (canBringTransportDown)
- {
- ForcedTransportDown();
- }
- else
- {
- CancelObexConnection();
- RemoteInfoCleanup();
- }
-
- }
-
-/**
-General cleanup of iRemoteInfo
-@internalComponent
-*/
-void CObex::RemoteInfoCleanup()
- {
- // Some general cleanup here.
- iRemoteInfo.iTargetHeader.SetLength(0);
- iRemoteInfo.iWho.SetLength(0);
- }
-
-/**
-Put into transport connected state but cancel any outstanding transfers and operations
-@internalComponent
-*/
-void CObex::CancelObexConnection()
- {
- // iTransportController must be valid for all the CObex life cycle
- __ASSERT_DEBUG(iTransportController, IrOBEXUtil::Fault(ETransportControllerNotCreated));
-
- iTransportController->CancelTransfers();
- SetConnectState(EConnTransport);
- iCurrentOperation = EOpIdle;
- }
-
-/**
-Change the state of the authentication state machine
-@param aNewState New state
-@internalComponent
-*/
-void CObex::SetConnectState(TConnectState aNewState)
- {
- switch(iConnectState = aNewState)
- {
- case EConnIdle:
- FLOG(_L("### Connection State EConnIdle\r\n"));
- break;
- case EConnTransport:
- FLOG(_L("###### Connection State EConnTransport\r\n"));
- break;
- case ESimpleConnRequest:
- FLOG(_L("######### Connection State ESimpleConnRequest\r\n"));
- break;
- case EConnObex:
- FLOG(_L("######### Connection State EConnObex\r\n"));
- break;
- case EConnChallRxed:
- FLOG(_L("######### Connection State EConnChallRxed\r\n"));
- break;
- case ESimpleConnChallIssued:
- FLOG(_L("######### Connection State ESimpleConnChallIssued\r\n"));
- break;
- case EChallConnRequested:
- FLOG(_L("######### Connection State EChallConnRequested\r\n"));
- break;
- case EChallConnChallIssued:
- FLOG(_L("######### Connection State EChallConnChallIssued\r\n"));
- break;
- case EWaitForFinalResponse:
- FLOG(_L("######### Connection State EWaitForFinalResponse\r\n"));
- break;
- case EFinalChallRxed:
- FLOG(_L("######### Connection State EConnChallReIssued\r\n"));
- break;
- case EDropLink:
- FLOG(_L("######### Connection State EDropLink\r\n"));
- break;
- default:
- break;
- }
- }
-
-// CObex::TSetPathInfo
-/**
-Constructor.
-
-This is the path information used in the SETPATH command.
-The variable iFlags is set to zero by default. The variable iConstants is always set to zero as this is a reserved
-varaible. The path name is NOT present by default.
-
-@publishedAll
-@released
-*/
-EXPORT_C CObex::TSetPathInfo::TSetPathInfo()
- {
- LOG_LINE
- LOG_FUNC
-
- iFlags = 0;
- iConstants = 0;
- iNamePresent = EFalse;
- }
-
-/**
-@internalComponent
-*/
-CObex::TSetPathInfo::TSetPathInfo(const TObexSetPathData& aData)
- : iFlags(aData.iFlags), iConstants(aData.iConstants), iNamePresent(EFalse)
- {
- }
-
-/**
-Returns true if the flags are set so that the receiver will backup a level before applying the path name
-
-@return ETrue if the flags are set so that the receiver will backup a level before applying the path name othewise EFalse.
-
-@publishedAll
-@released
-*/
-EXPORT_C TBool CObex::TSetPathInfo::Parent() const
- {
- LOG_LINE
- LOG_FUNC
-
- return(iFlags & KObexSetPathParent);
- }
-
-// CObex
-/**
-Returns ETrue if this CObex is connected at an OBEX level, merely having
-a transport connected does not satisfy this condition. I.e. the two devices
-must have completed the OBEX connection request/response . All other states
-return EFalse. This will be unreliable if either the server blindly
-returns the client’s who header (always reporting ETrue), or if neither
-supply "who" headers (always reporting EFalse).
-
-@return ETrue if this CObex is connected at an OBEX level. EFalse otherwise.
-@publishedAll
-@released
-*/
-EXPORT_C TBool CObex::IsConnected() const
- {
- LOG_LINE
- LOG_FUNC
-
- return(GetConnectState() == EConnObex);
- }
-
-/**
-@return ETrue if the "who" header specified in the server’s connect response
- matched that of the client’s connect request, and both had a length greater
- than 0 (i.e. both specified a "who" field). Undefined if IsConnected() == EFalse.
-
-@publishedAll
-@released
-*/
-EXPORT_C TBool CObex::IsStrictPeer() const
- {
- LOG_LINE
- LOG_FUNC
-
- return((iLocalInfo.iWho.Length()>0) && (iLocalInfo.iWho==iRemoteInfo.iWho));
- }
-
-/**
-Use this member to gain access to (and alter, if necessary) the
-CObex::TConnectInfo structure which will be sent to the OBEX peer as part
-of the connection process. Only alter the contents of this having read and
-understood the purpose of the fields, as defined in the OBEX spec. Altering
-this structure after a connection has been made will have no effect on the
-current session, but will be used for future connection attempts.
-
-@return The connect info which will be sent to the OBEX peer.
-@publishedAll
-@released
-*/
-EXPORT_C const TObexConnectInfo& CObex::LocalInfo() const
- {
- LOG_LINE
- LOG_FUNC
-
- return(iLocalInfo);
- }
-
-/**
-Use this member to read the details of the remote machine’s connection
-information, as specified by it in during OBEX connection. This data can
-not be altered, as this serves no purpose.
-The content of this structure is undefined when @see IsConnected () ==
-EFalse.
-
-@return The connect info from the remote machine.
-@publishedAll
-@released
-*/
-EXPORT_C const TObexConnectInfo& CObex::RemoteInfo() const
- {
- LOG_LINE
- LOG_FUNC
-
- return(iRemoteInfo);
- }
-
-/**
-This function is in the protected scope of CObex and so is not externally usable
-@publishedAll
-@released
-*/
-EXPORT_C CObex::TConnectState CObex::ConnectState() const
- {
- LOG_LINE
- LOG_FUNC
-
- // This function is exported but protected, making it not much use
- // Making it public, and exposing more information about the authentication
- // state machine is undesirable, but a public function is required for other
- // classes in the DLL. Thus another public, unexported function has been defined
- // on to which this function chains.
- return GetConnectState();
- };
-
-/**
-Get the current state of the authentication state machine
-@internalComponent
-*/
-CObex::TConnectState CObex::GetConnectState() const
- {
- LOG_LINE
- LOG_FUNC
-
- return iConnectState;
- };
-
-/**
-Must be called by an application that wishes to suppress the authentication or(not excusive) the realm of the authentication challenge
-@param aSuppressedObexAuthElements enum TObexSuppressedAuthElements to indicate which header elements to surpress (if any)
-@panic KErrArgument if invalid value is passed in for enum
-@publishedAll
-@released
-*/
-EXPORT_C void CObex::SuppressAuthenticationHeaderElements(TObexSuppressedAuthElements aSuppressedObexAuthElements)
- {
- LOG_LINE
- LOG_FUNC
-
- // If the value passed in is not a valid bitmask then panic
- _LIT(panicText, "Invalid bitmask passed to CObex::SuppressAuthenticationHeaderElements");
- __ASSERT_ALWAYS((!(aSuppressedObexAuthElements > EObexSuppressAllAuthElements)), User::Panic(panicText, KErrArgument));
-
- iSuppressedObexAuthElements = aSuppressedObexAuthElements;
-
- };