You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Dean Gaudet <dg...@hyperreal.com> on 1997/06/16 21:32:55 UTC

cvs commit: apache/src/modules/proxy proxy_cache.c proxy_ftp.c proxy_http.c

dgaudet     97/06/16 12:32:55

  Modified:    src       buff.c buff.h http_main.c
               src/modules/proxy  proxy_cache.c proxy_ftp.c proxy_http.c
  Log:
  Clean up buff.c changes in NT port.  Replace fb->is_socket with B_SOCKET
  flag.  include http_main.h.  Create buff_write() and buff_read() static
  functions in buff.c to increase readability/maintainability.
  
  Revision  Changes    Path
  1.28      +50 -68    apache/src/buff.c
  
  Index: buff.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/buff.c,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -C3 -r1.27 -r1.28
  *** buff.c	1997/06/15 19:22:24	1.27
  --- buff.c	1997/06/16 19:32:49	1.28
  ***************
  *** 50,58 ****
     *
     */
    
  ! #include "conf.h"
  ! #include "alloc.h"
  ! #include "buff.h"
    
    #include <errno.h>
    #include <stdio.h>
  --- 50,57 ----
     *
     */
    
  ! #include "httpd.h"
  ! #include "http_main.h"
    
    #include <errno.h>
    #include <stdio.h>
  ***************
  *** 72,79 ****
    
    #define DEFAULT_BUFSIZE (4096)
    
  - extern int check_alarm(); /* didn't want to include http_main.h */
  - 
    /*
     * Buffered I/O routines.
     * These are a replacement for the stdio routines.
  --- 71,76 ----
  ***************
  *** 194,199 ****
  --- 191,238 ----
    
    #endif /* WIN32 */    
    
  + 
  + /* these are wrappers to make code below more readable */
  + #if !defined (__GNUC__)
  + #define inline
  + #endif
  + 
  + static inline int buff_read (BUFF *fb, void *buf, int nbyte)
  + {
  +     int rv;
  + 
  + #ifdef WIN32
  +     if (fb->flags & B_SOCKET) {
  + 	rv = recvwithtimeout( fb->fd_in, buf, nbyte, 0 );
  + 	if (rv == SOCKET_ERROR)
  + 	    errno = WSAGetLastError() - WSABASEERR;
  +     }
  +     else
  + 	rv = read( fb->fd_in, buf, nbyte );
  + #else
  +     rv = read( fb->fd_in, buf, nbyte );
  + #endif /* WIN32 */
  +     return rv;
  + }
  + 
  + static inline int buff_write (BUFF *fb, const void *buf, int nbyte)
  + {
  +     int rv;
  + 
  + #ifdef WIN32
  +     if (fb->flags & B_SOCKET) {
  + 	rv = sendwithtimeout( fb->fd, buf, nbyte, 0);
  + 	if (rv == SOCKET_ERROR)
  + 	    errno = WSAGetLastError() - WSABASEERR;
  +     }
  +     else
  + 	rv = write( fb->fd, buf, nbyte );
  + #else
  +     rv = write( fb->fd, buf, nbyte );
  + #endif /* WIN32 */
  +     return rv;
  + }
  + 
    static void
    doerror(BUFF *fb, int err)
    {
  ***************
  *** 213,219 ****
     * Create a new buffered stream
     */
    BUFF *
  ! bcreate(pool *p, int flags, int is_socket)
    {
        BUFF *fb;
    
  --- 252,258 ----
     * Create a new buffered stream
     */
    BUFF *
  ! bcreate(pool *p, int flags)
    {
        BUFF *fb;
    
  ***************
  *** 240,246 ****
    
        fb->fd = -1;
        fb->fd_in = -1;
  -     fb->is_socket = is_socket;
    
        return fb;
    }
  --- 279,284 ----
  ***************
  *** 423,440 ****
    	}
        }
        do {
  ! #ifdef WIN32
  !         if(fb->is_socket)
  !         {
  !             rv = recvwithtimeout( fb->fd_in, buf, nbyte, 0 );
  !             if(rv == SOCKET_ERROR)
  !                 errno = WSAGetLastError() - WSABASEERR;
  !         }
  !         else
  !             rv = read( fb->fd_in, buf, nbyte );
  ! #else
  ! 	rv = read( fb->fd_in, buf, nbyte );
  ! #endif /* WIN32 */
        } while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT));
        return( rv );
    }
  --- 461,467 ----
    	}
        }
        do {
  ! 	rv = buff_read (fb, buf, nbyte);
        } while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT));
        return( rv );
    }
  ***************
  *** 731,748 ****
    	return -1;
    
        while (nbyte > 0) {
  ! #ifdef WIN32
  !         if(fb->is_socket)
  !         {
  !             i = sendwithtimeout( fb->fd, buf, nbyte, 0);
  !             if(i == SOCKET_ERROR)
  !                 errno = WSAGetLastError() - WSABASEERR;
  !         }
  !         else
  !             i = write( fb->fd, buf, nbyte );
  ! #else
  ! 	i = write( fb->fd, buf, nbyte );
  ! #endif /* WIN32 */
    	if( i < 0 ) {
    	    if( errno != EAGAIN && errno != EINTR ) {
    		return -1;
  --- 758,764 ----
    	return -1;
    
        while (nbyte > 0) {
  ! 	i = buff_write( fb, buf, nbyte );
    	if( i < 0 ) {
    	    if( errno != EAGAIN && errno != EINTR ) {
    		return -1;
  ***************
  *** 780,797 ****
    
        if (!(fb->flags & B_CHUNK))
        {
  ! #ifdef WIN32
  !         if(fb->is_socket)
  !         {
  !             i = sendwithtimeout(fb->fd, buf, nbyte, 0 );
  !             if(i == SOCKET_ERROR)
  !                 errno = WSAGetLastError() - WSABASEERR;
  !         }
  !         else
  !             i = write(fb->fd, buf, nbyte);
  ! #else
  ! 	i = write(fb->fd, buf, nbyte);
  ! #endif /* WIN32 */
            return(i);
        }
    
  --- 796,802 ----
    
        if (!(fb->flags & B_CHUNK))
        {
  ! 	i = buff_write(fb, buf, nbyte);
            return(i);
        }
    
  ***************
  *** 916,934 ****
    	            -1 : fb->outcnt;
    	} else {
    	    do {
  ! #ifdef WIN32
  !                 if(fb->is_socket)
  !                 {
  !                     i = sendwithtimeout(fb->fd, fb->outbase, fb->outcnt, 0 );
  !                     if(i == SOCKET_ERROR)
  !                         errno = WSAGetLastError() - WSABASEERR;
  !                 }
  !                 else
  !                     i = write(fb->fd, fb->outbase, fb->outcnt);
  ! 
  ! #else
  ! 	        i = write(fb->fd, fb->outbase, fb->outcnt);
  ! #endif /* WIN32 */
    	    } while (i == -1 && errno == EINTR && !(fb->flags & B_EOUT));
    	}
    	if (i <= 0) {
  --- 921,927 ----
    	            -1 : fb->outcnt;
    	} else {
    	    do {
  ! 	        i = buff_write(fb, fb->outbase, fb->outcnt);
    	    } while (i == -1 && errno == EINTR && !(fb->flags & B_EOUT));
    	}
    	if (i <= 0) {
  ***************
  *** 1011,1028 ****
        {
    	/* the buffer must be full */
    	do {
  ! #ifdef WIN32
  !                 if(fb->is_socket)
  !                 {
  !                     i = sendwithtimeout(fb->fd, fb->outbase, fb->outcnt, 0 );
  !                     if(i == SOCKET_ERROR)
  !                         errno = WSAGetLastError() - WSABASEERR;
  !                 }
  !                 else
  !                     i = write(fb->fd, fb->outbase, fb->outcnt);
  ! #else
  ! 	        i = write(fb->fd, fb->outbase, fb->outcnt);
  ! #endif /* WIN32 */
    	} while (i == -1 && errno == EINTR && !(fb->flags & B_EOUT));
    	if (i == 0) {
    	    errno = EAGAIN;
  --- 1004,1010 ----
        {
    	/* the buffer must be full */
    	do {
  ! 	    i = buff_write(fb, fb->outbase, fb->outcnt);
    	} while (i == -1 && errno == EINTR && !(fb->flags & B_EOUT));
    	if (i == 0) {
    	    errno = EAGAIN;
  
  
  
  1.14      +3 -2      apache/src/buff.h
  
  Index: buff.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/buff.h,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -C3 -r1.13 -r1.14
  *** buff.h	1997/06/15 19:22:24	1.13
  --- buff.h	1997/06/16 19:32:50	1.14
  ***************
  *** 70,75 ****
  --- 70,77 ----
    #define B_CHUNK (64)
    /* bflush() if a read would block */
    #define B_SAFEREAD (128)
  + /* buffer is a socket */
  + #define B_SOCKET (256)
    
    typedef struct buff_struct BUFF;
    
  ***************
  *** 94,107 ****
    /* could also put pointers to the basic I/O routines here */
        int fd;                /* the file descriptor */
        int fd_in;             /* input file descriptor, if different */
  -     int is_socket;         /* whether fd/fd_in are sockets */
    };
    
    /* Options to bset/getopt */
    #define BO_BYTECT (1)
    
    /* Stream creation and modification */
  ! extern BUFF *bcreate(pool *p, int flags, int is_socket);
    extern void bpushfd(BUFF *fb, int fd_in, int fd_out);
    extern int bsetopt(BUFF *fb, int optname, const void *optval);
    extern int bgetopt(BUFF *fb, int optname, void *optval);
  --- 96,108 ----
    /* could also put pointers to the basic I/O routines here */
        int fd;                /* the file descriptor */
        int fd_in;             /* input file descriptor, if different */
    };
    
    /* Options to bset/getopt */
    #define BO_BYTECT (1)
    
    /* Stream creation and modification */
  ! extern BUFF *bcreate(pool *p, int flags);
    extern void bpushfd(BUFF *fb, int fd_in, int fd_out);
    extern int bsetopt(BUFF *fb, int optname, const void *optval);
    extern int bgetopt(BUFF *fb, int optname, void *optval);
  
  
  
  1.153     +3 -3      apache/src/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.c,v
  retrieving revision 1.152
  retrieving revision 1.153
  diff -C3 -r1.152 -r1.153
  *** http_main.c	1997/06/16 17:53:13	1.152
  --- http_main.c	1997/06/16 19:32:50	1.153
  ***************
  *** 2194,2200 ****
    	(void)update_child_status(child_num, SERVER_BUSY_READ,
    	                          (request_rec*)NULL);
    
  ! 	conn_io = bcreate(ptrans, B_RDWR, 1);
    	dupped_csd = csd;
    #if defined(NEED_DUPPED_CSD)
    	if ((dupped_csd = dup(csd)) < 0) {
  --- 2194,2200 ----
    	(void)update_child_status(child_num, SERVER_BUSY_READ,
    	                          (request_rec*)NULL);
    
  ! 	conn_io = bcreate(ptrans, B_RDWR | B_SOCKET);
    	dupped_csd = csd;
    #if defined(NEED_DUPPED_CSD)
    	if ((dupped_csd = dup(csd)) < 0) {
  ***************
  *** 2671,2677 ****
    	    exit(1);
    	}
    	server_conf->port =ntohs(((struct sockaddr_in *)&sa_server)->sin_port);
  ! 	cio = bcreate(ptrans, B_RDWR, 1);
    #ifdef MPE
    /* HP MPE 5.5 inetd only passes the incoming socket as stdin (fd 0), whereas
       HPUX inetd passes the incoming socket as stdin (fd 0) and stdout (fd 1).
  --- 2671,2677 ----
    	    exit(1);
    	}
    	server_conf->port =ntohs(((struct sockaddr_in *)&sa_server)->sin_port);
  ! 	cio = bcreate(ptrans, B_RDWR | B_SOCKET);
    #ifdef MPE
    /* HP MPE 5.5 inetd only passes the incoming socket as stdin (fd 0), whereas
       HPUX inetd passes the incoming socket as stdin (fd 0) and stdout (fd 1).
  ***************
  *** 2903,2909 ****
    	(void)update_child_status(child_num, SERVER_BUSY_READ,
    	                          (request_rec*)NULL);
    
  ! 	conn_io = bcreate(pchild, B_RDWR, 1);
    	dupped_csd = csd;
    #if defined(NEED_DUPPED_CSD)
    	if ((dupped_csd = dup(csd)) < 0) {
  --- 2903,2909 ----
    	(void)update_child_status(child_num, SERVER_BUSY_READ,
    	                          (request_rec*)NULL);
    
  ! 	conn_io = bcreate(pchild, B_RDWR | B_SOCKET);
    	dupped_csd = csd;
    #if defined(NEED_DUPPED_CSD)
    	if ((dupped_csd = dup(csd)) < 0) {
  
  
  
  1.16      +2 -2      apache/src/modules/proxy/proxy_cache.c
  
  Index: proxy_cache.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_cache.c,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -C3 -r1.15 -r1.16
  *** proxy_cache.c	1997/06/16 17:58:34	1.15
  --- proxy_cache.c	1997/06/16 19:32:53	1.16
  ***************
  *** 511,517 ****
    	if (cfd != -1)
    	{
    	    note_cleanups_for_fd(r->pool, cfd);
  ! 	    cachefp = bcreate(r->pool, B_RD | B_WR, 0);
    	    bpushfd(cachefp, cfd, cfd);
    	} else if (errno != ENOENT)
    	    proxy_log_uerror("open", c->filename,
  --- 511,517 ----
    	if (cfd != -1)
    	{
    	    note_cleanups_for_fd(r->pool, cfd);
  ! 	    cachefp = bcreate(r->pool, B_RD | B_WR);
    	    bpushfd(cachefp, cfd, cfd);
    	} else if (errno != ENOENT)
    	    proxy_log_uerror("open", c->filename,
  ***************
  *** 856,862 ****
    	return DECLINED;
        }
        note_cleanups_for_fd(r->pool, i);
  !     c->fp = bcreate(r->pool, B_WR, 0);
        bpushfd(c->fp, -1, i);
    
        if (bvputs(c->fp, buff, "X-URL: ", c->url, "\n", NULL) == -1)
  --- 856,862 ----
    	return DECLINED;
        }
        note_cleanups_for_fd(r->pool, i);
  !     c->fp = bcreate(r->pool, B_WR);
        bpushfd(c->fp, -1, i);
    
        if (bvputs(c->fp, buff, "X-URL: ", c->url, "\n", NULL) == -1)
  
  
  
  1.23      +3 -3      apache/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -C3 -r1.22 -r1.23
  *** proxy_ftp.c	1997/06/15 19:22:48	1.22
  --- proxy_ftp.c	1997/06/16 19:32:53	1.23
  ***************
  *** 520,526 ****
        if (i == -1)
    	return proxyerror(r, "Could not connect to remote machine");
    
  !     f = bcreate(pool, B_RDWR, 1);
        bpushfd(f, sock, sock);
    /* shouldn't we implement telnet control options here? */
    
  --- 520,526 ----
        if (i == -1)
    	return proxyerror(r, "Could not connect to remote machine");
    
  !     f = bcreate(pool, B_RDWR | B_SOCKET);
        bpushfd(f, sock, sock);
    /* shouldn't we implement telnet control options here? */
    
  ***************
  *** 721,727 ****
    		return proxyerror(r, "Could not connect to remote machine");
    	    }
    	    else {
  ! 	        data = bcreate(pool, B_RDWR, 1); 
    	        bpushfd(data, dsock, dsock);
    	        pasvmode = 1;
    	    }
  --- 721,727 ----
    		return proxyerror(r, "Could not connect to remote machine");
    	    }
    	    else {
  ! 	        data = bcreate(pool, B_RDWR | B_SOCKET); 
    	        bpushfd(data, dsock, dsock);
    	        pasvmode = 1;
    	    }
  ***************
  *** 935,941 ****
    	    return BAD_GATEWAY;
            }
            note_cleanups_for_socket(pool, csd);
  !         data = bcreate(pool, B_RDWR, 1);
            bpushfd(data, csd, -1);
    	kill_timeout(r);
        }
  --- 935,941 ----
    	    return BAD_GATEWAY;
            }
            note_cleanups_for_socket(pool, csd);
  !         data = bcreate(pool, B_RDWR | B_SOCKET);
            bpushfd(data, csd, -1);
    	kill_timeout(r);
        }
  
  
  
  1.19      +1 -1      apache/src/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -C3 -r1.18 -r1.19
  *** proxy_http.c	1997/06/15 19:22:48	1.18
  --- proxy_http.c	1997/06/16 19:32:53	1.19
  ***************
  *** 244,250 ****
    
        clear_connection(r->headers_in);	/* Strip connection-based headers */
    
  !     f = bcreate(pool, B_RDWR, 1);
        bpushfd(f, sock, sock);
    
        hard_timeout ("proxy send", r);
  --- 244,250 ----
    
        clear_connection(r->headers_in);	/* Strip connection-based headers */
    
  !     f = bcreate(pool, B_RDWR | B_SOCKET);
        bpushfd(f, sock, sock);
    
        hard_timeout ("proxy send", r);