/[weechat]/weechat/src/irc/irc-server.c
ViewVC logotype

Diff of /weechat/src/irc/irc-server.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.58 by flashcode, Tue Jun 21 08:05:58 2005 UTC revision 1.59 by flashcode, Wed Jun 22 21:08:22 2005 UTC
# Line 38  Line 38 
38  #include <netinet/in.h>  #include <netinet/in.h>
39  #include <arpa/inet.h>  #include <arpa/inet.h>
40  #include <netdb.h>  #include <netdb.h>
41    
42    #ifdef HAVE_GNUTLS
43  #include <gnutls/gnutls.h>  #include <gnutls/gnutls.h>
44    #endif
45    
46  #include "../common/weechat.h"  #include "../common/weechat.h"
47  #include "irc.h"  #include "irc.h"
# Line 87  server_init (t_irc_server *server) Line 90  server_init (t_irc_server *server)
90      server->child_write = -1;      server->child_write = -1;
91      server->sock = -1;      server->sock = -1;
92      server->is_connected = 0;      server->is_connected = 0;
93        #ifdef HAVE_GNUTLS
94        server->ssl_connected = 0;
95        #endif
96      server->unterminated_message = NULL;      server->unterminated_message = NULL;
97      server->nick = NULL;      server->nick = NULL;
98      server->reconnect_start = 0;      server->reconnect_start = 0;
# Line 383  server_send (t_irc_server *server, char Line 389  server_send (t_irc_server *server, char
389      if (!server)      if (!server)
390          return -1;          return -1;
391            
392      if (server->ssl)      #ifdef HAVE_GNUTLS
393        if (server->ssl_connected)
394          return gnutls_record_send (server->gnutls_sess, buffer, size_buf);          return gnutls_record_send (server->gnutls_sess, buffer, size_buf);
395      else      else
396        #endif
397          return send (server->sock, buffer, size_buf, 0);          return send (server->sock, buffer, size_buf, 0);
398  }  }
399    
# Line 660  server_recv (t_irc_server *server) Line 668  server_recv (t_irc_server *server)
668      if (!server)      if (!server)
669          return;          return;
670            
671      if (server->ssl)      #ifdef HAVE_GNUTLS
672        if (server->ssl_connected)
673          num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);          num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);
674      else      else
675        #endif
676          num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);          num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);
677            
678      if (num_read > 0)      if (num_read > 0)
# Line 721  server_close_connection (t_irc_server *s Line 731  server_close_connection (t_irc_server *s
731      /* close network socket */      /* close network socket */
732      if (server->sock != -1)      if (server->sock != -1)
733      {      {
734          if (server->ssl)          #ifdef HAVE_GNUTLS
735            if (server->ssl_connected)
736              gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);              gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);
737            #endif
738          close (server->sock);          close (server->sock);
739          server->sock = -1;          server->sock = -1;
740          if (server->ssl)          #ifdef HAVE_GNUTLS
741            if (server->ssl_connected)
742              gnutls_deinit (server->gnutls_sess);              gnutls_deinit (server->gnutls_sess);
743            #endif
744      }      }
745            
746      /* free any pending message */      /* free any pending message */
# Line 738  server_close_connection (t_irc_server *s Line 752  server_close_connection (t_irc_server *s
752            
753      /* server is now disconnected */      /* server is now disconnected */
754      server->is_connected = 0;      server->is_connected = 0;
755        #ifdef HAVE_GNUTLS
756        server->ssl_connected = 0;
757        #endif
758  }  }
759    
760  /*  /*
# Line 776  server_child_read (t_irc_server *server) Line 793  server_child_read (t_irc_server *server)
793              /* connection OK */              /* connection OK */
794              case '0':              case '0':
795                  /* enable SSL if asked */                  /* enable SSL if asked */
796                  if (server->ssl)                  #ifdef HAVE_GNUTLS
797                    if (server->ssl_connected)
798                  {                  {
799                      gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);                      gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);
800                      if (gnutls_handshake (server->gnutls_sess) < 0)                      if (gnutls_handshake (server->gnutls_sess) < 0)
# Line 790  server_child_read (t_irc_server *server) Line 808  server_child_read (t_irc_server *server)
808                          return;                          return;
809                      }                      }
810                  }                  }
811                    #endif
812                  /* kill child and login to server */                  /* kill child and login to server */
813                  server_kill_child (server);                  server_kill_child (server);
814                  irc_login (server);                  irc_login (server);
# Line 878  server_connect (t_irc_server *server) Line 897  server_connect (t_irc_server *server)
897  {  {
898      int child_pipe[2], set;      int child_pipe[2], set;
899      pid_t pid;      pid_t pid;
900        #ifdef HAVE_GNUTLS
901      const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };      const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
902        #endif
903        
904        #ifndef HAVE_GNUTLS
905        if (server->ssl)
906        {
907            irc_display_prefix (server->buffer, PREFIX_ERROR);
908            gui_printf (server->buffer,
909                        _("%s cannot connect with SSL since WeeChat was not built "
910                        "with GNUtls support\n"), WEECHAT_ERROR);
911            return 0;
912        }
913        #endif
914      irc_display_prefix (server->buffer, PREFIX_INFO);      irc_display_prefix (server->buffer, PREFIX_INFO);
915      gui_printf (server->buffer,      gui_printf (server->buffer,
916                  _("%s: connecting to %s:%d%s...\n"),                  _("%s: connecting to %s:%d%s...\n"),
# Line 893  server_connect (t_irc_server *server) Line 924  server_connect (t_irc_server *server)
924      server_close_connection (server);      server_close_connection (server);
925            
926      /* init SSL if asked */      /* init SSL if asked */
927        #ifdef HAVE_GNUTLS
928        server->ssl_connected = 0;
929      if (server->ssl)      if (server->ssl)
930      {      {
931          if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)          if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)
# Line 905  server_connect (t_irc_server *server) Line 938  server_connect (t_irc_server *server)
938          gnutls_set_default_priority (server->gnutls_sess);          gnutls_set_default_priority (server->gnutls_sess);
939          gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);          gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);
940          gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);          gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
941            server->ssl_connected = 1;
942      }      }
943        #endif
944            
945      /* create pipe for child process */      /* create pipe for child process */
946      if (pipe (child_pipe) < 0)      if (pipe (child_pipe) < 0)

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.59

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26