/* * * @APPLE_LICENSE_HEADER_START@ * * Copyright (c) 1999-2008 Apple Inc. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ * */ /* File: SDPUtils.h Contains: Some static routines for dealing with SDPs */ #ifndef __SDPUtilsH__ #define __SDPUtilsH__ #include "OS.h" #include "StrPtrLen.h" #include "ResizeableStringFormatter.h" #include "StringParser.h" #include "OSMemory.h" class SDPLine : public StrPtrLen { public: SDPLine() {} virtual ~SDPLine() {} char GetHeaderType() {if (Ptr && Len) return this->Ptr[0]; return 0;} }; class SDPContainer { enum { kBaseLines = 20, kLineTypeArraySize = 256}; enum { kVPos = 0, kSPos, kTPos, kOPos }; enum { kV = 1 << kVPos, kS = 1 << kSPos, kT = 1 << kTPos, kO = 1 << kOPos, kAllReq = kV | kS | kT | kO }; public: SDPContainer(UInt32 numStrPtrs = SDPContainer::kBaseLines) : fNumSDPLines(numStrPtrs), fSDPLineArray(NULL) { Initialize(); } ~SDPContainer() {delete [] fSDPLineArray;} void Initialize(); SInt32 AddHeaderLine (StrPtrLen *theLinePtr); SInt32 FindHeaderLineType(char id, SInt32 start); SDPLine* GetNextLine(); SDPLine* GetLine(SInt32 lineIndex); void SetLine(SInt32 index); void Parse(); Bool16 SetSDPBuffer(char *sdpBuffer); Bool16 SetSDPBuffer(StrPtrLen *sdpBufferPtr); Bool16 IsSDPBufferValid() {return fValid;} Bool16 HasReqLines() { return (Bool16) (fReqLines == kAllReq) ; } Bool16 HasLineType( char lineType ) { return (Bool16) (lineType == fFieldStr[ (UInt8) lineType]) ; } char* GetReqLinesArray; void PrintLine(SInt32 lineIndex); void PrintAllLines(); SInt32 GetNumLines() { return fNumUsedLines; } SInt32 fCurrentLine; SInt32 fNumSDPLines; SInt32 fNumUsedLines; SDPLine* fSDPLineArray; Bool16 fValid; StrPtrLen fSDPBuffer; UInt16 fReqLines; char fFieldStr[kLineTypeArraySize]; // char* fLineSearchTypeArray; }; class SDPLineSorter { public: SDPLineSorter(): fSessionLineCount(0),fSDPSessionHeaders(NULL,0), fSDPMediaHeaders(NULL,0) {}; SDPLineSorter(SDPContainer *rawSDPContainerPtr, Float32 adjustMediaBandwidthPercent = 1.0, SDPContainer *insertMediaLinesArray = NULL); StrPtrLen* GetSessionHeaders() { return &fSessionHeaders; } StrPtrLen* GetMediaHeaders() { return &fMediaHeaders; } char* GetSortedSDPCopy(); Bool16 ValidateSessionHeader(StrPtrLen *theHeaderLinePtr); StrPtrLen fullSDPBuffSPL; SInt32 fSessionLineCount; SDPContainer fSessionSDPContainer; ResizeableStringFormatter fSDPSessionHeaders; ResizeableStringFormatter fSDPMediaHeaders; StrPtrLen fSessionHeaders; StrPtrLen fMediaHeaders; static char sSessionOrderedLines[];// = "vosiuepcbtrzka"; // chars are order dependent: declared by rfc 2327 static char sessionSingleLines[];// = "vosiuepcbzk"; // return only 1 of each of these session field types static StrPtrLen sEOL; static StrPtrLen sMaxBandwidthTag; }; #endif