diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/AV/RTP.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/AV/RTP.cpp | 346 |
1 files changed, 0 insertions, 346 deletions
diff --git a/TAO/orbsvcs/orbsvcs/AV/RTP.cpp b/TAO/orbsvcs/orbsvcs/AV/RTP.cpp deleted file mode 100644 index 07eec55627c..00000000000 --- a/TAO/orbsvcs/orbsvcs/AV/RTP.cpp +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (c) 1994-1995 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and the Network Research Group at - * Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -// $Id$ - -#include "RTP.h" -#include "RTCP.h" -#include "Nil.h" - -int -TAO_AV_RTP::handle_input (ACE_Message_Block *&data, - TAO_AV_frame_info *&frame_info) -{ - int n = data->length (); - int size_phdr = ACE_static_cast (int, sizeof (rtphdr)); - if (n < size_phdr) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP::handle_input:invalid header\n"),-1); - rtphdr* rh = (rtphdr*)data->rd_ptr (); - int version = * (u_char*)rh >> 6; - if (version != 2) - { - // state->bad_version_++; - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP:bad version\n"),-1); - } - TAO_AV_RTP::rtphdr header; - header = *rh; - // data->rd_ptr (sizeof (rtphdr)); - ACE_NEW_RETURN (frame_info, - TAO_AV_frame_info, - -1); - frame_info->boundary_marker = header.rh_flags & RTP_M; - frame_info->timestamp = header.rh_ts; - frame_info->ssrc = header.rh_ssrc; - frame_info->sequence_num = header.rh_seqno; - frame_info->format = header.rh_flags & 0x7f; - return 0; -} - - -ACE_INLINE -int -TAO_AV_RTP::write_header (rtphdr &header, - int format, - ACE_UINT16 &sequence_num, - ACE_UINT32 ts, - ACE_UINT32 ssrc, - CORBA::Boolean boundary_marker) -{ - int flags = RTP_VERSION << 14 | format; - if (boundary_marker) - flags |= RTP_M; - header.rh_flags = ntohs (flags); - header.rh_seqno = htons (sequence_num); - sequence_num++; - header.rh_ts = htonl (ts); - header.rh_ssrc = ssrc; - return 0; -} - -// TAO_AV_RTP_Object - -int -TAO_AV_RTP_Object::handle_input (void) -{ - TAO_AV_frame_info *frame_info = 0; - - // Handles the incoming RTP packet input. - - this->frame_.rd_ptr (this->frame_.base ()); - - int n = this->transport_->recv (this->frame_.rd_ptr (), - this->frame_.size ()); - if (n == 0) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP::handle_input:connection closed\n"),-1); - if (n < 0) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP::handle_input:recv error\n"),-1); - this->frame_.wr_ptr (this->frame_.rd_ptr () + n); - ACE_Addr *addr = this->transport_->get_peer_addr (); - - ACE_Message_Block* data = &this->frame_; - int result = TAO_AV_RTP::handle_input (data, - frame_info); - if (result < 0) - return 0; - this->control_object_->handle_control_input (data, - *addr); - - this->frame_.rd_ptr (sizeof(TAO_AV_RTP::rtphdr)); - result = this->callback_->receive_frame (&this->frame_, - frame_info, - *addr); - - return 0; -} - -int -TAO_AV_RTP_Object::send_frame (ACE_Message_Block *frame, - TAO_AV_frame_info *frame_info) -{ - TAO_AV_RTP::rtphdr header; - int result = -1; - if (frame_info != 0) - { - result = TAO_AV_RTP::write_header (header, - frame_info->format, - this->sequence_num_, - frame_info->timestamp, - frame_info->ssrc, - frame_info->boundary_marker); - frame_info->sequence_num = this->sequence_num_; - } - else - { - result = TAO_AV_RTP::write_header (header, - 0, - this->sequence_num_, - 0, - 0, - 0); - } - if (result < 0) - return result; - - ACE_Message_Block mb ((char *)&header, - sizeof (header)); - mb.wr_ptr (sizeof (header)); - mb.cont (frame); - result = this->transport_->send (&mb); - if (result < 0) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP::send_frame failed\n"),result); - return 0; -} - -int -TAO_AV_RTP_Object::send_frame (const iovec *iov, - int iovcnt, - TAO_AV_frame_info *frame_info) -{ - TAO_AV_RTP::rtphdr header; - // int format = 0; - int result = -1; - if (frame_info != 0) - { - result = TAO_AV_RTP::write_header (header, - frame_info->format, - this->sequence_num_, - frame_info->timestamp, - frame_info->ssrc, - frame_info->boundary_marker); - frame_info->sequence_num = this->sequence_num_; - } - else - { - result = TAO_AV_RTP::write_header (header, - 0, - this->sequence_num_, - 0, - 0, - 0); - } - if (result < 0) - return result; - - iovec send_iov[IOV_MAX]; - send_iov [0].iov_base = (char *)&header; - send_iov [0].iov_len = sizeof(header); - for (int i=1;i<=iovcnt; i++) - send_iov [i] = iov [i-1]; - result = this->transport_->send (send_iov, - iovcnt+1); - if (result < 0) - ACE_ERROR_RETURN ((LM_ERROR,"TAO_AV_RTP::send_frame failed\n"),result); - return 0; -} - -TAO_AV_RTP_Object::TAO_AV_RTP_Object (TAO_AV_Callback *callback, - TAO_AV_Transport *transport) - :TAO_AV_Protocol_Object (callback,transport), - sequence_num_ (0), - control_object_ (0) -{ - this->sequence_num_ = ACE_OS::rand (); - - this->frame_.size (2 * this->transport_->mtu ()); -} - -TAO_AV_RTP_Object::~TAO_AV_RTP_Object (void) -{ -} - -int -TAO_AV_RTP_Object::destroy (void) -{ - this->control_object_->destroy (); - this->callback_->handle_destroy (); - return 0; -} - -int -TAO_AV_RTP_Object::set_policies (const TAO_AV_PolicyList &policy_list) -{ - this->policy_list_ = policy_list; - u_int num_policies = this->policy_list_.length (); - TAO_AV_Policy *policy = 0; - for (u_int i=0; i< num_policies;i++) - { - policy = this->policy_list_ [i]; - switch (policy->type ()) - { - case TAO_AV_PAYLOAD_TYPE_POLICY: - { - TAO_AV_Payload_Type_Policy *payload_policy = - ACE_static_cast (TAO_AV_Payload_Type_Policy *,policy); - if (payload_policy == 0) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP_Object::send_frame:Payload policy not defined\n"),-1); - this->format_ = payload_policy->value (); - } - break; - case TAO_AV_SSRC_POLICY: - { - TAO_AV_SSRC_Policy *ssrc_policy = - ACE_static_cast (TAO_AV_SSRC_Policy *,policy); - if (ssrc_policy == 0) - ACE_ERROR_RETURN ( (LM_ERROR,"TAO_AV_RTP_Object::send_frame:SSRC policy not defined\n"),-1); - this->ssrc_ = ssrc_policy->value ();; - } - break; - default: - break; - } - } - - return 0; -} - -void -TAO_AV_RTP_Object::control_object (TAO_AV_Protocol_Object *object) -{ - this->control_object_ = object; -} - -int -TAO_AV_RTP_Object::start (void) -{ - this->control_object_->start (); - return this->callback_->handle_start (); -} - -int -TAO_AV_RTP_Object::stop (void) -{ - this->control_object_->stop (); - return this->callback_->handle_stop (); -} - -// TAO_AV_RTP_Flow_Factory -TAO_AV_RTP_Flow_Factory::TAO_AV_RTP_Flow_Factory (void) -{ -} - -TAO_AV_RTP_Flow_Factory::~TAO_AV_RTP_Flow_Factory (void) -{ -} - -int -TAO_AV_RTP_Flow_Factory::init (int /* argc */, - char * /* argv */ []) -{ - return 0; -} - -TAO_AV_Protocol_Object* -TAO_AV_RTP_Flow_Factory::make_protocol_object (TAO_FlowSpec_Entry *entry, - TAO_Base_StreamEndPoint *endpoint, - TAO_AV_Flow_Handler *handler, - TAO_AV_Transport *transport) -{ - TAO_AV_Callback *callback = 0; - endpoint->get_callback (entry->flowname (), - callback); - - TAO_AV_Protocol_Object *object = 0; - ACE_NEW_RETURN (object, - TAO_AV_RTP_Object (callback, - transport), - 0); - callback->open (object, - handler); - endpoint->set_protocol_object (entry->flowname (), - object); - return object; -} - -int -TAO_AV_RTP_Flow_Factory::match_protocol (const char *flow_string) -{ - if (ACE_OS::strncasecmp (flow_string,"RTP",3) == 0) - return 1; - return 0; -} - -const char * -TAO_AV_RTP_Flow_Factory::control_flow_factory (void) -{ - return "RTCP"; -} - -ACE_FACTORY_DEFINE (AV, TAO_AV_RTP_Flow_Factory) -ACE_STATIC_SVC_DEFINE (TAO_AV_RTP_Flow_Factory, - ASYS_TEXT ("RTP_Flow_Factory"), - ACE_SVC_OBJ_T, - &ACE_SVC_NAME (TAO_AV_RTP_Flow_Factory), - ACE_Service_Type::DELETE_THIS | - ACE_Service_Type::DELETE_OBJ, - 0) |