gnutls: import from meta-shr

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
Koen Kooi 2011-03-23 18:14:33 +01:00
parent eaf0b80d6b
commit 1c2cf0868b
5 changed files with 1237 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,129 @@
---
libextra/gnutls_openssl.c | 58 +++++++++++++++++++++++++++++++++++++
libextra/includes/gnutls/openssl.h | 5 +++
2 files changed, 63 insertions(+)
Index: gnutls-2.8.6/libextra/gnutls_openssl.c
===================================================================
--- gnutls-2.8.6.orig/libextra/gnutls_openssl.c 2009-11-06 00:39:42.000000000 -0800
+++ gnutls-2.8.6/libextra/gnutls_openssl.c 2010-05-19 22:20:34.071283592 -0700
@@ -258,12 +258,17 @@ SSL_new (SSL_CTX * ctx)
ssl->rfd = (gnutls_transport_ptr_t) - 1;
ssl->wfd = (gnutls_transport_ptr_t) - 1;
+ ssl->ssl_peek_buffer = NULL;
+ ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
+
return ssl;
}
void
SSL_free (SSL * ssl)
{
+ if (ssl->ssl_peek_buffer)
+ free(ssl->ssl_peek_buffer);
gnutls_certificate_free_credentials (ssl->gnutls_cred);
gnutls_deinit (ssl->gnutls_state);
free (ssl);
@@ -287,6 +292,7 @@ int
SSL_set_fd (SSL * ssl, int fd)
{
gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
+ ssl->rfd = ssl->wfd = fd;
return 1;
}
@@ -312,6 +318,17 @@ SSL_set_wfd (SSL * ssl, int fd)
return 1;
}
+int SSL_get_rfd(SSL *ssl)
+{
+ return ssl->rfd;
+}
+
+int SSL_get_wfd(SSL *ssl)
+{
+ return ssl->wfd;
+}
+
+
void
SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
{
@@ -327,6 +344,8 @@ SSL_set_connect_state (SSL * ssl)
int
SSL_pending (SSL * ssl)
{
+ if (ssl->ssl_peek_avail)
+ return ssl->ssl_peek_avail;
return gnutls_record_check_pending (ssl->gnutls_state);
}
@@ -482,11 +501,50 @@ SSL_shutdown (SSL * ssl)
return 1;
}
+int SSL_peek(SSL *ssl, void *buf, int len)
+{
+ if (len > ssl->ssl_peek_buffer_size) {
+ ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
+ ssl->ssl_peek_buffer_size = len;
+ }
+
+ if (ssl->ssl_peek_avail == 0) {
+
+ int ret;
+
+ ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
+ ssl->last_error = ret;
+
+ if (ret > 0)
+ ssl->ssl_peek_avail += ret;
+ }
+
+ if (len > ssl->ssl_peek_avail)
+ len = ssl->ssl_peek_avail;
+
+ memcpy (buf, ssl->ssl_peek_buffer, len);
+
+ return len;
+}
+
int
SSL_read (SSL * ssl, void *buf, int len)
{
int ret;
+ if (ssl->ssl_peek_avail) {
+ int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
+
+ memcpy (buf, ssl->ssl_peek_buffer, n);
+
+ if (ssl->ssl_peek_avail > n)
+ memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
+
+ ssl->ssl_peek_avail -= n;
+
+ return n;
+ }
+
ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
ssl->last_error = ret;
Index: gnutls-2.8.6/libextra/includes/gnutls/openssl.h
===================================================================
--- gnutls-2.8.6.orig/libextra/includes/gnutls/openssl.h 2009-06-02 11:59:32.000000000 -0700
+++ gnutls-2.8.6/libextra/includes/gnutls/openssl.h 2010-05-19 22:20:34.071283592 -0700
@@ -164,6 +164,11 @@ extern "C"
gnutls_transport_ptr_t rfd;
gnutls_transport_ptr_t wfd;
+
+ char *ssl_peek_buffer;
+ size_t ssl_peek_buffer_size;
+ size_t ssl_peek_avail;
+
};
#define rbio gnutls_state

View File

@ -0,0 +1,41 @@
---
src/tests.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
Index: gnutls-2.8.6/src/tests.c
===================================================================
--- gnutls-2.8.6.orig/src/tests.c 2009-06-02 11:59:32.000000000 -0700
+++ gnutls-2.8.6/src/tests.c 2010-05-19 22:20:51.703780601 -0700
@@ -493,6 +493,7 @@ test_bye (gnutls_session_t session)
int old, secs = 6;
#ifndef _WIN32
+ struct sigaction act;
signal (SIGALRM, got_alarm);
#endif
@@ -513,7 +514,9 @@ test_bye (gnutls_session_t session)
return TEST_FAILED;
#ifndef _WIN32
- old = siginterrupt (SIGALRM, 1);
+ (void) sigaction(SIGALRM, NULL, &act);
+ act.sa_flags &= ~SA_RESTART;
+ old = sigaction(SIGALRM, &act, NULL);
alarm (secs);
#else
setsockopt ((int) gnutls_transport_get_ptr (session), SOL_SOCKET,
@@ -527,7 +530,12 @@ test_bye (gnutls_session_t session)
while (ret > 0);
#ifndef _WIN32
- siginterrupt (SIGALRM, old);
+ (void) sigaction(SIGALRM, NULL, &act);
+ if (old)
+ act.sa_flags &= ~SA_RESTART;
+ else
+ act.sa_flags |= SA_RESTART;
+ sigaction(SIGALRM, &act, NULL);
#else
if (WSAGetLastError () == WSAETIMEDOUT ||
WSAGetLastError () == WSAECONNABORTED)

View File

@ -0,0 +1,30 @@
DESCRIPTION = "GNU Transport Layer Security Library"
HOMEPAGE = "http://www.gnu.org/software/gnutls/"
DEPENDS = "zlib libgcrypt lzo guile-native gtk-doc"
LICENSE = "LGPL"
LICENSE_${PN}-extra = "GPLv3"
SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2;name=gnutls"
inherit autotools binconfig pkgconfig gettext
INC_PR = "r11"
EXTRA_OECONF = "--with-included-opencdk --with-included-libtasn1 --disable-rpath"
PACKAGES =+ "${PN}-openssl ${PN}-extra ${PN}-bin ${PN}-xx"
FILES_${PN} = "${libdir}/libgnutls.so.*"
FILES_${PN}-bin = "${bindir}/gnutls-serv \
${bindir}/gnutls-cli \
${bindir}/srptool \
${bindir}/psktool \
${bindir}/certtool \
${bindir}/gnutls-srpcrypt"
FILES_${PN}-dev += "${bindir}/*-config ${bindir}/gnutls-cli-debug"
FILES_${PN}-extra = "${libdir}/libgnutls-extra.so.*"
FILES_${PN}-openssl = "${libdir}/libgnutls-openssl.so.*"
FILES_${PN}-xx = "${libdir}/libgnutlsxx.so.*"
BBCLASSEXTEND = "native"

View File

@ -0,0 +1,25 @@
require gnutls.inc
PR = "${INC_PR}.0"
EXTRA_OECONF += " --without-libgcrypt-prefix "
SRC_URI += "file://gettextize-with-gettext-0.18.patch \
file://gnutls-openssl.patch \
file://gnutls-replace-siginterrupt.patch \
"
do_configure_prepend() {
MACROS="libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4"
for i in ${MACROS}; do
rm -f m4/$i
rm -f lib/m4/$i
rm -f libextra/m4/$i
done
}
SRC_URI[gnutls.md5sum] = "4e1517084018a8b1fdc96daabea40528"
SRC_URI[gnutls.sha256sum] = "b8bfe36450fe671e99db5ff1e44e6b65fda8a79cacd9e77d550eff7da3745fc8"