This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

optimization/5706: Internal error and SEGFAULT for "-O2 -funroll-all-loops"



>Number:         5706
>Category:       optimization
>Synopsis:       Internal error and SEGFAULT for "-O2 -funroll-all-loops"
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Sat Feb 16 05:46:02 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Frantisek Dvorak
>Release:        3.0.3
>Organization:
>Environment:
Reading specs from /_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/specs
Configured with: ../gcc-3.0.3/configure --prefix=/_devel --infodir=/_devel/info --enable-shared --enable-threads=posix --enable-haifa --with-gnu-as --with-gnu-ld --build=i686-redhat-linux --host=i686-redhat-linux
Thread model: posix
gcc version 3.0.3
>Description:
Internal error and segmentation fault if is compiled one program (ghttp) and if enabled this optimalizations: "-O2 -funroll-all-loops". Lower optimalization are O.K.

Compilation:
http_resp.c: In function `read_chunk':
http_resp.c:567: Internal error: Neoprávněný přístup do paměti (SIGSEGV)
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
gcc http_resp.i -O2 -funroll-all-loops
>Fix:
?
>Release-Note:
>Audit-Trail:
>Unformatted:
 >io_buf[i]); } else __res = __ctype_tolower[(int) (a_conn->io_buf[i])]; __res; })) <= 'f') && ((__extension__ ({ int __res; if (sizeof (a_conn->io_buf[i]) > 1) { if (__builtin_constant_p (a_conn->io_buf[i])) { int __c = (a_conn->io_buf[i]); __res = __c <  -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res = tolower (a_conn->io_buf[i]); } else __res = __ctype_tolower[(int) (a_conn->io_buf[i])]; __res; })) >= 'a'))
             a_conn->chunk_len += ((__extension__ ({ int __res; if (sizeof (a_conn->io_buf[i]) > 1) { if (__builtin_constant_p (a_conn->io_buf[i])) { int __c = (a_conn->io_buf[i]); __res = __c < -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res  = tolower (a_conn->io_buf[i]); } else __res = __ctype_tolower[(int) (a_conn->io_buf[i])]; __res; })) - 0x57) << (4*j);
           else
             a_conn->chunk_len += ((__extension__ ({ int __res; if (sizeof (a_conn->io_buf[i]) > 1) { if (__builtin_constant_p (a_conn->io_buf[i])) { int __c = (a_conn->io_buf[i]); __res = __c < -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res  = tolower (a_conn->io_buf[i]); } else __res = __ctype_tolower[(int) (a_conn->io_buf[i])]; __res; })) - 0x30) << (4*j);
         }
 
       http_trans_buf_clip(a_conn, l_end_chunk_hdr + 2);
     }
 
   if (a_conn->chunk_len != 0)
     {
 
 
       l_left_to_read = a_conn->chunk_len - a_conn->io_buf_alloc + 2;
 
       if (l_left_to_read > 0)
         {
 
           a_conn->io_buf_io_left = l_left_to_read;
           a_conn->io_buf_io_done = 0;
 
           do {
             l_rv = http_trans_read_into_buf(a_conn);
             if (l_rv == -1)
               return -1;
 
             if ((l_rv == 2) && (a_conn->last_read == 0))
               return -1;
             if ((a_conn->sync == 1) && (l_rv == 1))
               return 1;
           } while (l_rv == 1);
         }
     }
   if (a_conn->io_buf_alloc >= a_conn->chunk_len + 2)
     return 2;
 
   if (a_conn->chunk_len == 0)
     return 2;
   return -1;
 }
 
 static int
 read_body_chunked(http_resp *a_resp,
                   http_req *a_req,
                   http_trans_conn *a_conn)
 {
   int l_rv = 0;
   int l_done = 0;
 
   do
     {
 
       l_rv = read_chunk(a_conn);
       if (l_rv == -1)
         return -1;
       if ((a_conn->sync == 1) && (l_rv == 1))
         return 1;
 
       if (a_conn->chunk_len > 0)
         {
           if (a_resp->body == ((void *)0))
             {
               a_resp->body = malloc(a_conn->chunk_len);
               memcpy(a_resp->body, a_conn->io_buf, a_conn->chunk_len);
               a_resp->body_len = a_conn->chunk_len;
             }
 
           else
             {
               a_resp->body = realloc(a_resp->body,
                                      (a_resp->body_len + a_conn->chunk_len));
               memcpy(&a_resp->body[a_resp->body_len], a_conn->io_buf, a_conn->chunk_len);
               a_resp->body_len += a_conn->chunk_len;
             }
         }
 
 
 
       if ((a_conn->chunk_len == 0) && (a_conn->io_buf_alloc < 2))
         {
           a_conn->io_buf_io_left = ( 2 - a_conn->io_buf_alloc );
           a_conn->io_buf_io_done = 0;
           do {
             l_rv = http_trans_read_into_buf(a_conn);
           } while (l_rv == 1);
 
           if (l_rv == -1)
             return -1;
         }
       if (a_conn->chunk_len == 0)
         l_done = 1;
       else
         {
 
           http_trans_buf_clip(a_conn, &a_conn->io_buf[a_conn->chunk_len + 2]);
         }
       a_conn->chunk_len = 0;
     } while (l_done == 0);
   return 2;
 }
 
 static void
 flush_response_body(http_resp *a_resp,
                     http_trans_conn *a_conn)
 {
   if (a_resp->body != ((void *)0)) {
     free(a_resp->body);
   }
   a_resp->flushed_length += a_resp->body_len;
   a_resp->body_len = a_conn->io_buf_alloc;
   a_resp->body = malloc(a_conn->io_buf_alloc + 1);
   (__extension__ (__builtin_constant_p (a_conn->io_buf_alloc + 1) && (a_conn->io_buf_alloc + 1) <= 16 ? ((a_conn->io_buf_alloc + 1) == 1 ? ({ void *__s = (a_resp->body); *((__uint8_t *) __s) = (__uint8_t) 0; __s; }) : ({ void *__s = (a_resp->body); union  { unsigned int __ui; unsigned short int __usi; unsigned char __uc; } *__u = __s; __uint8_t __c = (__uint8_t) (0); switch ((unsigned int) (a_conn->io_buf_alloc + 1)) { case 15: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 11 : __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 7: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 3: __u->__usi = (unsigned short int) __c * 0x0101; __u = __extension__ ((void *) __u + 2); __u->__u c = (unsigned char) __c; break; case 14: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 10: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 6: __u->__ui = __c * 0x01010101; __u = __extension__ ((void  *) __u + 4); case 2: __u->__usi = (unsigned short int) __c * 0x0101; break; case 13: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 9: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 5: __u->__ui =  __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 1: __u->__uc = (unsigned char) __c; break; case 16: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 12: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *)  __u + 4); case 8: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 4: __u->__ui = __c * 0x01010101; case 0: break; } __s; })) : (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (a_resp->body); __builtin_memset (__s, '\0 ', a_conn->io_buf_alloc + 1); __s; }) : memset (a_resp->body, 0, a_conn->io_buf_alloc + 1))));
   memcpy(a_resp->body, a_conn->io_buf, a_conn->io_buf_alloc);
 
   http_trans_buf_reset(a_conn);
 }
 
 void
 http_resp_flush(http_resp *a_resp,
                 http_trans_conn *a_conn)
 {
   flush_response_body(a_resp, a_conn);
 }
 
 static int
 read_body_content_length(http_resp *a_resp,
                          http_req *a_req,
                          http_trans_conn *a_conn)
 {
   int l_len = 0;
   int l_left_to_read = 0;
   int l_rv = 0;
 
   l_len = a_resp->content_length;
   if (l_len == 0)
     return 2;
 
 
   l_left_to_read = l_len - a_conn->io_buf_alloc - a_resp->flushed_length - a_resp->body_len;
 
   a_conn->io_buf_io_left = l_left_to_read;
   a_conn->io_buf_io_done = 0;
   if (l_left_to_read > 0)
     {
 
 
       do {
         l_rv = http_trans_read_into_buf(a_conn);
         if ((l_rv == 1) &&
             (a_conn->sync == 1))
           return 1;
         if ((l_rv == 2) && (a_conn->last_read == 0))
           return -1;
       } while(l_rv == 1);
       if (l_rv == -1)
         return -1;
     }
 
   flush_response_body (a_resp, a_conn);
   return 2;
 }
 
 static int
 read_body_standard(http_resp *a_resp,
                    http_req *a_req,
                    http_trans_conn *a_conn)
 {
   int l_rv = 0;
 
   do {
     l_rv = http_trans_read_into_buf(a_conn);
     if (a_conn->sync == 1)
       {
         if ((l_rv == 1) || (a_conn->last_read != 0))
           return 1;
       }
   } while ((l_rv == 1) || (a_conn->last_read > 0));
 
   if (l_rv == -1)
     return -1;
 
   flush_response_body(a_resp, a_conn);
   return 2;
 }
----gnatsweb-attachment----
Content-Type: text/plain; name="http_resp.i"
Content-Disposition: inline; filename="http_resp.i"

# 22 "http_resp.c"
# 1 "/usr/include/stdlib.h" 1 3
# 25 "/usr/include/stdlib.h" 3
# 1 "/usr/include/features.h" 1 3
# 283 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 284 "/usr/include/features.h" 2 3
# 312 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 313 "/usr/include/features.h" 2 3
# 26 "/usr/include/stdlib.h" 2 3







# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 199 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 3
typedef unsigned int size_t;
# 287 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 3
typedef long int wchar_t;
# 34 "/usr/include/stdlib.h" 2 3
# 94 "/usr/include/stdlib.h" 3
typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
# 133 "/usr/include/stdlib.h" 3
extern size_t __ctype_get_mb_cur_max (void) ;



extern double atof (__const char *__nptr) __attribute__ ((__pure__));

extern int atoi (__const char *__nptr) __attribute__ ((__pure__));

extern long int atol (__const char *__nptr) __attribute__ ((__pure__));



__extension__ extern long long int atoll (__const char *__nptr)
             __attribute__ ((__pure__));



extern double strtod (__const char *__restrict __nptr,
                      char **__restrict __endptr) ;
# 163 "/usr/include/stdlib.h" 3
extern long int strtol (__const char *__restrict __nptr,
                        char **__restrict __endptr, int __base) ;

extern unsigned long int strtoul (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base)
            ;



__extension__
extern long long int strtoq (__const char *__restrict __nptr,
                             char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
                                       char **__restrict __endptr, int __base)
            ;






__extension__
extern long long int strtoll (__const char *__restrict __nptr,
                              char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
                                        char **__restrict __endptr, int __base)
            ;
# 250 "/usr/include/stdlib.h" 3
extern double __strtod_internal (__const char *__restrict __nptr,
                                 char **__restrict __endptr, int __group)
            ;
extern float __strtof_internal (__const char *__restrict __nptr,
                                char **__restrict __endptr, int __group)
            ;
extern long double __strtold_internal (__const char *__restrict __nptr,
                                       char **__restrict __endptr,
                                       int __group) ;

extern long int __strtol_internal (__const char *__restrict __nptr,
                                   char **__restrict __endptr,
                                   int __base, int __group) ;



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
                                             char **__restrict __endptr,
                                             int __base, int __group) ;




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
                                         char **__restrict __endptr,
                                         int __base, int __group) ;



__extension__
extern unsigned long long int __strtoull_internal (__const char *
                                                   __restrict __nptr,
                                                   char **__restrict __endptr,
                                                   int __base, int __group)
            ;







extern __inline double
strtod (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
strtol (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}
# 325 "/usr/include/stdlib.h" 3
__extension__ extern __inline long long int
strtoq (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtouq (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}



__extension__ extern __inline long long int
strtoll (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtoull (__const char * __restrict __nptr, char **__restrict __endptr,
          int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}


extern __inline double
atof (__const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
extern __inline int
atoi (__const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline long int
atol (__const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}


__extension__ extern __inline long long int
atoll (__const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}
# 384 "/usr/include/stdlib.h" 3
extern char *l64a (long int __n) ;


extern long int a64l (__const char *__s) __attribute__ ((__pure__));


# 1 "/usr/include/sys/types.h" 1 3
# 26 "/usr/include/sys/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/sys/types.h" 2 3



# 1 "/usr/include/bits/types.h" 1 3
# 26 "/usr/include/bits/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/bits/types.h" 2 3


# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 49 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef __u_long __rlim_t;
typedef __u_quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef int __clockid_t;


typedef int __timer_t;






typedef int __key_t;


typedef unsigned short int __ipc_pid_t;



typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef __u_quad_t __ino64_t;


typedef __loff_t __off64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef int __intptr_t;


typedef unsigned int __socklen_t;




# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 23 "/usr/include/bits/pthreadtypes.h" 3
# 1 "/usr/include/bits/sched.h" 1 3
# 68 "/usr/include/bits/sched.h" 3
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;
# 140 "/usr/include/bits/pthreadtypes.h" 3
typedef unsigned long int pthread_t;
# 144 "/usr/include/bits/types.h" 2 3
# 31 "/usr/include/sys/types.h" 2 3



typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;
# 61 "/usr/include/sys/types.h" 3
typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;
# 99 "/usr/include/sys/types.h" 3
typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;
# 132 "/usr/include/sys/types.h" 3
# 1 "/usr/include/time.h" 1 3
# 67 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 68 "/usr/include/time.h" 2 3


typedef __time_t time_t;
# 79 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 80 "/usr/include/time.h" 2 3


typedef __clockid_t clockid_t;
# 91 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 92 "/usr/include/time.h" 2 3


typedef __timer_t timer_t;
# 133 "/usr/include/sys/types.h" 2 3
# 146 "/usr/include/sys/types.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 147 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 190 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 212 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 22 "/usr/include/endian.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/endian.h" 2 3
# 37 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 38 "/usr/include/endian.h" 2 3
# 213 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 25 "/usr/include/sys/select.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3



typedef __sigset_t sigset_t;




# 1 "/usr/include/time.h" 1 3
# 106 "/usr/include/time.h" 3
struct timespec
  {
    long int tv_sec;
    long int tv_nsec;
  };
# 44 "/usr/include/sys/select.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 63 "/usr/include/bits/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 64 "/usr/include/bits/time.h" 2 3



struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 46 "/usr/include/sys/select.h" 2 3



typedef long int __fd_mask;







typedef struct
  {






    __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];


  } fd_set;






typedef __fd_mask fd_mask;
# 96 "/usr/include/sys/select.h" 3
extern int select (int __nfds, fd_set *__restrict __readfds,
                   fd_set *__restrict __writefds,
                   fd_set *__restrict __exceptfds,
                   struct timeval *__restrict __timeout) ;
# 216 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 219 "/usr/include/sys/types.h" 2 3
# 230 "/usr/include/sys/types.h" 3
typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 391 "/usr/include/stdlib.h" 2 3






extern long int random (void) ;


extern void srandom (unsigned int __seed) ;





extern char *initstate (unsigned int __seed, char *__statebuf,
                        size_t __statelen) ;



extern char *setstate (char *__statebuf) ;







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
                     int32_t *__restrict __result) ;

extern int srandom_r (unsigned int __seed, struct random_data *__buf) ;

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
                        size_t __statelen,
                        struct random_data *__restrict __buf) ;

extern int setstate_r (char *__restrict __statebuf,
                       struct random_data *__restrict __buf) ;





extern int rand (void) ;

extern void srand (unsigned int __seed) ;



extern int rand_r (unsigned int *__seed) ;







extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;


extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3]) ;


extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3]) ;


extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) ;
extern void lcong48 (unsigned short int __param[7]) ;





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
                      double *__restrict __result) ;
extern int erand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      double *__restrict __result) ;


extern int lrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;
extern int nrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;


extern int mrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;
extern int jrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
            ;

extern int seed48_r (unsigned short int __seed16v[3],
                     struct drand48_data *__buffer) ;

extern int lcong48_r (unsigned short int __param[7],
                      struct drand48_data *__buffer) ;
# 527 "/usr/include/stdlib.h" 3
extern void *malloc (size_t __size) __attribute__ ((__malloc__));

extern void *calloc (size_t __nmemb, size_t __size)
             __attribute__ ((__malloc__));





extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__malloc__));

extern void free (void *__ptr) ;



extern void cfree (void *__ptr) ;



# 1 "/usr/include/alloca.h" 1 3
# 22 "/usr/include/alloca.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/alloca.h" 2 3


# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 26 "/usr/include/alloca.h" 2 3







extern void *alloca (size_t __size) ;
# 547 "/usr/include/stdlib.h" 2 3




extern void *valloc (size_t __size) __attribute__ ((__malloc__));
# 561 "/usr/include/stdlib.h" 3
extern void abort (void) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) ;




extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
            ;





extern void exit (int __status) __attribute__ ((__noreturn__));
# 587 "/usr/include/stdlib.h" 3
extern char *getenv (__const char *__name) ;



extern char *__secure_getenv (__const char *__name) ;





extern int putenv (char *__string) ;





extern int setenv (__const char *__name, __const char *__value, int __replace)
            ;


extern int unsetenv (__const char *__name) ;






extern int clearenv (void) ;
# 623 "/usr/include/stdlib.h" 3
extern char *mktemp (char *__template) ;







extern int mkstemp (char *__template) ;
# 650 "/usr/include/stdlib.h" 3
extern char *mkdtemp (char *__template) ;




extern int system (__const char *__command) ;
# 672 "/usr/include/stdlib.h" 3
extern char *realpath (__const char *__restrict __name,
                       char *__restrict __resolved) ;






typedef int (*__compar_fn_t) (__const void *, __const void *);
# 689 "/usr/include/stdlib.h" 3
extern void *bsearch (__const void *__key, __const void *__base,
                      size_t __nmemb, size_t __size, __compar_fn_t __compar);



extern void qsort (void *__base, size_t __nmemb, size_t __size,
                   __compar_fn_t __compar);



extern int abs (int __x) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__const__));
# 710 "/usr/include/stdlib.h" 3
extern div_t div (int __numer, int __denom)
             __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
             __attribute__ ((__const__));
# 728 "/usr/include/stdlib.h" 3
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) ;




extern char *gcvt (double __value, int __ndigit, char *__buf) ;




extern char *qecvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) ;
extern char *qfcvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) ;
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) ;

extern int qecvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) ;
extern int qfcvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) ;






extern int mblen (__const char *__s, size_t __n) ;


extern int mbtowc (wchar_t *__restrict __pwc,
                   __const char *__restrict __s, size_t __n) ;


extern int wctomb (char *__s, wchar_t __wchar) ;



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
                        __const char *__restrict __s, size_t __n) ;

extern size_t wcstombs (char *__restrict __s,
                        __const wchar_t *__restrict __pwcs, size_t __n)
            ;







extern int rpmatch (__const char *__response) ;
# 858 "/usr/include/stdlib.h" 3
extern int getloadavg (double __loadavg[], int __nelem) ;
# 23 "http_resp.c" 2
# 1 "/usr/include/string.h" 1 3
# 26 "/usr/include/string.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/string.h" 2 3






# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 34 "/usr/include/string.h" 2 3



extern void *memcpy (void *__restrict __dest,
                     __const void *__restrict __src, size_t __n) ;


extern void *memmove (void *__dest, __const void *__src, size_t __n)
            ;





extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
                      int __c, size_t __n)
            ;




extern void *memset (void *__s, int __c, size_t __n) ;


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
             __attribute__ ((__pure__));


extern void *memchr (__const void *__s, int __c, size_t __n)
              __attribute__ ((__pure__));
# 77 "/usr/include/string.h" 3
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
            ;

extern char *strncpy (char *__restrict __dest,
                      __const char *__restrict __src, size_t __n) ;


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
            ;

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
                      size_t __n) ;


extern int strcmp (__const char *__s1, __const char *__s2)
             __attribute__ ((__pure__));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
             __attribute__ ((__pure__));


extern int strcoll (__const char *__s1, __const char *__s2)
             __attribute__ ((__pure__));

extern size_t strxfrm (char *__restrict __dest,
                       __const char *__restrict __src, size_t __n) ;
# 120 "/usr/include/string.h" 3
extern char *strdup (__const char *__s) __attribute__ ((__malloc__));
# 155 "/usr/include/string.h" 3
extern char *strchr (__const char *__s, int __c) __attribute__ ((__pure__));

extern char *strrchr (__const char *__s, int __c) __attribute__ ((__pure__));
# 167 "/usr/include/string.h" 3
extern size_t strcspn (__const char *__s, __const char *__reject)
             __attribute__ ((__pure__));


extern size_t strspn (__const char *__s, __const char *__accept)
             __attribute__ ((__pure__));

extern char *strpbrk (__const char *__s, __const char *__accept)
             __attribute__ ((__pure__));

extern char *strstr (__const char *__haystack, __const char *__needle)
             __attribute__ ((__pure__));
# 187 "/usr/include/string.h" 3
extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
            ;



extern char *__strtok_r (char *__restrict __s,
                         __const char *__restrict __delim,
                         char **__restrict __save_ptr) ;

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
                       char **__restrict __save_ptr) ;
# 218 "/usr/include/string.h" 3
extern size_t strlen (__const char *__s) __attribute__ ((__pure__));
# 229 "/usr/include/string.h" 3
extern char *strerror (int __errnum) ;



extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) ;




extern void __bzero (void *__s, size_t __n) ;



extern void bcopy (__const void *__src, void *__dest, size_t __n) ;


extern void bzero (void *__s, size_t __n) ;


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
             __attribute__ ((__pure__));


extern char *index (__const char *__s, int __c) __attribute__ ((__pure__));


extern char *rindex (__const char *__s, int __c) __attribute__ ((__pure__));



extern int ffs (int __i) __attribute__ ((__const__));
# 272 "/usr/include/string.h" 3
extern int strcasecmp (__const char *__s1, __const char *__s2)
             __attribute__ ((__pure__));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
             __attribute__ ((__pure__));
# 294 "/usr/include/string.h" 3
extern char *strsep (char **__restrict __stringp,
                     __const char *__restrict __delim) ;
# 357 "/usr/include/string.h" 3
# 1 "/usr/include/bits/string.h" 1 3
# 358 "/usr/include/string.h" 2 3


# 1 "/usr/include/bits/string2.h" 1 3
# 52 "/usr/include/bits/string2.h" 3
# 1 "/usr/include/endian.h" 1 3
# 53 "/usr/include/bits/string2.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 54 "/usr/include/bits/string2.h" 2 3
# 371 "/usr/include/bits/string2.h" 3
extern void *__rawmemchr (const void *__s, int __c);
# 395 "/usr/include/bits/string2.h" 3
extern __inline char *__strcpy_small (char *, __uint16_t, __uint16_t,
                                      __uint32_t, __uint32_t, size_t);
extern __inline char *
__strcpy_small (char *__dest,
                __uint16_t __src0_2, __uint16_t __src4_2,
                __uint32_t __src0_4, __uint32_t __src4_4,
                size_t __srclen)
{
  union {
    __uint32_t __ui;
    __uint16_t __usi;
    unsigned char __uc;
  } *__u = (void *) __dest;
  switch ((unsigned int) __srclen)
    {
    case 1:
      __u->__uc = '\0';
      break;
    case 2:
      __u->__usi = __src0_2;
      break;
    case 3:
      __u->__usi = __src0_2;
      __u = __extension__ ((void *) __u + 2);
      __u->__uc = '\0';
      break;
    case 4:
      __u->__ui = __src0_4;
      break;
    case 5:
      __u->__ui = __src0_4;
      __u = __extension__ ((void *) __u + 4);
      __u->__uc = '\0';
      break;
    case 6:
      __u->__ui = __src0_4;
      __u = __extension__ ((void *) __u + 4);
      __u->__usi = __src4_2;
      break;
    case 7:
      __u->__ui = __src0_4;
      __u = __extension__ ((void *) __u + 4);
      __u->__usi = __src4_2;
      __u = __extension__ ((void *) __u + 2);
      __u->__uc = '\0';
      break;
    case 8:
      __u->__ui = __src0_4;
      __u = __extension__ ((void *) __u + 4);
      __u->__ui = __src4_4;
      break;
    }
  return __dest;
}
# 873 "/usr/include/bits/string2.h" 3
extern __inline size_t __strcspn_c1 (__const char *__s, char __reject);
extern __inline size_t
__strcspn_c1 (__const char *__s, char __reject)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c2 (__const char *__s, char __reject1,
                                     char __reject2);
extern __inline size_t
__strcspn_c2 (__const char *__s, char __reject1, char __reject2)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c3 (__const char *__s, char __reject1,
                                     char __reject2, char __reject3);
extern __inline size_t
__strcspn_c3 (__const char *__s, char __reject1, char __reject2,
              char __reject3)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2 && __s[__result] != __reject3)
    ++__result;
  return __result;
}
# 928 "/usr/include/bits/string2.h" 3
extern __inline size_t __strspn_c1 (__const char *__s, char __accept);
extern __inline size_t
__strspn_c1 (__const char *__s, char __accept)
{
  register size_t __result = 0;

  while (__s[__result] == __accept)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c2 (__const char *__s, char __accept1,
                                    char __accept2);
extern __inline size_t
__strspn_c2 (__const char *__s, char __accept1, char __accept2)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c3 (__const char *__s, char __accept1,
                                    char __accept2, char __accept3);
extern __inline size_t
__strspn_c3 (__const char *__s, char __accept1, char __accept2, char __accept3)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2
         || __s[__result] == __accept3)
    ++__result;
  return __result;
}
# 983 "/usr/include/bits/string2.h" 3
extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
                                     int __accept2);
extern __inline char *
__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}

extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
                                     int __accept2, int __accept3);
extern __inline char *
__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
              int __accept3)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
         && *__s != __accept3)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
# 1045 "/usr/include/bits/string2.h" 3
extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
  char *__result;
  if (__s == ((void *)0))
    __s = *__nextp;
  while (*__s == __sep)
    ++__s;
  if (*__s == '\0')
    __result = ((void *)0);
  else
    {
      __result = __s;
      while (*__s != '\0' && *__s != __sep)
        ++__s;
      if (*__s == '\0')
        *__nextp = __s;
      else
        {
          *__s = '\0';
          *__nextp = __s + 1;
        }
    }
  return __result;
}
# 1095 "/usr/include/bits/string2.h" 3
extern __inline char *__strsep_1c (char **__s, char __reject);
extern __inline char *
__strsep_1c (char **__s, char __reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject)
    *(*__s)++ = '\0';
  else
    if ((*__s = (__extension__ (__builtin_constant_p (__reject) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : strchr (__retval, __reject)))) != ((void *)0))
      *(*__s)++ = '\0';
    else
      *__s = ((void *)0);
  return __retval;
}

extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
extern __inline char *
__strsep_2c (char **__s, char __reject1, char __reject2)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
                                   char __reject3);
extern __inline char *
__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2
      || *__retval == __reject3)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2
             && *__cp != __reject3)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_g (char **__s, __const char *__reject);
extern __inline char *
__strsep_g (char **__s, __const char *__reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return ((void *)0);
  if ((*__s = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (__reject) && ((size_t)(const void *)((__reject) + 1) - (size_t)(const void *)(__reject) == 1) ? ((__a0 = ((__const char *) (__reject))[0], __a0 == '\0') ? ((void) (__retval), ((void *)0)) : ((__a1 = ((__const char *) (__reject))[1], __a1 == '\0') ? (__extension__ (__builtin_constant_p (__a0) && (__a0) == '\0' ? (char *) __rawmemchr (__retval, __a0) : strchr (__retval, __a0))) : ((__a2 = ((__const char *) (__reject))[2], __a2 == '\0') ? __strpbrk_c2 (__retval, __a0, __a1) : (((__const char *) (__reject))[3] == '\0' ? __strpbrk_c3 (__retval, __a0, __a1, __a2) : strpbrk (__retval, __reject))))) : strpbrk (__retval, __reject)); })) != ((void *)0))
    *(*__s)++ = '\0';
  return __retval;
}
# 1188 "/usr/include/bits/string2.h" 3
# 1 "/usr/include/stdlib.h" 1 3
# 1189 "/usr/include/bits/string2.h" 2 3




extern char *__strdup (__const char *__string) __attribute__ ((__malloc__));
# 1212 "/usr/include/bits/string2.h" 3
extern char *__strndup (__const char *__string, size_t __n)
             __attribute__ ((__malloc__));
# 361 "/usr/include/string.h" 2 3
# 24 "http_resp.c" 2
# 1 "/usr/include/ctype.h" 1 3
# 26 "/usr/include/ctype.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/ctype.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 28 "/usr/include/ctype.h" 2 3
# 40 "/usr/include/ctype.h" 3
# 1 "/usr/include/endian.h" 1 3
# 41 "/usr/include/ctype.h" 2 3






enum
{
  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
# 75 "/usr/include/ctype.h" 3
extern __const unsigned short int *__ctype_b;
extern __const __int32_t *__ctype_tolower;
extern __const __int32_t *__ctype_toupper;
# 91 "/usr/include/ctype.h" 3
extern int isalnum (int) ;
extern int isalpha (int) ;
extern int iscntrl (int) ;
extern int isdigit (int) ;
extern int islower (int) ;
extern int isgraph (int) ;
extern int isprint (int) ;
extern int ispunct (int) ;
extern int isspace (int) ;
extern int isupper (int) ;
extern int isxdigit (int) ;







extern int tolower (int __c) ;


extern int toupper (int __c) ;






extern int isascii (int __c) ;



extern int toascii (int __c) ;



extern int _toupper (int) ;
extern int _tolower (int) ;
# 167 "/usr/include/ctype.h" 3
extern __inline int
tolower (int __c)
{
  return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
}

extern __inline int
toupper (int __c)
{
  return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
}
# 25 "http_resp.c" 2
# 1 "/usr/include/unistd.h" 1 3
# 26 "/usr/include/unistd.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/unistd.h" 2 3
# 175 "/usr/include/unistd.h" 3
# 1 "/usr/include/bits/posix_opt.h" 1 3
# 176 "/usr/include/unistd.h" 2 3
# 190 "/usr/include/unistd.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 191 "/usr/include/unistd.h" 2 3
# 199 "/usr/include/unistd.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 200 "/usr/include/unistd.h" 2 3
# 240 "/usr/include/unistd.h" 3
typedef __intptr_t intptr_t;






typedef __socklen_t socklen_t;
# 260 "/usr/include/unistd.h" 3
extern int access (__const char *__name, int __type) ;
# 290 "/usr/include/unistd.h" 3
extern __off_t lseek (int __fd, __off_t __offset, int __whence) ;
# 306 "/usr/include/unistd.h" 3
extern int close (int __fd) ;



extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;


extern ssize_t write (int __fd, __const void *__buf, size_t __n) ;
# 353 "/usr/include/unistd.h" 3
extern int pipe (int __pipedes[2]) ;
# 362 "/usr/include/unistd.h" 3
extern unsigned int alarm (unsigned int __seconds) ;
# 371 "/usr/include/unistd.h" 3
extern unsigned int sleep (unsigned int __seconds) ;






extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
            ;



extern int usleep (__useconds_t __useconds) ;





extern int pause (void) ;



extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
            ;



extern int fchown (int __fd, __uid_t __owner, __gid_t __group) ;




extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
            ;




extern int chdir (__const char *__path) ;



extern int fchdir (int __fd) ;
# 423 "/usr/include/unistd.h" 3
extern char *getcwd (char *__buf, size_t __size) ;
# 436 "/usr/include/unistd.h" 3
extern char *getwd (char *__buf) ;




extern int dup (int __fd) ;


extern int dup2 (int __fd, int __fd2) ;


extern char **__environ;







extern int execve (__const char *__path, char *__const __argv[],
                   char *__const __envp[]) ;
# 467 "/usr/include/unistd.h" 3
extern int execv (__const char *__path, char *__const __argv[]) ;



extern int execle (__const char *__path, __const char *__arg, ...) ;



extern int execl (__const char *__path, __const char *__arg, ...) ;



extern int execvp (__const char *__file, char *__const __argv[]) ;




extern int execlp (__const char *__file, __const char *__arg, ...) ;




extern int nice (int __inc) ;




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/usr/include/bits/confname.h" 1 3
# 25 "/usr/include/bits/confname.h" 3
enum
  {
    _PC_LINK_MAX,

    _PC_MAX_CANON,

    _PC_MAX_INPUT,

    _PC_NAME_MAX,

    _PC_PATH_MAX,

    _PC_PIPE_BUF,

    _PC_CHOWN_RESTRICTED,

    _PC_NO_TRUNC,

    _PC_VDISABLE,

    _PC_SYNC_IO,

    _PC_ASYNC_IO,

    _PC_PRIO_IO,

    _PC_SOCK_MAXBUF,

    _PC_FILESIZEBITS,

    _PC_REC_INCR_XFER_SIZE,

    _PC_REC_MAX_XFER_SIZE,

    _PC_REC_MIN_XFER_SIZE,

    _PC_REC_XFER_ALIGN,

    _PC_ALLOC_SIZE_MIN,

    _PC_SYMLINK_MAX

  };


enum
  {
    _SC_ARG_MAX,

    _SC_CHILD_MAX,

    _SC_CLK_TCK,

    _SC_NGROUPS_MAX,

    _SC_OPEN_MAX,

    _SC_STREAM_MAX,

    _SC_TZNAME_MAX,

    _SC_JOB_CONTROL,

    _SC_SAVED_IDS,

    _SC_REALTIME_SIGNALS,

    _SC_PRIORITY_SCHEDULING,

    _SC_TIMERS,

    _SC_ASYNCHRONOUS_IO,

    _SC_PRIORITIZED_IO,

    _SC_SYNCHRONIZED_IO,

    _SC_FSYNC,

    _SC_MAPPED_FILES,

    _SC_MEMLOCK,

    _SC_MEMLOCK_RANGE,

    _SC_MEMORY_PROTECTION,

    _SC_MESSAGE_PASSING,

    _SC_SEMAPHORES,

    _SC_SHARED_MEMORY_OBJECTS,

    _SC_AIO_LISTIO_MAX,

    _SC_AIO_MAX,

    _SC_AIO_PRIO_DELTA_MAX,

    _SC_DELAYTIMER_MAX,

    _SC_MQ_OPEN_MAX,

    _SC_MQ_PRIO_MAX,

    _SC_VERSION,

    _SC_PAGESIZE,


    _SC_RTSIG_MAX,

    _SC_SEM_NSEMS_MAX,

    _SC_SEM_VALUE_MAX,

    _SC_SIGQUEUE_MAX,

    _SC_TIMER_MAX,




    _SC_BC_BASE_MAX,

    _SC_BC_DIM_MAX,

    _SC_BC_SCALE_MAX,

    _SC_BC_STRING_MAX,

    _SC_COLL_WEIGHTS_MAX,

    _SC_EQUIV_CLASS_MAX,

    _SC_EXPR_NEST_MAX,

    _SC_LINE_MAX,

    _SC_RE_DUP_MAX,

    _SC_CHARCLASS_NAME_MAX,


    _SC_2_VERSION,

    _SC_2_C_BIND,

    _SC_2_C_DEV,

    _SC_2_FORT_DEV,

    _SC_2_FORT_RUN,

    _SC_2_SW_DEV,

    _SC_2_LOCALEDEF,


    _SC_PII,

    _SC_PII_XTI,

    _SC_PII_SOCKET,

    _SC_PII_INTERNET,

    _SC_PII_OSI,

    _SC_POLL,

    _SC_SELECT,

    _SC_UIO_MAXIOV,

    _SC_IOV_MAX = _SC_UIO_MAXIOV,

    _SC_PII_INTERNET_STREAM,

    _SC_PII_INTERNET_DGRAM,

    _SC_PII_OSI_COTS,

    _SC_PII_OSI_CLTS,

    _SC_PII_OSI_M,

    _SC_T_IOV_MAX,



    _SC_THREADS,

    _SC_THREAD_SAFE_FUNCTIONS,

    _SC_GETGR_R_SIZE_MAX,

    _SC_GETPW_R_SIZE_MAX,

    _SC_LOGIN_NAME_MAX,

    _SC_TTY_NAME_MAX,

    _SC_THREAD_DESTRUCTOR_ITERATIONS,

    _SC_THREAD_KEYS_MAX,

    _SC_THREAD_STACK_MIN,

    _SC_THREAD_THREADS_MAX,

    _SC_THREAD_ATTR_STACKADDR,

    _SC_THREAD_ATTR_STACKSIZE,

    _SC_THREAD_PRIORITY_SCHEDULING,

    _SC_THREAD_PRIO_INHERIT,

    _SC_THREAD_PRIO_PROTECT,

    _SC_THREAD_PROCESS_SHARED,


    _SC_NPROCESSORS_CONF,

    _SC_NPROCESSORS_ONLN,

    _SC_PHYS_PAGES,

    _SC_AVPHYS_PAGES,

    _SC_ATEXIT_MAX,

    _SC_PASS_MAX,


    _SC_XOPEN_VERSION,

    _SC_XOPEN_XCU_VERSION,

    _SC_XOPEN_UNIX,

    _SC_XOPEN_CRYPT,

    _SC_XOPEN_ENH_I18N,

    _SC_XOPEN_SHM,


    _SC_2_CHAR_TERM,

    _SC_2_C_VERSION,

    _SC_2_UPE,


    _SC_XOPEN_XPG2,

    _SC_XOPEN_XPG3,

    _SC_XOPEN_XPG4,


    _SC_CHAR_BIT,

    _SC_CHAR_MAX,

    _SC_CHAR_MIN,

    _SC_INT_MAX,

    _SC_INT_MIN,

    _SC_LONG_BIT,

    _SC_WORD_BIT,

    _SC_MB_LEN_MAX,

    _SC_NZERO,

    _SC_SSIZE_MAX,

    _SC_SCHAR_MAX,

    _SC_SCHAR_MIN,

    _SC_SHRT_MAX,

    _SC_SHRT_MIN,

    _SC_UCHAR_MAX,

    _SC_UINT_MAX,

    _SC_ULONG_MAX,

    _SC_USHRT_MAX,


    _SC_NL_ARGMAX,

    _SC_NL_LANGMAX,

    _SC_NL_MSGMAX,

    _SC_NL_NMAX,

    _SC_NL_SETMAX,

    _SC_NL_TEXTMAX,


    _SC_XBS5_ILP32_OFF32,

    _SC_XBS5_ILP32_OFFBIG,

    _SC_XBS5_LP64_OFF64,

    _SC_XBS5_LPBIG_OFFBIG,


    _SC_XOPEN_LEGACY,

    _SC_XOPEN_REALTIME,

    _SC_XOPEN_REALTIME_THREADS,


    _SC_ADVISORY_INFO,

    _SC_BARRIERS,

    _SC_BASE,

    _SC_C_LANG_SUPPORT,

    _SC_C_LANG_SUPPORT_R,

    _SC_CLOCK_SELECTION,

    _SC_CPUTIME,

    _SC_THREAD_CPUTIME,

    _SC_DEVICE_IO,

    _SC_DEVICE_SPECIFIC,

    _SC_DEVICE_SPECIFIC_R,

    _SC_FD_MGMT,

    _SC_FIFO,

    _SC_PIPE,

    _SC_FILE_ATTRIBUTES,

    _SC_FILE_LOCKING,

    _SC_FILE_SYSTEM,

    _SC_MONOTONIC_CLOCK,

    _SC_MULTI_PROCESS,

    _SC_SINGLE_PROCESS,

    _SC_NETWORKING,

    _SC_READER_WRITER_LOCKS,

    _SC_SPIN_LOCKS,

    _SC_REGEXP,

    _SC_REGEX_VERSION,

    _SC_SHELL,

    _SC_SIGNALS,

    _SC_SPAWN,

    _SC_SPORADIC_SERVER,

    _SC_THREAD_SPORADIC_SERVER,

    _SC_SYSTEM_DATABASE,

    _SC_SYSTEM_DATABASE_R,

    _SC_TIMEOUTS,

    _SC_TYPED_MEMORY_OBJECTS,

    _SC_USER_GROUPS,

    _SC_USER_GROUPS_R,

    _SC_2_PBS,

    _SC_2_PBS_ACCOUNTING,

    _SC_2_PBS_LOCATE,

    _SC_2_PBS_MESSAGE,

    _SC_2_PBS_TRACK,

    _SC_SYMLOOP_MAX,

    _SC_STREAMS,

    _SC_2_PBS_CHECKPOINT,


    _SC_V6_ILP32_OFF32,

    _SC_V6_ILP32_OFFBIG,

    _SC_V6_LP64_OFF64,

    _SC_V6_LPBIG_OFFBIG,


    _SC_HOST_NAME_MAX,

    _SC_TRACE,

    _SC_TRACE_EVENT_FILTER,

    _SC_TRACE_INHERIT,

    _SC_TRACE_LOG

  };





enum
  {
    _CS_PATH,
# 563 "/usr/include/bits/confname.h" 3
    _CS_V6_WIDTH_RESTRICTED_ENVS

  };
# 501 "/usr/include/unistd.h" 2 3


extern long int pathconf (__const char *__path, int __name) ;


extern long int fpathconf (int __fd, int __name) ;


extern long int sysconf (int __name) __attribute__ ((__const__));



extern size_t confstr (int __name, char *__buf, size_t __len) ;




extern __pid_t getpid (void) ;


extern __pid_t getppid (void) ;




extern __pid_t getpgrp (void) ;
# 536 "/usr/include/unistd.h" 3
extern __pid_t __getpgid (__pid_t __pid) ;
# 545 "/usr/include/unistd.h" 3
extern int setpgid (__pid_t __pid, __pid_t __pgid) ;
# 562 "/usr/include/unistd.h" 3
extern int setpgrp (void) ;
# 580 "/usr/include/unistd.h" 3
extern __pid_t setsid (void) ;







extern __uid_t getuid (void) ;


extern __uid_t geteuid (void) ;


extern __gid_t getgid (void) ;


extern __gid_t getegid (void) ;




extern int getgroups (int __size, __gid_t __list[]) ;
# 613 "/usr/include/unistd.h" 3
extern int setuid (__uid_t __uid) ;




extern int setreuid (__uid_t __ruid, __uid_t __euid) ;




extern int seteuid (__uid_t __uid) ;






extern int setgid (__gid_t __gid) ;




extern int setregid (__gid_t __rgid, __gid_t __egid) ;




extern int setegid (__gid_t __gid) ;






extern __pid_t fork (void) ;






extern __pid_t vfork (void) ;





extern char *ttyname (int __fd) ;



extern int ttyname_r (int __fd, char *__buf, size_t __buflen) ;



extern int isatty (int __fd) ;





extern int ttyslot (void) ;




extern int link (__const char *__from, __const char *__to) ;



extern int symlink (__const char *__from, __const char *__to) ;




extern int readlink (__const char *__restrict __path, char *__restrict __buf,
                     size_t __len) ;



extern int unlink (__const char *__name) ;


extern int rmdir (__const char *__path) ;



extern __pid_t tcgetpgrp (int __fd) ;


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) ;



extern char *getlogin (void) ;
# 717 "/usr/include/unistd.h" 3
extern int setlogin (__const char *__name) ;
# 726 "/usr/include/unistd.h" 3
# 1 "/usr/include/getopt.h" 1 3
# 47 "/usr/include/getopt.h" 3
extern char *optarg;
# 61 "/usr/include/getopt.h" 3
extern int optind;




extern int opterr;



extern int optopt;
# 145 "/usr/include/getopt.h" 3
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
# 727 "/usr/include/unistd.h" 2 3







extern int gethostname (char *__name, size_t __len) ;






extern int sethostname (__const char *__name, size_t __len) ;



extern int sethostid (long int __id) ;





extern int getdomainname (char *__name, size_t __len) ;
extern int setdomainname (__const char *__name, size_t __len) ;





extern int vhangup (void) ;


extern int revoke (__const char *__file) ;







extern int profil (unsigned short int *__sample_buffer, size_t __size,
                   size_t __offset, unsigned int __scale) ;





extern int acct (__const char *__name) ;



extern char *getusershell (void) ;
extern void endusershell (void) ;
extern void setusershell (void) ;





extern int daemon (int __nochdir, int __noclose) ;






extern int chroot (__const char *__path) ;



extern char *getpass (__const char *__prompt) ;





extern int fsync (int __fd) ;






extern long int gethostid (void) ;


extern void sync (void) ;




extern int getpagesize (void) __attribute__ ((__const__));




extern int truncate (__const char *__file, __off_t __length) ;
# 841 "/usr/include/unistd.h" 3
extern int ftruncate (int __fd, __off_t __length) ;
# 857 "/usr/include/unistd.h" 3
extern int getdtablesize (void) ;
# 866 "/usr/include/unistd.h" 3
extern int brk (void *__addr) ;





extern void *sbrk (intptr_t __delta) ;
# 887 "/usr/include/unistd.h" 3
extern long int syscall (long int __sysno, ...) ;
# 907 "/usr/include/unistd.h" 3
extern int lockf (int __fd, int __cmd, __off_t __len) ;
# 938 "/usr/include/unistd.h" 3
extern int fdatasync (int __fildes) ;
# 983 "/usr/include/unistd.h" 3
extern int pthread_atfork (void (*__prepare) (void),
                           void (*__parent) (void),
                           void (*__child) (void)) ;
# 26 "http_resp.c" 2
# 1 "http_resp.h" 1
# 25 "http_resp.h"
# 1 "http_hdrs.h" 1
# 25 "http_hdrs.h"
# 1 "ghttp_constants.h" 1
# 30 "ghttp_constants.h"
extern const char http_hdr_Allow[];
extern const char http_hdr_Content_Encoding[];
extern const char http_hdr_Content_Language[];
extern const char http_hdr_Content_Length[];
extern const char http_hdr_Content_Location[];
extern const char http_hdr_Content_MD5[];
extern const char http_hdr_Content_Range[];
extern const char http_hdr_Content_Type[];
extern const char http_hdr_Expires[];
extern const char http_hdr_Last_Modified[];



extern const char http_hdr_Cache_Control[];
extern const char http_hdr_Connection[];
extern const char http_hdr_Date[];
extern const char http_hdr_Pragma[];
extern const char http_hdr_Transfer_Encoding[];
extern const char http_hdr_Update[];
extern const char http_hdr_Trailer[];
extern const char http_hdr_Via[];



extern const char http_hdr_Accept[];
extern const char http_hdr_Accept_Charset[];
extern const char http_hdr_Accept_Encoding[];
extern const char http_hdr_Accept_Language[];
extern const char http_hdr_Authorization[];
extern const char http_hdr_Expect[];
extern const char http_hdr_From[];
extern const char http_hdr_Host[];
extern const char http_hdr_If_Modified_Since[];
extern const char http_hdr_If_Match[];
extern const char http_hdr_If_None_Match[];
extern const char http_hdr_If_Range[];
extern const char http_hdr_If_Unmodified_Since[];
extern const char http_hdr_Max_Forwards[];
extern const char http_hdr_Proxy_Authorization[];
extern const char http_hdr_Range[];
extern const char http_hdr_Referrer[];
extern const char http_hdr_TE[];
extern const char http_hdr_User_Agent[];



extern const char http_hdr_Accept_Ranges[];
extern const char http_hdr_Age[];
extern const char http_hdr_ETag[];
extern const char http_hdr_Location[];
extern const char http_hdr_Retry_After[];
extern const char http_hdr_Server[];
extern const char http_hdr_Vary[];
extern const char http_hdr_Warning[];
extern const char http_hdr_WWW_Authenticate[];



extern const char http_hdr_Set_Cookie[];



extern const char http_hdr_DAV[];
extern const char http_hdr_Depth[];
extern const char http_hdr_Destination[];
extern const char http_hdr_If[];
extern const char http_hdr_Lock_Token[];
extern const char http_hdr_Overwrite[];
extern const char http_hdr_Status_URI[];
extern const char http_hdr_Timeout[];
# 26 "http_hdrs.h" 2


extern const char *http_hdr_known_list[];



typedef struct http_hdr_list_tag
{
  char *header[256];
  char *value[256];
} http_hdr_list;




const char *
http_hdr_is_known(const char *a_hdr);


http_hdr_list *
http_hdr_list_new(void);


void
http_hdr_list_destroy(http_hdr_list *a_list);


int
http_hdr_set_value(http_hdr_list *a_list,
                   const char *a_name,
                   const char *a_val);


int
http_hdr_set_value_no_nts(http_hdr_list *a_list,
                          const char *a_name_start,
                          int a_name_len,
                          const char *a_val_start,
                          int a_val_len);


char *
http_hdr_get_value(http_hdr_list *a_list,
                   const char *a_name);


int
http_hdr_get_headers(http_hdr_list *a_list,
                     char ***a_names,
                     int *a_num_names);


int
http_hdr_clear_value(http_hdr_list *a_list,
                     const char *a_name);
# 26 "http_resp.h" 2
# 1 "http_trans.h" 1
# 25 "http_trans.h"
# 1 "/usr/include/sys/types.h" 1 3
# 26 "http_trans.h" 2
# 1 "/usr/include/sys/socket.h" 1 3
# 23 "/usr/include/sys/socket.h" 3
# 1 "/usr/include/features.h" 1 3
# 24 "/usr/include/sys/socket.h" 2 3



# 1 "/usr/include/sys/uio.h" 1 3
# 22 "/usr/include/sys/uio.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/sys/uio.h" 2 3

# 1 "/usr/include/sys/types.h" 1 3
# 25 "/usr/include/sys/uio.h" 2 3




# 1 "/usr/include/bits/uio.h" 1 3
# 24 "/usr/include/bits/uio.h" 3
# 1 "/usr/include/sys/types.h" 1 3
# 25 "/usr/include/bits/uio.h" 2 3
# 42 "/usr/include/bits/uio.h" 3
struct iovec
  {
    void *iov_base;
    size_t iov_len;
  };
# 30 "/usr/include/sys/uio.h" 2 3







extern ssize_t readv (int __fd, __const struct iovec *__vector, int __count)
            ;






extern ssize_t writev (int __fd, __const struct iovec *__vector, int __count)
            ;
# 28 "/usr/include/sys/socket.h" 2 3

# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 30 "/usr/include/sys/socket.h" 2 3





# 1 "/usr/include/bits/socket.h" 1 3
# 29 "/usr/include/bits/socket.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 30 "/usr/include/bits/socket.h" 2 3

# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 1 3
# 11 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/syslimits.h" 1 3






# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 1 3
# 125 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 3
# 1 "/usr/include/limits.h" 1 3
# 26 "/usr/include/limits.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/limits.h" 2 3
# 144 "/usr/include/limits.h" 3
# 1 "/usr/include/bits/posix1_lim.h" 1 3
# 126 "/usr/include/bits/posix1_lim.h" 3
# 1 "/usr/include/bits/local_lim.h" 1 3
# 36 "/usr/include/bits/local_lim.h" 3
# 1 "/usr/include/linux/limits.h" 1 3
# 37 "/usr/include/bits/local_lim.h" 2 3
# 127 "/usr/include/bits/posix1_lim.h" 2 3
# 145 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/posix2_lim.h" 1 3
# 149 "/usr/include/limits.h" 2 3
# 126 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 2 3
# 8 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/syslimits.h" 2 3
# 12 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/limits.h" 2 3
# 32 "/usr/include/bits/socket.h" 2 3
# 1 "/usr/include/sys/types.h" 1 3
# 33 "/usr/include/bits/socket.h" 2 3
# 41 "/usr/include/bits/socket.h" 3
enum __socket_type
{
  SOCK_STREAM = 1,


  SOCK_DGRAM = 2,


  SOCK_RAW = 3,

  SOCK_RDM = 4,

  SOCK_SEQPACKET = 5,


  SOCK_PACKET = 10



};
# 142 "/usr/include/bits/socket.h" 3
# 1 "/usr/include/bits/sockaddr.h" 1 3
# 29 "/usr/include/bits/sockaddr.h" 3
typedef unsigned short int sa_family_t;
# 143 "/usr/include/bits/socket.h" 2 3


struct sockaddr
  {
    sa_family_t sa_family;
    char sa_data[14];
  };
# 162 "/usr/include/bits/socket.h" 3
struct sockaddr_storage
  {
    sa_family_t ss_family;
    __uint32_t __ss_align;
    char __ss_padding[(128 - (2 * sizeof (__uint32_t)))];
  };



enum
  {
    MSG_OOB = 0x01,

    MSG_PEEK = 0x02,

    MSG_DONTROUTE = 0x04,






    MSG_CTRUNC = 0x08,

    MSG_PROXY = 0x10,

    MSG_TRUNC = 0x20,

    MSG_DONTWAIT = 0x40,

    MSG_EOR = 0x80,

    MSG_WAITALL = 0x100,

    MSG_FIN = 0x200,

    MSG_SYN = 0x400,

    MSG_CONFIRM = 0x800,

    MSG_RST = 0x1000,

    MSG_ERRQUEUE = 0x2000,

    MSG_NOSIGNAL = 0x4000,

    MSG_MORE = 0x8000

  };




struct msghdr
  {
    void *msg_name;
    socklen_t msg_namelen;

    struct iovec *msg_iov;
    int msg_iovlen;

    void *msg_control;
    socklen_t msg_controllen;

    int msg_flags;
  };


struct cmsghdr
  {
    size_t cmsg_len;

    int cmsg_level;
    int cmsg_type;
    __extension__ unsigned char __cmsg_data [];

  };
# 256 "/usr/include/bits/socket.h" 3
extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
                                      struct cmsghdr *__cmsg) ;




extern __inline struct cmsghdr *
__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
{
  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))

    return 0;

  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
                               + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)));
  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
                                        + __mhdr->msg_controllen)
      || ((unsigned char *) __cmsg + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))
          > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))

    return 0;
  return __cmsg;
}




enum
  {
    SCM_RIGHTS = 0x01,


    SCM_CREDENTIALS = 0x02,


    __SCM_CONNECT = 0x03
  };



struct ucred
{
  pid_t pid;
  uid_t uid;
  gid_t gid;
};


# 1 "/usr/include/asm/socket.h" 1 3



# 1 "/usr/include/asm/sockios.h" 1 3
# 5 "/usr/include/asm/socket.h" 2 3
# 305 "/usr/include/bits/socket.h" 2 3



struct linger
  {
    int l_onoff;
    int l_linger;
  };
# 36 "/usr/include/sys/socket.h" 2 3




struct osockaddr
  {
    unsigned short int sa_family;
    unsigned char sa_data[14];
  };




enum
{
  SHUT_RD = 0,

  SHUT_WR,

  SHUT_RDWR

};
# 100 "/usr/include/sys/socket.h" 3
extern int socket (int __domain, int __type, int __protocol) ;





extern int socketpair (int __domain, int __type, int __protocol,
                       int __fds[2]) ;


extern int bind (int __fd, __const struct sockaddr * __addr, socklen_t __len)
            ;


extern int getsockname (int __fd, struct sockaddr *__restrict __addr,
                        socklen_t *__restrict __len) ;





extern int connect (int __fd, __const struct sockaddr * __addr, socklen_t __len)
            ;



extern int getpeername (int __fd, struct sockaddr *__restrict __addr,
                        socklen_t *__restrict __len) ;



extern ssize_t send (int __fd, __const void *__buf, size_t __n, int __flags)
            ;



extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags)
            ;



extern ssize_t sendto (int __fd, __const void *__buf, size_t __n,
                       int __flags, __const struct sockaddr * __addr,
                       socklen_t __addr_len) ;





extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags,
                         struct sockaddr *__restrict __addr, socklen_t *__restrict __addr_len)
            ;




extern ssize_t sendmsg (int __fd, __const struct msghdr *__message, int __flags)
            ;



extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags)
            ;





extern int getsockopt (int __fd, int __level, int __optname,
                       void *__restrict __optval,
                       socklen_t *__restrict __optlen) ;




extern int setsockopt (int __fd, int __level, int __optname,
                       __const void *__optval, socklen_t __optlen) ;





extern int listen (int __fd, int __n) ;






extern int accept (int __fd, struct sockaddr *__restrict __addr,
                   socklen_t *__restrict __addr_len)
            ;







extern int shutdown (int __fd, int __how) ;
# 212 "/usr/include/sys/socket.h" 3
extern int isfdtype (int __fd, int __fdtype) ;
# 27 "http_trans.h" 2
# 1 "/usr/include/netinet/in.h" 1 3
# 22 "/usr/include/netinet/in.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/netinet/in.h" 2 3
# 1 "/usr/include/stdint.h" 1 3
# 26 "/usr/include/stdint.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/stdint.h" 2 3

# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 29 "/usr/include/stdint.h" 2 3
# 1 "/usr/include/bits/wchar.h" 1 3
# 30 "/usr/include/stdint.h" 2 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 31 "/usr/include/stdint.h" 2 3
# 51 "/usr/include/stdint.h" 3
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;

typedef unsigned int uint32_t;





__extension__
typedef unsigned long long int uint64_t;






typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;



__extension__
typedef long long int int_least64_t;



typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;



__extension__
typedef unsigned long long int uint_least64_t;






typedef signed char int_fast8_t;





typedef int int_fast16_t;
typedef int int_fast32_t;
__extension__
typedef long long int int_fast64_t;



typedef unsigned char uint_fast8_t;





typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
__extension__
typedef unsigned long long int uint_fast64_t;
# 131 "/usr/include/stdint.h" 3
typedef unsigned int uintptr_t;
# 140 "/usr/include/stdint.h" 3
__extension__
typedef long long int intmax_t;
__extension__
typedef unsigned long long int uintmax_t;
# 24 "/usr/include/netinet/in.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 25 "/usr/include/netinet/in.h" 2 3





enum
  {
    IPPROTO_IP = 0,

    IPPROTO_HOPOPTS = 0,

    IPPROTO_ICMP = 1,

    IPPROTO_IGMP = 2,

    IPPROTO_IPIP = 4,

    IPPROTO_TCP = 6,

    IPPROTO_EGP = 8,

    IPPROTO_PUP = 12,

    IPPROTO_UDP = 17,

    IPPROTO_IDP = 22,

    IPPROTO_TP = 29,

    IPPROTO_IPV6 = 41,

    IPPROTO_ROUTING = 43,

    IPPROTO_FRAGMENT = 44,

    IPPROTO_RSVP = 46,

    IPPROTO_GRE = 47,

    IPPROTO_ESP = 50,

    IPPROTO_AH = 51,

    IPPROTO_ICMPV6 = 58,

    IPPROTO_NONE = 59,

    IPPROTO_DSTOPTS = 60,

    IPPROTO_MTP = 92,

    IPPROTO_ENCAP = 98,

    IPPROTO_PIM = 103,

    IPPROTO_COMP = 108,

    IPPROTO_RAW = 255,

    IPPROTO_MAX
  };



typedef uint16_t in_port_t;


enum
  {
    IPPORT_ECHO = 7,
    IPPORT_DISCARD = 9,
    IPPORT_SYSTAT = 11,
    IPPORT_DAYTIME = 13,
    IPPORT_NETSTAT = 15,
    IPPORT_FTP = 21,
    IPPORT_TELNET = 23,
    IPPORT_SMTP = 25,
    IPPORT_TIMESERVER = 37,
    IPPORT_NAMESERVER = 42,
    IPPORT_WHOIS = 43,
    IPPORT_MTP = 57,

    IPPORT_TFTP = 69,
    IPPORT_RJE = 77,
    IPPORT_FINGER = 79,
    IPPORT_TTYLINK = 87,
    IPPORT_SUPDUP = 95,


    IPPORT_EXECSERVER = 512,
    IPPORT_LOGINSERVER = 513,
    IPPORT_CMDSERVER = 514,
    IPPORT_EFSSERVER = 520,


    IPPORT_BIFFUDP = 512,
    IPPORT_WHOSERVER = 513,
    IPPORT_ROUTESERVER = 520,


    IPPORT_RESERVED = 1024,


    IPPORT_USERRESERVED = 5000
  };



typedef uint32_t in_addr_t;
struct in_addr
  {
    in_addr_t s_addr;
  };
# 190 "/usr/include/netinet/in.h" 3
struct in6_addr
  {
    union
      {
        uint8_t u6_addr8[16];
        uint16_t u6_addr16[8];
        uint32_t u6_addr32[4];
      } in6_u;



  };

extern const struct in6_addr in6addr_any;
extern const struct in6_addr in6addr_loopback;







# 1 "/usr/include/bits/socket.h" 1 3
# 213 "/usr/include/netinet/in.h" 2 3



struct sockaddr_in
  {
    sa_family_t sin_family;
    in_port_t sin_port;
    struct in_addr sin_addr;


    unsigned char sin_zero[sizeof (struct sockaddr) -
                           (sizeof (unsigned short int)) -
                           sizeof (in_port_t) -
                           sizeof (struct in_addr)];
  };


struct sockaddr_in6
  {
    sa_family_t sin6_family;
    in_port_t sin6_port;
    uint32_t sin6_flowinfo;
    struct in6_addr sin6_addr;
    uint32_t sin6_scope_id;
  };


struct ipv6_mreq
  {

    struct in6_addr ipv6mr_multiaddr;


    unsigned int ipv6mr_interface;
  };


# 1 "/usr/include/bits/in.h" 1 3
# 66 "/usr/include/bits/in.h" 3
struct ip_opts
  {
    struct in_addr ip_dst;
    char ip_opts[40];
  };


struct ip_mreq
  {
    struct in_addr imr_multiaddr;
    struct in_addr imr_interface;
  };


struct ip_mreqn
  {
    struct in_addr imr_multiaddr;
    struct in_addr imr_address;
    int imr_ifindex;
  };


struct in_pktinfo
  {
    int ipi_ifindex;
    struct in_addr ipi_spec_dst;
    struct in_addr ipi_addr;
  };
# 251 "/usr/include/netinet/in.h" 2 3
# 259 "/usr/include/netinet/in.h" 3
extern uint32_t ntohl (uint32_t __netlong) __attribute__ ((__const__));
extern uint16_t ntohs (uint16_t __netshort)
             __attribute__ ((__const__));
extern uint32_t htonl (uint32_t __hostlong)
             __attribute__ ((__const__));
extern uint16_t htons (uint16_t __hostshort)
             __attribute__ ((__const__));

# 1 "/usr/include/endian.h" 1 3
# 268 "/usr/include/netinet/in.h" 2 3


# 1 "/usr/include/bits/byteswap.h" 1 3
# 271 "/usr/include/netinet/in.h" 2 3
# 333 "/usr/include/netinet/in.h" 3
extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) ;


extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
            ;
# 361 "/usr/include/netinet/in.h" 3
struct in6_pktinfo
  {
    struct in6_addr ipi6_addr;
    unsigned int ipi6_ifindex;
  };
# 28 "http_trans.h" 2
# 1 "/usr/include/netdb.h" 1 3
# 26 "/usr/include/netdb.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/netdb.h" 2 3

# 1 "/usr/include/netinet/in.h" 1 3
# 29 "/usr/include/netdb.h" 2 3
# 1 "/usr/include/stdint.h" 1 3
# 30 "/usr/include/netdb.h" 2 3



# 1 "/usr/include/rpc/netdb.h" 1 3
# 39 "/usr/include/rpc/netdb.h" 3
# 1 "/usr/include/features.h" 1 3
# 40 "/usr/include/rpc/netdb.h" 2 3


# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 43 "/usr/include/rpc/netdb.h" 2 3



struct rpcent
{
  char *r_name;
  char **r_aliases;
  int r_number;
};

extern void setrpcent (int __stayopen) ;
extern void endrpcent (void) ;
extern struct rpcent *getrpcbyname (__const char *__name) ;
extern struct rpcent *getrpcbynumber (int __number) ;
extern struct rpcent *getrpcent (void) ;


extern int getrpcbyname_r (__const char *__name, struct rpcent *__result_buf,
                           char *__buffer, size_t __buflen,
                           struct rpcent **__result) ;

extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
                             char *__buffer, size_t __buflen,
                             struct rpcent **__result) ;

extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
                        size_t __buflen, struct rpcent **__result) ;
# 34 "/usr/include/netdb.h" 2 3
# 43 "/usr/include/netdb.h" 3
# 1 "/usr/include/bits/netdb.h" 1 3
# 27 "/usr/include/bits/netdb.h" 3
struct netent
{
  char *n_name;
  char **n_aliases;
  int n_addrtype;
  uint32_t n_net;
};
# 44 "/usr/include/netdb.h" 2 3
# 57 "/usr/include/netdb.h" 3
extern int h_errno;


extern int *__h_errno_location (void) __attribute__ ((__const__));
# 105 "/usr/include/netdb.h" 3
extern void herror (__const char *__str) ;


extern __const char *hstrerror (int __err_num) ;




struct hostent
{
  char *h_name;
  char **h_aliases;
  int h_addrtype;
  int h_length;
  char **h_addr_list;

};



extern void sethostent (int __stay_open) ;


extern void endhostent (void) ;



extern struct hostent *gethostent (void) ;



extern struct hostent *gethostbyaddr (__const void *__addr, __socklen_t __len,
                                      int __type) ;


extern struct hostent *gethostbyname (__const char *__name) ;





extern struct hostent *gethostbyname2 (__const char *__name, int __af) ;






extern int gethostent_r (struct hostent *__restrict __result_buf,
                         char *__restrict __buf, size_t __buflen,
                         struct hostent **__restrict __result,
                         int *__restrict __h_errnop) ;

extern int gethostbyaddr_r (__const void *__restrict __addr, __socklen_t __len,
                            int __type,
                            struct hostent *__restrict __result_buf,
                            char *__restrict __buf, size_t __buflen,
                            struct hostent **__restrict __result,
                            int *__restrict __h_errnop) ;

extern int gethostbyname_r (__const char *__restrict __name,
                            struct hostent *__restrict __result_buf,
                            char *__restrict __buf, size_t __buflen,
                            struct hostent **__restrict __result,
                            int *__restrict __h_errnop) ;

extern int gethostbyname2_r (__const char *__restrict __name, int __af,
                             struct hostent *__restrict __result_buf,
                             char *__restrict __buf, size_t __buflen,
                             struct hostent **__restrict __result,
                             int *__restrict __h_errnop) ;





extern void setnetent (int __stay_open) ;


extern void endnetent (void) ;



extern struct netent *getnetent (void) ;



extern struct netent *getnetbyaddr (uint32_t __net, int __type)
            ;


extern struct netent *getnetbyname (__const char *__name) ;







extern int getnetent_r (struct netent *__restrict __result_buf,
                        char *__restrict __buf, size_t __buflen,
                        struct netent **__restrict __result,
                        int *__restrict __h_errnop) ;

extern int getnetbyaddr_r (uint32_t __net, int __type,
                           struct netent *__restrict __result_buf,
                           char *__restrict __buf, size_t __buflen,
                           struct netent **__restrict __result,
                           int *__restrict __h_errnop) ;

extern int getnetbyname_r (__const char *__restrict __name,
                           struct netent *__restrict __result_buf,
                           char *__restrict __buf, size_t __buflen,
                           struct netent **__restrict __result,
                           int *__restrict __h_errnop) ;




struct servent
{
  char *s_name;
  char **s_aliases;
  int s_port;
  char *s_proto;
};



extern void setservent (int __stay_open) ;


extern void endservent (void) ;



extern struct servent *getservent (void) ;



extern struct servent *getservbyname (__const char *__name,
                                      __const char *__proto) ;



extern struct servent *getservbyport (int __port, __const char *__proto)
            ;





extern int getservent_r (struct servent *__restrict __result_buf,
                         char *__restrict __buf, size_t __buflen,
                         struct servent **__restrict __result) ;

extern int getservbyname_r (__const char *__restrict __name,
                            __const char *__restrict __proto,
                            struct servent *__restrict __result_buf,
                            char *__restrict __buf, size_t __buflen,
                            struct servent **__restrict __result) ;

extern int getservbyport_r (int __port, __const char *__restrict __proto,
                            struct servent *__restrict __result_buf,
                            char *__restrict __buf, size_t __buflen,
                            struct servent **__restrict __result) ;




struct protoent
{
  char *p_name;
  char **p_aliases;
  int p_proto;
};



extern void setprotoent (int __stay_open) ;


extern void endprotoent (void) ;



extern struct protoent *getprotoent (void) ;


extern struct protoent *getprotobyname (__const char *__name) ;


extern struct protoent *getprotobynumber (int __proto) ;





extern int getprotoent_r (struct protoent *__restrict __result_buf,
                          char *__restrict __buf, size_t __buflen,
                          struct protoent **__restrict __result) ;

extern int getprotobyname_r (__const char *__restrict __name,
                             struct protoent *__restrict __result_buf,
                             char *__restrict __buf, size_t __buflen,
                             struct protoent **__restrict __result) ;

extern int getprotobynumber_r (int __proto,
                               struct protoent *__restrict __result_buf,
                               char *__restrict __buf, size_t __buflen,
                               struct protoent **__restrict __result) ;




extern int setnetgrent (__const char *__netgroup) ;


extern void endnetgrent (void) ;



extern int getnetgrent (char **__restrict __hostp,
                        char **__restrict __userp,
                        char **__restrict __domainp) ;



extern int innetgr (__const char *__netgroup, __const char *__host,
                    __const char *__user, __const char *domain) ;


extern int getnetgrent_r (char **__restrict __hostp,
                          char **__restrict __userp,
                          char **__restrict __domainp,
                          char *__restrict __buffer, size_t __buflen) ;
# 351 "/usr/include/netdb.h" 3
extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
                 __const char *__restrict __locuser,
                 __const char *__restrict __remuser,
                 __const char *__restrict __cmd, int *__restrict __fd2p)
            ;



extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
                    __const char *__restrict __locuser,
                    __const char *__restrict __remuser,
                    __const char *__restrict __cmd, int *__restrict __fd2p,
                    sa_family_t __af) ;






extern int rexec (char **__restrict __ahost, int __rport,
                  __const char *__restrict __name,
                  __const char *__restrict __pass,
                  __const char *__restrict __cmd, int *__restrict __fd2p)
            ;



extern int rexec_af (char **__restrict __ahost, int __rport,
                     __const char *__restrict __name,
                     __const char *__restrict __pass,
                     __const char *__restrict __cmd, int *__restrict __fd2p,
                     sa_family_t __af) ;




extern int ruserok (__const char *__rhost, int __suser,
                    __const char *__remuser, __const char *__locuser) ;



extern int ruserok_af (__const char *__rhost, int __suser,
                       __const char *__remuser, __const char *__locuser,
                       sa_family_t __af) ;




extern int rresvport (int *__alport) ;



extern int rresvport_af (int *__alport, sa_family_t __af) ;






struct addrinfo
{
  int ai_flags;
  int ai_family;
  int ai_socktype;
  int ai_protocol;
  socklen_t ai_addrlen;
  struct sockaddr *ai_addr;
  char *ai_canonname;
  struct addrinfo *ai_next;
};
# 476 "/usr/include/netdb.h" 3
extern int getaddrinfo (__const char *__restrict __name,
                        __const char *__restrict __service,
                        __const struct addrinfo *__restrict __req,
                        struct addrinfo **__restrict __pai) ;


extern void freeaddrinfo (struct addrinfo *__ai) ;


extern __const char *gai_strerror (int __ecode) ;


extern int getnameinfo (__const struct sockaddr *__restrict __sa,
                        socklen_t __salen, char *__restrict __host,
                        socklen_t __hostlen, char *__restrict __serv,
                        socklen_t __servlen, unsigned int __flags) ;
# 29 "http_trans.h" 2

typedef enum http_trans_err_type_tag {
  http_trans_err_type_host = 0,
  http_trans_err_type_errno
} http_trans_err_type;

typedef struct http_trans_conn_tag {
  struct hostent *hostinfo;
  struct sockaddr_in saddr;
  char *host;
  char *proxy_host;
  int sock;
  short port;
  short proxy_port;
  http_trans_err_type error_type;
  int error;
  int sync;
  char *io_buf;
  int io_buf_len;
  int io_buf_alloc;
  int io_buf_io_done;
  int io_buf_io_left;
  int io_buf_chunksize;

  int last_read;
  int chunk_len;
  char *errstr;
} http_trans_conn;

http_trans_conn *
http_trans_conn_new(void);

void
http_trans_conn_destroy(http_trans_conn *a_conn);

void
http_trans_buf_reset(http_trans_conn *a_conn);

void
http_trans_buf_clip(http_trans_conn *a_conn, char *a_clip_to);

int
http_trans_connect(http_trans_conn *a_conn);

const char *
http_trans_get_host_error(int a_herror);

int
http_trans_append_data_to_buf(http_trans_conn *a_conn,
                              char *a_data,
                              int a_data_len);

int
http_trans_read_into_buf(http_trans_conn *a_conn);

int
http_trans_write_buf(http_trans_conn *a_conn);

char *
http_trans_buf_has_patt(char *a_buf, int a_len,
                        char *a_pat, int a_patlen);
# 27 "http_resp.h" 2
# 1 "http_req.h" 1
# 27 "http_req.h"
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 1 3
# 37 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
# 1 "/usr/include/features.h" 1 3
# 38 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3





# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 44 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
# 46 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3
# 54 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
typedef struct _IO_FILE FILE;
# 64 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
typedef struct _IO_FILE __FILE;
# 74 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
# 1 "/usr/include/libio.h" 1 3
# 32 "/usr/include/libio.h" 3
# 1 "/usr/include/_G_config.h" 1 3
# 9 "/usr/include/_G_config.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 10 "/usr/include/_G_config.h" 2 3




# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 312 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 24 "/usr/include/_G_config.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 67 "/usr/include/wchar.h" 3
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3
# 1 "/usr/include/gconv.h" 1 3
# 26 "/usr/include/gconv.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/gconv.h" 2 3

# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 29 "/usr/include/gconv.h" 2 3

# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stddef.h" 1 3
# 31 "/usr/include/gconv.h" 2 3





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                            __const unsigned char **, __const unsigned char *,
                            unsigned char **, size_t *, int, int);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                  struct __gconv_step_data *, void *,
                                  __const unsigned char *,
                                  __const unsigned char **,
                                  __const unsigned char *, unsigned char **,
                                  size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
                                          __const unsigned char *,
                                          unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                        size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 33 "/usr/include/libio.h" 2 3
# 53 "/usr/include/libio.h" 3
# 1 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdarg.h" 1 3
# 43 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 54 "/usr/include/libio.h" 2 3
# 160 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 170 "/usr/include/libio.h" 3
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 193 "/usr/include/libio.h" 3
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 261 "/usr/include/libio.h" 3
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 305 "/usr/include/libio.h" 3
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 344 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                 size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);
# 396 "/usr/include/libio.h" 3
extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern wint_t __wunderflow (_IO_FILE *) ;
extern wint_t __wuflow (_IO_FILE *) ;
extern wint_t __woverflow (_IO_FILE *, wint_t) ;
# 426 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;

extern int _IO_peekc_locked (_IO_FILE *__fp) ;





extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
# 456 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        __gnuc_va_list, int *__restrict) ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         __gnuc_va_list) ;
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) ;

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) ;

extern void _IO_free_backup_area (_IO_FILE *) ;
# 75 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3
# 89 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
typedef _G_fpos_t fpos_t;
# 138 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 139 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;






extern int remove (__const char *__filename) ;

extern int rename (__const char *__old, __const char *__new) ;




extern FILE *tmpfile (void) ;
# 170 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern char *tmpnam (char *__s) ;




extern char *tmpnam_r (char *__s) ;
# 187 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern char *tempnam (__const char *__dir, __const char *__pfx)
             __attribute__ ((__malloc__));




extern int fclose (FILE *__stream) ;

extern int fflush (FILE *__stream) ;



extern int fflush_unlocked (FILE *__stream) ;
# 210 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern FILE *fopen (__const char *__restrict __filename,
                    __const char *__restrict __modes) ;

extern FILE *freopen (__const char *__restrict __filename,
                      __const char *__restrict __modes,
                      FILE *__restrict __stream) ;
# 240 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern FILE *fdopen (int __fd, __const char *__modes) ;
# 263 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) ;



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
                    int __modes, size_t __n) ;




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
                       size_t __size) ;


extern void setlinebuf (FILE *__stream) ;




extern int fprintf (FILE *__restrict __stream,
                    __const char *__restrict __format, ...) ;

extern int printf (__const char *__restrict __format, ...) ;

extern int sprintf (char *__restrict __s,
                    __const char *__restrict __format, ...) ;


extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;

extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
            ;

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;



extern int snprintf (char *__restrict __s, size_t __maxlen,
                     __const char *__restrict __format, ...)
             __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
                      __const char *__restrict __format, __gnuc_va_list __arg)
             __attribute__ ((__format__ (__printf__, 3, 0)));
# 334 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int fscanf (FILE *__restrict __stream,
                   __const char *__restrict __format, ...) ;

extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s,
                   __const char *__restrict __format, ...) ;
# 360 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int fgetc (FILE *__stream) ;
extern int getc (FILE *__stream) ;


extern int getchar (void) ;







extern int getc_unlocked (FILE *__stream) ;
extern int getchar_unlocked (void) ;




extern int fgetc_unlocked (FILE *__stream) ;




extern int fputc (int __c, FILE *__stream) ;
extern int putc (int __c, FILE *__stream) ;


extern int putchar (int __c) ;







extern int fputc_unlocked (int __c, FILE *__stream) ;




extern int putc_unlocked (int __c, FILE *__stream) ;
extern int putchar_unlocked (int __c) ;





extern int getw (FILE *__stream) ;


extern int putw (int __w, FILE *__stream) ;




extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
            ;
# 426 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern char *gets (char *__s) ;
# 450 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
            ;
# 460 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int puts (__const char *__s) ;



extern int ungetc (int __c, FILE *__stream) ;



extern size_t fread (void *__restrict __ptr, size_t __size,
                     size_t __n, FILE *__restrict __stream) ;

extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
                      size_t __n, FILE *__restrict __s) ;



extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
                              size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
                               size_t __n, FILE *__restrict __stream) ;




extern int fseek (FILE *__stream, long int __off, int __whence) ;

extern long int ftell (FILE *__stream) ;

extern void rewind (FILE *__stream) ;
# 504 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
            ;

extern int fsetpos (FILE *__stream, __const fpos_t *__pos) ;
# 540 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern void clearerr (FILE *__stream) ;

extern int feof (FILE *__stream) ;

extern int ferror (FILE *__stream) ;



extern void clearerr_unlocked (FILE *__stream) ;
extern int feof_unlocked (FILE *__stream) ;
extern int ferror_unlocked (FILE *__stream) ;




extern void perror (__const char *__s) ;




extern int sys_nerr;
extern __const char *__const sys_errlist[];
# 571 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern int fileno (FILE *__stream) ;




extern int fileno_unlocked (FILE *__stream) ;






extern FILE *popen (__const char *__command, __const char *__modes) ;


extern int pclose (FILE *__stream) ;





extern char *ctermid (char *__s) ;
# 618 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;
# 639 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 3
# 1 "/usr/include/bits/stdio.h" 1 3
# 33 "/usr/include/bits/stdio.h" 3
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
# 111 "/usr/include/bits/stdio.h" 3
extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 640 "/_devel/lib/gcc-lib/i686-redhat-linux/3.0.3/include/stdio.h" 2 3
# 28 "http_req.h" 2
# 1 "http_hdrs.h" 1
# 29 "http_req.h" 2
# 1 "http_trans.h" 1
# 30 "http_req.h" 2

typedef enum http_req_type {
  http_req_type_get = 0,
  http_req_type_options,
  http_req_type_head,
  http_req_type_post,
  http_req_type_put,
  http_req_type_delete,
  http_req_type_trace,
  http_req_type_connect,
  http_req_type_propfind,
  http_req_type_proppatch,
  http_req_type_mkcol,
  http_req_type_copy,
  http_req_type_move,
  http_req_type_lock,
  http_req_type_unlock
} http_req_type;

typedef enum http_req_state_tag {
  http_req_state_start = 0,
  http_req_state_sending_request,
  http_req_state_sending_headers,
  http_req_state_sending_body
} http_req_state;



extern const char *http_req_type_char[];

typedef struct http_req_tag {
  http_req_type type;
  float http_ver;
  char *host;
  char *full_uri;
  char *resource;
  char *body;
  int body_len;
  http_hdr_list *headers;
  http_req_state state;
} http_req;

http_req *
http_req_new(void);

void
http_req_destroy(http_req *a_req);

int
http_req_prepare(http_req *a_req);

int
http_req_send(http_req *a_req, http_trans_conn *a_conn);
# 28 "http_resp.h" 2







typedef enum http_resp_header_state_tag
{
  http_resp_header_start = 0,
  http_resp_reading_header
} http_resp_header_state;

typedef enum http_resp_body_state_tag
{
  http_resp_body_start = 0,
  http_resp_body_read_content_length,
  http_resp_body_read_chunked,
  http_resp_body_read_standard
} http_resp_body_state;



typedef struct http_resp_tag
{
  float http_ver;
  int status_code;
  char *reason_phrase;
  http_hdr_list *headers;
  char *body;
  int body_len;
  int content_length;
  int flushed_length;
  http_resp_header_state header_state;
  http_resp_body_state body_state;
} http_resp;

http_resp *
http_resp_new(void);

void
http_resp_destroy(http_resp *a_resp);

int
http_resp_read_body(http_resp *a_resp,
                    http_req *a_req,
                    http_trans_conn *a_conn);

int
http_resp_read_headers(http_resp *a_resp, http_trans_conn *a_conn);

void
http_resp_flush(http_resp *a_resp,
                http_trans_conn *a_conn);
# 27 "http_resp.c" 2
# 1 "http_global.h" 1
# 28 "http_resp.c" 2

typedef enum header_state_tag
{
  reading_header = 0,
  reading_value,
  reading_sep,
  reading_eol
} header_state;

static int
string_is_number(char *a_string);

static int
read_chunk(http_trans_conn *a_conn);

static int
read_body_chunked(http_resp *a_resp,
                  http_req *a_req,
                  http_trans_conn *a_conn);

static int
read_body_content_length(http_resp *a_resp,
                         http_req *a_req,
                         http_trans_conn *a_conn);

static int
read_body_standard(http_resp *a_resp,
                   http_req *a_req,
                   http_trans_conn *a_conn);

http_resp *
http_resp_new(void)
{
  http_resp *l_return = ((void *)0);

  l_return = (http_resp *)malloc(sizeof(http_resp));
  (__extension__ (__builtin_constant_p (sizeof(http_resp)) && (sizeof(http_resp)) <= 16 ? ((sizeof(http_resp)) == 1 ? ({ void *__s = (l_return); *((__uint8_t *) __s) = (__uint8_t) 0; __s; }) : ({ void *__s = (l_return); union { unsigned int __ui; unsigned short int __usi; unsigned char __uc; } *__u = __s; __uint8_t __c = (__uint8_t) (0); switch ((unsigned int) (sizeof(http_resp))) { case 15: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 11: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 7: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 3: __u->__usi = (unsigned short int) __c * 0x0101; __u = __extension__ ((void *) __u + 2); __u->__uc = (unsigned char) __c; break; case 14: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 10: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 6: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 2: __u->__usi = (unsigned short int) __c * 0x0101; break; case 13: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 9: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 5: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 1: __u->__uc = (unsigned char) __c; break; case 16: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 12: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 8: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 4: __u->__ui = __c * 0x01010101; case 0: break; } __s; })) : (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (l_return); __builtin_memset (__s, '\0', sizeof(http_resp)); __s; }) : memset (l_return, 0, sizeof(http_resp)))));
  l_return->headers = http_hdr_list_new();
  return l_return;
}

void
http_resp_destroy(http_resp *a_resp)
{
  if (!a_resp)
    return;
  if (a_resp->reason_phrase)
    free(a_resp->reason_phrase);
  if (a_resp->headers)
    http_hdr_list_destroy(a_resp->headers);
  if (a_resp->body)
    free(a_resp->body);
  free(a_resp);
  return;
}

int
http_resp_read_headers(http_resp *a_resp, http_trans_conn *a_conn)
{
  char *l_start_body = ((void *)0);
  int l_rv = 0;
  int l_done = 0;
  int l_return = 2;
  char *l_start_header = ((void *)0);
  int l_header_len = 0;
  char *l_last_header = ((void *)0);
  int l_last_header_len = 0;
  char *l_start_value = ((void *)0);
  int l_value_len = 0;
  char *l_cur_ptr = ((void *)0);
  char *l_ptr = ((void *)0);
  header_state l_state = reading_header;


  if (a_conn->sync == 1)
    {
      if (a_resp->header_state == http_resp_reading_header)
        goto http_resp_reading_header_jump;
    }

  do
    {
      a_resp->header_state = http_resp_reading_header;
    http_resp_reading_header_jump:

      l_rv = http_trans_read_into_buf(a_conn);

      if (l_rv == -1)
        {
          a_conn->errstr = "Failed to read http response line";
          l_return = -1;
          goto ec;
        }

      l_start_body = http_trans_buf_has_patt(a_conn->io_buf,
                                             a_conn->io_buf_alloc,
                                             "\r\n\r\n", 4);
      if (l_start_body != ((void *)0))
        l_done = 1;
      if ((l_done == 0) && (a_conn->sync == 1) && (l_rv == 1))
        return 1;



      if ((!l_done) && (l_rv == 2) && (a_conn->last_read == 0))
        {
          a_conn->errstr = "Short read while reading http response headers";
          return -1;
        }
    } while (l_done == 0);


  if ((a_conn->io_buf_alloc) < 14)
    {
      a_conn->errstr = "The http response line was too short.";
      l_return = -1;
      goto ec;
    }
  l_ptr = a_conn->io_buf;

  if ((__extension__ (__builtin_constant_p (4) && ((__builtin_constant_p (l_ptr) && strlen (l_ptr) < ((size_t) (4))) || (__builtin_constant_p ("HTTP") && strlen ("HTTP") < ((size_t) (4)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (l_ptr) && __builtin_constant_p ("HTTP") && (__s1_len = strlen (l_ptr), __s2_len = strlen ("HTTP"), (!((size_t)(const void *)((l_ptr) + 1) - (size_t)(const void *)(l_ptr) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("HTTP") + 1) - (size_t)(const void *)("HTTP") == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (l_ptr), (__const char *) ("HTTP"), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (l_ptr) && ((size_t)(const void *)((l_ptr) + 1) - (size_t)(const void *)(l_ptr) == 1) && (__s1_len = strlen (l_ptr), __s1_len < 4) ? (__builtin_constant_p ("HTTP") && ((size_t)(const void *)(("HTTP") + 1) - (size_t)(const void *)("HTTP") == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (l_ptr))[0] - ((__const unsigned char *) (__const char *)("HTTP"))[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[1] - ((__const unsigned char *) (__const char *) ("HTTP"))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[2] - ((__const unsigned char *) (__const char *) ("HTTP"))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (l_ptr))[3] - ((__const unsigned char *) (__const char *) ("HTTP"))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("HTTP"); register int __result = (((__const unsigned char *) (__const char *) (l_ptr))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (l_ptr))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("HTTP") && ((size_t)(const void *)(("HTTP") + 1) - (size_t)(const void *)("HTTP") == 1) && (__s2_len = strlen ("HTTP"), __s2_len < 4) ? (__builtin_constant_p (l_ptr) && ((size_t)(const void *)((l_ptr) + 1) - (size_t)(const void *)(l_ptr) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (l_ptr))[0] - ((__const unsigned char *) (__const char *)("HTTP"))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[1] - ((__const unsigned char *) (__const char *) ("HTTP"))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (l_ptr))[2] - ((__const unsigned char *) (__const char *) ("HTTP"))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (l_ptr))[3] - ((__const unsigned char *) (__const char *) ("HTTP"))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (l_ptr); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("HTTP"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("HTTP"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("HTTP"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("HTTP"))[3]); } } __result; }))) : strcmp (l_ptr, "HTTP")))); }) : strncmp (l_ptr, "HTTP", 4))) != 0)
    {
      a_conn->errstr = "The http response line did not begin with \"HTTP\"";
      l_return = -1;
      goto ec;
    }
  if (((__ctype_b[(int) ((l_ptr[5]))] & (unsigned short int) _ISdigit) == 0) ||
      (l_ptr[6] != '.') ||
      ((__ctype_b[(int) ((l_ptr[7]))] & (unsigned short int) _ISdigit) == 0) ||
      (l_ptr[8] != ' ') ||
      ((__ctype_b[(int) ((l_ptr[9]))] & (unsigned short int) _ISdigit) == 0) ||
      ((__ctype_b[(int) ((l_ptr[10]))] & (unsigned short int) _ISdigit) == 0) ||
      ((__ctype_b[(int) ((l_ptr[11]))] & (unsigned short int) _ISdigit) == 0) ||
      (l_ptr[12] != ' '))
    {
      a_conn->errstr = "Error parsing http response line";
      l_return = -1;
      goto ec;
    }

  a_resp->http_ver = (l_ptr[5] - 0x30);
  a_resp->http_ver += ((l_ptr[7] - 0x30) / 10.0);

  a_resp->status_code = ((l_ptr[9] - 0x30)*100);
  a_resp->status_code += ((l_ptr[10] - 0x30)*10);
  a_resp->status_code += (l_ptr[11] - 0x30);

  l_cur_ptr = &l_ptr[13];



  while (*l_cur_ptr != '\r')
    l_cur_ptr++;

  if (a_resp->reason_phrase) {
    free(a_resp->reason_phrase);
    a_resp->reason_phrase = ((void *)0);
  }

  a_resp->reason_phrase =
    malloc((l_cur_ptr - (&l_ptr[13])) + 1);
  (__extension__ (__builtin_constant_p (((l_cur_ptr - (&l_ptr[13])) + 1)) && (((l_cur_ptr - (&l_ptr[13])) + 1)) <= 16 ? ((((l_cur_ptr - (&l_ptr[13])) + 1)) == 1 ? ({ void *__s = (a_resp->reason_phrase); *((__uint8_t *) __s) = (__uint8_t) 0; __s; }) : ({ void *__s = (a_resp->reason_phrase); union { unsigned int __ui; unsigned short int __usi; unsigned char __uc; } *__u = __s; __uint8_t __c = (__uint8_t) (0); switch ((unsigned int) (((l_cur_ptr - (&l_ptr[13])) + 1))) { case 15: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 11: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 7: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 3: __u->__usi = (unsigned short int) __c * 0x0101; __u = __extension__ ((void *) __u + 2); __u->__uc = (unsigned char) __c; break; case 14: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 10: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 6: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 2: __u->__usi = (unsigned short int) __c * 0x0101; break; case 13: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 9: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 5: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 1: __u->__uc = (unsigned char) __c; break; case 16: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 12: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 8: __u->__ui = __c * 0x01010101; __u = __extension__ ((void *) __u + 4); case 4: __u->__ui = __c * 0x01010101; case 0: break; } __s; })) : (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (a_resp->reason_phrase); __builtin_memset (__s, '\0', ((l_cur_ptr - (&l_ptr[13])) + 1)); __s; }) : memset (a_resp->reason_phrase, 0, ((l_cur_ptr - (&l_ptr[13])) + 1)))));

  memcpy(a_resp->reason_phrase,
         &l_ptr[13], (l_cur_ptr - (&l_ptr[13])));



  if (l_cur_ptr == l_start_body)
    l_done = 1;
  else
    l_done = 0;

  if (a_resp->status_code == 100)
    {

      char *l_end_continue = http_trans_buf_has_patt(a_conn->io_buf,
                                                     a_conn->io_buf_alloc,
                                                     "\r\n\r\n", 4);
      if (!l_end_continue)
        return -1;
      http_trans_buf_clip(a_conn, l_end_continue + 4);
      l_start_body = ((void *)0);
      a_resp->status_code = 0;
      l_done = 0;
      if (a_conn->sync == 1)
        return 1;
      else
        goto http_resp_reading_header_jump;
    }


  while ((*l_cur_ptr == '\r') ||
         (*l_cur_ptr == '\n'))
    l_cur_ptr++;



  l_start_header = l_cur_ptr;
  while (l_done == 0)
    {


      if (l_cur_ptr == (l_start_body + 1))
        break;

      if (l_state == reading_header)
        {



          if (l_header_len == 0)
            {
              if ((*l_cur_ptr == ' ') || (*l_cur_ptr == '\t'))
                {

                  if ((l_last_header == ((void *)0)) || (l_last_header_len == 0))
                    {
                      a_conn->errstr = "The first http response header began with whitespace";
                      l_return = -1;
                      goto ec;
                    }
                  l_cur_ptr++;

                  l_state = reading_sep;
                  continue;
                }
            }
          if (*l_cur_ptr == ':')
            {

              if (l_header_len == 0)
                {
                  a_conn->errstr = "An http response header was zero length";
                  l_return = -1;
                  goto ec;
                }

              l_state = reading_sep;
              l_cur_ptr++;
            }


          else if (*l_cur_ptr == '\r')
            {
              a_conn->errstr = "Failed to find seperator in http response headers";
              l_return = -1;
              goto ec;
            }
          else
            {
              l_cur_ptr++;
              l_header_len++;
            }
        }

      else if(l_state == reading_sep)
        {

          if ((*l_cur_ptr == ' ') || (*l_cur_ptr == '\t'))
            l_cur_ptr++;
          else
            {
              l_state = reading_value;
              l_start_value = l_cur_ptr;
              l_value_len = 0;
            }
        }

      else if(l_state == reading_value)
        {


          if ((*l_cur_ptr == '\r') || (*l_cur_ptr == '\n'))
            {



              if (l_header_len == 0)
                {
                  http_hdr_set_value_no_nts(a_resp->headers,
                                            l_last_header,
                                            l_last_header_len,
                                            l_start_value,
                                            l_value_len);
                }
              else
                {
                  http_hdr_set_value_no_nts(a_resp->headers,
                                            l_start_header,
                                            l_header_len,
                                            l_start_value,
                                            l_value_len);




                  l_last_header = l_start_header;
                  l_last_header_len = l_header_len;
                }

              l_state = reading_eol;
            }
          else
            {
              l_cur_ptr++;
              l_value_len++;
            }
        }

      else if(l_state == reading_eol)
        {

          if ((*l_cur_ptr == '\r') || (*l_cur_ptr == '\n'))
            l_cur_ptr++;
          else
            {

              l_state = reading_header;
              l_start_header = l_cur_ptr;
              l_header_len = 0;
            }
        }

      else
        {
          a_conn->errstr = "Unknown state while reading http response headers";
          l_return = -1;
          goto ec;
        }
    }

  http_trans_buf_clip(a_conn, l_start_body + 4);
 ec:
  a_resp->header_state = http_resp_header_start;
  return l_return;
}

int
http_resp_read_body(http_resp *a_resp,
                    http_req *a_req,
                    http_trans_conn *a_conn)
{
  int l_return = 0;
  char *l_content_length = ((void *)0);
  char *l_transfer_encoding = ((void *)0);
  char *l_connection = ((void *)0);


  if (a_conn->sync == 1)
    {
      if (a_resp->body_state == http_resp_body_read_content_length)
        goto http_resp_body_read_content_length_jump;
      if (a_resp->body_state == http_resp_body_read_chunked)
        goto http_resp_body_read_chunked_jump;
      if (a_resp->body_state == http_resp_body_read_standard)
        goto http_resp_body_read_standard_jump;
    }

  if ((!a_resp) || (!a_conn))
    return -1;


  l_content_length =
    http_hdr_get_value(a_resp->headers,
                       http_hdr_Content_Length);

  l_transfer_encoding =
    http_hdr_get_value(a_resp->headers,
                       http_hdr_Transfer_Encoding);

  l_connection =
    http_hdr_get_value(a_resp->headers,
                       http_hdr_Connection);

  if (l_content_length && (a_req->type != http_req_type_head))
    {
      if (string_is_number(l_content_length) == 0)
        {
          a_conn->errstr = "Content length in http response was not a number";
          return -1;
        }
      a_resp->content_length = atoi(l_content_length);

      a_resp->body_state = http_resp_body_read_content_length;
    http_resp_body_read_content_length_jump:
      l_return = read_body_content_length(a_resp, a_req, a_conn);
    }
  else if (l_content_length)
    {

      return 2;
    }
  else if (l_transfer_encoding)
    {

      if (!strcasecmp(l_transfer_encoding, "chunked"))
        {

          a_resp->body_state = http_resp_body_read_chunked;
        http_resp_body_read_chunked_jump:
          l_return = read_body_chunked(a_resp, a_req, a_conn);
        }
      else
        {

          a_conn->errstr = "Unknown encoding type in http response";
          return -1;
        }
    }
  else
    {
      a_resp->body_state = http_resp_body_read_standard;

    http_resp_body_read_standard_jump:
      l_return = read_body_standard(a_resp, a_req, a_conn);

      if (l_return == 2)
        {
          close(a_conn->sock);
          a_conn->sock = -1;
        }
    }

  if (l_connection && (l_return != 1))
    {
      if (!strcasecmp(l_connection, "close"))
        {
          close (a_conn->sock);
          a_conn->sock = -1;
        }
    }
  if (l_return == 2)
    a_resp->body_state = http_resp_body_start;
  return l_return;
}

static int
string_is_number(char *a_string)
{
  int i = 0;

  if (strlen(a_string) < 1)
    return 0;
  while (a_string[i])
    {
      if ((__ctype_b[(int) ((a_string[i]))] & (unsigned short int) _ISdigit) == 0)
        return 0;
      i++;
    }
  return 1;
}

static int
read_chunk(http_trans_conn *a_conn)
{
  char *l_end_chunk_hdr = ((void *)0);
  int l_len = 0;
  int i = 0;
  int j = 0;
  char *l_ptr = ((void *)0);
  int l_left_to_read = 0;
  int l_rv = 0;

  if (a_conn->chunk_len == 0)
    {


      do {
        if ((l_end_chunk_hdr =
             http_trans_buf_has_patt(a_conn->io_buf, a_conn->io_buf_alloc,
                                     "\r\n", 2)) == ((void *)0))
          {
            l_rv = http_trans_read_into_buf(a_conn);
            if (l_rv == -1)
              return -1;

            if ((l_rv == 2) && (a_conn->last_read == 0))
              return -1;
            if ((a_conn->sync == 1) && (l_rv == 1))
              return 1;
          }
      } while (l_end_chunk_hdr == ((void *)0));

      l_ptr = a_conn->io_buf;

      while ((l_ptr < l_end_chunk_hdr) &&
             ((((__extension__ ({ int __res; if (sizeof (*l_ptr) > 1) { if (__builtin_constant_p (*l_ptr)) { int __c = (*l_ptr); __res = __c < -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res = tolower (*l_ptr); } else __res = __ctype_tolower[(int) (*l_ptr)]; __res; })) <= 'f') && ((__extension__ ({ int __res; if (sizeof (*l_ptr) > 1) { if (__builtin_constant_p (*l_ptr)) { int __c = (*l_ptr); __res = __c < -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res = tolower (*l_ptr); } else __res = __ctype_tolower[(int) (*l_ptr)]; __res; })) >= 'a')) ||
              ((*l_ptr <= '9') && (*l_ptr >= '0'))))
        l_ptr++;

      l_len = l_ptr - a_conn->io_buf;
      if (l_len == 0)
        {
          a_conn->chunk_len = -1;
          return -1;
        }

      for (i=0, j=l_len-1; i < l_len; i++, j--)
        {
          if (((__extension__ ({ int __res; if (sizeof (a_conn->io_buf[i]) > 1) { if (__builtin_constant_p (a_conn->io_buf[i])) { int __c = (a_conn->io_buf[i]); __res = __c < -128 || __c > 255 ? __c : __ctype_tolower[__c]; } else __res = tolower (a_conn-


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]