Send X-CSTP-Version and read hostname.

This commit is contained in:
Nikos Mavrogiannopoulos
2013-02-05 19:31:57 +01:00
parent 2e43570fde
commit 7c3900176e
2 changed files with 19 additions and 3 deletions

View File

@@ -91,6 +91,8 @@ typedef enum {
UP_ACTIVE
} udp_port_state_t;
#define MAX_HOSTNAME_SIZE MAX_USERNAME_SIZE
typedef struct worker_st {
struct tls_st *creds;
gnutls_session_t session;
@@ -113,6 +115,7 @@ typedef struct worker_st {
/* the following are set only if authentication is complete */
char tun_name[IFNAMSIZ];
char username[MAX_USERNAME_SIZE];
char hostname[MAX_HOSTNAME_SIZE];
uint8_t cookie[COOKIE_SIZE];
uint8_t master_secret[TLS_MASTER_SIZE];
uint8_t session_id[GNUTLS_MAX_SESSION_ID];
@@ -123,11 +126,13 @@ typedef struct worker_st {
enum {
HEADER_COOKIE = 1,
HEADER_MASTER_SECRET = 2,
HEADER_MASTER_SECRET,
HEADER_HOSTNAME,
};
struct req_data_st {
char url[256];
char hostname[MAX_HOSTNAME_SIZE];
unsigned int next_header;
unsigned char cookie[COOKIE_SIZE];
unsigned int cookie_set;

View File

@@ -133,6 +133,8 @@ int header_field_cb(http_parser* parser, const char *at, size_t length)
req->next_header = HEADER_COOKIE;
} else if (strncmp(at, "X-DTLS-Master-Secret:", length) == 0) {
req->next_header = HEADER_MASTER_SECRET;
} else if (strncmp(at, "X-CSTP-Hostname:", length) == 0) {
req->next_header = HEADER_HOSTNAME;
} else {
req->next_header = 0;
}
@@ -160,6 +162,15 @@ size_t nlen;
gnutls_hex2bin(at, length, req->master_secret, &nlen);
req->master_secret_set = 1;
break;
case HEADER_HOSTNAME:
if (length >- MAX_HOSTNAME_SIZE) {
req->hostname[0] = 0;
return 0;
}
memcpy(req->hostname, at, length);
req->hostname[length] = 0;
break;
case HEADER_COOKIE:
p = memmem(at, length, "webvpn=", 7);
@@ -762,8 +773,7 @@ gnutls_session_t ts;
tls_puts(ws->session, "HTTP/1.1 200 CONNECTED\r\n");
oclog(ws, LOG_DEBUG, "sending mtu %d", vinfo.mtu);
tls_printf(ws->session, "X-CSTP-MTU: %u\r\n", vinfo.mtu);
tls_puts(ws->session, "X-CSTP-Version: 1\r\n");
tls_puts(ws->session, "X-CSTP-DPD: 60\r\n");
ws->udp_state = UP_DISABLED;
@@ -813,6 +823,7 @@ gnutls_session_t ts;
}
tls_printf(ws->session, "X-DTLS-Session-ID: %s\r\n", buffer);
tls_printf(ws->session, "X-DTLS-MTU: %u\r\n", vinfo.mtu);
tls_printf(ws->session, "X-DTLS-Port: %u\r\n", ws->udp_port);
tls_puts(ws->session, "X-DTLS-ReKey-Time: 86400\r\n");
tls_printf(ws->session, "X-DTLS-Keepalive: %u\r\n", ws->config->keepalive);