/*
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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
 @internalTechnology
*/

#ifndef __OCSPSUPPORT_H__
#define __OCSPSUPPORT_H__

#include <e32std.h>

namespace Swi
{

/// The name of the OCSP Support Server
_LIT(KOcspSupportServerName,"!OCSPSUPPORTSERVER");

/// The name of the OCSP Support Executable
_LIT(KOcspSupportServerExeName,"OCSPSUPPORT");

/// The name of the OCSP Support Thread
_LIT(KOcspSupportServerThreadName,"OCSPSUPPORTSERVER-THREAD");

/// The current version of the OCSP Support Server
const TInt KOcspSupportServerVersionMajor=0;
const TInt KOcspSupportServerVersionMinor=1;
const TInt KOcspSupportServerVersionBuild=0;

/**
 * This class is a handle to the server, which uses HTTP to make the OCSP request
 */
class ROcspHandler : public RSessionBase
	{
	static const TInt KDefaultBufferSize;
public:
	/// Connect to the server	
	TInt Connect();
	
	/// Close the connection tothe server
	void Close();
	
	/// Cancel the OCSP request
	void CancelRequest();
	
	/**
	 * Get the response data from the OCSP request. This is only valid when SendRequest
	 * has been called, and completed with no error. Ownership is transferred to client.
	 *
	 * @param	aIapOut		The IAP that was used in this request
	 * @return	The body of the OCSP response
	 */
	TPtrC8 GetResponseL(TUint32& aIapOut) const;
	
	/**
	 * Send an OCSP request, using the server.
	 * @param	aUri		The URI of the server to send the request to.
	 * @param	aRequest	The request data to send.
	 * @param	aTimeout	The request timeout value in milliseconds
	 * @param	aIap		The IAP to use for this OCSP request
	 * @param	aStatus		Request status. On completion contains an error code.
	 */
	void SendRequest(const TDesC8& aUri, const TDesC8& aRequest, const TInt aTimeout, TUint32 aIap, TRequestStatus& aStatus);

private:
	/// Starts the server which carries out the requests
	TInt StartServer();
	
	
	mutable HBufC8* iResultData;
	};

} // namespace Swi

#endif // #ifndef __OCSPSUPPORT_H__
