projects
/
cascardo
/
rnetproxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnetserver: Imprime mensagens recebidas na saida padrao.
[cascardo/rnetproxy.git]
/
hcconn_ssl.c
diff --git
a/hcconn_ssl.c
b/hcconn_ssl.c
index
1277207
..
fdff9ef
100644
(file)
--- a/
hcconn_ssl.c
+++ b/
hcconn_ssl.c
@@
-1,6
+1,6
@@
/*
** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
/*
** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
-** Copyright (C) 2009 Thadeu Lima de Souza Cascardo <cascardo@
holoscopio.com
>
+** Copyright (C) 2009 Thadeu Lima de Souza Cascardo <cascardo@
minaslivre.org
>
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@
-30,6
+30,7
@@
struct ssl_data
gnutls_session_t session;
GString *buffer;
gboolean handshaking;
gnutls_session_t session;
GString *buffer;
gboolean handshaking;
+ gboolean failed;
gpointer lowconn;
};
gpointer lowconn;
};
@@
-64,7
+65,7
@@
ssl_server_session_new (gnutls_session_t *session)
static void *cred;
cred = ssl_server_get_credentials ();
gnutls_init (session, GNUTLS_SERVER);
static void *cred;
cred = ssl_server_get_credentials ();
gnutls_init (session, GNUTLS_SERVER);
- gnutls_
priority_set_direct (*session, "NORMAL", NULL
);
+ gnutls_
set_default_priority (*session
);
gnutls_credentials_set (*session, GNUTLS_CRD_CERTIFICATE, cred);
gnutls_dh_set_prime_bits (*session, DH_BITS);
}
gnutls_credentials_set (*session, GNUTLS_CRD_CERTIFICATE, cred);
gnutls_dh_set_prime_bits (*session, DH_BITS);
}
@@
-93,6
+94,7
@@
ssl_data_new (int server)
ssl_client_session_new (&ssl->session);
ssl->buffer = g_string_sized_new (4096);
ssl->handshaking = FALSE;
ssl_client_session_new (&ssl->session);
ssl->buffer = g_string_sized_new (4096);
ssl->handshaking = FALSE;
+ ssl->failed = FALSE;
return ssl;
}
return ssl;
}
@@
-138,25
+140,31
@@
ssl_pull (gnutls_transport_ptr_t ptr, void *buffer, size_t len)
}
if (r == 0)
{
}
if (r == 0)
{
-
gnutls_transport_set_errno (ssl->session,
EAGAIN);
+
errno = (
EAGAIN);
return -1;
}
return r;
}
static void
return -1;
}
return r;
}
static void
-ssl_server_handshake (
struct ssl_data *ssl
)
+ssl_server_handshake (
HCConn *conn
)
{
{
+ struct ssl_data *ssl = conn->layer;
int error;
if ((error = gnutls_handshake (ssl->session)) < 0)
{
if (gnutls_error_is_fatal (error))
int error;
if ((error = gnutls_handshake (ssl->session)) < 0)
{
if (gnutls_error_is_fatal (error))
- g_critical ("Fatal error while doing TLS handshaking: %s\n",
- gnutls_strerror (error));
+ {
+ g_critical ("Fatal error while doing TLS handshaking: %s\n",
+ gnutls_strerror (error));
+ ssl->failed = TRUE;
+ }
}
else
{
ssl->handshaking = FALSE;
}
else
{
ssl->handshaking = FALSE;
+ if (conn->func)
+ conn->func (conn, HC_EVENT_CONNECT, conn->data);
}
}
}
}
@@
-168,7
+176,7
@@
ssl_server_connect (HCConn *conn)
gnutls_transport_set_push_function (ssl->session, ssl_push);
gnutls_transport_set_pull_function (ssl->session, ssl_pull);
ssl->handshaking = TRUE;
gnutls_transport_set_push_function (ssl->session, ssl_push);
gnutls_transport_set_pull_function (ssl->session, ssl_pull);
ssl->handshaking = TRUE;
- ssl_server_handshake (
ssl
);
+ ssl_server_handshake (
conn
);
}
static void
}
static void
@@
-209,7
+217,10
@@
hc_conn_ssl_watch (HCConn *conn, HCEvent event, gpointer data)
case HC_EVENT_READ:
if (ssl->handshaking)
{
case HC_EVENT_READ:
if (ssl->handshaking)
{
- ssl_server_handshake (ssl);
+ ssl_server_handshake (ssl_conn);
+ /* FIXME: create HC_CONN_ERROR */
+ if (ssl->failed && ssl_conn->func)
+ ssl_conn->func (ssl_conn, HC_EVENT_CLOSE, ssl_conn->data);
return;
}
while ((r = hc_conn_read (ssl->lowconn, buffer, sizeof (buffer))) > 0)
return;
}
while ((r = hc_conn_read (ssl->lowconn, buffer, sizeof (buffer))) > 0)
@@
-251,3
+262,11
@@
hc_conn_set_driver_ssl_server (HCConn *conn, HCConn *lowconn)
{
return hc_conn_set_driver_ssl (conn, lowconn, 1);
}
{
return hc_conn_set_driver_ssl (conn, lowconn, 1);
}
+
+void
+hc_conn_ssl_server_set_priority (HCConn *conn, char *priority)
+{
+ struct ssl_data *ssl;
+ ssl = conn->layer;
+ gnutls_priority_set_direct (ssl->session, priority, NULL);
+}