📄 tcp.cpp
字号:
{
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"TAO_AV_TCP_Connector::make_svc_handler\n"));
// TAO_AV_Callback *callback = 0;
if (this->endpoint_ != 0)
{
// this->endpoint_->get_callback (this->flowname_.c_str (),
// callback);
ACE_NEW_RETURN (tcp_handler,
// TAO_AV_TCP_Flow_Handler (callback),
TAO_AV_TCP_Flow_Handler,
-1);
TAO_AV_Protocol_Object *object =
this->flow_protocol_factory_->make_protocol_object (this->entry_,
this->endpoint_,
tcp_handler,
tcp_handler->transport ());
tcp_handler->protocol_object (object);
// callback->protocol_object (object);
// this->endpoint_->set_protocol_object (this->flowname_.c_str (),
// object);
this->endpoint_->set_flow_handler (this->flowname_.c_str (),tcp_handler);
this->entry_->protocol_object (object);
this->entry_->handler (tcp_handler);
}
return 0;
}
int
TAO_AV_TCP_Connector::open (TAO_Base_StreamEndPoint *endpoint,
TAO_AV_Core *av_core,
TAO_AV_Flow_Protocol_Factory *factory)
{
this->endpoint_ = endpoint;
this->flow_protocol_factory_ = factory;
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,"TAO_AV_TCP_Connector::open "));
int result = this->connector_.connector_open(this,
av_core->reactor ());
return result;
}
int
TAO_AV_TCP_Connector::connect (TAO_FlowSpec_Entry *entry,
TAO_AV_Transport *&transport,
TAO_AV_Core::Flow_Component flow_comp)
{
this->entry_ = entry;
if (flow_comp == TAO_AV_Core::TAO_AV_CONTROL)
this->flowname_ = TAO_AV_Core::get_control_flowname (entry->flowname ());
else
this->flowname_ = entry->flowname ();
ACE_Addr *remote_addr = entry->address ();
ACE_INET_Addr *inet_addr = ACE_dynamic_cast (ACE_INET_Addr *,remote_addr);
TAO_AV_TCP_Flow_Handler *handler;
int result = this->connector_.connector_connect (handler,
*inet_addr);
if (result < 0)
ACE_ERROR_RETURN ((LM_ERROR,"TAO_AV_TCP_connector::connect failed\n"),-1);
entry->handler (handler);
transport = handler->transport ();
return 0;
}
int
TAO_AV_TCP_Connector::close (void)
{
return 0;
}
//------------------------------------------------------------
// TAO_AV_TCP_Base_Connector
//------------------------------------------------------------
int
TAO_AV_TCP_Base_Acceptor::acceptor_open (TAO_AV_TCP_Acceptor *acceptor,
ACE_Reactor *reactor,
const ACE_INET_Addr &local_addr,
TAO_FlowSpec_Entry *entry)
{
this->acceptor_ = acceptor;
this->reactor_ = reactor;
this->entry_ = entry;
int result = ACE_Acceptor <TAO_AV_TCP_Flow_Handler,ACE_SOCK_ACCEPTOR>::open (local_addr,reactor);
if (result < 0)
ACE_ERROR_RETURN ((LM_ERROR,"TAO_AV_TCP_Base_Connector::open failed\n"),-1);
return 0;
}
int
TAO_AV_TCP_Base_Acceptor::make_svc_handler (TAO_AV_TCP_Flow_Handler *&handler)
{
int result = this->acceptor_->make_svc_handler (handler);
if (result < 0)
return result;
handler->reactor (this->reactor_);
this->entry_->handler (handler);
return 0;
}
//------------------------------------------------------------
// TAO_AV_TCP_Acceptor
//------------------------------------------------------------
TAO_AV_TCP_Acceptor::TAO_AV_TCP_Acceptor (void)
{
}
TAO_AV_TCP_Acceptor::~TAO_AV_TCP_Acceptor (void)
{
}
int
TAO_AV_TCP_Acceptor::make_svc_handler (TAO_AV_TCP_Flow_Handler *&tcp_handler)
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_AV_TCP_Acceptor::make_svc_handler\n"
));
if (this->endpoint_ != 0)
{
ACE_NEW_RETURN (tcp_handler,
TAO_AV_TCP_Flow_Handler,
-1);
TAO_AV_Protocol_Object *object =
this->flow_protocol_factory_->make_protocol_object (this->entry_,
this->endpoint_,
tcp_handler,
tcp_handler->transport ());
tcp_handler->protocol_object (object);
this->endpoint_->set_flow_handler (this->flowname_.c_str (),tcp_handler);
this->entry_->protocol_object (object);
this->entry_->handler (tcp_handler);
}
return 0;
}
int
TAO_AV_TCP_Acceptor::open (TAO_Base_StreamEndPoint *endpoint,
TAO_AV_Core *av_core,
TAO_FlowSpec_Entry *entry,
TAO_AV_Flow_Protocol_Factory *factory,
TAO_AV_Core::Flow_Component flow_comp)
{
this->flow_protocol_factory_ = factory;
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_AV_TCP_Acceptor::open "));
this->av_core_ = av_core;
this->endpoint_ = endpoint;
this->entry_ = entry;
if (flow_comp == TAO_AV_Core::TAO_AV_CONTROL)
this->flowname_ = TAO_AV_Core::get_control_flowname (entry->flowname ());
else
this->flowname_ = entry->flowname ();
ACE_Addr *address = entry->address ();
ACE_INET_Addr *inet_addr = (ACE_INET_Addr *) address;
inet_addr->set (inet_addr->get_port_number (),
inet_addr->get_host_name ());
char buf[BUFSIZ];
inet_addr->addr_to_string (buf,
BUFSIZ);
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_AV_TCP_Acceptor::open: %s",
buf
));
int result = this->acceptor_.acceptor_open (this,
av_core->reactor (),
*inet_addr,
entry);
if (result < 0)
ACE_ERROR_RETURN ((LM_ERROR,
"TAO_AV_TCP_Acceptor::open failed"),
-1);
entry->set_local_addr (address);
return 0;
}
int
TAO_AV_TCP_Acceptor::open_default (TAO_Base_StreamEndPoint *endpoint,
TAO_AV_Core *av_core,
TAO_FlowSpec_Entry *entry,
TAO_AV_Flow_Protocol_Factory *factory,
TAO_AV_Core::Flow_Component flow_comp)
{
this->flow_protocol_factory_ = factory;
this->av_core_ = av_core;
this->endpoint_ = endpoint;
this->entry_ = entry;
if (flow_comp == TAO_AV_Core::TAO_AV_CONTROL)
this->flowname_ = TAO_AV_Core::get_control_flowname (entry->flowname());
else
this->flowname_ = entry->flowname ();
ACE_INET_Addr *address;
ACE_NEW_RETURN (address,
ACE_INET_Addr ("0"),
-1);
int result = this->acceptor_.acceptor_open (this,
av_core->reactor (),
*address,
entry);
if (result < 0)
ACE_ERROR_RETURN ((LM_ERROR,
"TAO_AV_TCP_Acceptor::open failed"),
-1);
this->acceptor_.acceptor ().get_local_addr (*address);
address->set (address->get_port_number (),
address->get_host_name ());
char buf[BUFSIZ];
address->addr_to_string (buf,BUFSIZ);
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_AV_TCP_Acceptor::open_default: %s\n",
buf));
entry->set_local_addr (address);
return 0;
}
int
TAO_AV_TCP_Acceptor::close (void)
{
return 0;
}
//------------------------------------------------------------
// TAO_AV_TCP_Flow_Handler
//------------------------------------------------------------
TAO_AV_TCP_Flow_Handler::TAO_AV_TCP_Flow_Handler (TAO_AV_Callback * /*callback*/)
// :TAO_AV_Flow_Handler (callback)
{
ACE_NEW (this->transport_,
TAO_AV_TCP_Transport (this));
}
TAO_AV_TCP_Flow_Handler::~TAO_AV_TCP_Flow_Handler (void)
{
delete this->transport_;
}
TAO_AV_Transport *
TAO_AV_TCP_Flow_Handler::transport (void)
{
return this->transport_;
}
int
TAO_AV_TCP_Flow_Handler::open (void * /*arg*/)
{
#if defined (TCP_NODELAY)
int nodelay = 1;
if (this->peer ().set_option (IPPROTO_TCP,
TCP_NODELAY,
(void *) &nodelay,
sizeof (nodelay)) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"NODELAY failed\n"),
-1);
#endif /* TCP_NODELAY */
// Called by the <Strategy_Acceptor> when the handler is completely
// connected.
ACE_INET_Addr addr;
if (this->peer ().get_remote_addr (addr) == -1)
return -1;
char server[MAXHOSTNAMELEN + 16];
(void) addr.addr_to_string (server, sizeof (server));
if (TAO_debug_level > 0)
if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG,
"(%P|%t) connection to server <%s> on %d\n",
server, this->peer ().get_handle ()));
this->peer ().enable (ACE_NONBLOCK);
// Register the handler with the reactor.
if (this->reactor ()
&& this->reactor ()->register_handler
(this,
ACE_Event_Handler::READ_MASK) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("unable to register client handler")),
-1);
return 0;
}
int
TAO_AV_TCP_Flow_Handler::handle_input (ACE_HANDLE /*fd*/)
{
return this->protocol_object_->handle_input ();
}
int
TAO_AV_TCP_Flow_Handler::handle_timeout (const ACE_Time_Value &tv,
const void *arg)
{
return TAO_AV_Flow_Handler::handle_timeout (tv,arg);
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Acceptor<TAO_AV_TCP_Flow_Handler, ACE_SOCK_ACCEPTOR>;
template class ACE_Connector_Base<TAO_AV_TCP_Flow_Handler>;
template class ACE_Connector<TAO_AV_TCP_Flow_Handler, ACE_SOCK_CONNECTOR>;
template class ACE_NonBlocking_Connect_Handler<TAO_AV_TCP_Flow_Handler>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Acceptor<TAO_AV_TCP_Flow_Handler, ACE_SOCK_Acceptor, ACE_INET_Addr>
#pragma instantiate ACE_Connector_Base<TAO_AV_TCP_Flow_Handler>
#pragma instantiate ACE_Connector<TAO_AV_TCP_Flow_Handler, ACE_SOCK_Connector, ACE_INET_Addr>
#pragma instantiate ACE_NonBlocking_Connect_Handler<TAO_AV_TCP_Flow_Handler>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
ACE_STATIC_SVC_DEFINE (TAO_AV_TCP_Flow_Factory,
ACE_TEXT ("TCP_Flow_Factory"),
ACE_SVC_OBJ_T,
&ACE_SVC_NAME (TAO_AV_TCP_Flow_Factory),
ACE_Service_Type::DELETE_THIS |
ACE_Service_Type::DELETE_OBJ,
0)
ACE_FACTORY_DEFINE (TAO_AV, TAO_AV_TCP_Flow_Factory)
ACE_STATIC_SVC_DEFINE (TAO_AV_TCP_Factory,
ACE_TEXT ("TCP_Factory"),
ACE_SVC_OBJ_T,
&ACE_SVC_NAME (TAO_AV_TCP_Factory),
ACE_Service_Type::DELETE_THIS |
ACE_Service_Type::DELETE_OBJ,
0)
ACE_FACTORY_DEFINE (TAO_AV, TAO_AV_TCP_Factory)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -