]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Improved client/server examples.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 10 May 2000 06:56:36 +0000 (06:56 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 10 May 2000 06:56:36 +0000 (06:56 +0000)
lib/gnutls_int.h
src/cli.c
src/port.h
src/serv.c

index d134d624b82abbcd607677990e48432bc2424d20..7592a3d1d3aa734d3104207e5a392c1afdf90112 100644 (file)
@@ -1,8 +1,8 @@
 #include <gcrypt.h>
 #include <mhash.h>
 
-#define HARD_DEBUG
-#define DEBUG
+#undef HARD_DEBUG
+#undef DEBUG
 
 #define svoid void /* for functions that allocate using secure_free */
 #define secure_free(x) if (x!=NULL) free(x)
index 2d093fc23a4b85d83634293dbba4be3ff0ca1722..dc24884316c7a7d7655f9fe4e31afc2170080f9e 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
 
 #define SA struct sockaddr
 #define ERR(err,s) if (err==-1) {perror(s);return(1);}
+#define MAX_BUF 100
 
 int main()
 {
        int err, ret;
-       int sd;
+       int sd, pid;
        struct sockaddr_in sa;
        GNUTLS_STATE state;
-       char buffer[100];
+       char buffer[MAX_BUF];
 
 //      signal(SIGPIPE, SIG_IGN);
 
@@ -60,42 +61,40 @@ int main()
                gnutls_perror(ret);
                return 1;
        } else {
-               fprintf(stderr, "Handshake was finished\n");
+               fprintf(stderr, "Handshake was completed\n\n");
        }
 
-       bzero(buffer, sizeof(buffer));
-       ret = gnutls_recv(sd, state, buffer, 5);
-       if (gnutls_is_fatal_error(ret) == 1) {
-               if (ret == GNUTLS_E_CLOSURE_ALERT_RECEIVED) {
-                       fprintf(stderr,
-                               "Peer has closed the GNUTLS connection\n");
-                       return 0;
-               } else {
-                       fprintf(stderr, "Received corrupted data(%d)\n",
-                               ret);
-                       return 1;
+       if ( pid = fork() == 0) {
+               for(;;) {
+                       bzero(buffer, MAX_BUF);
+                       ret=gnutls_recv(sd, state, buffer, MAX_BUF);
+                       if (gnutls_is_fatal_error(ret) == 1) {
+                               if (ret == GNUTLS_E_CLOSURE_ALERT_RECEIVED) {
+                                       fprintf(stderr,
+                                               "Peer has closed the GNUTLS connection\n");
+                                       break;
+                               } else {
+                                       fprintf(stderr, "Received corrupted data(%d)\n",
+                                               ret);
+                                       break;
+                               }
+                       } else {
+                               fprintf(stdout, "Received: %s\n", buffer);
+                       }
                }
-       } else {
-               fprintf(stdout, "Received: %s\n", buffer);
+               kill(getppid(), SIGTERM);
+               return 0;
        }
-
-       ret = gnutls_recv(sd, state, buffer, 10);
-       if (gnutls_is_fatal_error(ret) == 1) {
-               if (ret == GNUTLS_E_CLOSURE_ALERT_RECEIVED) {
-                       fprintf(stderr,
-                               "Peer has closed the GNUTLS connection\n");
-                       return 0;
-               } else {
-                       fprintf(stderr, "Received corrupted data(%d)\n",
-                               ret);
-                       return 1;
-               }
-       } else {
-               fprintf(stdout, "Received: %s\n", buffer);
+       /* parent */
+       
+       while( fgets(buffer, MAX_BUF, stdin) != NULL) {
+               buffer[strlen(buffer)-1] = '\0';
+               gnutls_send( sd, state, buffer, strlen(buffer));
        }
        gnutls_close(sd, state);
 
-       close(sd);
+       shutdown( sd, SHUT_WR);
+
        gnutls_deinit(&state);
        return 0;
 }
index 1c34f44c6a274f0b905a853c014f86e1ae2c5754..38977de9d66fb780b81cbe29a31c83394971e685 100644 (file)
@@ -1 +1 @@
-#define PORT 6666
+#define PORT 6667
index e48b6f82339fdb1baa404be0cb4811837d40963e..04aef65dc661e58ffd75266a57aec9d307e1f32f 100644 (file)
 
 #define SA struct sockaddr
 #define ERR(err,s) if(err==-1) {perror(s);return(1);}
+#define MAX_BUF 100
 
 int main()
 {
-       int err, listen_sd;
-       int sd, ret;
-       struct sockaddr_in sa_serv;
-       struct sockaddr_in sa_cli;
-       int client_len, i;
-       char topbuf[512];
-       GNUTLS_STATE state;
-       char *str;
-       char buf[4096];
+    int err, listen_sd;
+    int sd, ret;
+    struct sockaddr_in sa_serv;
+    struct sockaddr_in sa_cli;
+    int client_len, i;
+    char topbuf[512];
+    GNUTLS_STATE state;
+    char *str;
+    char buf[4096];
+    char buffer[MAX_BUF];
 
 
-       listen_sd = socket(AF_INET, SOCK_STREAM, 0);
-       ERR(listen_sd, "socket");
+    listen_sd = socket(AF_INET, SOCK_STREAM, 0);
+    ERR(listen_sd, "socket");
 
-       memset(&sa_serv, '\0', sizeof(sa_serv));
-       sa_serv.sin_family = AF_INET;
-       sa_serv.sin_addr.s_addr = INADDR_ANY;
-       sa_serv.sin_port = htons(PORT); /* Server Port number */
+    memset(&sa_serv, '\0', sizeof(sa_serv));
+    sa_serv.sin_family = AF_INET;
+    sa_serv.sin_addr.s_addr = INADDR_ANY;
+    sa_serv.sin_port = htons(PORT);    /* Server Port number */
 
-       err = bind(listen_sd, (SA *) & sa_serv, sizeof(sa_serv));
-       ERR(err, "bind");
-       err = listen(listen_sd, 1024);
-       ERR(err, "listen");
+    err = bind(listen_sd, (SA *) & sa_serv, sizeof(sa_serv));
+    ERR(err, "bind");
+    err = listen(listen_sd, 1024);
+    ERR(err, "listen");
 
-       client_len = sizeof(sa_cli);
-       for (;;) {
-               gnutls_init(&state, GNUTLS_SERVER);
-               sd = accept(listen_sd, (SA *) & sa_cli, &client_len);
+    client_len = sizeof(sa_cli);
+    for (;;) {
+       gnutls_init(&state, GNUTLS_SERVER);
+       sd = accept(listen_sd, (SA *) & sa_cli, &client_len);
 
 
-               fprintf(stderr, "connection from %s, port %d\n",
-                       inet_ntop(AF_INET, &sa_cli.sin_addr, topbuf,
-                                 sizeof(topbuf)), ntohs(sa_cli.sin_port));
+       fprintf(stderr, "connection from %s, port %d\n",
+               inet_ntop(AF_INET, &sa_cli.sin_addr, topbuf,
+                         sizeof(topbuf)), ntohs(sa_cli.sin_port));
 
 
 
-               ret = gnutls_handshake(sd, state);
-               if (ret < 0) {
-                       close(sd);
-                       gnutls_deinit(&state);
-                       fprintf(stderr, "Handshake has failed\n", ret);
-                       gnutls_perror(ret);
-                       continue;
+       ret = gnutls_handshake(sd, state);
+       if (ret < 0) {
+           close(sd);
+           gnutls_deinit(&state);
+           fprintf(stderr, "Handshake has failed\n", ret);
+           gnutls_perror(ret);
+           continue;
+       }
+       fprintf(stderr, "Handshake was completed\n");
+       fprintf(stderr, "Acting as echo server...");
+       ret =
+           gnutls_send(sd, state, "hello client",
+                       sizeof("hello client"));
+       if (ret < 0) {
+           close(sd);
+           gnutls_deinit(&state);
+           gnutls_perror(ret);
+           continue;
+       }
+       for (;;) {
+           bzero( buffer, MAX_BUF);
+           ret = gnutls_recv(sd, state, buffer, MAX_BUF);
+           if (gnutls_is_fatal_error(ret) == 1) {
+               if (ret == GNUTLS_E_CLOSURE_ALERT_RECEIVED) {
+                   fprintf(stderr,
+                           "\nPeer has closed the GNUTLS connection\n");
+                   break;
+               } else {
+                   fprintf(stderr, "\nReceived corrupted data\n");
+                   break;
                }
-               fprintf(stderr, "Handshake was completed\n");
 
-               ret =
-                   gnutls_send(sd, state, "hello world\n",
-                               sizeof("hello world\n"));
-               if (ret < 0) {
-                       close(sd);
-                       gnutls_deinit(&state);
-                       gnutls_perror(ret);
-                       continue;
-               }
-               fprintf(stderr, "Data was send (%d)\n", ret);
-               fprintf(stderr, "\n");
-               gnutls_close(sd, state);
-               close(sd);
-               gnutls_deinit(&state);
+           }
+           gnutls_send(sd, state, buffer, strlen(buffer));
        }
-       close(listen_sd);
-       return 0;
+       fprintf(stderr, "\n");
+       gnutls_close(sd, state);
+       close(sd);
+       gnutls_deinit(&state);
+    }
+    close(listen_sd);
+    return 0;
 
 }