diff -r 000000000000 -r af10295192d8 networksecurity/tls/protocol/applicationdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tls/protocol/applicationdata.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,189 @@ +/** +* Copyright (c) 2003-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: +* SSL3.0 and TLS1.0 Application data header file. +* This file describes the Application data (transmission and reception) +* state machines. +* +* +*/ + + + +/** + @file ApplicationData.h +*/ + +#ifndef _APPLICATIONDATA_H_ +#define _APPLICATIONDATA_H_ + +#include +#include "LOGFILE.H" +#include "tlsconnection.h" + +class CRecordComposer; +class CSendAlert; +class CHelloRequest; +class CSendAppData : public CStateMachine +/** + * Describes a state machine which sends an Application's data to a remote server. + */ +{ +public: + static CSendAppData* NewL( CRecordComposer& aRecordComposer ); + ~CSendAppData(); + void Start( TRequestStatus* aClientStatus, MStateMachineNotify* aStateMachineNotify ); + + // These are called by CTlsConnection when a re-negotiation request comes through. + void Suspend(); + void ResumeL(); + + void SetUserData( TDesC8* aAppData ); + void SetSockXfrLength( TInt* aLen ); + CSendAlert* SendAlert() const; + + void SetHelloRequest( CHelloRequest* aHelloReq ); + +protected: + CSendAppData( CRecordComposer& aRecordComposer ); + void ConstructL( CRecordComposer& aRecordComposer ); + + virtual void DoCancel(); + virtual void OnCompletion(); + +protected: + TDesC8* iAppData; // Keeps app buffer to send data from during re-negotiation + TInt iCurrentPos; // Keeps CRecordComposer::iCurrentPos during re-negotiation + TInt* iSockXfrLength; + CRecordComposer& iRecordComposer; + CSendAlert* iSendAlert; + CHelloRequest* iHelloReq; //to check whether hello req's been received and is waiting for + //a record to be sent to start renegotiation - reference only no ownership +}; + + +///////////////////////////////////////////////////////////////////////////////////////////// + + +class CRecordParser; +class CTlsConnection; +class CRecvAppData : public CStateMachine +/** + * Describes a state machine which receives data from a + * remote server, intended for an Application using a Secure socket. + */ +{ +public: + static CRecvAppData* NewL( CTlsConnection& aTlsConnection ); + ~CRecvAppData(); + void Start( TRequestStatus* aClientStatus, MStateMachineNotify* aStateMachineNotify ); + + // These are called by CTlsConnection when a re-negotiation request comes through + void Suspend(); + void ResumeL( CTlsConnection& aTlsConnection ); + + CSendAlert* SendAlert() const; + void SetSockXfrLength( TInt* aLen ); + + CHelloRequest* HelloRequest() const; + +protected: + CRecvAppData( CTlsConnection& aTlsConnection ); + void ConstructL( CTlsConnection& aTlsConnection ); + + virtual void DoCancel(); + virtual void OnCompletion(); + +protected: + TPtr8 iHeldData; // Keeps CRecordParser::iHeldData (ptr in CStateMachine::iFragment) + // during re-negotiation (marks a point in CStateMachine::iFragment) + TDes8* iAppData; // Keeps app buffer to receive data into during re-negotiation + TInt* iSockXfrLength; + + CRecordParser& iRecordParser; + CSendAlert* iSendAlert; + CHelloRequest* iHelloReq; //to check whether hello req's been received and is waiting for + //a record to be sent to start renegotiation - reference only no ownership +}; + + + +// Inline methods - CSendAppData class +inline void CSendAppData::Start( TRequestStatus* aClientStatus, MStateMachineNotify* aStateMachineNotify ) +/** + * Starts the 'Send Application data' state machine by calling the + * Start() method of the base state machine class (CStateMachine). + * + * @param aClientStatus Pointer to a TRequestStatus object that completes when + * data transmission is complete. + * @param aStateMachineNotify Pointer to a MStateMachineNotify interface object. + */ +{ + LOG(Log::Printf(_L("CSendAppData::Start()\n"));) + CStateMachine::Start( aClientStatus, (CAsynchEvent*)(iSendAlert), aStateMachineNotify ); +} + +inline CSendAlert* CSendAppData::SendAlert() const +{ + LOG(Log::Printf(_L("CSendAppData::SendAlert()\n"));) + return iSendAlert; +} + +inline void CSendAppData::SetUserData( TDesC8* aAppData ) +{ + LOG(Log::Printf(_L("CSendAppData::SetUserData()\n"));) + + __ASSERT_DEBUG( iCurrentPos == 0, TlsPanic( ETlsPanicUserDataAlreadySet) ); + iAppData = aAppData; +} + +inline void CSendAppData::SetHelloRequest( CHelloRequest* aHelloReq ) +{ + iHelloReq = aHelloReq; +} + + +// Inline methods - CRecvAppData class +inline void CRecvAppData::Start( TRequestStatus* aClientStatus, MStateMachineNotify* aStateMachineNotify ) +/** + * Starts the 'Receive Application data' state machine by calling the + * Start() method of the base state machine class (CStateMachine). + * + * @param aClientStatus Pointer to a TRequestStatus object that completes when + * data reception is complete. + * @param aStateMachineNotify Pointer to a MStateMachineNotify interface object. + */ +{ + LOG(Log::Printf(_L("CRecvAppData::Start()\n"));) + CStateMachine::Start( aClientStatus, (CAsynchEvent*)iSendAlert, aStateMachineNotify ); +} + +inline void CRecvAppData::SetSockXfrLength( TInt* aLen ) +{ + LOG(Log::Printf(_L("CRecvAppData::SetSockXfrLength()\n"));) + iSockXfrLength = aLen; +} + +inline CHelloRequest* CRecvAppData::HelloRequest() const +{ + return iHelloReq; +} + +inline CSendAlert* CRecvAppData::SendAlert() const +{ + LOG(Log::Printf(_L("CRecvAppData::SendAlert()\n"));) + return iSendAlert; +} + +#endif