本文整理汇总了C++中condor_sockaddr类的典型用法代码示例。如果您正苦于以下问题:C++ condor_sockaddr类的具体用法?C++ condor_sockaddr怎么用?C++ condor_sockaddr使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了condor_sockaddr类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: open_tcp_stream
// Cribbed from directConnectToSockAddr(). Could probably just call it
// between SetSyscalls(), but I don't know that SO_KEEPALIVE doesn't matter.
int open_tcp_stream( const condor_sockaddr & sa ) {
int scm = SetSyscalls( SYS_LOCAL | SYS_UNMAPPED );
int fd = socket( sa.get_aftype(), SOCK_STREAM, 0 );
assert( fd != -1 );
int rv = _condor_local_bind( TRUE, fd );
if( rv != TRUE ) {
close( fd );
SetSyscalls( scm );
return -1;
}
// condor_connect ends up pulling in param() via ip6_get_scope_id(),
// which we can't allow, since this function is linked into standard
// universe jobs.
// rv = condor_connect( fd, sa );
rv = connect( fd, sa.to_sockaddr(), sa.get_socklen() );
if( rv != 0 ) {
dprintf( D_ALWAYS, "condor_connect() failed - errno = %d (rv %d)\n", errno, rv );
close( fd );
SetSyscalls( scm );
return -1;
}
SetSyscalls( scm );
return fd;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:30,代码来源:file_stream.cpp
示例2: get_hostname
MyString get_hostname(const condor_sockaddr& addr) {
MyString ret;
if (nodns_enabled())
return convert_ipaddr_to_hostname(addr);
condor_sockaddr targ_addr;
// just like sin_to_string(), if given address is 0.0.0.0 or equivalent,
// it changes to local IP address.
if (addr.is_addr_any())
targ_addr = get_local_ipaddr(addr.get_protocol());
else
targ_addr = addr;
int e;
char hostname[NI_MAXHOST];
// if given address is link-local IPv6 address, it will have %NICname
// at the end of string
// we would like to avoid it
if (targ_addr.is_ipv6())
targ_addr.set_scope_id(0);
e = condor_getnameinfo(targ_addr, hostname, sizeof(hostname), NULL, 0, 0);
if (e)
return ret;
ret = hostname;
return ret;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:30,代码来源:ipv6_hostname.cpp
示例3: get_local_ipaddr
condor_sockaddr get_local_ipaddr(condor_protocol proto)
{
init_local_hostname();
if ((proto == CP_IPV4) && local_ipv4addr.is_ipv4()) { return local_ipv4addr; }
if ((proto == CP_IPV6) && local_ipv6addr.is_ipv6()) { return local_ipv6addr; }
return local_ipaddr;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:7,代码来源:ipv6_hostname.cpp
示例4: compare_address
bool condor_sockaddr::compare_address(const condor_sockaddr& addr) const
{
if (is_ipv4()) {
if (!addr.is_ipv4())
return false;
return v4.sin_addr.s_addr == addr.v4.sin_addr.s_addr;
} else if (is_ipv6()) {
if (!addr.is_ipv6())
return false;
return memcmp((const void*)&v6.sin6_addr,
(const void*)&addr.v6.sin6_addr,
sizeof(in6_addr)) == 0;
}
return false;
}
开发者ID:cwmartin,项目名称:htcondor,代码行数:15,代码来源:condor_sockaddr.cpp
示例5: convert_ipaddr_to_hostname
MyString convert_ipaddr_to_hostname(const condor_sockaddr& addr)
{
MyString ret;
MyString default_domain;
if (!param(default_domain, "DEFAULT_DOMAIN_NAME")) {
dprintf(D_HOSTNAME,
"NO_DNS: DEFAULT_DOMAIN_NAME must be defined in your "
"top-level config file\n");
return ret;
}
ret = addr.to_ip_string();
for (int i = 0; i < ret.Length(); ++i) {
if (ret[i] == '.' || ret[i] == ':')
ret.setChar(i, '-');
}
ret += ".";
ret += default_domain;
// Hostnames can't begin with -, as per RFC 1123
// ipv6 zero-compression could cause this, esp. for the loopback addr
if (ret[0] == '-') {
ret = "0" + ret;
}
return ret;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:27,代码来源:ipv6_hostname.cpp
示例6: get_hostname_with_alias
std::vector<MyString> get_hostname_with_alias(const condor_sockaddr& addr)
{
std::vector<MyString> prelim_ret;
std::vector<MyString> actual_ret;
MyString hostname = get_hostname(addr);
if (hostname.IsEmpty())
return prelim_ret;
// we now start to construct a list (prelim_ret) of the hostname and all
// the aliases. first the name itself.
prelim_ret.push_back(hostname);
if (nodns_enabled())
// don't need to verify this... the string is actually an IP here
return prelim_ret; // no need to call further DNS functions.
// now, add the aliases
hostent* ent;
//int aftype = addr.get_aftype();
//ent = gethostbyname2(hostname.Value(), addr.get_aftype());
// really should call gethostbyname2() however most platforms do not
// support. (Solaris, HP-UX, IRIX)
// complete DNS aliases can be only obtained by gethostbyname.
// however, what happens if we call it in IPv6-only system?
// can we get DNS aliases for the hostname that only contains
// IPv6 addresses?
ent = gethostbyname(hostname.Value());
if (ent) {
char** alias = ent->h_aliases;
for (; *alias; ++alias) {
prelim_ret.push_back(MyString(*alias));
}
}
// WARNING! there is a reason this is implimented as two separate loops,
// so please don't try to combine them.
//
// calling verify_name_has_ip() will potentially overwrite static data that
// is referred to by ent->h_aliases (man 3 gethostbyname, see notes). so
// first, we push the name and then all aliases into the MyString vector
// prelim_ret, and then verify them in the following loop.
for (unsigned int i = 0; i < prelim_ret.size(); i++) {
if(verify_name_has_ip(prelim_ret[i], addr)) {
actual_ret.push_back(prelim_ret[i]);
} else {
dprintf(D_ALWAYS, "WARNING: forward resolution of %s doesn't match %s!\n",
prelim_ret[i].Value(), addr.to_ip_string().Value());
}
}
return actual_ret;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:57,代码来源:ipv6_hostname.cpp
示例7: verify_name_has_ip
bool verify_name_has_ip(MyString name, condor_sockaddr addr){
std::vector<condor_sockaddr> addrs;
bool found = false;
addrs = resolve_hostname(name);
dprintf(D_FULLDEBUG, "IPVERIFY: checking %s against %s\n", name.Value(), addr.to_ip_string().Value());
for(unsigned int i = 0; i < addrs.size(); i++) {
// compare MyStrings
// addr.to_ip_string
if(addrs[i].to_ip_string() == addr.to_ip_string()) {
dprintf(D_FULLDEBUG, "IPVERIFY: matched %s to %s\n", addrs[i].to_ip_string().Value(), addr.to_ip_string().Value());
found = true;
} else {
dprintf(D_FULLDEBUG, "IPVERIFY: comparing %s to %s\n", addrs[i].to_ip_string().Value(), addr.to_ip_string().Value());
}
}
dprintf(D_FULLDEBUG, "IPVERIFY: ip found is %i\n", found);
return found;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:20,代码来源:ipv6_hostname.cpp
示例8: replace_higher_scoring_addr
static void replace_higher_scoring_addr(const char * reason, condor_sockaddr & current, int & current_score,
const condor_sockaddr & potential, int potential_score) {
const char * result = "skipped for low score";
if(current_score < potential_score) {
current = potential;
current_score = potential_score;
result = "new winner";
}
dprintf(D_HOSTNAME, "%s: %s (score %d) %s\n",
reason,
potential.to_ip_string().Value(),
potential_score,
result);
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:15,代码来源:ipv6_hostname.cpp
示例9: init_local_hostname_impl
//.........这里部分代码省略.........
if( ! nodns_enabled() ) {
const int MAX_TRIES = 20;
const int SLEEP_DUR = 3;
bool gai_success = false;
for(int try_count = 1; true; try_count++) {
addrinfo hint = get_default_hint();
hint.ai_family = AF_UNSPEC;
int ret = ipv6_getaddrinfo(test_hostname.Value(), NULL, ai, hint);
if(ret == 0) { gai_success = true; break; }
if(ret != EAI_AGAIN ) {
dprintf(D_ALWAYS, "init_local_hostname_impl: ipv6_getaddrinfo() could not look up '%s': %s (%d). Error is not recoverable; giving up. Problems are likely.\n", test_hostname.Value(), gai_strerror(ret), ret );
gai_success = false;
break;
}
dprintf(D_ALWAYS, "init_local_hostname_impl: ipv6_getaddrinfo() returned EAI_AGAIN for '%s'. Will try again after sleeping %d seconds (try %d of %d).\n", test_hostname.Value(), SLEEP_DUR, try_count + 1, MAX_TRIES );
if(try_count == MAX_TRIES) {
dprintf(D_ALWAYS, "init_local_hostname_impl: ipv6_getaddrinfo() never succeeded. Giving up. Problems are likely\n");
break;
}
sleep(SLEEP_DUR);
}
if(gai_success) {
int local_hostname_desireability = 0;
#ifdef TEST_DNS_TODO
int local_ipaddr_desireability = 0;
int local_ipv4addr_desireability = 0;
int local_ipv6addr_desireability = 0;
#endif
while (addrinfo* info = ai.next()) {
// TODO: the only time ai_canonname should be set is the first
// record. Why are we testing its desirability?
const char* name = info->ai_canonname;
if (!name)
continue;
condor_sockaddr addr(info->ai_addr);
int desireability = addr.desirability();
const char * result = "skipped for low score";
if(desireability > local_hostname_desireability) {
result = "new winner";
dprintf(D_HOSTNAME, " I like it.\n");
local_hostname_desireability = desireability;
const char* dotpos = strchr(name, '.');
if (dotpos) { // consider it as a FQDN
local_fqdn = name;
local_hostname = local_fqdn.Substr(0, dotpos-name-1);
} else {
local_hostname = name;
local_fqdn = local_hostname;
MyString default_domain;
if (param(default_domain, "DEFAULT_DOMAIN_NAME")) {
if (default_domain[0] != '.')
local_fqdn += ".";
local_fqdn += default_domain;
}
}
}
dprintf(D_HOSTNAME, "hostname: %s (score %d) %s\n", name, desireability, result);
#ifdef TEST_DNS_TODO
// Resist urge to set local_ip*addr_initialized=true,
// We want to repeatedly retest this looking for
// better results.
if (!local_ipaddr_initialized) {
replace_higher_scoring_addr("IP",
local_ipaddr, local_ipaddr_desireability,
addr, desireability);
}
if (addr.is_ipv4() && !local_ipv4addr_initialized) {
replace_higher_scoring_addr("IPv4",
local_ipv4addr, local_ipv4addr_desireability,
addr, desireability);
}
if (addr.is_ipv6() && !local_ipv6addr_initialized) {
replace_higher_scoring_addr("IPv6",
local_ipv6addr, local_ipv6addr_desireability,
addr, desireability);
}
#else
// Make Fedora quit complaining.
if( local_ipv4addr_initialized && local_ipv6addr_initialized && local_fqdn_initialized ) {
local_ipv4addr_initialized = false;
local_ipv6addr_initialized = false;
local_fqdn_initialized = false;
}
#endif
}
}
}
return true;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:101,代码来源:ipv6_hostname.cpp
示例10: sendMsg
/*
* @returns: the number of bytes sent, if succeeds
* -1, if fails
*/
int _condorOutMsg::sendMsg(const int sock,
const condor_sockaddr& who,
_condorMsgID msgID,
unsigned char * mac)
{
_condorPacket* tempPkt;
int seqNo = 0, msgLen = 0, sent;
int total = 0;
unsigned char * md = mac;
//char str[10000];
if(headPacket->empty()) // empty message
return 0;
while(headPacket != lastPacket) {
tempPkt = headPacket;
headPacket = headPacket->next;
tempPkt->makeHeader(false, seqNo++, msgID, md);
msgLen += tempPkt->length;
sent = condor_sendto(sock, tempPkt->dataGram,
tempPkt->length + SAFE_MSG_HEADER_SIZE,
0, who);
if(sent != tempPkt->length + SAFE_MSG_HEADER_SIZE) {
dprintf(D_ALWAYS, "sendMsg:sendto failed - errno: %d\n", errno);
headPacket = tempPkt;
clearMsg();
return -1;
}
//int i;
//str[0] = 0;
//for (i=0; i<tempPkt->length + SAFE_MSG_HEADER_SIZE; i++) {
// sprintf(&str[strlen(str)], "%02x,", tempPkt->dataGram[i]);
//}
//dprintf(D_NETWORK, "--->packet [%d bytes]: %s\n", sent, str);
dprintf( D_NETWORK, "SEND [%d] %s ", sent, sock_to_string(sock) );
dprintf( D_NETWORK|D_NOHEADER, "%s\n",
who.to_sinful().Value());
total += sent;
delete tempPkt;
md = 0;
}
// headPacket = lastPacket
if(seqNo == 0) { // a short message
msgLen = lastPacket->length;
lastPacket->makeHeader(true, 0, msgID, md);
// Short messages are sent without initial "magic" header,
// because we don't need to specify sequence number,
// and presumably for backwards compatibility with ancient
// versions of Condor. The crypto header may still
// be there, since that is in the buffer starting at
// the position pointed to by "data".
sent = condor_sendto(sock, lastPacket->data, lastPacket->length,
0, who);
if(sent != lastPacket->length) {
dprintf( D_ALWAYS,
"SafeMsg: sending small msg failed. errno: %d\n",
errno );
headPacket->reset();
return -1;
}
//str[0] = 0;
//for (i=0; i<lastPacket->length + SAFE_MSG_HEADER_SIZE; i++) {
// sprintf(&str[strlen(str)], "%02x,", lastPacket->dataGram[i]);
//}
//dprintf(D_NETWORK, "--->packet [%d bytes]: %s\n", sent, str);
dprintf( D_NETWORK, "SEND [%d] %s ", sent, sock_to_string(sock) );
dprintf( D_NETWORK|D_NOHEADER, "%s\n", who.to_sinful().Value());
total = sent;
}
else {
lastPacket->makeHeader(true, seqNo, msgID, md);
msgLen += lastPacket->length;
sent = condor_sendto(sock, lastPacket->dataGram,
lastPacket->length + SAFE_MSG_HEADER_SIZE,
0, who);
if(sent != lastPacket->length + SAFE_MSG_HEADER_SIZE) {
dprintf( D_ALWAYS, "SafeMsg: sending last packet failed. errno: %d\n", errno );
headPacket->reset();
return -1;
}
//str[0] = 0;
//for (i=0; i<lastPacket->length + SAFE_MSG_HEADER_SIZE; i++) {
// sprintf(&str[strlen(str)], "%02x,", lastPacket->dataGram[i]);
//}
//dprintf(D_NETWORK, "--->packet [%d bytes]: %s\n", sent, str);
dprintf( D_NETWORK, "SEND [%d] %s ", sent, sock_to_string(sock) );
dprintf( D_NETWORK|D_NOHEADER, "%s\n", who.to_sinful().Value());
total += sent;
}
headPacket->reset();
//.........这里部分代码省略.........
开发者ID:AlainRoy,项目名称:htcondor,代码行数:101,代码来源:SafeMsg.cpp
示例11: init_local_hostname
void init_local_hostname()
{
// [m.]
// initializing local hostname, ip address, fqdn was
// super complex.
//
// implementation was scattered over condor_netdb and
// my_hostname, get_full_hostname.
//
// above them has duplicated code in many ways.
// so I aggregated all of them into here.
bool ipaddr_inited = false;
char hostname[MAXHOSTNAMELEN];
int ret;
// [TODO:IPV6] condor_gethostname is not IPv6 safe.
// reimplement it.
ret = condor_gethostname(hostname, sizeof(hostname));
if (ret) {
dprintf(D_ALWAYS, "condor_gethostname() failed. Cannot initialize "
"local hostname, ip address, FQDN.\n");
return;
}
dprintf(D_HOSTNAME, "condor_gethostname() claims we are %s\n", hostname);
// Fallback case.
local_hostname = hostname;
// if NETWORK_INTERFACE is defined, we use that as a local ip addr.
MyString network_interface;
if (param(network_interface, "NETWORK_INTERFACE", "*")) {
if (local_ipaddr.from_ip_string(network_interface))
ipaddr_inited = true;
}
// Dig around for an IP address in the interfaces
// TODO WARNING: Will only return IPv4 addresses!
if( ! ipaddr_inited ) {
std::string ip;
if( ! network_interface_to_ip("NETWORK_INTERFACE", network_interface.Value(), ip, NULL)) {
dprintf(D_ALWAYS, "Unable to identify IP address from interfaces. None matches NETWORK_INTERFACE=%s. Problems are likely.\n", network_interface.Value());
return;
}
if ( ! local_ipaddr.from_ip_string(ip))
{
// Should not happen; means network_interface_to_ip returned
// invalid IP address.
ASSERT(FALSE);
}
ipaddr_inited = true;
}
// now initialize hostname and fqdn
if (nodns_enabled()) { // if nodns is enabled, we can cut some slack.
// condor_gethostname() returns a hostname with
// DEFAULT_DOMAIN_NAME. Thus, it is always fqdn
local_fqdn = hostname;
if (!ipaddr_inited) {
local_ipaddr = convert_hostname_to_ipaddr(local_hostname);
}
return;
}
addrinfo_iterator ai;
ret = ipv6_getaddrinfo(hostname, NULL, ai);
if (ret) {
// write some error message
dprintf(D_HOSTNAME, "hostname %s cannot be resolved by getaddrinfo\n",
hostname);
return;
}
int local_hostname_desireability = 0;
while (addrinfo* info = ai.next()) {
const char* name = info->ai_canonname;
if (!name)
continue;
condor_sockaddr addr(info->ai_addr);
int desireability = 0;
if (addr.is_loopback()) { desireability = 1; }
else if(addr.is_private_network()) { desireability = 2; }
else { desireability = 3; }
dprintf(D_HOSTNAME, "Considering %s (Ranked at %d) as possible local hostname versus %s/%s (%d)\n", name, desireability, local_hostname.Value(), local_fqdn.Value(), local_hostname_desireability);
if(desireability < local_hostname_desireability) { continue; }
local_hostname_desireability = desireability;
if (!ipaddr_inited)
local_ipaddr = addr;
const char* dotpos = strchr(name, '.');
if (dotpos) { // consider it as a FQDN
local_fqdn = name;
local_hostname = local_fqdn.Substr(0, dotpos-name-1);
} else {
local_hostname = name;
local_fqdn = local_hostname;
MyString default_domain;
//.........这里部分代码省略.........
开发者ID:,项目名称:,代码行数:101,代码来源:
示例12: if
int
IpVerify::Verify( DCpermission perm, const condor_sockaddr& addr, const char * user, MyString *allow_reason, MyString *deny_reason )
{
perm_mask_t mask;
in6_addr sin6_addr;
const char *thehost;
const char * who = user;
MyString peer_description; // we build this up as we go along (DNS etc.)
if( !did_init ) {
Init();
}
/*
* Be Warned: careful about parameter "sin" being NULL. It could be, in
* which case we should return FALSE (unless perm is ALLOW)
*
*/
switch ( perm ) {
case ALLOW:
return USER_AUTH_SUCCESS;
break;
default:
break;
}
sin6_addr = addr.to_ipv6_address();
mask = 0; // must initialize to zero because we logical-or bits into this
if (who == NULL || *who == '\0') {
who = TotallyWild;
}
if ( perm >= LAST_PERM || !PermTypeArray[perm] ) {
EXCEPT("IpVerify::Verify: called with unknown permission %d\n",perm);
}
// see if a authorization hole has been dyamically punched (via
// PunchHole) for this perm / user / IP
// Note that the permission hierarchy is dealt with in
// PunchHole(), by punching a hole for all implied levels.
// Therefore, if there is a hole or an implied hole, we will
// always find it here before we get into the subsequent code
// which recursively calls Verify() to traverse the hierarchy.
// This is important, because we do not want holes to find
// there way into the authorization cache.
//
if ( PunchedHoleArray[perm] != NULL ) {
HolePunchTable_t* hpt = PunchedHoleArray[perm];
MyString ip_str_buf = addr.to_ip_string();
const char* ip_str = ip_str_buf.Value();
MyString id_with_ip;
MyString id;
int count;
if ( who != TotallyWild ) {
id_with_ip.sprintf("%s/%s", who, ip_str);
id = who;
if ( hpt->lookup(id, count) != -1 ) {
if( allow_reason ) {
allow_reason->sprintf(
"%s authorization has been made automatic for %s",
PermString(perm), id.Value() );
}
return USER_AUTH_SUCCESS;
}
if ( hpt->lookup(id_with_ip, count) != -1 ) {
if( allow_reason ) {
allow_reason->sprintf(
"%s authorization has been made automatic for %s",
PermString(perm), id_with_ip.Value() );
}
return USER_AUTH_SUCCESS;
}
}
id = ip_str;
if ( hpt->lookup(id, count) != -1 ) {
if( allow_reason ) {
allow_reason->sprintf(
"%s authorization has been made automatic for %s",
PermString(perm), id.Value() );
}
return USER_AUTH_SUCCESS;
}
}
if ( PermTypeArray[perm]->behavior == USERVERIFY_ALLOW ) {
// allow if no HOSTALLOW_* or HOSTDENY_* restrictions
// specified.
if( allow_reason ) {
allow_reason->sprintf(
"%s authorization policy allows access by anyone",
PermString(perm));
}
return USER_AUTH_SUCCESS;
}
if ( PermTypeArray[perm]->behavior == USERVERIFY_DENY ) {
//.........这里部分代码省略.........
开发者ID:,项目名称:,代码行数:101,代码来源:
示例13: reset_local_hostname
void reset_local_hostname() {
if( ! init_local_hostname_impl() ) {
dprintf( D_ALWAYS, "Something went wrong identifying my hostname and IP address.\n" );
hostname_initialized = false;
} else {
dprintf( D_HOSTNAME, "I am: hostname: %s, fully qualified doman name: %s, IP: %s, IPv4: %s, IPv6: %s\n", local_hostname.Value(), local_fqdn.Value(), local_ipaddr.to_ip_string().Value(), local_ipv4addr.to_ip_string().Value(), local_ipv6addr.to_ip_string().Value() );
hostname_initialized = true;
}
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:9,代码来源:ipv6_hostname.cpp
注:本文中的condor_sockaddr类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论