/[cvs]/eggdrop1.8/src/net.c
ViewVC logotype

Diff of /eggdrop1.8/src/net.c

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

revision 1.7 by pseudo, Thu Nov 18 12:54:39 2010 UTC revision 1.8 by pseudo, Tue Nov 23 16:36:23 2010 UTC
# Line 732  int sockread(char *s, int *len, sock_lis Line 732  int sockread(char *s, int *len, sock_lis
732        if (!tclonly && ((!(slist[i].flags & (SOCK_UNUSED | SOCK_TCL))) &&        if (!tclonly && ((!(slist[i].flags & (SOCK_UNUSED | SOCK_TCL))) &&
733            ((FD_ISSET(slist[i].sock, &fdr)) ||            ((FD_ISSET(slist[i].sock, &fdr)) ||
734  #ifdef TLS  #ifdef TLS
735            (slist[i].ssl && SSL_pending(slist[i].ssl)) ||            (slist[i].ssl && (SSL_pending(slist[i].ssl) ||
736               !SSL_is_init_finished(slist[i].ssl))) ||
737  #endif  #endif
738            ((slist[i].sock == STDOUT) && (!backgrd) &&            ((slist[i].sock == STDOUT) && (!backgrd) &&
739            (FD_ISSET(STDIN, &fdr)))))) {            (FD_ISSET(STDIN, &fdr)))))) {
# Line 745  int sockread(char *s, int *len, sock_lis Line 746  int sockread(char *s, int *len, sock_lis
746              grab = 10;              grab = 10;
747  #ifdef TLS  #ifdef TLS
748            else if (!(slist[i].flags & SOCK_STRONGCONN) &&            else if (!(slist[i].flags & SOCK_STRONGCONN) &&
749              (!(slist[i].ssl) || !SSL_in_init(slist[i].ssl))) {              (!(slist[i].ssl) || SSL_is_init_finished(slist[i].ssl))) {
750  #else  #else
751            else if (!(slist[i].flags & SOCK_STRONGCONN)) {            else if (!(slist[i].flags & SOCK_STRONGCONN)) {
752  #endif  #endif
# Line 772  int sockread(char *s, int *len, sock_lis Line 773  int sockread(char *s, int *len, sock_lis
773            if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)            if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
774              errno = EAGAIN;              errno = EAGAIN;
775                else                else
776                  debug1("SSL error: %s", ERR_error_string(ERR_get_error(), 0));                  debug1("sockread(): SSL error = %s",
777                           ERR_error_string(ERR_get_error(), 0));
778                x = -1;                x = -1;
779              }              }
780            } else            } else
# Line 1096  void tputs(register int z, char *s, unsi Line 1098  void tputs(register int z, char *s, unsi
1098              errno = EAGAIN;              errno = EAGAIN;
1099            else if (!inhere) { /* Out there, somewhere */            else if (!inhere) { /* Out there, somewhere */
1100              inhere = 1;              inhere = 1;
1101              debug1("SSL error: %s", ERR_error_string(ERR_get_error(), 0));              debug1("tputs(): SSL error = %s",
1102                       ERR_error_string(ERR_get_error(), 0));
1103              inhere = 0;              inhere = 0;
1104            }            }
1105            x = -1;            x = -1;
# Line 1150  void dequeue_sockets() Line 1153  void dequeue_sockets()
1153    tv.tv_sec = 0;    tv.tv_sec = 0;
1154    tv.tv_usec = 0;               /* we only want to see if it's ready for writing, no need to actually wait.. */    tv.tv_usec = 0;               /* we only want to see if it's ready for writing, no need to actually wait.. */
1155    for (i = 0; i < threaddata()->MAXSOCKS; i++) {    for (i = 0; i < threaddata()->MAXSOCKS; i++) {
1156      if (!(socklist[i].flags & (SOCK_UNUSED | SOCK_TCL)) &&      if (!(socklist[i].flags & (SOCK_UNUSED | SOCK_TCL))) {
1157          socklist[i].handler.sock.outbuf != NULL) {  #ifdef TLS
1158          /* We can't rely on a transparent negotiation, because the
1159           * handshake may never finish if we don't have any data to send.
1160           */
1161          if (socklist[i].ssl && !SSL_is_init_finished(socklist[i].ssl))
1162            SSL_do_handshake(socklist[i].ssl);
1163    #endif
1164          if (socklist[i].handler.sock.outbuf != NULL) {
1165        FD_SET(socklist[i].sock, &wfds);        FD_SET(socklist[i].sock, &wfds);
1166        z = 1;        z = 1;
1167      }      }
1168    }    }
1169      }
1170    if (!z)    if (!z)
1171      return;                     /* nothing to write */      return;                     /* nothing to write */
1172    
# Line 1179  void dequeue_sockets() Line 1190  void dequeue_sockets()
1190            if (err == SSL_ERROR_WANT_WRITE || err == SSL_ERROR_WANT_READ)            if (err == SSL_ERROR_WANT_WRITE || err == SSL_ERROR_WANT_READ)
1191              errno = EAGAIN;              errno = EAGAIN;
1192            else            else
1193              debug1("SSL error: %s", ERR_error_string(ERR_get_error(), 0));              debug1("dequeue_sockets(): SSL error = %s",
1194                       ERR_error_string(ERR_get_error(), 0));
1195            x = -1;            x = -1;
1196          }          }
1197        } else        } else
1198  #endif    #endif  
1199        x = write(socklist[i].sock, socklist[i].handler.sock.outbuf, socklist[i].handler.sock.outbuflen);        x = write(socklist[i].sock, socklist[i].handler.sock.outbuf,
1200                    socklist[i].handler.sock.outbuflen);
1201        if ((x < 0) && (errno != EAGAIN)        if ((x < 0) && (errno != EAGAIN)
1202  #ifdef EBADSLT  #ifdef EBADSLT
1203            && (errno != EBADSLT)            && (errno != EBADSLT)
# Line 1206  void dequeue_sockets() Line 1219  void dequeue_sockets()
1219          char *p = socklist[i].handler.sock.outbuf;          char *p = socklist[i].handler.sock.outbuf;
1220    
1221          /* This removes any sent bytes from the beginning of the buffer */          /* This removes any sent bytes from the beginning of the buffer */
1222          socklist[i].handler.sock.outbuf = nmalloc(socklist[i].handler.sock.outbuflen - x);          socklist[i].handler.sock.outbuf =
1223          egg_memcpy(socklist[i].handler.sock.outbuf, p + x, socklist[i].handler.sock.outbuflen - x);                              nmalloc(socklist[i].handler.sock.outbuflen - x);
1224            egg_memcpy(socklist[i].handler.sock.outbuf, p + x,
1225                       socklist[i].handler.sock.outbuflen - x);
1226          socklist[i].handler.sock.outbuflen -= x;          socklist[i].handler.sock.outbuflen -= x;
1227          nfree(p);          nfree(p);
1228        } else {        } else {

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

webmaster@eggheads.org
ViewVC Help
Powered by ViewVC 1.1.23