williamr@2: /* williamr@2: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * Name : siprequestelements.h williamr@2: * Part of : SIP Client williamr@2: * Interface : SDK API, SIP API williamr@2: * Version : 1.0 williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: #ifndef CSIPREQUESTELEMENTS_H williamr@2: #define CSIPREQUESTELEMENTS_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CSIPMessageElements; williamr@2: class CSIPFromHeader; williamr@2: class CSIPToHeader; williamr@2: class CSIPCSeqHeader; williamr@2: class CURIContainer; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * @publishedAll williamr@2: * @released williamr@2: * williamr@2: * Class provides functions for creation and manipulation of originator's and williamr@2: * recipient's addresses in a SIP request. It also provide functions for williamr@2: * manipulation of SIP method for unknown SIP requests. williamr@2: * @lib sipclient.lib williamr@2: */ williamr@2: class CSIPRequestElements : public CBase williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: /** williamr@2: * Two-phased constructor. williamr@2: * If the URI is SIP URI, no SIP URI headers are allowed. williamr@2: * @pre aRemoteURi != 0 williamr@2: * @param aRemoteUri Remote target URI that identifies a resource that williamr@2: * the request is addressed to. The ownership is transferred. williamr@2: */ williamr@2: IMPORT_C static CSIPRequestElements* NewL(CUri8* aRemoteUri); williamr@2: williamr@2: /** williamr@2: * Two-phased constructor. williamr@2: * If the URI is SIP URI, no SIP URI headers are allowed. williamr@2: * @pre aRemoteURi != 0 williamr@2: * @param aRemoteUri Remote target URI that identifies a resource that williamr@2: * the request is addressed to. The ownership is transferred. williamr@2: */ williamr@2: IMPORT_C static CSIPRequestElements* NewLC(CUri8* aRemoteUri); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C ~CSIPRequestElements(); williamr@2: williamr@2: public: // New functions williamr@2: /** williamr@2: * Sets/resets the recipient's To-header williamr@2: * To-header must not contain tag-parameter. williamr@2: * @pre aTo != 0 williamr@2: * @param aTo a To-header to be set, the ownership is transferred. williamr@2: */ williamr@2: IMPORT_C void SetToHeaderL(CSIPToHeader* aTo); williamr@2: williamr@2: /** williamr@2: * Gets the recipient's To-header williamr@2: * @return To-header or a 0-pointer if not present. Ownership is not williamr@2: * transferred. williamr@2: */ williamr@2: IMPORT_C const CSIPToHeader* ToHeader() const; williamr@2: williamr@2: /** williamr@2: * Sets/resets the originator's From-header. williamr@2: * From-header must not contain tag-parameter. williamr@2: * @pre aFrom != 0 williamr@2: * @param aFrom a From-header to be set, the ownership is transferred. williamr@2: * @leave KErrArgument if aFrom == 0 williamr@2: */ williamr@2: IMPORT_C void SetFromHeaderL(CSIPFromHeader* aFrom); williamr@2: williamr@2: /** williamr@2: * Gets the originator's From-header williamr@2: * @return From-header or a 0-pointer if not present. Ownership is not williamr@2: * transferred. williamr@2: */ williamr@2: IMPORT_C const CSIPFromHeader* FromHeader() const; williamr@2: williamr@2: /** williamr@2: * Gets CSeq-header. Available for only incoming requests. williamr@2: * @return a CSeq-header or a 0-pointer if not present. williamr@2: * Ownership is not transferred. williamr@2: */ williamr@2: IMPORT_C const CSIPCSeqHeader* CSeqHeader() const; williamr@2: williamr@2: /** williamr@2: * Sets the remote URI. williamr@2: * If the URI is a SIP URI, no SIP URI headers are allowed. williamr@2: * @pre aRemoteUri != 0 williamr@2: * @param aRemoteUri williamr@2: * @leave KErrArgument if aRemoteUri==0 williamr@2: */ williamr@2: IMPORT_C void SetRemoteUriL(CUri8* aRemoteUri); williamr@2: williamr@2: /** williamr@2: * Gets the remote target URI williamr@2: * @return remote target URI williamr@2: */ williamr@2: IMPORT_C const CUri8& RemoteUri() const; williamr@2: williamr@2: /** williamr@2: * Sets the SIP request method williamr@2: * @param aMethod a SIP method name. williamr@2: * @leave KErrArgument if method name given is syntactically williamr@2: * incorrect williamr@2: */ williamr@2: IMPORT_C void SetMethodL(RStringF aMethod); williamr@2: williamr@2: /** williamr@2: * Gets the SIP Method for a request williamr@2: * @return a SIP method name or a an empty string if the method williamr@2: * is not defined williamr@2: */ williamr@2: IMPORT_C RStringF Method() const; williamr@2: williamr@2: /** williamr@2: * Gets message elements (contains all SIP user headers and content) williamr@2: * @return message elements williamr@2: */ williamr@2: IMPORT_C const CSIPMessageElements& MessageElements() const; williamr@2: williamr@2: /** williamr@2: * Gets message elements (contains all SIP user headers and content) williamr@2: * The response elements can be populated with SIP user headers williamr@2: * and content using returned reference to the message elements. williamr@2: * @return message elements williamr@2: */ williamr@2: IMPORT_C CSIPMessageElements& MessageElements(); williamr@2: williamr@2: public: // New functions, for internal use williamr@2: static CSIPRequestElements* InternalizeL (RReadStream& aReadStream); williamr@2: void ExternalizeL (RWriteStream& aWriteStream) const; williamr@2: williamr@2: private: williamr@2: CSIPRequestElements(); williamr@2: void ConstructL(CUri8* aRemoteUri); williamr@2: void DoInternalizeL(RReadStream& aReadStream); williamr@2: williamr@2: private: // Data williamr@2: RStringF iMethod; williamr@2: CURIContainer* iRemoteURI; williamr@2: CSIPMessageElements* iMessageElements; williamr@2: williamr@2: private: // For testing purposes williamr@4: #ifdef CPPUNIT_TEST williamr@4: friend class CSIPRequestElementsTest; williamr@4: #endif williamr@2: }; williamr@2: williamr@2: #endif