diff -r 000000000000 -r f5a58ecadc66 upnp/upnpstack/dlnawebserver/src/upnphttpservertransaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnp/upnpstack/dlnawebserver/src/upnphttpservertransaction.cpp Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,200 @@ +/** @file + * Copyright (c) 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: CUpnpHttpServerTransaction implementation. + * + */ + +#include +#include "upnpcons.h" +#include "upnphttpservertransaction.h" +#include "upnphttpmessage.h" +#include "upnpfileutils.h" +#include "upnphttpservertransactioncreator.h" +#define KLogFile _L("DLNAWebServer.txt") +#include "upnpcustomlog.h" +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::CUpnpHttpServerTransaction +// +// --------------------------------------------------------------------------- +// +EXPORT_C CUpnpHttpServerTransaction::CUpnpHttpServerTransaction() + { + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::~CUpnpHttpServerTransaction +// +// --------------------------------------------------------------------------- +// +EXPORT_C CUpnpHttpServerTransaction::~CUpnpHttpServerTransaction() + { + iHeaderBuffer.Close(); + iFile.Close(); + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::SetDataSourceL +// used for GET +// --------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerTransaction::SetDataSourceL( RFile& aFile ) + { + iFile.Close(); + iFile = aFile; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::SetDataSinkL +// used for POST +// --------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerTransaction::SetDataSinkL( RFile& aFile ) + { + iFile.Close(); + iFile = aFile; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::DataSource +// used for GET +// --------------------------------------------------------------------------- +// +RFile& CUpnpHttpServerTransaction::DataSource() + { + return iFile; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::DataSink +// used for POST +// --------------------------------------------------------------------------- +// +RFile& CUpnpHttpServerTransaction::DataSink() + { + return iFile; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::AddResponseHeaderL +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerTransaction::AddResponseHeaderL( const TDesC8& aName, + const TDesC8& aValue ) + { + TInt newLength = iHeaderBuffer.Length() + aValue.Length() + + UpnpString::KDoubleLineFeed().Length(); + TBool nameUsed = ( aName != KNullDesC8() ); + TInt dlfLen = UpnpString::KDoubleLineFeed().Length(); + + if ( iHeaderBuffer.Right( dlfLen ).Compare( UpnpString::KDoubleLineFeed() ) == 0 ) + { // if buffer ends with double line feed then remove it and append line feed + iHeaderBuffer.Delete( iHeaderBuffer.Length() - dlfLen, dlfLen ); + iHeaderBuffer.Append( UpnpString::KLineFeed() ); + } + + if ( nameUsed ) + { + newLength += UpnpString::KColon().Length() + UpnpString::KSpace().Length() + + aName.Length(); + } + + iHeaderBuffer.ReAllocL( newLength ); + + if ( nameUsed ) + { + iHeaderBuffer.Append( aName ); + iHeaderBuffer.Append( UpnpString::KColon() ); + iHeaderBuffer.Append( UpnpString::KSpace() ); + } + else + { + iHeaderBuffer.Zero(); + } + + iHeaderBuffer.Append( aValue ); + iHeaderBuffer.Append( UpnpString::KLineFeed() ); + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::QueryResponseHeader +// +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CUpnpHttpServerTransaction::QueryResponseHeader() + { + if ( iHeaderBuffer.Find( UpnpString::KDoubleLineFeed() ) == KErrNotFound ) + { + if ( iHeaderBuffer.Right( UpnpString::KLineFeed().Length() ). + Compare( UpnpString::KLineFeed() ) == 0 ) + { + if ( iHeaderBuffer.ReAlloc( iHeaderBuffer.Length() + + UpnpString::KLineFeed().Length() ) == KErrNone ) + { + iHeaderBuffer.Append( UpnpString::KLineFeed() ); + } + } + else + { + if ( iHeaderBuffer.ReAlloc( iHeaderBuffer.Length() + + UpnpString::KDoubleLineFeed().Length() ) == KErrNone ) + { + iHeaderBuffer.Append( UpnpString::KDoubleLineFeed() ); + } + } + } + return iHeaderBuffer; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::SetHttpCode +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerTransaction::SetHttpCode( TInt aCode ) + { + iHttpCode = aCode; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::QueryRequestHeader +// +// --------------------------------------------------------------------------- +// +EXPORT_C TDesC8& CUpnpHttpServerTransaction::QueryRequestHeader( const TDesC8& aHeaderName ) + { + return iRequest->GetHeaderValue( aHeaderName ); + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::Error +// +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CUpnpHttpServerTransaction::Error() + { + return iHttpCode; + } + +// --------------------------------------------------------------------------- +// CUpnpHttpServerTransaction::SetRequest +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CUpnpHttpServerTransaction::SetRequest( CUpnpHttpMessage* aRequest ) + { + iRequest = aRequest; + } + +