This release addresses the following issues:
1. The crash bug fix when receiving file
2. Now the sending is based on MSRP messages, there is no longer file receiving or sending. Client sends data as MSRP was designed.
3. Soma MSRP stack was created so that the client told the correct session-id, Symbian stack generated it by itself. This is not allowed, it was changed so that clients tell the session-id (same as used in SIP INVITE).
4. Unnecessary division of data to chunks removed when there is no need to interrupt sending. The message is sent in as few chunks as possible.
5. Stack can now receive files and chunks with ?unlimited? size. Old stack wrote the incoming data to memory and did not utilize disk space until the end of chunk was reached (large chunks from another client crashed it).
6. Now when writing the incoming data to file, it will take into account the byte-range header values. So, this complies with the RFC4975 requirements that stack must be able to handle chunks that come in any sequence.
7. Some buffering changes to outgoing/incoming data.
8. The outgoing data is now checked that it does not contain the created transaction-id before sending the data.
9. MSRP success reports are now implemented and tested against servers.
10. Progress report system fixed so progress is now visible on client (all the way to 100%).
11. Message Cancel receiving / Cancel sending now corrected and made to work as rfc4975 requires. (termination from sender and error code from receiver when cancelling).
12. Bug correction related to messages received not belonging to any session, old stack implementation did send error response, but after response was written it did give the buffer to client anyway. Now corrected.
/*
* Copyright (c) 2003-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:
* Name : SdpUtil.h
* Part of : SDP Codec
* Interface : -
* Version : 1.0
*
*/
/**
@internalComponent
*/
#ifndef SDPUTIL_H
#define SDPUTIL_H
// INCLUDES
#include <e32base.h>
#include <stringpool.h>
#include <e32std.h>
#include "_sdpdefs.h"
// FORWARD DECLARATIONS
class RReadStream;
class RWriteStream;
class CSdpConnectionField;
class CSSdpKeyField;
class CSdpOriginField;
class TInetAddr;
// CLASS DECLARATION
/**
* Common utilities used in the implementation of the SDP codec.
* Utility class, cannot be instantiated
*/
class SdpUtil
{
public: // New functions
/**
* Generic method that checks that all aValue's chars are not on illegal charset
*
* @param aIllegalChars Illegal character set
* @param aValue String to be checked
* @param aStart Start position of the string
* @param aEnd End position of the string
* @return Validity of the string
*/
static TBool IsValidCharSet(
const TDesC8& aIllegalChars, const TDesC8& aValue, TInt aStart, TInt aEnd );
/**
* Checks that token list is valid (tokens with space as delimiter)
*
* @param aValue String containing tokens
* @return Validity of the string
*/
static TBool IsTokenList( const TDesC8& aValue );
/**
* Checks that the token is valid (substring inside string)
*
* @param aValue String containing the token
* @param aStart Start position of the token inside the string
* @param aEnd End position of the token inside the string
* @return Validity of the token
*/
static TBool IsToken( const TDesC8& aValue, TInt aStart, TInt aEnd );
/**
* Checks that the token is valid
*
* @param aValue Token string
* @return Validity of the token
*/
static TBool IsToken( const TDesC8& aValue );
/**
* Checks that the byte string is valid (substring inside string)
*
* @param aValue String
* @param aStart Start position of the byte string inside the string
* @param aEnd End position of the byte string inside the string
* @return Validity of the byte string
*/
static TBool IsByteString( const TDesC8& aValue, TInt aStart, TInt aEnd );
/**
* Checks that the byte string is valid
*
* @param aValue String containing the token
* @return Validity of the byte string
*/
static TBool IsByteString( const TDesC8& aValue );
/**
* Checks that the substring is a token-byte string pair with colon char
* as delimiter of the two strings
*
* @param aValue String containing the pair
* @param aStart Start position of the string pair
* @param aEnd End position of the string pair
* @return Validity of the pair
*/
static TBool IsTokenTextPair(
const TDesC8& aValue, TInt aStart, TInt aEnd );
/**
* Checks that the string conatins valid token-byte string pair with color
* char as delimiter of the two strings
*
* @param aValue String containing the pair
* @return Validity of the byte string
*/
static TBool IsTokenTextPair( const TDesC8& aValue );
/**
* Checks that the string does not contain any whitespace characters
*
* @param aValue String
* @return Validity of the string
*/
static TBool IsNonWhitespace( const TDesC8& aValue );
/**
* Checks that the string contains a valid NTP-time element
*
* @param aValue String
* @return Validity of the string
*/
static TBool IsValidNtpTime( const TDesC8& aValue );
/**
* Divides the buffer into a number of lines. Each line is marked
* as a TPtrC8 object and added to array that is returned to the user
* NOTE! Each line in the returned array ends in LF character
* NOTE! The aLines must end in LF character, not '\0' character
*
* @param aLines Buffer that contains all the string
* @param aErrCode Error code that is used on leave situations, when the
* aLines parameter contains invalid string set
* @return Array that contains the division of buffer to lines
*/
static RArray<TPtrC8> DivideToLinesL(
const TDesC8& aLines, TInt aErrCode );
/**
* Parses elements from each line. The first item in the returned array
* is the field attribute and equal character (e.g. "a=", "c="), following
* elements are parsed from the string using space character as delimiter
*
* @param aLine String containing line that ends to LF character
* @param aErrCode Error code that is used on leave situations, when
* the contents of aLine are illegal
* @return Array that contains the division of string to elements
*/
static RArray<TPtrC8> GetElementsFromLineL(
const TDesC8& aLine, TInt aErrCode );
/**
* Parses elements from each line. The first item in the returned array
* is the field attribute and equal character (e.g. "a=", "c="), following
* elements are parsed from the string using aDelimiter as delimiter
*
* @param aLine String containing line that ends to LF character
* @param aDelimiter Delimiter character
* @param aErrCode Error code that is used on leave situations, when
* the contents of aLine are illegal
* @return Array that contains the division of string to elements
*/
static RArray<TPtrC8> GetElementsFromLineL(
const TDesC8& aLine, TChar aDelimiter, TInt aErrCode );
/**
* Parses elements from each line. The first item in the returned array
* is the field attribute and equal character (e.g. "a=", "c="), following
* elements are parsed from the string using space character as delimiter
*
* @param aLexer Lexer that has been initialized with the string
* @param aErrCode Error code that is used on leave situations, when
* the contents of aLine are illegal
* @return Array that contains the division of string to elements
*/
static RArray<TPtrC8> GetElementsFromLineL(
TLex8& aLexer, TChar aDelimiter, TInt aErrCode );
/**
* Checks if the string contains only POS-DIGIT characters
*
* @param aDes String
* @return Validity of POS-DIGIT string
*/
static TBool IsPosDigit( const TDesC8& aDes );
/**
* Checks if the string contains only DIGIT characters
*
* @param aDes String
* @return Validity of DIGIT string
*/
static TBool IsDigit( const TDesC8& aDes );
/**
* Checks if the string contains valid characters
*
* @param aValidChars Valid characters allowed in the string
* @param aDes String
* @return Validity of the string
*/
static TBool IsValidChars( const TDesC8& aValidChars, const TDesC8& aDes );
/**
* Checks if the string contains only token characters
*
* @param aValue String
* @return Validity of the string
*/
static TBool IsTokenChar( const TDesC8& aValue );
/**
* Checks if the character is a valid token character
*
* @param aChar Character
* @return Validity of the character
*/
static TBool IsTokenChar( TChar aChar );
/**
* Checks if the string is a valid token. The string can contain slash character,
* which divides the line into two tokens. The two tokens are then individually
* verified.
*
* @param aValue String
* @return Validity of the string
*/
static TBool IsTokenCharWithOptionalSlash( const TDesC8& aValue );
/**
* Checks if the string is a valid token. The string can contain space characters,
* which divides the string into a number of tokens. Each token is then individually
* verified.
*
* @param aValue String
* @return Validity of the string
*/
static TBool IsTokenCharWithSpacesL( const TDesC8& aValue );
/**
* Checks if the string is a valid token. The string can contain slash character,
* which divides the line into two tokens. The two tokens are then individually
* verified.
*
* @param aValue String
* @return Validity of the string
*/
static void EncodeBufferL(
const TDesC8& aValue, TInt aIndex, RWriteStream& aStream );
/**
* Sets default network type ("IN") and default address type ("IP4" or "IP6")
* to variables given as parameters
*
* @param aPool String pool
* @param aInetAddr Internet address
* @param aNetType Network type
* @param aAddressType Address type
*/
static void SetDefaultNetTypeAndAddrType(
RStringPool aPool, const TInetAddr& aAddress,
RStringF& aNetType, RStringF& aAddressType );
/**
* Skips spaces until next line break, if the line break can be found.
* @param aLexer
* @return ETrue if the line break was found, otherwise EFalse.
*/
static TBool SkipSpacesUntilNextLineBreak( TLex8& aLexer );
private:
/**
* After the field tag has been parsed out, all the field elements are
* parsed in this method
*
* @param aArray Reference to the array that contains the chopped elements
* @param aLexer Used lexer
* @param aDelimiter Delimiter character that determines the separation of elements
* @param aErrCode The error code that is used on leaves, when the argument is invalid
*/
static void ChopElementsFromLineL(
RArray<TPtrC8>& aArray, TLex8& aLexer, TChar aDelimiter, TInt aErrCode );
/**
* Private constructor
* This class can never be instantiated
*/
SdpUtil();
};
#endif