Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add support for IPv6 to the CGI handler. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
46c838972fab0ef454f2a5f1ffc46bb1 |
User & Date: | drh 2012-07-05 20:01:13.875 |
Context
2012-07-06
| ||
05:22 | Fix a bug in checking for the existance of the "default.website" folder. (check-in: 67fc7ffb67 user: drh tags: trunk) | |
2012-07-05
| ||
20:01 | Add support for IPv6 to the CGI handler. (check-in: 46c838972f user: drh tags: trunk) | |
19:35 | Add support for IPv6 to the althttpd.c standalone server. (check-in: 74563a081e user: drh tags: trunk) | |
Changes
Changes to misc/althttpd.c.
︙ | ︙ | |||
965 966 967 968 969 970 971 972 973 | }else if( strcasecmp(zFieldName,"Connection:")==0 ){ if( strcasecmp(zVal,"close")==0 ){ closeConnection = 1; }else if( !forceClose && strcasecmp(zVal, "keep-alive")==0 ){ closeConnection = 0; } }else if( strcasecmp(zFieldName,"Host:")==0 ){ zHttpHost = StrDup(zVal); zServerPort = zServerName = StrDup(zHttpHost); | > > | > > > | 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 | }else if( strcasecmp(zFieldName,"Connection:")==0 ){ if( strcasecmp(zVal,"close")==0 ){ closeConnection = 1; }else if( !forceClose && strcasecmp(zVal, "keep-alive")==0 ){ closeConnection = 0; } }else if( strcasecmp(zFieldName,"Host:")==0 ){ int inSquare = 0; char c; zHttpHost = StrDup(zVal); zServerPort = zServerName = StrDup(zHttpHost); while( zServerPort && (c = *zServerPort)!=0 && (c!=':' || inSquare) ){ if( c=='[' ) inSquare = 1; if( c==']' ) inSquare = 0; zServerPort++; } if( zServerPort && *zServerPort ){ *zServerPort = 0; zServerPort++; } if( zRealPort ){ |
︙ | ︙ | |||
1459 1460 1461 1462 1463 1464 1465 1466 | */ omitLog = 1; if( useTimeout ) alarm(30); } #define MAX_PARALLEL 50 /* Number of simultaneous children */ typedef union { | > > > > | | | | | 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 | */ omitLog = 1; if( useTimeout ) alarm(30); } #define MAX_PARALLEL 50 /* Number of simultaneous children */ /* ** All possible forms of an IP address. Needed to work around GCC strict ** aliasing rules. */ typedef union { struct sockaddr sa; /* Abstract superclass */ struct sockaddr_in sa4; /* IPv4 */ struct sockaddr_in6 sa6; /* IPv6 */ struct sockaddr_storage sas; /* Should be the maximum of the above 3 */ } address; /* ** Implement an HTTP server daemon listening on port iPort. ** ** As new connections arrive, fork a child and let child return ** out of this procedure call. The child will handle the request. |
︙ | ︙ | |||
1665 1666 1667 1668 1669 1670 1671 | if( getuid()==0 ){ Malfunction(__LINE__, "cannot run as root"); } /* Get the IP address from when the request originates */ { | | | > | > > | | 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 | if( getuid()==0 ){ Malfunction(__LINE__, "cannot run as root"); } /* Get the IP address from when the request originates */ { address remoteAddr; unsigned int size = sizeof(remoteAddr); char zHost[NI_MAXHOST]; if( getpeername(0, &remoteAddr.sa, &size)>=0 ){ getnameinfo(&remoteAddr.sa, size, zHost, sizeof(zHost), 0, 0, NI_NUMERICHOST); zRemoteAddr = StrDup(zHost); } } /* Process the input stream */ for(i=0; i<100; i++){ ProcessOneRequest(0); } ProcessOneRequest(1); exit(0); } |