Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
connect in separate func
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Sep 23, 2008
1 parent 4df927a commit 94503da
Showing 1 changed file with 33 additions and 23 deletions.
56 changes: 33 additions & 23 deletions dtls.c
Expand Up @@ -55,12 +55,43 @@ static unsigned char hex(const char *data)
return (nybble(data[0]) << 4) | nybble(data[1]);
}

static int connect_dtls_socket(struct anyconnect_info *vpninfo, int dtls_port)
{
int dtls_fd;

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

dtls_fd = socket(vpninfo->peer_addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
if (dtls_fd < 0) {
perror("Open UDP socket for DTLS:");
return -EINVAL;
}

if (connect(dtls_fd, vpninfo->peer_addr, vpninfo->peer_addrlen)) {
perror("UDP (DTLS) connect:\n");
close(dtls_fd);
return -EINVAL;
}

vpninfo->dtls_fd = dtls_fd;
return 0;
}

int setup_dtls(struct anyconnect_info *vpninfo)
{
struct vpn_option *dtls_opt = vpninfo->dtls_options;
int sessid_found = 0;
int dtls_port = 0;
int dtls_fd;
int i;

while (dtls_opt) {
Expand All @@ -87,29 +118,8 @@ int setup_dtls(struct anyconnect_info *vpninfo)
if (!sessid_found || !dtls_port)
return -EINVAL;

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

dtls_fd = socket(vpninfo->peer_addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
if (dtls_fd < 0) {
perror("Open UDP socket for DTLS:");
if (connect_dtls_socket(vpninfo, dtls_port))
return -EINVAL;
}

if (connect(dtls_fd, vpninfo->peer_addr, vpninfo->peer_addrlen)) {
perror("UDP (DTLS) connect:\n");
close(dtls_fd);
return -EINVAL;
}

/* No idea how to do this yet */
return -EINVAL;
Expand Down

0 comments on commit 94503da

Please sign in to comment.