diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-11-17 17:23:15 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-11-17 17:23:15 +0000 |
commit | b866c17c644a4fb7e86288fdaafa0bb8b9a6fa57 (patch) | |
tree | e978e4c517ca49080dd30a7621d6e13cd4d07a1f /doc | |
parent | fcd0931a97d614791926e46b3b33d32e44ece27c (diff) | |
download | gnutls-b866c17c644a4fb7e86288fdaafa0bb8b9a6fa57.tar.gz |
Simplified a bit the client examples.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/tex/Makefile.am | 2 | ||||
-rw-r--r-- | doc/tex/ex-client-resume.tex | 34 | ||||
-rw-r--r-- | doc/tex/ex-client-srp.tex | 84 | ||||
-rw-r--r-- | doc/tex/ex-client2.tex | 60 | ||||
-rw-r--r-- | doc/tex/examples.tex | 13 |
5 files changed, 83 insertions, 110 deletions
diff --git a/doc/tex/Makefile.am b/doc/tex/Makefile.am index 0f0bc6f15f..513d98a663 100644 --- a/doc/tex/Makefile.am +++ b/doc/tex/Makefile.am @@ -5,7 +5,7 @@ EXTRA_DIST = gnutls.tex gnutls.ps \ # If you add any examples here, also change the ../examples/Makefile.am # to include the C source. EXAMPLE_OBJECTS = ex-alert.tex ex-client-srp.tex ex-serv-export.tex \ - ex-client1.tex ex-client2.tex ex-x509-info.tex ex-rfc2818.tex \ + ex-client2.tex ex-x509-info.tex ex-rfc2818.tex \ ex-serv1.tex ex-client-resume.tex ex-serv-srp.tex \ ex-serv-pgp.tex ex-pgp-keyserver.tex ex-cert-select.tex \ ex-crq.tex ex-session-info.tex ex-pkcs12.tex diff --git a/doc/tex/ex-client-resume.tex b/doc/tex/ex-client-resume.tex index e0b4502dad..df2f244ad6 100644 --- a/doc/tex/ex-client-resume.tex +++ b/doc/tex/ex-client-resume.tex @@ -2,13 +2,14 @@ #include <stdio.h> #include <stdlib.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <unistd.h> #include <gnutls/gnutls.h> +/* Those functions are defined in other examples. + */ +extern void check_alert(gnutls_session session, int ret); +extern int tcp_connect( void); +void tcp_close( int sd); + #define MAX_BUF 1024 #define CRLFILE "crl.pem" #define CAFILE "ca.pem" @@ -17,15 +18,14 @@ int main() { - const char *PORT = "443"; - const char *SERVER = "127.0.0.1"; - int err, ret; + int ret; int sd, ii, alert; - struct sockaddr_in sa; gnutls_session session; char buffer[MAX_BUF + 1]; gnutls_certificate_credentials xcred; - /* variables used in session resuming */ + + /* variables used in session resuming + */ int t; char *session_data; int session_data_size; @@ -39,17 +39,8 @@ int main() for (t = 0; t < 2; t++) { /* connect 2 times to the server */ - sd = socket(AF_INET, SOCK_STREAM, 0); - memset(&sa, '\0', sizeof(sa)); - sa.sin_family = AF_INET; - sa.sin_port = htons(atoi(PORT)); - inet_pton(AF_INET, SERVER, &sa.sin_addr); + sd = tcp_connect(); - err = connect(sd, (SA *) & sa, sizeof(sa)); - if (err < 0) { - fprintf(stderr, "Connect error"); - exit(1); - } gnutls_init(&session, GNUTLS_CLIENT); gnutls_set_default_priority(session); @@ -117,8 +108,7 @@ int main() end: - shutdown(sd, SHUT_RDWR); /* no more receptions */ - close(sd); + tcp_close(sd); gnutls_deinit(session); diff --git a/doc/tex/ex-client-srp.tex b/doc/tex/ex-client-srp.tex index 9cb79c263b..9a9b83ab0c 100644 --- a/doc/tex/ex-client-srp.tex +++ b/doc/tex/ex-client-srp.tex @@ -2,35 +2,28 @@ #include <stdio.h> #include <stdlib.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <unistd.h> #include <gnutls/gnutls.h> #include <gnutls/extra.h> +/* Those functions are defined in other examples. + */ +extern void check_alert(gnutls_session session, int ret); +extern int tcp_connect( void); +void tcp_close( int sd); + #define MAX_BUF 1024 #define USERNAME "user" #define PASSWORD "pass" #define SA struct sockaddr #define MSG "GET / HTTP/1.0\r\n\r\n" -const int protocol_priority[] = { GNUTLS_TLS1, GNUTLS_SSL3, 0 }; const int kx_priority[] = { GNUTLS_KX_SRP, 0 }; -const int cipher_priority[] = { GNUTLS_CIPHER_3DES_CBC, - GNUTLS_CIPHER_ARCFOUR_128, 0}; -const int comp_priority[] = { GNUTLS_COMP_NULL, 0 }; -const int mac_priority[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 }; int main() { - const char *PORT = "443"; - const char *SERVER = "127.0.0.1"; - int err, ret; + int ret; int sd, ii; - struct sockaddr_in sa; - gnutls_session state; + gnutls_session session; char buffer[MAX_BUF + 1]; gnutls_srp_client_credentials xcred; @@ -54,53 +47,31 @@ int main() /* connects to server */ - sd = socket(AF_INET, SOCK_STREAM, 0); - - memset(&sa, '\0', sizeof(sa)); - sa.sin_family = AF_INET; - sa.sin_port = htons(atoi(PORT)); - inet_pton(AF_INET, SERVER, &sa.sin_addr); + sd = tcp_connect(); - err = connect(sd, (SA *) & sa, sizeof(sa)); - if (err < 0) { - fprintf(stderr, "Connect error\n"); - exit(1); - } - /* Initialize TLS state + /* Initialize TLS session */ - gnutls_init(&state, GNUTLS_CLIENT); + gnutls_init(&session, GNUTLS_CLIENT); - /* allow both SSL3 and TLS1 - */ - gnutls_protocol_set_priority(state, protocol_priority); - - /* allow only ARCFOUR and 3DES ciphers - * (3DES has the highest priority) - */ - gnutls_cipher_set_priority(state, cipher_priority); - /* only allow null compression + /* Set the priorities. */ - gnutls_compression_set_priority(state, comp_priority); + gnutls_set_default_priority(session); /* use GNUTLS_KX_SRP */ - gnutls_kx_set_priority(state, kx_priority); + gnutls_kx_set_priority(session, kx_priority); - /* allow the usage of both SHA and MD5 - */ - gnutls_mac_set_priority(state, mac_priority); - - /* put the SRP credentials to the current state + /* put the SRP credentials to the current session */ - gnutls_credentials_set(state, GNUTLS_CRD_SRP, xcred); + gnutls_credentials_set(session, GNUTLS_CRD_SRP, xcred); - gnutls_transport_set_ptr( state, (gnutls_transport_ptr)sd); + gnutls_transport_set_ptr( session, (gnutls_transport_ptr)sd); /* Perform the TLS handshake */ - ret = gnutls_handshake( state); + ret = gnutls_handshake( session); if (ret < 0) { fprintf(stderr, "*** Handshake failed\n"); @@ -110,9 +81,9 @@ int main() printf("- Handshake was completed\n"); } - gnutls_record_send( state, MSG, strlen(MSG)); + gnutls_record_send( session, MSG, strlen(MSG)); - ret = gnutls_record_recv( state, buffer, MAX_BUF); + ret = gnutls_record_recv( session, buffer, MAX_BUF); if (gnutls_error_is_fatal(ret) == 1 || ret == 0) { if (ret == 0) { printf("- Peer has closed the GNUTLS connection\n"); @@ -121,12 +92,8 @@ int main() fprintf(stderr, "*** Error: %s\n", gnutls_strerror(ret)); goto end; } - } else { - if (ret == GNUTLS_E_WARNING_ALERT_RECEIVED || ret == GNUTLS_E_FATAL_ALERT_RECEIVED) - printf("* Received alert [%d]\n", gnutls_alert_get(state)); - if (ret == GNUTLS_E_REHANDSHAKE) - printf("* Received HelloRequest message (server asked to rehandshake)\n"); - } + } else + check_alert( session, ret); if (ret > 0) { printf("- Received %d bytes: ", ret); @@ -135,14 +102,13 @@ int main() } fputs("\n", stdout); } - gnutls_bye( state, 0); + gnutls_bye( session, 0); end: - shutdown(sd, SHUT_RDWR); /* no more receptions */ - close(sd); + tcp_close( sd); - gnutls_deinit(state); + gnutls_deinit(session); gnutls_srp_free_client_credentials(xcred); diff --git a/doc/tex/ex-client2.tex b/doc/tex/ex-client2.tex index f0ea149aeb..bdd577d837 100644 --- a/doc/tex/ex-client2.tex +++ b/doc/tex/ex-client2.tex @@ -2,6 +2,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> @@ -18,13 +19,45 @@ #define SA struct sockaddr #define MSG "GET / HTTP/1.0\r\n\r\n" -int main() +/* Connects to the peer and returns a socket + * descriptor. + */ +int tcp_connect( void) { const char *PORT = "443"; const char *SERVER = "127.0.0.1"; - int err, ret; - int sd, ii; + int err, sd; struct sockaddr_in sa; + + /* connects to server + */ + sd = socket(AF_INET, SOCK_STREAM, 0); + + memset(&sa, '\0', sizeof(sa)); + sa.sin_family = AF_INET; + sa.sin_port = htons(atoi(PORT)); + inet_pton(AF_INET, SERVER, &sa.sin_addr); + + err = connect(sd, (SA *) & sa, sizeof(sa)); + if (err < 0) { + fprintf(stderr, "Connect error\n"); + exit(1); + } + + return sd; +} + +/* closes the given socket descriptor. + */ +void tcp_close( int sd) +{ + shutdown(sd, SHUT_RDWR); /* no more receptions */ + close(sd); +} + +int main() +{ + int ret, sd, ii; gnutls_session session; char buffer[MAX_BUF + 1]; gnutls_certificate_credentials xcred; @@ -42,20 +75,6 @@ int main() */ gnutls_certificate_set_x509_trust_file(xcred, CAFILE, GNUTLS_X509_FMT_PEM); - /* connects to server - */ - sd = socket(AF_INET, SOCK_STREAM, 0); - - memset(&sa, '\0', sizeof(sa)); - sa.sin_family = AF_INET; - sa.sin_port = htons(atoi(PORT)); - inet_pton(AF_INET, SERVER, &sa.sin_addr); - - err = connect(sd, (SA *) & sa, sizeof(sa)); - if (err < 0) { - fprintf(stderr, "Connect error\n"); - exit(1); - } /* Initialize TLS session */ gnutls_init(&session, GNUTLS_CLIENT); @@ -68,6 +87,10 @@ int main() */ gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + /* connect to the peer + */ + sd = tcp_connect(); + gnutls_transport_set_ptr( session, (gnutls_transport_ptr)sd); /* Perform the TLS handshake @@ -102,8 +125,7 @@ int main() end: - shutdown(sd, SHUT_RDWR); /* no more receptions */ - close(sd); + tcp_close( sd); gnutls_deinit(session); diff --git a/doc/tex/examples.tex b/doc/tex/examples.tex index 302516ee03..1a93aec0bb 100644 --- a/doc/tex/examples.tex +++ b/doc/tex/examples.tex @@ -8,14 +8,15 @@ This section contains examples of \tls{} and \ssl{} clients, using \gnutls{}. Note that these examples contain little or no error checking. \subsection{Simple client example with X.509 certificate support} -Let's assume now that we want to create a client which communicates +Let's assume now that we want to create a TCP client which communicates with servers that use X.509 or OpenPGP certificate authentication. The following client is a very simple \tls{} client, it does not support session resuming, not -even certificate verification. +even certificate verification. The TCP functions defined in this example +are used in most of the other examples below, without redefining them. \input{ex-client2} \subsection{Obtaining session information} -The following function prints some information about the current session. +The following function prints information about the current \tls{} session. \par This function should be called after a successful \printfunc{gnutls_handshake}{gnutls\_handshake} @@ -50,12 +51,6 @@ This is a modification of the simple client above. Here we added support for session resumption. \input{ex-client-resume} -\subsection{Client with Resume capability example II} -\label{resume-example2} -This is also a client with resume capability, but also demonstrates -the use of session IDs. -\input{ex-client1} - \subsection{Simple client example with SRP authentication} The following client is a very simple SRP-TLS client which connects to a server |