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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #if !defined(VOCAL_TPKT_CLIENT_SOCKET_HXX)
  2. #define VOCAL_TPKT_CLIENT_SOCKET_HXX
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const TPKTClientSocket_hxx_Version = 
  53.     "$Id: TPKTClientSocket.hxx,v 1.8 2001/06/26 22:54:22 icahoon Exp $";
  54. #include "TCPClientSocket.hxx"
  55. /** Infrastructure common to VOCAL.
  56.  */
  57. namespace Vocal 
  58. {
  59. /** Infrastructure in VOCAL related to making network transport layer 
  60.  *  connections.<br><br>
  61.  */
  62. namespace Transport 
  63. {
  64. /** TPKT is an extension of the TCPClientSocket that allows for
  65.  *  packetizing the streamed information.<br><br>
  66.  *
  67.  *  Every packet send via the TPKT is prefixed with a header that first 
  68.  *  indicates it is a TPKT, and that second indicates the length of the packet.
  69.  *
  70.  *  @see    Vocal::Transport::TCPClientSocket
  71.  *  @see    Vocal::Transport::StreamClientSocket
  72.  *  @see    Vocal::Transport::Socket
  73.  *  @see    Vocal::Transport::IPAddress
  74.  *  @see    Vocal::Transport::TransportAddress
  75.  *  @see    Vocal::IO::file_descriptor_t
  76.  *  @see    Vocal::SystemException
  77.  *  @see    Vocal::SystemStatus
  78.  */
  79. class TPKTClientSocket : public Vocal::Transport::TCPClientSocket
  80. {
  81.     public:
  82.      /** Default constructor. Create a socket whose local
  83.       *  address will be a default IP address. 
  84.  */
  85.      TPKTClientSocket(const char * name = 0)
  86.          throw ( Vocal::SystemException );
  87.      /** TransportAddress constructor. Create a socket whose
  88.       *  local address is bound to the given local address.
  89.  */
  90.      TPKTClientSocket(
  91.     const IPAddress  &   localAddr,
  92.          const char       *   name = 0
  93. )
  94.          throw ( Vocal::SystemException );
  95.      /** Connection constructor. Create a socket whose local address
  96.       *  is bound to the local address given, and is connected to
  97.       *  the remote address given.
  98.  */
  99.      TPKTClientSocket(
  100.     const IPAddress  &   localAddr,
  101.     const IPAddress  &   remoteAddr,
  102.     const char       *   name = 0
  103. )
  104.          throw ( Vocal::SystemException, Vocal::SystemStatus );
  105.      /** Accepted connection constructor. Create a socket from an
  106.       *  already established socket, i.e. via accept. This socket
  107.       *  is connected to the remote address given. If the file
  108.       *  descriptor passed in is invalid, a new socket will
  109.       *  be created, bound to the an INADDR_ANY and connected
  110.       *  to the remote address.
  111.  */
  112.      TPKTClientSocket(
  113.     IO::file_descriptor_t  fd,
  114.          const IPAddress      &   remoteAddr,
  115.          const char           *   name = 0
  116. )
  117.          throw ( Vocal::SystemException, Vocal::SystemStatus );
  118.      /** Virtual destructor
  119.  */        
  120. virtual      ~TPKTClientSocket();
  121.      /** Text versions of a connection oriented send. 
  122.       *  See StreamClientSocket::send(). This prefixes
  123.       *  outgoing messages with the TPKT header.
  124.  */
  125.      virtual int      send(const string &)
  126.          throw ( Vocal::SystemException,
  127.     Vocal::SystemStatus,
  128.     Vocal::Transport::ConnectionBrokenException );
  129.      /** Text versions of a connection oriented send. 
  130.       *  See StreamClientSocket::send(). This prefixes
  131.       *  outgoing messages with the TPKT header.
  132.  */
  133.      virtual int      send(const char *)
  134.          throw ( Vocal::SystemException,
  135.     Vocal::SystemStatus,
  136.     Vocal::Transport::ConnectionBrokenException );
  137.      /** Binary version of a connection oriented send. 
  138.       *  See send(const string &)
  139.  */
  140.      virtual int      send(const vector<u_int8_t> &)
  141.          throw ( Vocal::SystemException,
  142.     Vocal::SystemStatus,
  143.     Vocal::Transport::ConnectionBrokenException );
  144.      /** Binary version of a connection oriented send. 
  145.       *  See send(const string &)
  146.  */
  147.      virtual int      send(const u_int8_t *, size_t)
  148.          throw ( Vocal::SystemException,
  149.     Vocal::SystemStatus,
  150.     Vocal::Transport::ConnectionBrokenException );
  151.      /** Will parse the TPKT header. If the entire TPKT header is not 
  152.       *  fully received (if the underlying file descriptor is set
  153.       *  nonblocking), a SystemStatus will be raised, with the status 
  154.       *  set to EAGAIN. The state for the partially parsed header will 
  155.       *  be saved unless clearTPKTHeader() is called. When the socket
  156.       *  is again ready for reading, call this function again.
  157.       *  Upon successful parsing of the header the returned size
  158.       *  will be the size of the TPKT packet remaining. If the size
  159.       *  is zero, either zero was sent, or the header wasn't correct.
  160.  */
  161.      u_int16_t   receiveTPKTHeader()
  162.          throw ( Vocal::SystemException,
  163.     Vocal::SystemStatus,
  164.     Vocal::Transport::ConnectionBrokenException );
  165.      /** Clear the stored TPKT header information.
  166.  */
  167.      void     clearTPKTHeader();
  168.     private:
  169.      void     sendTPKTHeader(u_int16_t)
  170.          throw ( Vocal::SystemException,
  171.     Vocal::SystemStatus,
  172.     Vocal::Transport::ConnectionBrokenException );
  173.      static const u_int8_t      TPKT_FLAG_[2];
  174.           u_int8_t         header_[4];
  175. int          headerPosition_;
  176. };
  177. } // namespace Transport
  178. } // namespace Vocal
  179. #endif // !defined(VOCAL_TPKT_CLIENT_SOCKET_HXX)