rtcpsdesinfo.h

Go to the documentation of this file.
00001 /*
00002 
00003   This file is a part of JRTPLIB
00004   Copyright (c) 1999-2007 Jori Liesenborgs
00005 
00006   Contact: jori.liesenborgs@gmail.com
00007 
00008   This library was developed at the "Expertisecentrum Digitale Media"
00009   (http://www.edm.uhasselt.be), a research center of the Hasselt University
00010   (http://www.uhasselt.be). The library is based upon work done for 
00011   my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
00012 
00013   Permission is hereby granted, free of charge, to any person obtaining a
00014   copy of this software and associated documentation files (the "Software"),
00015   to deal in the Software without restriction, including without limitation
00016   the rights to use, copy, modify, merge, publish, distribute, sublicense,
00017   and/or sell copies of the Software, and to permit persons to whom the
00018   Software is furnished to do so, subject to the following conditions:
00019 
00020   The above copyright notice and this permission notice shall be included
00021   in all copies or substantial portions of the Software.
00022 
00023   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00024   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00025   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
00026   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00027   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00028   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
00029   IN THE SOFTWARE.
00030 
00031 */
00032 
00037 #ifndef RTCPSDESINFO_H
00038 
00039 #define RTCPSDESINFO_H
00040 
00041 #include "rtpconfig.h"
00042 #include "rtperrors.h"
00043 #include "rtpdefines.h"
00044 #include "rtptypes.h"
00045 #include "rtpmemoryobject.h"
00046 #include <string.h>
00047 #include <list>
00048 
00050 class RTCPSDESInfo : public RTPMemoryObject
00051 {
00052 public:
00054         RTCPSDESInfo(RTPMemoryManager *mgr = 0) : RTPMemoryObject(mgr)          { for (int i = 0 ; i < RTCP_SDES_NUMITEMS_NONPRIVATE ; i++) nonprivateitems[i].SetMemoryManager(mgr); }
00055         virtual ~RTCPSDESInfo()                                                 { Clear(); }
00056 
00058         void Clear();
00059 
00061         int SetCNAME(const uint8_t *s,size_t l)                                 { return SetNonPrivateItem(RTCP_SDES_ID_CNAME-1,s,l); }
00062 
00064         int SetName(const uint8_t *s,size_t l)                                  { return SetNonPrivateItem(RTCP_SDES_ID_NAME-1,s,l); }
00065 
00067         int SetEMail(const uint8_t *s,size_t l)                                 { return SetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,s,l); }
00068 
00070         int SetPhone(const uint8_t *s,size_t l)                                 { return SetNonPrivateItem(RTCP_SDES_ID_PHONE-1,s,l); }
00071 
00073         int SetLocation(const uint8_t *s,size_t l)                              { return SetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,s,l); }
00074 
00076         int SetTool(const uint8_t *s,size_t l)                                  { return SetNonPrivateItem(RTCP_SDES_ID_TOOL-1,s,l); }
00077 
00079         int SetNote(const uint8_t *s,size_t l)                                  { return SetNonPrivateItem(RTCP_SDES_ID_NOTE-1,s,l); }
00080 
00081 #ifdef RTP_SUPPORT_SDESPRIV
00082 
00086         int SetPrivateValue(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen);
00087 
00089         int DeletePrivatePrefix(const uint8_t *s,size_t len);
00090 #endif // RTP_SUPPORT_SDESPRIV
00091         
00093         uint8_t *GetCNAME(size_t *len) const                                    { return GetNonPrivateItem(RTCP_SDES_ID_CNAME-1,len); }
00094 
00096         uint8_t *GetName(size_t *len) const                                             { return GetNonPrivateItem(RTCP_SDES_ID_NAME-1,len); }
00097 
00099         uint8_t *GetEMail(size_t *len) const                                    { return GetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,len); }
00100 
00102         uint8_t *GetPhone(size_t *len) const                                    { return GetNonPrivateItem(RTCP_SDES_ID_PHONE-1,len); }
00103 
00105         uint8_t *GetLocation(size_t *len) const                                 { return GetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,len); }
00106 
00108         uint8_t *GetTool(size_t *len) const                                             { return GetNonPrivateItem(RTCP_SDES_ID_TOOL-1,len); }
00109 
00111         uint8_t *GetNote(size_t *len) const                                     { return GetNonPrivateItem(RTCP_SDES_ID_NOTE-1,len); }
00112 #ifdef RTP_SUPPORT_SDESPRIV
00113 
00114         void GotoFirstPrivateValue();
00115 
00123         bool GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen);
00124 
00132         bool GetPrivateValue(const uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const;
00133 #endif // RTP_SUPPORT_SDESPRIV
00134 private:
00135         int SetNonPrivateItem(int itemno,const uint8_t *s,size_t l)             { if (l > RTCP_SDES_MAXITEMLENGTH) return ERR_RTP_SDES_LENGTHTOOBIG; return nonprivateitems[itemno].SetInfo(s,l); }
00136         uint8_t *GetNonPrivateItem(int itemno,size_t *len) const                { return nonprivateitems[itemno].GetInfo(len); }
00137 
00138         class SDESItem : public RTPMemoryObject
00139         {
00140         public:
00141                 SDESItem(RTPMemoryManager *mgr = 0) : RTPMemoryObject(mgr)
00142                 {  
00143                         str = 0; 
00144                         length = 0; 
00145                 }
00146                 void SetMemoryManager(RTPMemoryManager *mgr)
00147                 {
00148                         RTPMemoryObject::SetMemoryManager(mgr);
00149                 }
00150                 ~SDESItem()                                                     
00151                 { 
00152                         if (str) 
00153                                 RTPDeleteByteArray(str,GetMemoryManager());
00154                 }
00155                 uint8_t *GetInfo(size_t *len) const                             { *len = length; return str; }
00156                 int SetInfo(const uint8_t *s,size_t len)                        { return SetString(&str,&length,s,len); }
00157         protected:
00158                 int SetString(uint8_t **dest,size_t *destlen,const uint8_t *s,size_t len)
00159                 {
00160                         if (len <= 0)
00161                         {
00162                                 if (*dest)
00163                                         RTPDeleteByteArray((*dest),GetMemoryManager());
00164                                 *dest = 0;
00165                                 *destlen = 0;
00166                         }
00167                         else
00168                         {
00169                                 len = (len>RTCP_SDES_MAXITEMLENGTH)?RTCP_SDES_MAXITEMLENGTH:len;
00170                                 uint8_t *str2 = RTPNew(GetMemoryManager(),RTPMEM_TYPE_BUFFER_SDESITEM) uint8_t[len];
00171                                 if (str2 == 0)
00172                                         return ERR_RTP_OUTOFMEM;
00173                                 memcpy(str2,s,len);
00174                                 *destlen = len;
00175                                 if (*dest)
00176                                         RTPDeleteByteArray((*dest),GetMemoryManager());
00177                                 *dest = str2;
00178                         }
00179                         return 0;
00180                 }
00181         private:
00182                 uint8_t *str;
00183                 size_t length;
00184         };
00185 
00186         SDESItem nonprivateitems[RTCP_SDES_NUMITEMS_NONPRIVATE];
00187 
00188 #ifdef RTP_SUPPORT_SDESPRIV
00189         class SDESPrivateItem : public SDESItem
00190         {
00191         public:
00192                 SDESPrivateItem(RTPMemoryManager *mgr) : SDESItem(mgr)
00193                 { 
00194                         prefixlen = 0; 
00195                         prefix = 0; 
00196                 }
00197                 ~SDESPrivateItem()                                              
00198                 { 
00199                         if (prefix) 
00200                                 RTPDeleteByteArray(prefix,GetMemoryManager());
00201                 }
00202                 uint8_t *GetPrefix(size_t *len) const                           { *len = prefixlen; return prefix; }
00203                 int SetPrefix(const uint8_t *s,size_t len)                      { return SetString(&prefix,&prefixlen,s,len); }
00204         private:
00205                 uint8_t *prefix;
00206                 size_t prefixlen;
00207         };
00208 
00209         std::list<SDESPrivateItem *> privitems;
00210         std::list<SDESPrivateItem *>::const_iterator curitem;
00211 #endif // RTP_SUPPORT_SDESPRIV
00212 };
00213 
00214 #endif // RTCPSDESINFO_H
00215 

Generated on Thu Feb 8 16:22:05 2007 for jrtplib by  doxygen 1.5.1