#include "tao/IIOP_Endpoint.h"#include "tao/IOPC.h"#include "tao/debug.h"#include "tao/ORB_Core.h"#include "tao/IIOP_Profile.h"#include "ace/Log_Msg.h"#include "ace/Guard_T.h"#include "ace/OS_NS_string.h"#include "ace/OS_NS_strings.h"#include "ace/OS_NS_stdio.h"#include "ace/os_include/os_netdb.h"#include "ace/Vector_T.h"#include "ace/ACE.h"#include "ace/INET_Addr.h"#include "ace/Sock_Connect.h"
Go to the source code of this file.
Functions | |
| static ACE_CString | find_local (const ACE_Vector< ACE_CString > &local_ips, const ACE_CString &pattern) |
| static void | get_ip_interfaces (ACE_Vector< ACE_CString > &local_ips) |
| static void | find_preferred_interfaces (const ACE_CString &host, const ACE_CString &csvPreferred, ACE_Vector< ACE_CString > &preferred) |
| static ACE_CString find_local | ( | const ACE_Vector< ACE_CString > & | local_ips, | |
| const ACE_CString & | pattern | |||
| ) | [static] |
Definition at line 403 of file IIOP_Endpoint.cpp.
{
for (size_t i = 0; i < local_ips.size(); ++i)
{
ACE_CString ret = local_ips[i];
if (ACE::wild_match(ret.c_str(), pattern.c_str()))
return ret;
}
return "";
}
| static void find_preferred_interfaces | ( | const ACE_CString & | host, | |
| const ACE_CString & | csvPreferred, | |||
| ACE_Vector< ACE_CString > & | preferred | |||
| ) | [static] |
Definition at line 458 of file IIOP_Endpoint.cpp.
{
ACE_Vector<ACE_CString> local_ips;
get_ip_interfaces(local_ips);
if (local_ips.size() == 0)
return;
// The outer loop steps through each preferred interface directive
// and chains a new endpoint if the remote interface matches the
// current endpoint.
ACE_CString::size_type index = 0;
while (index < csvPreferred.length())
{
ACE_CString::size_type comma = csvPreferred.find(',', index);
ACE_CString::size_type assign = csvPreferred.find('=', index);
if (assign == ACE_CString::npos)
{
assign = csvPreferred.find(':', index);
if (assign == ACE_CString::npos)
{
ACE_ASSERT(assign != ACE_CString::npos);
return;
}
}
ACE_CString wild_local;
if (comma == ACE_CString::npos)
wild_local = csvPreferred.substr(assign + 1);
else
wild_local = csvPreferred.substr(assign + 1, comma - assign - 1);
ACE_CString wild_remote = csvPreferred.substr(index, assign - index);
index = comma + 1;
// For now, we just try to match against the host literally. In
// the future it might be worthwhile to resolve some aliases for
// this->host_ using DNS (and possibly reverse DNS) lookups. Then we
// could try matching against those too.
if (ACE::wild_match(host.c_str(), wild_remote.c_str(), false))
{
// If it's a match, then it means we need to use a
// local interface that matches wild_local.
ACE_CString local = find_local(local_ips, wild_local);
if (local.length() > 0)
{
preferred.push_back(local);
}
else
{
// There is no matching local interface, so we can skip
// to the next preferred interface directive.
}
}
else
{
// The preferred interface directive is for a different
// remote endpoint.
}
if (comma == ACE_CString::npos)
break;
}
}
| static void get_ip_interfaces | ( | ACE_Vector< ACE_CString > & | local_ips | ) | [static] |
Definition at line 428 of file IIOP_Endpoint.cpp.
{
ACE_INET_Addr* tmp = 0;
size_t cnt = 0;
int err = ACE::get_ip_interfaces (cnt, tmp);
if (err != 0)
return;
#if defined (ACE_HAS_IPV6)
char buf[64];
#else /* ACE_HAS_IPV6 */
char buf[32];
#endif /* !ACE_HAS_IPV6 */
for (size_t i = 0; i < cnt; ++i)
{
const char *s_if = tmp[i].get_host_addr(buf, sizeof (buf));
ACE_ASSERT(s_if != 0);
ACE_CString tmp(s_if);
//ssize_t pos = tmp.find(':');
//if (pos != ACE_CString::npos)
// tmp = tmp.substr(0, pos);
local_ips.push_back(tmp);
}
delete[] tmp;
}
1.7.0