summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2002-07-13 06:35:07 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2002-07-13 06:35:07 +0000
commit85bdd43ea13f717c749c842d477d41e7518fffc1 (patch)
treea2f312460f7563a711530830dd4129f5541125ab
parenta6b0a0ad6031b533b16a87b58969e48bbac28f26 (diff)
downloadgnutls-85bdd43ea13f717c749c842d477d41e7518fffc1.tar.gz
Added gnutls_transport_set_ptr2() which accepts two pointers.
-rw-r--r--NEWS3
-rw-r--r--lib/gnutls.h.in.in6
-rw-r--r--lib/gnutls_buffers.c4
-rw-r--r--lib/gnutls_int.h3
-rw-r--r--lib/gnutls_record.c46
5 files changed, 56 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 407a97b340..803bfb0bfd 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ Version 0.5.?
- Corrected the m4 macros which used <gnutls.h> instead of
<gnutls/gnutls.h>
- Documentation fixes
+- Added gnutls_transport_set_ptr2() function, which accepts two
+ different pointers, to be used while receiving, and
+ while sending data.
Version 0.5.0 (6/07/2002)
- Added X.509 certificate tests in tests/ directory
diff --git a/lib/gnutls.h.in.in b/lib/gnutls.h.in.in
index 9ba7923e9d..b29140f2cd 100644
--- a/lib/gnutls.h.in.in
+++ b/lib/gnutls.h.in.in
@@ -294,7 +294,13 @@ int gnutls_dh_params_generate( gnutls_datum* prime, gnutls_datum* generator, int
typedef ssize_t (*GNUTLS_PULL_FUNC)(GNUTLS_TRANSPORT_PTR, void*, size_t);
typedef ssize_t (*GNUTLS_PUSH_FUNC)(GNUTLS_TRANSPORT_PTR, const void*, size_t);
void gnutls_transport_set_ptr(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR ptr);
+void gnutls_transport_set_ptr2(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR recv_ptr,
+ GNUTLS_TRANSPORT_PTR send_ptr);
+
GNUTLS_TRANSPORT_PTR gnutls_transport_get_ptr(GNUTLS_STATE state);
+void gnutls_transport_get_ptr2(GNUTLS_STATE state,
+ GNUTLS_TRANSPORT_PTR *recv_ptr,
+ GNUTLS_TRANSPORT_PTR *send_ptr);
void gnutls_transport_set_lowat( GNUTLS_STATE state, int num);
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c
index eba4ae7bc8..728db7aa59 100644
--- a/lib/gnutls_buffers.c
+++ b/lib/gnutls_buffers.c
@@ -205,7 +205,7 @@ static ssize_t _gnutls_read( GNUTLS_STATE state, void *iptr, size_t sizeOfPtr, i
#ifdef READ_DEBUG
int j,x, sum=0;
#endif
- GNUTLS_TRANSPORT_PTR fd = state->gnutls_internals.transport_ptr;
+ GNUTLS_TRANSPORT_PTR fd = state->gnutls_internals.transport_recv_ptr;
left = sizeOfPtr;
while (left > 0) {
@@ -522,7 +522,7 @@ ssize_t _gnutls_io_write_buffered( GNUTLS_STATE state, const void *iptr, size_t
ssize_t retval, i;
const opaque * ptr;
int ret;
- GNUTLS_TRANSPORT_PTR fd = state->gnutls_internals.transport_ptr;
+ GNUTLS_TRANSPORT_PTR fd = state->gnutls_internals.transport_send_ptr;
ptr = iptr;
diff --git a/lib/gnutls_int.h b/lib/gnutls_int.h
index f5a72719ad..a8faa0465d 100644
--- a/lib/gnutls_int.h
+++ b/lib/gnutls_int.h
@@ -518,7 +518,8 @@ typedef struct {
/* Holds the first argument of PUSH and PULL
* functions;
*/
- int transport_ptr;
+ int transport_recv_ptr;
+ int transport_send_ptr;
/* STORE & RETRIEVE functions. Only used if other
* backend than gdbm is used.
diff --git a/lib/gnutls_record.c b/lib/gnutls_record.c
index 72fb582331..473ca7e050 100644
--- a/lib/gnutls_record.c
+++ b/lib/gnutls_record.c
@@ -85,8 +85,29 @@ void gnutls_transport_set_lowat(GNUTLS_STATE state, int num) {
* handle.
*
**/
-void gnutls_transport_set_ptr(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR ptr) {
- state->gnutls_internals.transport_ptr = ptr;
+void gnutls_transport_set_ptr(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR ptr)
+{
+ state->gnutls_internals.transport_recv_ptr = ptr;
+ state->gnutls_internals.transport_send_ptr = ptr;
+}
+
+
+/**
+ * gnutls_transport_set_ptr2 - Used to set first argument of the transport functions
+ * @state: is a &GNUTLS_STATE structure.
+ * @recv_ptr: is the value for the pull function
+ * @send_ptr: is the value for the push function
+ *
+ * Used to set the first argument of the transport function (like PUSH and
+ * PULL). In berkeley style sockets this function will set the connection
+ * handle. With this function you can use two different pointers for
+ * receiving and sending.
+ *
+ **/
+void gnutls_transport_set_ptr2(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR recv_ptr,
+ GNUTLS_TRANSPORT_PTR send_ptr) {
+ state->gnutls_internals.transport_send_ptr = send_ptr;
+ state->gnutls_internals.transport_recv_ptr = recv_ptr;
}
/**
@@ -98,7 +119,26 @@ void gnutls_transport_set_ptr(GNUTLS_STATE state, GNUTLS_TRANSPORT_PTR ptr) {
*
**/
GNUTLS_TRANSPORT_PTR gnutls_transport_get_ptr(GNUTLS_STATE state) {
- return state->gnutls_internals.transport_ptr;
+ return state->gnutls_internals.transport_recv_ptr;
+}
+
+/**
+ * gnutls_transport_get_ptr2 - Used to return the first argument of the transport functions
+ * @state: is a &GNUTLS_STATE structure.
+ * @recv_ptr: will hold the value for the pull function
+ * @send_ptr: will hold the value for the push function
+ *
+ * Used to get the first argument of the transport function (like PUSH and
+ * PULL). This must have been set using gnutls_transport_set_ptr().
+ *
+ **/
+void gnutls_transport_get_ptr2(GNUTLS_STATE state,
+ GNUTLS_TRANSPORT_PTR *recv_ptr,
+ GNUTLS_TRANSPORT_PTR *send_ptr)
+{
+
+ *recv_ptr = state->gnutls_internals.transport_recv_ptr;
+ *send_ptr = state->gnutls_internals.transport_send_ptr;
}
/**