Next: TLS handshake, Previous: Associating the credentials, Up: How to use GnuTLS in applications [Contents][Index]
The next step is to setup the underlying transport layer details. The Berkeley sockets are implicitly used by GnuTLS, thus a call to gnutls_transport_set_ptr2 would be sufficient to specify the socket descriptor.
session: is a gnutls_session_t 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 (for push and pull callbacks). In berkeley style sockets this function will set the connection descriptor. With this function you can use two different pointers for receiving and sending.
gnutls_transport_set_ptrIf however another transport layer than TCP is selected, then the following functions have to be specified.
session: is a gnutls_session_t structure.
push_func: a callback function similar to write()
This is the function where you set a push function for gnutls to use in order to send data. If you are going to use berkeley style sockets, you do not need to use this function since the default send(2) will probably be ok. Otherwise you should specify this function for gnutls to be able to send data. The callback should return a positive number indicating the bytes sent, and -1 on error.
push_func is of the form,
ssize_t (*gnutls_push_func)(gnutls_transport_ptr_t, const void*, size_t);
session: is a gnutls_session_t structure.
vec_func: a callback function similar to writev()
Using this function you can override the default writev(2)
function for gnutls to send data. Setting this callback
instead of gnutls_transport_set_push_function() is recommended
since it introduces less overhead in the TLS handshake process.
vec_func is of the form,
ssize_t (*gnutls_vec_push_func) (gnutls_transport_ptr_t, const giovec_t * iov, int iovcnt);
Since: 2.12.0
session: is a gnutls_session_t structure.
pull_func: a callback function similar to read()
This is the function where you set a function for gnutls to receive data. Normally, if you use berkeley style sockets, do not need to use this function since the default recv(2) will probably be ok. The callback should return 0 on connection termination, a positive number indicating the number of bytes received, and -1 on error.
gnutls_pull_func is of the form,
ssize_t (*gnutls_pull_func)(gnutls_transport_ptr_t, void*, size_t);
The functions above accept a callback function which
should return the number of bytes written, or -1 on
error and should set errno appropriately.
In some environments, setting errno is unreliable. For example
Windows have several errno variables in different CRTs, or in other
systems it may be a non thread-local variable. If this is a concern to
you, call gnutls_transport_set_errno with the intended errno
value instead of setting errno directly.
session: is a gnutls_session_t structure.
err: error value to store in session-specific errno variable.
Store err in the session-specific errno variable. Useful values
for err is EAGAIN and EINTR, other values are treated will be
treated as real errors in the push/pull function.
This function is useful in replacement push and pull functions set by
gnutls_transport_set_push_function() and
gnutls_transport_set_pull_function() under Windows, where the
replacements may not have access to the same errno variable that is used by GnuTLS (e.g., the application is linked to
msvcr71.dll and gnutls is linked to msvcrt.dll).
GnuTLS currently only interprets the EINTR and EAGAIN errno values and returns the corresponding GnuTLS error codes:
GNUTLS_E_INTERRUPTED
GNUTLS_E_AGAIN
The EINTR and EAGAIN values are returned by interrupted system calls, or when non blocking IO is used. All GnuTLS functions can be resumed (called again), if any of the above error codes is returned.
In the case of DTLS it is also desirable to override the generic
transport functions with functions that emulate the operation
of recvfrom and sendto. In addition
DTLS requires timers during the receive of a handshake
message, set using the gnutls_transport_set_pull_timeout_function
function. To check the retransmission timers the function
gnutls_dtls_get_timeout is provided, which returns the time
remaining until the next retransmission, or better the time until
gnutls_handshake should be called again.
session: is a gnutls_session_t structure.
func: a callback function
This is the function where you set a function for gnutls to know
whether data are ready to be received. It should wait for data a
given time frame in milliseconds. The callback should return 0 on
timeout, a positive number if data can be received, and -1 on error.
You’ll need to override this function if select() is not suitable
for the provided transport calls.
The callback function is used in DTLS only.
gnutls_pull_timeout_func is of the form,
ssize_t (*gnutls_pull_timeout_func)(gnutls_transport_ptr_t, unsigned int ms);
Since: 3.0
session: is a gnutls_session_t structure.
This function will return the milliseconds remaining
for a retransmission of the previously sent handshake
message. This function is useful when DTLS is used in
non-blocking mode, to estimate when to call gnutls_handshake()
if no packets have been received.
Returns: the remaining time in milliseconds.
Since: 3.0
| • Asynchronous operation: | ||
| • DTLS sessions: |
Next: TLS handshake, Previous: Associating the credentials, Up: How to use GnuTLS in applications [Contents][Index]