Skip to content

Commit

Permalink
Factor out udp_sockaddr() helper function
Browse files Browse the repository at this point in the history
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Jan 26, 2015
1 parent e66e465 commit 8721d40
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
19 changes: 1 addition & 18 deletions dtls.c
Expand Up @@ -636,27 +636,10 @@ int dtls_setup(struct openconnect_info *vpninfo, int dtls_attempt_period)
if (vpninfo->dtls_times.rekey <= 0)
vpninfo->dtls_times.rekey_method = REKEY_NONE;

vpninfo->dtls_addr = malloc(vpninfo->peer_addrlen);
if (!vpninfo->dtls_addr) {
vpninfo->dtls_attempt_period = 0;
return -ENOMEM;
}
memcpy(vpninfo->dtls_addr, vpninfo->peer_addr, vpninfo->peer_addrlen);

if (vpninfo->peer_addr->sa_family == AF_INET) {
struct sockaddr_in *sin = (void *)vpninfo->dtls_addr;
sin->sin_port = htons(dtls_port);
} else if (vpninfo->peer_addr->sa_family == AF_INET6) {
struct sockaddr_in6 *sin = (void *)vpninfo->dtls_addr;
sin->sin6_port = htons(dtls_port);
} else {
vpn_progress(vpninfo, PRG_ERR,
_("Unknown protocol family %d. Cannot do DTLS\n"),
vpninfo->peer_addr->sa_family);
if (udp_sockaddr(vpninfo, dtls_port)) {
vpninfo->dtls_attempt_period = 0;
return -EINVAL;
}

if (connect_dtls_socket(vpninfo))
return -EINVAL;

Expand Down
1 change: 1 addition & 0 deletions openconnect-internal.h
Expand Up @@ -703,6 +703,7 @@ int openconnect_open_utf8(struct openconnect_info *vpninfo,
const char *fname, int mode);
FILE *openconnect_fopen_utf8(struct openconnect_info *vpninfo,
const char *fname, const char *mode);
int udp_sockaddr(struct openconnect_info *vpninfo, int port);

void openconnect_clear_cookies(struct openconnect_info *vpninfo);

Expand Down
24 changes: 24 additions & 0 deletions ssl.c
Expand Up @@ -798,3 +798,27 @@ FILE *openconnect_fopen_utf8(struct openconnect_info *vpninfo, const char *fname

return fdopen(fd, mode);
}

int udp_sockaddr(struct openconnect_info *vpninfo, int port)
{
vpninfo->dtls_addr = malloc(vpninfo->peer_addrlen);
if (!vpninfo->dtls_addr)
return -ENOMEM;

memcpy(vpninfo->dtls_addr, vpninfo->peer_addr, vpninfo->peer_addrlen);

if (vpninfo->peer_addr->sa_family == AF_INET) {
struct sockaddr_in *sin = (void *)vpninfo->dtls_addr;
sin->sin_port = htons(port);
} else if (vpninfo->peer_addr->sa_family == AF_INET6) {
struct sockaddr_in6 *sin = (void *)vpninfo->dtls_addr;
sin->sin6_port = htons(port);
} else {
vpn_progress(vpninfo, PRG_ERR,
_("Unknown protocol family %d. Cannot create UDP server address\n"),
vpninfo->peer_addr->sa_family);
return -EINVAL;
}

return 0;
}

0 comments on commit 8721d40

Please sign in to comment.