--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/ocsp/transport/transportdefault.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,130 @@
+// Copyright (c) 2001-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:
+// COCSPTransportDefault. Looks at the URI and creates appropriate transport
+// object to send the request.
+//
+//
+
+#include <ocsptransport.h>
+#include "panic.h"
+#include "ocsp.h"
+
+#include <uri8.h>
+
+_LIT8(KHttpString, "http");
+
+EXPORT_C COCSPTransportDefault* COCSPTransportDefault::NewL(TUint32& aIap)
+ {
+ COCSPTransportDefault* self = new (ELeave) COCSPTransportDefault(aIap);
+ return self;
+ }
+
+COCSPTransportDefault::COCSPTransportDefault(TUint32& aIap)
+ : iIap(aIap)
+ {
+ }
+
+COCSPTransportDefault::~COCSPTransportDefault()
+ {
+ delete iTransport;
+ }
+
+void COCSPTransportDefault::SendRequest(const TDesC8& aURI,
+ const TDesC8& aRequest,
+ const TInt aTimeout,
+ TRequestStatus& iStatus)
+ {
+ TRAPD(err, CreateTransportL(aURI));
+ if (err)
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, err);
+ }
+ else
+ {
+ iTransport->SendRequest(aURI, aRequest, aTimeout, iStatus);
+ }
+ }
+
+void COCSPTransportDefault::CancelRequest()
+ {
+ if (iTransport)
+ {
+ iTransport->CancelRequest();
+ }
+ }
+
+TPtrC8 COCSPTransportDefault::GetResponse() const
+ {
+ ASSERT(iTransport);
+ return iTransport->GetResponse();
+ }
+
+COCSPTransportDefault::TTransportScheme COCSPTransportDefault::IdentifySchemeL(const TDesC8& aURI)
+ {
+ TTransportScheme ret = ETransportSchemeNotSupported;
+
+ TUriParser8 uri;
+ TInt error = uri.Parse(aURI);
+ if (error != KErrNone || !uri.IsPresent(EUriScheme))
+ {
+ return ret;
+ }
+ const TPtrC8 scheme = uri.Extract(EUriScheme);
+
+ RStringPool stringPool;
+ stringPool.OpenL();
+ CleanupClosePushL(stringPool);
+
+ RStringF schemeF = stringPool.OpenFStringL(scheme);
+ CleanupClosePushL(schemeF);
+ RStringF httpF = stringPool.OpenFStringL(KHttpString);
+ CleanupClosePushL(httpF);
+
+ if (schemeF == httpF)
+ {
+ ret = ETransportSchemeHTTP;
+ }
+
+ CleanupStack::PopAndDestroy(3); // close httpF, schemeF, stringPool
+
+ return ret;
+ }
+
+
+void COCSPTransportDefault::CreateTransportL(const TDesC8& aURI)
+ {
+ TTransportScheme scheme = IdentifySchemeL(aURI);
+
+ if (iTransport && iScheme == scheme)
+ {
+ return; // reuse existing transport
+ }
+
+ delete iTransport;
+ iTransport = NULL;
+
+ switch (scheme)
+ {
+ case ETransportSchemeHTTP:
+ iTransport = COCSPTransportHttp::NewL(aURI, iIap);
+ break;
+
+ default:
+ User::Leave(OCSP::KErrInvalidURI);
+ break;
+ }
+
+ iScheme = scheme;
+ }