#include <UDP.h>
Inheritance diagram for TAO_AV_UDP_Connector:


Public Member Functions | |
| TAO_AV_UDP_Connector (void) | |
| ~TAO_AV_UDP_Connector (void) | |
| virtual int | open (TAO_Base_StreamEndPoint *endpoint, TAO_AV_Core *av_core, TAO_AV_Flow_Protocol_Factory *factory) |
| virtual int | connect (TAO_FlowSpec_Entry *entry, TAO_AV_Transport *&transport, TAO_AV_Core::Flow_Component flow_comp=TAO_AV_Core::TAO_AV_DATA) |
| virtual int | activate_svc_handler (TAO_AV_Flow_Handler *handler) |
| virtual int | close (void) |
Protected Attributes | |
| ACE_INET_Addr * | control_inet_address_ |
| TAO_Base_StreamEndPoint * | endpoint_ |
| TAO_AV_Core * | av_core_ |
| TAO_FlowSpec_Entry * | entry_ |
| TAO_AV_Flow_Protocol_Factory * | flow_protocol_factory_ |
| TAO_AV_Core::Flow_Component | flow_component_ |
|
|
Definition at line 567 of file UDP.cpp.
00568 : control_inet_address_ (0) 00569 { 00570 } |
|
|
Definition at line 572 of file UDP.cpp. References TAO_FlowSpec_Entry::control_handler().
00573 {
00574 if (this->flow_component_ == TAO_AV_Core::TAO_AV_CONTROL)
00575 {
00576 delete this->entry_->control_handler ();
00577 }
00578
00579 if (this->control_inet_address_ != 0)
00580 delete this->control_inet_address_;
00581 }
|
|
|
Definition at line 764 of file UDP.cpp. References TAO_AV_Flow_Handler::event_handler(), TAO_AV_Core::reactor(), and TAO_AV_Flow_Handler::schedule_timer(). Referenced by connect().
00765 {
00766 ACE_Event_Handler *event_handler = handler->event_handler ();
00767 int result = this->av_core_->reactor ()->register_handler (event_handler,
00768 ACE_Event_Handler::READ_MASK);
00769
00770 if (this->flow_component_ == TAO_AV_Core::TAO_AV_CONTROL)
00771 handler->schedule_timer ();
00772
00773 return result;
00774 }
|
|
|
Implements TAO_AV_Connector. Definition at line 777 of file UDP.cpp.
00778 {
00779 return 0;
00780 }
|
|
||||||||||||||||
|
Implements TAO_AV_Connector. Definition at line 597 of file UDP.cpp. References ACE_CString, ACE_DEBUG, ACE_NEW_RETURN, activate_svc_handler(), ACE_INET_Addr::addr_to_string(), TAO_FlowSpec_Entry::control_handler(), TAO_FlowSpec_Entry::control_protocol_object(), TAO_AV_Core::get_control_flowname(), ACE_INET_Addr::get_host_name(), TAO_FlowSpec_Entry::get_local_control_addr(), ACE_INET_Addr::get_port_number(), ACE_INET_Addr::is_multicast(), ACE_OS::itoa(), LM_DEBUG, TAO_AV_Flow_Protocol_Factory::make_protocol_object(), TAO_FlowSpec_Entry::protocol_object(), TAO_AV_Flow_Handler::protocol_object(), TAO_Base_StreamEndPoint::set_control_flow_handler(), TAO_Base_StreamEndPoint::set_flow_handler(), TAO_FlowSpec_Entry::set_local_control_addr(), TAO_AV_Flow_Handler::set_remote_address(), TAO_AV_UDP_Connection_Setup::setup(), ACE_OS::strcasecmp(), TAO_debug_level, and TAO_AV_Flow_Handler::transport().
00600 {
00601 ACE_INET_Addr *local_addr = 0;
00602 ACE_INET_Addr *control_inet_addr = 0;
00603
00604 this->entry_ = entry;
00605 this->flow_component_ = flow_component;
00606
00607 ACE_INET_Addr *inet_addr;
00608
00609 if (flow_component == TAO_AV_Core::TAO_AV_CONTROL)
00610 {
00611 this->flowname_ = TAO_AV_Core::get_control_flowname (entry->flowname());
00612 inet_addr = dynamic_cast<ACE_INET_Addr*> (entry->control_address ());
00613 }
00614 else
00615 {
00616 this->flowname_ = entry->flowname ();
00617 inet_addr = dynamic_cast<ACE_INET_Addr*> (entry->address ());
00618 control_inet_addr = dynamic_cast<ACE_INET_Addr*> (entry->control_address ());
00619 }
00620
00621 TAO_AV_Flow_Handler *flow_handler = 0;
00622
00623 // if this is the control flow component, the
00624 // handler and local address are already set in the flow spec entry
00625 if ((flow_component == TAO_AV_Core::TAO_AV_CONTROL) &&
00626 (ACE_OS::strcasecmp(this->entry_->flow_protocol_str (), "RTP") == 0) &&
00627 !entry->is_multicast ())
00628 {
00629 flow_handler = this->entry_->control_handler ();
00630 flow_handler->set_remote_address (inet_addr);
00631
00632 local_addr = dynamic_cast<ACE_INET_Addr*> (this->entry_->get_local_control_addr ());
00633 }
00634 else
00635 {
00636 // this variable is only used for RTP/UDP; RFC 1889 requires an even/odd
00637 // consecutive port pair
00638 int get_new_port = 1;
00639
00640 while (get_new_port)
00641 {
00642 // assume the ports will be OK
00643 get_new_port = 0;
00644
00645 ACE_Addr *addr;
00646 if ((addr = entry->get_peer_addr ()) != 0)
00647 {
00648 local_addr = dynamic_cast<ACE_INET_Addr*> (addr);
00649 char buf [BUFSIZ];
00650 local_addr->addr_to_string (buf, BUFSIZ);
00651 }
00652
00653 TAO_AV_UDP_Connection_Setup::setup (flow_handler,
00654 inet_addr,
00655 local_addr,
00656 entry->is_multicast (),
00657 TAO_AV_UDP_Connection_Setup::CONNECTOR);
00658
00659 if ((ACE_OS::strcasecmp(this->entry_->flow_protocol_str (), "RTP") == 0) &&
00660 (flow_component == TAO_AV_Core::TAO_AV_DATA) &&
00661 !entry->is_multicast ())
00662 {
00663 if (local_addr->get_port_number ()%2 != 0)
00664 {
00665 // RTP port should be even
00666 delete local_addr;
00667 delete flow_handler;
00668 get_new_port = 1;
00669 }
00670 else
00671 {
00672 ACE_INET_Addr *local_control_addr;
00673 TAO_AV_Flow_Handler *control_flow_handler = 0;
00674
00675 if (entry->is_multicast ())
00676 control_inet_addr = dynamic_cast<ACE_INET_Addr*> (entry->control_address ()) ;
00677 else
00678 {
00679
00680 if (local_addr != 0)
00681 {
00682 char buf [BUFSIZ];
00683 ACE_CString addr_str (local_addr->get_host_name ());
00684 addr_str += ":";
00685 addr_str += ACE_OS::itoa (local_addr->get_port_number () + 1, buf, 10);
00686 ACE_NEW_RETURN (local_control_addr,
00687 ACE_INET_Addr (addr_str.c_str ()),
00688 -1);
00689 local_control_addr->addr_to_string (buf, BUFSIZ);
00690 }
00691
00692
00693 if (entry->control_address () == 0)
00694 ACE_NEW_RETURN (this->control_inet_address_,
00695 ACE_INET_Addr ("0"),
00696 -1);
00697 else
00698 control_inet_address_ = dynamic_cast<ACE_INET_Addr*> (entry->control_address ());
00699 }
00700
00701 TAO_AV_UDP_Connection_Setup::setup (control_flow_handler,
00702 control_inet_addr,
00703 local_control_addr,
00704 entry->is_multicast (),
00705 TAO_AV_UDP_Connection_Setup::CONNECTOR);
00706
00707 if (local_control_addr->get_port_number () !=
00708 local_addr->get_port_number () +1)
00709 {
00710 delete local_addr;
00711 delete flow_handler;
00712 delete local_control_addr;
00713 delete control_flow_handler;
00714 get_new_port = 1;
00715 }
00716 else
00717 {
00718 this->entry_->set_local_control_addr (local_control_addr);
00719 this->entry_->control_handler (control_flow_handler);
00720 }
00721 }
00722 }
00723 }
00724 }
00725
00726 TAO_AV_Protocol_Object *object =
00727 this->flow_protocol_factory_->make_protocol_object (this->entry_,
00728 this->endpoint_,
00729 flow_handler,
00730 flow_handler->transport ());
00731
00732 flow_handler->protocol_object (object);
00733
00734 if (flow_component == TAO_AV_Core::TAO_AV_DATA)
00735 {
00736 this->endpoint_->set_flow_handler (this->flowname_.c_str (),
00737 flow_handler);
00738 this->entry_->protocol_object (object);
00739 entry->set_local_addr (local_addr);
00740 entry->handler (flow_handler);
00741 transport = flow_handler->transport ();
00742 }
00743 else
00744 {
00745 this->endpoint_->set_control_flow_handler (this->flowname_.c_str (),
00746 flow_handler);
00747 this->entry_->control_protocol_object (object);
00748 entry->set_local_control_addr (local_addr);
00749 entry->control_handler (flow_handler);
00750 transport = flow_handler->transport ();
00751 }
00752
00753 char buf[BUFSIZ];
00754 local_addr->addr_to_string (buf,BUFSIZ);
00755
00756 if (TAO_debug_level > 0)
00757 ACE_DEBUG ((LM_DEBUG,"TAO_AV_UDP_CONNECTOR::connect:%s \n",buf));
00758
00759 // call activate svc handler.
00760 return this->activate_svc_handler (flow_handler);
00761 }
|
|
||||||||||||||||
|
Implements TAO_AV_Connector. Definition at line 584 of file UDP.cpp. References ACE_DEBUG, LM_DEBUG, and TAO_debug_level.
00588 {
00589 if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"TAO_AV_UDP_Connector::open "));
00590 this->endpoint_ = endpoint;
00591 this->av_core_ = av_core;
00592 this->flow_protocol_factory_ = factory;
00593 return 0;
00594 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3.6