]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Simplified a bit the client examples.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 17 Nov 2003 17:23:15 +0000 (17:23 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 17 Nov 2003 17:23:15 +0000 (17:23 +0000)
doc/tex/Makefile.am
doc/tex/ex-client-resume.tex
doc/tex/ex-client-srp.tex
doc/tex/ex-client2.tex
doc/tex/examples.tex

index 0f0bc6f15f032f41ccf43bb2dd242975e871f205..513d98a66354cdb278064353394f6e335cc028ad 100644 (file)
@@ -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
index e0b4502dadae7ef5eb8e9352dcd1327c3f461a97..df2f244ad6ab37fcaa7db56803ee817ae670f465 100644 (file)
@@ -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"
 
 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);
 
index 9cb79c263bfc3ff8b68dea5ba80b57321ac02269..9a9b83ab0c8c94140a6cd7cef3264ee1373d18cb 100644 (file)
@@ -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);
 
index f0ea149aeb6edbdf8314201648f61c2d85fb2090..bdd577d837b9093c221cb428f3329f9ea609603d 100644 (file)
@@ -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>
 #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);
 
index 302516ee0375b0776e865c2c32cf5af31c7eec1d..1a93aec0bb1019326f65e80935b72ccdb6dc373c 100644 (file)
@@ -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