RtspConfiguration.cxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:8k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* ====================================================================
  2.  * The Vovida Software License, Version 1.0 
  3.  * 
  4.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5.  * 
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in
  15.  *    the documentation and/or other materials provided with the
  16.  *    distribution.
  17.  * 
  18.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  19.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  20.  *    not be used to endorse or promote products derived from this
  21.  *    software without prior written permission. For written
  22.  *    permission, please contact vocal@vovida.org.
  23.  *
  24.  * 4. Products derived from this software may not be called "VOCAL", nor
  25.  *    may "VOCAL" appear in their name, without prior written
  26.  *    permission of Vovida Networks, Inc.
  27.  * 
  28.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  29.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  31.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  32.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  33.  * IN EXCESS OF 281421,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  34.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  35.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  36.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  37.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  38.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  39.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  40.  * DAMAGE.
  41.  * 
  42.  * ====================================================================
  43.  * 
  44.  * This software consists of voluntary contributions made by Vovida
  45.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  46.  * Inc.  For more information on Vovida Networks, Inc., please see
  47.  * <http://www.vovida.org/>.
  48.  *
  49.  */
  50. static const char* const RtspConfiguration_cxx_version =
  51.     "$Id: RtspConfiguration.cxx,v 1.8 2001/07/26 21:47:01 kle Exp $";
  52. #include "RtspConfiguration.hxx"
  53. #include <parse3tuple.h>
  54. #include <stdio.h>
  55. #include "cpLog.h"
  56. typedef enum
  57. {
  58.     ServerNameTag,
  59.     RtspPortTag,
  60.     AudioDirectoryTag,
  61.     MaxSessionsTag,
  62.     RtpPortRangeMinTag,
  63.     RtpPortRangeMaxTag,
  64.     DefaultFileExtensionTag,
  65.     DefaultCodecTag,
  66.     RtpMapRequiredTag,
  67.     LogRtpTrafficTag,
  68.     MaxRecordingFileBytesTag,
  69.     LockRecordingFilesTag,
  70.     StatisticsLogFileTag,
  71.     TagMax
  72. } RtspConfigTags;
  73. static const char* TagString[] =
  74. {
  75.     "ServerName",
  76.     "RtspPort",
  77.     "AudioDirectory",
  78.     "MaxSessions",
  79.     "RtpPortRangeMin",
  80.     "RtpPortRangeMax",
  81.     "DefaultFileExtension",
  82.     "DefaultCodec",
  83.     "RtpMapRequired",
  84.     "LogRtpTraffic",
  85.     "MaxRecordingFileBytes",
  86.     "LockRecordingFiles",
  87.     "StatisticsLogFile",
  88.     "Unknown"
  89. };
  90. // singelton object definitionn
  91. RtspConfiguration* RtspConfiguration::myInstance = 0;
  92. RtspConfiguration&
  93. RtspConfiguration::instance( const string cfgFile )
  94. {
  95.     assert( myInstance == 0 );
  96.     myInstance = new RtspConfiguration();
  97.     assert( myInstance != 0 );
  98.     assert( parse3tuple( cfgFile.c_str(), parseCfgFileCallBack ) );
  99.     return *myInstance;
  100. }
  101. RtspConfiguration&
  102. RtspConfiguration::instance()
  103. {
  104.     assert( myInstance != 0 );
  105.     return *myInstance;
  106. }
  107. RtspConfiguration::RtspConfiguration()
  108.     : serverName( "Vovida RTSP Server" ),
  109.       rtspPort( 544 ),
  110.       audioDirectory( "" ),
  111.       maxSessions( 200 ),
  112.       rtpPortRangeMin( 8000 ),
  113.       rtpPortRangeMax( 8001 ),
  114.       defaultFileExtension( 1 ),
  115.       defaultCodec( 1 ),
  116.       rtpMapRequired( true ),
  117.       logRtpTraffic( false ),
  118.       maxRecordingFileBytes( 10240 ),
  119.       lockRecordingFiles( true ),
  120.       statisticsLogFile( "" ),
  121.       logStatistics( false )
  122. {
  123. #if defined (_linux_)    
  124.     // register destroy function to delete singelton
  125.     if( atexit( RtspConfiguration::destroy ) < 0 )
  126.     {
  127.         cpLog( LOG_ALERT, "Failed to register with atexit()" );
  128.     };
  129. #endif
  130. }
  131. RtspConfiguration::~RtspConfiguration()
  132. {
  133. }
  134. void
  135. RtspConfiguration::destroy()
  136. {
  137.     delete RtspConfiguration::myInstance;
  138.     RtspConfiguration::myInstance = 0;
  139. }
  140. void
  141. RtspConfiguration::parseCfgFileCallBack( char* tag, char* type, char* value )
  142. {
  143.     RtspConfiguration& cfg = RtspConfiguration::instance();
  144.     switch( strConst2i( tag, TagString, TagMax ) )
  145.     {
  146.         case ServerNameTag:
  147.         {
  148.             cfg.serverName = value;
  149.             break;
  150.         }
  151.         case RtspPortTag:
  152.         {
  153.             int i;
  154.             sscanf( value, "%d", &i );
  155.             cfg.rtspPort = i;
  156.             break;
  157.         }
  158.         case AudioDirectoryTag:
  159.         {
  160.             cfg.audioDirectory = value;
  161.             break;
  162.         }
  163.         case MaxSessionsTag:
  164.         {
  165.             int i;
  166.             sscanf( value, "%d", &i );
  167.             cfg.maxSessions = i;
  168.             break;
  169.         }
  170.         case RtpPortRangeMinTag:
  171.         {
  172.             int i;
  173.             sscanf( value, "%d", &i );
  174.             cfg.rtpPortRangeMin = i;
  175.             break;
  176.         }
  177.         case RtpPortRangeMaxTag:
  178.         {
  179.             int i;
  180.             sscanf( value, "%d", &i );
  181.             cfg.rtpPortRangeMax= i;
  182.             break;
  183.         }
  184.         case DefaultFileExtensionTag:
  185.         {
  186.             int i;
  187.             sscanf( value, "%d", &i );
  188.             cfg.defaultFileExtension = i;
  189.             break;
  190.         }
  191.         case DefaultCodecTag:
  192.         {
  193.             int i;
  194.             sscanf( value, "%d", &i );
  195.             cfg.defaultCodec = i;
  196.             break;
  197.         }
  198.         case RtpMapRequiredTag:
  199.         {
  200.             string str = value;
  201.             cfg.rtpMapRequired = ( str == "True" ) ||
  202.                                  ( str == "true" ) ||
  203.                                  ( str == "TRUE" );
  204.             break;
  205.         }
  206.         case LogRtpTrafficTag:
  207.         {
  208.             string str = value;
  209.             cfg.logRtpTraffic = ( str == "True" ) ||
  210.                                 ( str == "true" ) ||
  211.                                 ( str == "TRUE" );
  212.             break;
  213.         }
  214.         case MaxRecordingFileBytesTag:
  215.         {
  216.             int i;
  217.             sscanf( value, "%d", &i );
  218.             cfg.maxRecordingFileBytes = i;
  219.             break;
  220.         }
  221.         case LockRecordingFilesTag:
  222.         {
  223.             string str = value;
  224.             cfg.lockRecordingFiles = ( str == "True" ) ||
  225.                                      ( str == "true" ) ||
  226.                                      ( str == "TRUE" );
  227.             break;
  228.         }
  229.         case StatisticsLogFileTag:
  230.         {
  231.             cfg.statisticsLogFile = value;
  232.             cfg.logStatistics = true;
  233.             break;
  234.         }
  235.         default:
  236.             cpLog( LOG_WARNING, "Unknown Tag: %s", tag );
  237.     }
  238. }
  239. void
  240. RtspConfiguration::show()
  241. {
  242.     printf( "********** Server Configuration ***********n" );
  243.     printf( "  serverName:            %sn", serverName.c_str() );
  244.     printf( "  rtspPort:              %dn", rtspPort );
  245.     printf( "  audioDirectory:        %sn", audioDirectory.c_str() );
  246.     printf( "  maxSessions:           %dn", maxSessions );
  247.     printf( "  rtpPortRange:          %d-%dn", rtpPortRangeMin, rtpPortRangeMax );
  248.     printf( "  defaultFileExtension:  %dn", defaultFileExtension );
  249.     printf( "  defaultCodec:          %dn", defaultCodec );
  250.     printf( "  rtpMapRequried:        %dn", rtpMapRequired );
  251.     printf( "  logRtpTraffic:         %dn", logRtpTraffic );
  252.     printf( "  maxRecordingFileBytes: %dn", maxRecordingFileBytes );
  253.     printf( "  lockRecordingFiles:    %dn", lockRecordingFiles );
  254.     printf( "  statisticsLogFile:     %sn", statisticsLogFile.c_str() );
  255.     printf( "  logStatistics:         %dn", logStatistics );
  256.     printf( "*******************************************n" );
  257. }
  258. /* Local Variables: */
  259. /* c-file-style: "stroustrup" */
  260. /* indent-tabs-mode: nil */
  261. /* c-file-offsets: ((access-label . -) (inclass . ++)) */
  262. /* c-basic-offset: 4 */
  263. /* End: */