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@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2: * which accompanies this distribution, and is available
williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.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 <e32base.h>
williamr@2: #include <s32strm.h>
williamr@2: #include <stringpool.h>
williamr@2: #include <uri8.h>
williamr@2: #include "_sipcodecdefs.h"
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@2:         UNIT_TEST(CSIPRequestElementsTest)
williamr@2:     };
williamr@2: 
williamr@2: #endif