(krb5_sockaddr2port): new function for grabbing the port number out of

the sockaddr


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6371 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-06-24 17:10:15 +00:00
parent 622cbc87ad
commit 70fe4312c6

View File

@@ -45,6 +45,7 @@ struct addr_operations {
krb5_address_type atype;
size_t max_sockaddr_size;
krb5_error_code (*sockaddr2addr)(const struct sockaddr *, krb5_address *);
krb5_error_code (*sockaddr2port)(const struct sockaddr *, int16_t *);
void (*addr2sockaddr)(const krb5_address *, struct sockaddr *,
int *sa_size, int port);
void (*h_addr2sockaddr)(const char *, struct sockaddr *, int *, int);
@@ -70,6 +71,15 @@ ipv4_sockaddr2addr (const struct sockaddr *sa, krb5_address *a)
return krb5_data_copy(&a->address, buf, 4);
}
static krb5_error_code
ipv4_sockaddr2port (const struct sockaddr *sa, int16_t *port)
{
const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
*port = sin->sin_port;
return 0;
}
static void
ipv4_addr2sockaddr (const krb5_address *a,
struct sockaddr *sa,
@@ -204,6 +214,15 @@ ipv6_sockaddr2addr (const struct sockaddr *sa, krb5_address *a)
}
}
static krb5_error_code
ipv6_sockaddr2port (const struct sockaddr *sa, int16_port *port)
{
const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
*port = sin6->sin6_port;
return 0;
}
static void
ipv6_addr2sockaddr (const krb5_address *a,
struct sockaddr *sa,
@@ -309,13 +328,19 @@ ipv6_parse_addr (const char *address, krb5_address *addr)
static struct addr_operations at[] = {
{AF_INET, KRB5_ADDRESS_INET, sizeof(struct sockaddr_in),
ipv4_sockaddr2addr, ipv4_addr2sockaddr,
ipv4_h_addr2sockaddr, ipv4_h_addr2addr,
ipv4_sockaddr2addr,
ipv4_sockaddr2port,
ipv4_addr2sockaddr,
ipv4_h_addr2sockaddr,
ipv4_h_addr2addr,
ipv4_uninteresting, ipv4_anyaddr, ipv4_print_addr, ipv4_parse_addr},
#ifdef HAVE_IPV6
{AF_INET6, KRB5_ADDRESS_INET6, sizeof(struct sockaddr_in6),
ipv6_sockaddr2addr, ipv6_addr2sockaddr,
ipv6_h_addr2sockaddr, ipv6_h_addr2addr,
ipv6_sockaddr2addr,
ipv6_sockaddr2port,
ipv6_addr2sockaddr,
ipv6_h_addr2sockaddr,
ipv6_h_addr2addr,
ipv6_uninteresting, ipv6_anyaddr, ipv6_print_addr, ipv6_parse_addr}
#endif
};
@@ -359,6 +384,15 @@ krb5_sockaddr2address (const struct sockaddr *sa, krb5_address *addr)
return (*a->sockaddr2addr)(sa, addr);
}
krb5_error_code
krb5_sockaddr2port (const struct sockaddr *sa, int16_t *port)
{
struct addr_operations *a = find_af(sa->sa_family);
if (a == NULL)
return KRB5_PROG_ATYPE_NOSUPP;
return (*a->sockaddr2port)(sa, port);
}
krb5_error_code
krb5_addr2sockaddr (const krb5_address *addr,
struct sockaddr *sa,