Artifact 1052b0c4dc927bd3cb5403ed3c7636242366ddb5:
Ticket change
[1052b0c4dc]
- New ticket 2384764107 Make the http command working on Windows..
by
anonymous on
2009-09-17 14:08:24.
0000: 44 20 32 30 30 39 2d 30 39 2d 31 37 54 31 34 3a D 2009-09-17T14:
0010: 30 38 3a 32 34 0a 4a 20 63 6f 6d 6d 65 6e 74 20 08:24.J comment
0020: 54 68 69 73 5c 73 77 6f 75 6c 64 5c 73 6d 61 6b This\swould\smak
0030: 65 5c 73 69 74 5c 73 70 6f 73 73 69 62 6c 65 5c e\sit\spossible\
0040: 73 74 6f 5c 73 75 73 65 5c 73 46 6f 73 73 69 6c sto\suse\sFossil
0050: 5c 73 77 69 74 68 5c 73 49 6e 65 74 64 5c 73 6c \swith\sInetd\sl
0060: 69 6b 65 5c 73 73 65 72 76 65 72 73 5c 73 6f 6e ike\sservers\son
0070: 5c 73 57 69 6e 64 6f 77 73 2c 5c 73 66 6f 72 5c \sWindows,\sfor\
0080: 73 65 78 61 6d 70 6c 65 5c 73 5b 68 74 74 70 3a sexample\s[http:
0090: 2f 2f 77 77 77 2e 78 6d 61 69 6c 73 65 72 76 65 //www.xmailserve
00a0: 72 2e 6f 72 67 2f 77 69 6e 69 6e 65 74 64 2e 68 r.org/wininetd.h
00b0: 74 6d 6c 5d 2e 5c 72 5c 6e 5c 72 5c 6e 54 68 65 tml].\r\n\r\nThe
00c0: 5c 73 66 6f 6c 6c 6f 77 69 6e 67 5c 73 70 61 74 \sfollowing\spat
00d0: 63 68 5c 73 61 67 61 69 6e 73 74 5c 73 46 6f 73 ch\sagainst\sFos
00e0: 73 69 6c 5c 73 76 65 72 73 69 6f 6e 5c 73 5b 30 sil\sversion\s[0
00f0: 65 62 30 38 62 38 36 30 63 5d 5c 73 69 6d 70 6c eb08b860c]\simpl
0100: 65 6d 65 6e 74 73 5c 73 74 68 69 73 5c 73 66 75 ements\sthis\sfu
0110: 6e 63 74 69 6f 6e 61 6c 69 74 79 3a 5c 72 5c 6e nctionality:\r\n
0120: 5c 72 5c 6e 3c 76 65 72 62 61 74 69 6d 3e 5c 72 \r\n<verbatim>\r
0130: 5c 6e 64 69 66 66 5c 73 2d 4e 61 75 72 5c 73 66 \ndiff\s-Naur\sf
0140: 6f 73 73 69 6c 2d 73 72 63 2f 73 72 63 2f 63 67 ossil-src/src/cg
0150: 69 2e 63 5c 73 66 6f 73 73 69 6c 2d 73 72 63 2d i.c\sfossil-src-
0160: 6d 6f 64 2f 73 72 63 2f 63 67 69 2e 63 5c 72 5c mod/src/cgi.c\r\
0170: 6e 2d 2d 2d 5c 73 66 6f 73 73 69 6c 2d 73 72 63 n---\sfossil-src
0180: 2f 73 72 63 2f 63 67 69 2e 63 5c 74 32 30 30 39 /src/cgi.c\t2009
0190: 2d 30 39 2d 31 33 5c 73 30 39 3a 33 37 3a 34 38 -09-13\s09:37:48
01a0: 5c 73 2b 30 30 30 30 5c 72 5c 6e 2b 2b 2b 5c 73 \s+0000\r\n+++\s
01b0: 66 6f 73 73 69 6c 2d 73 72 63 2d 6d 6f 64 2f 73 fossil-src-mod/s
01c0: 72 63 2f 63 67 69 2e 63 5c 74 32 30 30 39 2d 30 rc/cgi.c\t2009-0
01d0: 39 2d 31 37 5c 73 31 31 3a 32 35 3a 34 37 5c 73 9-17\s11:25:47\s
01e0: 2b 30 30 30 30 5c 72 5c 6e 40 40 5c 73 2d 32 39 +0000\r\n@@\s-29
01f0: 2c 31 30 5c 73 2b 32 39 2c 31 31 5c 73 40 40 5c ,10\s+29,11\s@@\
0200: 72 5c 6e 5c 73 2a 2f 5c 72 5c 6e 5c 73 23 69 6e r\n\s*/\r\n\s#in
0210: 63 6c 75 64 65 5c 73 22 63 6f 6e 66 69 67 2e 68 clude\s"config.h
0220: 22 5c 72 5c 6e 5c 73 23 69 66 64 65 66 5c 73 5f "\r\n\s#ifdef\s_
0230: 5f 4d 49 4e 47 57 33 32 5f 5f 5c 72 5c 6e 2d 23 _MINGW32__\r\n-#
0240: 5c 73 5c 73 69 6e 63 6c 75 64 65 5c 73 3c 77 69 \s\sinclude\s<wi
0250: 6e 64 6f 77 73 2e 68 3e 5c 73 5c 73 5c 73 5c 73 ndows.h>\s\s\s\s
0260: 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2f 2a \s\s\s\s\s\s\s/*
0270: 5c 73 66 6f 72 5c 73 53 6c 65 65 70 5c 73 6f 6e \sfor\sSleep\son
0280: 63 65 5c 73 73 65 72 76 65 72 5c 73 77 6f 72 6b ce\sserver\swork
0290: 73 5c 73 61 67 61 69 6e 5c 73 2a 2f 5c 72 5c 6e s\sagain\s*/\r\n
02a0: 2d 23 5c 73 5c 73 69 6e 63 6c 75 64 65 5c 73 3c -#\s\sinclude\s<
02b0: 77 69 6e 73 6f 63 6b 32 2e 68 3e 5c 73 5c 73 5c winsock2.h>\s\s\
02c0: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2f s\s\s\s\s\s\s\s/
02d0: 2a 5c 73 73 6f 63 6b 65 74 5c 73 6f 70 65 72 61 *\ssocket\sopera
02e0: 74 69 6f 6e 73 5c 73 2a 2f 5c 72 5c 6e 2d 23 5c tions\s*/\r\n-#\
02f0: 73 5c 73 64 65 66 69 6e 65 5c 73 73 6c 65 65 70 s\sdefine\ssleep
0300: 5c 73 53 6c 65 65 70 5c 73 5c 73 5c 73 5c 73 5c \sSleep\s\s\s\s\
0310: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2f s\s\s\s\s\s\s\s/
0320: 2a 5c 73 77 69 6e 64 6f 77 73 5c 73 64 6f 65 73 *\swindows\sdoes
0330: 5c 73 6e 6f 74 5c 73 68 61 76 65 5c 73 73 6c 65 \snot\shave\ssle
0340: 65 70 2c 5c 73 62 75 74 5c 73 53 6c 65 65 70 5c ep,\sbut\sSleep\
0350: 73 2a 2f 5c 72 5c 6e 2d 23 5c 73 5c 73 69 6e 63 s*/\r\n-#\s\sinc
0360: 6c 75 64 65 5c 73 3c 77 73 32 74 63 70 69 70 2e lude\s<ws2tcpip.
0370: 68 3e 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 h>\s\s\s\s\s\s\s
0380: 5c 73 5c 73 5c 73 5c 72 5c 6e 2b 23 5c 73 5c 73 \s\s\s\r\n+#\s\s
0390: 69 6e 63 6c 75 64 65 5c 73 3c 77 69 6e 64 6f 77 include\s<window
03a0: 73 2e 68 3e 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 s.h>\s\s\s\s\s\s
03b0: 5c 73 5c 73 5c 73 5c 73 5c 73 2f 2a 5c 73 57 69 \s\s\s\s\s/*\sWi
03c0: 6e 64 6f 77 73 5c 73 73 70 65 63 69 66 69 63 5c ndows\sspecific\
03d0: 73 64 65 63 6c 61 72 61 74 69 6f 6e 73 5c 73 2a sdeclarations\s*
03e0: 2f 5c 72 5c 6e 2b 23 5c 73 5c 73 69 6e 63 6c 75 /\r\n+#\s\sinclu
03f0: 64 65 5c 73 3c 77 69 6e 73 6f 63 6b 32 2e 68 3e de\s<winsock2.h>
0400: 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 \s\s\s\s\s\s\s\s
0410: 5c 73 5c 73 2f 2a 5c 73 57 69 6e 64 6f 77 73 5c \s\s/*\sWindows\
0420: 73 73 6f 63 6b 65 74 5c 73 6f 70 65 72 61 74 69 ssocket\soperati
0430: 6f 6e 73 5c 73 2a 2f 5c 72 5c 6e 2b 23 5c 73 5c ons\s*/\r\n+#\s\
0440: 73 69 6e 63 6c 75 64 65 5c 73 3c 77 73 32 74 63 sinclude\s<ws2tc
0450: 70 69 70 2e 68 3e 5c 73 5c 73 5c 73 5c 73 5c 73 pip.h>\s\s\s\s\s
0460: 5c 73 5c 73 5c 73 5c 73 5c 73 2f 2a 5c 73 66 6f \s\s\s\s\s/*\sfo
0470: 72 5c 73 73 6f 63 6b 6c 65 6e 5f 74 5c 73 2a 2f r\ssocklen_t\s*/
0480: 5c 72 5c 6e 2b 23 5c 73 5c 73 69 6e 63 6c 75 64 \r\n+#\s\sinclud
0490: 65 5c 73 3c 66 63 6e 74 6c 2e 68 3e 5c 72 5c 6e e\s<fcntl.h>\r\n
04a0: 2b 23 5c 73 5c 73 69 6e 63 6c 75 64 65 5c 73 3c +#\s\sinclude\s<
04b0: 69 6f 2e 68 3e 5c 72 5c 6e 5c 73 23 65 6c 73 65 io.h>\r\n\s#else
04c0: 5c 72 5c 6e 5c 73 23 5c 73 5c 73 69 6e 63 6c 75 \r\n\s#\s\sinclu
04d0: 64 65 5c 73 3c 73 79 73 2f 73 6f 63 6b 65 74 2e de\s<sys/socket.
04e0: 68 3e 5c 72 5c 6e 5c 73 23 5c 73 5c 73 69 6e 63 h>\r\n\s#\s\sinc
04f0: 6c 75 64 65 5c 73 3c 6e 65 74 69 6e 65 74 2f 69 lude\s<netinet/i
0500: 6e 2e 68 3e 5c 72 5c 6e 40 40 5c 73 2d 31 30 37 n.h>\r\n@@\s-107
0510: 36 2c 36 5c 73 2b 31 30 37 37 2c 39 35 5c 73 40 6,6\s+1077,95\s@
0520: 40 5c 72 5c 6e 5c 73 5c 73 5c 73 72 65 74 75 72 @\r\n\s\s\sretur
0530: 6e 5c 73 7a 52 65 73 75 6c 74 3b 5c 72 5c 6e 5c n\szResult;\r\n\
0540: 73 7d 5c 72 5c 6e 5c 73 5c 72 5c 6e 2b 23 69 66 s}\r\n\s\r\n+#if
0550: 64 65 66 5c 73 5f 5f 4d 49 4e 47 57 33 32 5f 5f def\s__MINGW32__
0560: 5c 72 5c 6e 2b 2f 2a 5c 72 5c 6e 2b 2a 2a 5c 73 \r\n+/*\r\n+**\s
0570: 44 61 74 61 5c 73 73 74 72 75 63 74 75 72 65 5c Data\sstructure\
0580: 73 72 65 6c 61 74 65 64 5c 73 74 6f 5c 73 61 6c srelated\sto\sal
0590: 6c 5c 73 76 61 72 69 61 62 6c 65 73 5c 73 66 6f l\svariables\sfo
05a0: 72 5c 73 74 68 65 5c 73 77 69 6e 64 6f 77 73 5c r\sthe\swindows\
05b0: 73 73 6f 63 6b 65 74 5c 73 65 6e 76 69 72 6f 6e ssocket\senviron
05c0: 6d 65 6e 74 2e 5c 72 5c 6e 2b 2a 2f 5c 72 5c 6e ment.\r\n+*/\r\n
05d0: 2b 74 79 70 65 64 65 66 5c 73 73 74 72 75 63 74 +typedef\sstruct
05e0: 5c 73 57 69 6e 53 6f 63 6b 65 74 44 61 74 61 5c \sWinSocketData\
05f0: 73 7b 5c 72 5c 6e 2b 5c 73 5c 73 69 6e 74 5c 73 s{\r\n+\s\sint\s
0600: 5c 73 5c 73 5c 73 5c 73 66 57 53 41 49 6e 69 74 \s\s\s\sfWSAInit
0610: 3b 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2f ;\s\s\s\s\s\s\s/
0620: 2a 5c 73 54 72 75 65 2c 5c 73 69 66 5c 73 57 69 *\sTrue,\sif\sWi
0630: 6e 64 6f 77 73 5c 73 73 6f 63 6b 65 74 73 5c 73 ndows\ssockets\s
0640: 69 6e 69 74 69 61 6c 69 7a 65 64 5c 73 2a 2f 5c initialized\s*/\
0650: 72 5c 6e 2b 5c 73 5c 73 53 4f 43 4b 45 54 5c 73 r\n+\s\sSOCKET\s
0660: 5c 73 68 53 6f 63 6b 65 74 3b 5c 73 5c 73 5c 73 \shSocket;\s\s\s
0670: 5c 73 5c 73 5c 73 5c 73 5c 73 2f 2a 5c 73 48 61 \s\s\s\s\s/*\sHa
0680: 6e 64 6c 65 5c 73 74 6f 5c 73 74 68 65 5c 73 73 ndle\sto\sthe\ss
0690: 6f 63 6b 65 74 5c 73 2a 2f 5c 72 5c 6e 2b 7d 5c ocket\s*/\r\n+}\
06a0: 73 57 69 6e 53 6f 63 6b 65 74 44 61 74 61 3b 5c sWinSocketData;\
06b0: 72 5c 6e 2b 5c 72 5c 6e 2b 73 74 61 74 69 63 5c r\n+\r\n+static\
06c0: 73 57 69 6e 53 6f 63 6b 65 74 44 61 74 61 5c 73 sWinSocketData\s
06d0: 77 73 64 3b 5c 72 5c 6e 2b 5c 72 5c 6e 2b 2f 2a wsd;\r\n+\r\n+/*
06e0: 5c 72 5c 6e 2b 2a 2a 5c 73 45 78 69 74 5c 73 68 \r\n+**\sExit\sh
06f0: 61 6e 64 6c 65 72 5c 73 72 6f 75 74 69 6e 65 2e andler\sroutine.
0700: 5c 73 4d 61 6b 65 5c 73 73 75 72 65 5c 73 61 6e \sMake\ssure\san
0710: 79 5c 73 72 65 6d 61 69 6e 69 6e 67 5c 73 6f 75 y\sremaining\sou
0720: 74 70 75 74 5c 73 67 65 74 73 5c 73 66 6c 75 73 tput\sgets\sflus
0730: 68 65 64 5c 73 74 6f 5c 73 74 68 65 5c 72 5c 6e hed\sto\sthe\r\n
0740: 2b 2a 2a 5c 73 6f 75 74 70 75 74 5c 73 73 74 72 +**\soutput\sstr
0750: 65 61 6d 2e 5c 73 49 66 5c 73 74 68 65 5c 73 73 eam.\sIf\sthe\ss
0760: 74 61 6e 64 61 72 64 5c 73 68 61 6e 64 6c 65 73 tandard\shandles
0770: 5c 73 61 72 65 5c 73 72 65 64 69 72 65 63 74 65 \sare\sredirecte
0780: 64 5c 73 74 6f 5c 73 61 5c 73 73 6f 63 6b 65 74 d\sto\sa\ssocket
0790: 5c 73 74 68 65 6e 5c 72 5c 6e 2b 2a 2a 5c 73 6d \sthen\r\n+**\sm
07a0: 61 6b 65 5c 73 73 68 75 72 65 5c 73 74 68 65 5c ake\sshure\sthe\
07b0: 73 73 6f 63 6b 65 74 5c 73 67 65 74 73 5c 73 63 ssocket\sgets\sc
07c0: 6c 6f 73 65 64 5c 73 70 72 6f 70 65 72 6c 79 5c losed\sproperly\
07d0: 73 61 6e 64 5c 73 63 6c 65 61 6e 5c 73 75 70 5c sand\sclean\sup\
07e0: 73 74 68 65 5c 73 77 69 6e 64 6f 77 73 5c 73 73 sthe\swindows\ss
07f0: 6f 63 6b 65 74 5c 72 5c 6e 2b 2a 2a 5c 73 65 6e ocket\r\n+**\sen
0800: 76 69 72 6f 6e 6d 65 6e 74 2e 5c 72 5c 6e 2b 2a vironment.\r\n+*
0810: 2f 5c 72 5c 6e 2b 73 74 61 74 69 63 5c 73 76 6f /\r\n+static\svo
0820: 69 64 5c 73 63 67 69 5f 68 61 6e 64 6c 65 5f 68 id\scgi_handle_h
0830: 74 74 70 5f 72 65 71 75 65 73 74 5f 65 78 69 74 ttp_request_exit
0840: 28 76 6f 69 64 29 5c 72 5c 6e 2b 7b 5c 72 5c 6e (void)\r\n+{\r\n
0850: 2b 5c 73 5c 73 66 66 6c 75 73 68 28 67 2e 68 74 +\s\sfflush(g.ht
0860: 74 70 4f 75 74 29 3b 5c 72 5c 6e 2b 5c 72 5c 6e tpOut);\r\n+\r\n
0870: 2b 5c 73 5c 73 69 66 28 5c 73 77 73 64 2e 68 53 +\s\sif(\swsd.hS
0880: 6f 63 6b 65 74 5c 73 21 3d 5c 73 49 4e 56 41 4c ocket\s!=\sINVAL
0890: 49 44 5f 53 4f 43 4b 45 54 5c 73 29 7b 5c 72 5c ID_SOCKET\s){\r\
08a0: 6e 2b 5c 73 5c 73 5c 73 5c 73 73 68 75 74 64 6f n+\s\s\s\sshutdo
08b0: 77 6e 28 77 73 64 2e 68 53 6f 63 6b 65 74 2c 5c wn(wsd.hSocket,\
08c0: 73 53 44 5f 42 4f 54 48 29 3b 5c 72 5c 6e 2b 5c sSD_BOTH);\r\n+\
08d0: 73 5c 73 5c 73 5c 73 63 6c 6f 73 65 73 6f 63 6b s\s\s\sclosesock
08e0: 65 74 28 77 73 64 2e 68 53 6f 63 6b 65 74 29 3b et(wsd.hSocket);
08f0: 5c 72 5c 6e 2b 5c 73 5c 73 7d 5c 72 5c 6e 2b 5c \r\n+\s\s}\r\n+\
0900: 73 5c 73 69 66 5c 73 28 77 73 64 2e 66 57 53 41 s\sif\s(wsd.fWSA
0910: 49 6e 69 74 29 5c 73 7b 5c 72 5c 6e 2b 5c 73 5c Init)\s{\r\n+\s\
0920: 73 5c 73 5c 73 57 53 41 43 6c 65 61 6e 75 70 28 s\s\sWSACleanup(
0930: 29 3b 5c 72 5c 6e 2b 5c 73 5c 73 7d 5c 72 5c 6e );\r\n+\s\s}\r\n
0940: 2b 5c 73 5c 73 72 65 74 75 72 6e 3b 5c 72 5c 6e +\s\sreturn;\r\n
0950: 2b 7d 5c 72 5c 6e 2b 5c 72 5c 6e 2b 2f 2a 5c 72 +}\r\n+\r\n+/*\r
0960: 5c 6e 2b 2a 2a 5c 73 54 68 69 73 5c 73 72 6f 75 \n+**\sThis\srou
0970: 74 69 6e 65 5c 73 69 6e 69 74 61 6c 69 7a 65 73 tine\sinitalizes
0980: 5c 73 74 68 65 5c 73 65 6e 76 69 72 6f 6e 6d 65 \sthe\senvironme
0990: 6e 74 5c 73 6f 6e 5c 73 77 69 6e 64 6f 77 73 5c nt\son\swindows\
09a0: 73 66 6f 72 5c 73 74 68 65 5c 72 5c 6e 2b 2a 2a sfor\sthe\r\n+**
09b0: 5c 73 63 67 69 5f 68 61 6e 64 6c 65 5f 68 74 74 \scgi_handle_htt
09c0: 70 5f 72 65 71 75 65 73 74 5c 73 72 6f 75 74 69 p_request\srouti
09d0: 6e 65 2e 5c 73 49 74 5c 73 73 65 74 73 5c 73 74 ne.\sIt\ssets\st
09e0: 68 65 5c 73 73 74 61 6e 64 61 72 64 5c 73 69 6e he\sstandard\sin
09f0: 70 75 74 5c 73 61 6e 64 5c 73 6f 75 70 75 74 5c put\sand\souput\
0a00: 72 5c 6e 2b 2a 2a 5c 73 68 61 6e 64 6c 65 73 5c r\n+**\shandles\
0a10: 73 74 6f 5c 73 62 69 6e 61 72 79 5c 73 6d 6f 64 sto\sbinary\smod
0a20: 65 2c 5c 73 69 6e 69 74 61 6c 69 7a 65 73 5c 73 e,\sinitalizes\s
0a30: 74 68 65 5c 73 77 69 6e 64 6f 77 73 5c 73 73 6f the\swindows\sso
0a40: 63 6b 65 74 5c 73 65 6e 76 69 72 6f 6e 6d 65 6e cket\senvironmen
0a50: 74 5c 73 61 6e 64 5c 73 74 72 69 65 73 5c 72 5c t\sand\stries\r\
0a60: 6e 2b 2a 2a 5c 73 74 6f 5c 73 67 65 74 5c 73 74 n+**\sto\sget\st
0a70: 68 65 5c 73 73 6f 63 6b 65 74 5c 73 68 61 6e 64 he\ssocket\shand
0a80: 6c 65 5c 73 66 72 6f 6d 5c 73 74 68 65 5c 73 73 le\sfrom\sthe\ss
0a90: 74 61 6e 64 61 72 64 5c 73 68 61 6e 64 6c 65 73 tandard\shandles
0aa0: 2e 5c 73 49 74 5c 73 61 6c 73 6f 5c 73 65 73 74 .\sIt\salso\sest
0ab0: 61 62 6c 69 73 68 73 5c 73 61 5c 72 5c 6e 2b 2a ablishs\sa\r\n+*
0ac0: 2a 5c 73 65 78 69 74 5c 73 72 6f 75 74 69 6e 65 *\sexit\sroutine
0ad0: 5c 73 74 6f 5c 73 63 6c 65 61 6e 5c 73 75 70 5c \sto\sclean\sup\
0ae0: 73 6f 6e 5c 73 70 72 6f 67 72 61 6d 5c 73 65 78 son\sprogram\sex
0af0: 69 74 2e 5c 72 5c 6e 2b 2a 2f 5c 72 5c 6e 2b 76 it.\r\n+*/\r\n+v
0b00: 6f 69 64 5c 73 63 67 69 5f 68 61 6e 64 6c 65 5f oid\scgi_handle_
0b10: 68 74 74 70 5f 72 65 71 75 65 73 74 5f 69 6e 69 http_request_ini
0b20: 74 28 76 6f 69 64 29 5c 72 5c 6e 2b 7b 5c 72 5c t(void)\r\n+{\r\
0b30: 6e 2b 5c 73 5c 73 57 53 41 44 41 54 41 5c 73 77 n+\s\sWSADATA\sw
0b40: 64 3b 5c 72 5c 6e 2b 5c 73 5c 73 53 4f 43 4b 45 d;\r\n+\s\sSOCKE
0b50: 54 5c 73 68 53 6f 63 6b 3b 5c 72 5c 6e 2b 5c 73 T\shSock;\r\n+\s
0b60: 5c 73 69 6e 74 5c 73 73 6f 63 6b 65 74 5f 74 79 \sint\ssocket_ty
0b70: 70 65 3b 5c 72 5c 6e 2b 5c 73 5c 73 69 6e 74 5c pe;\r\n+\s\sint\
0b80: 73 73 6f 63 6b 65 74 5f 74 79 70 65 5f 6c 65 6e ssocket_type_len
0b90: 5c 73 3d 5c 73 73 69 7a 65 6f 66 28 73 6f 63 6b \s=\ssizeof(sock
0ba0: 65 74 5f 74 79 70 65 29 3b 5c 72 5c 6e 2b 5c 72 et_type);\r\n+\r
0bb0: 5c 6e 2b 5c 73 5c 73 2f 2a 5c 72 5c 6e 2b 5c 73 \n+\s\s/*\r\n+\s
0bc0: 5c 73 2a 2a 5c 73 49 6e 69 74 69 61 6c 69 7a 65 \s**\sInitialize
0bd0: 5c 73 74 68 65 5c 73 77 69 6e 64 6f 77 73 5c 73 \sthe\swindows\s
0be0: 73 6f 63 6b 65 74 5c 73 64 61 74 61 5c 73 73 74 socket\sdata\sst
0bf0: 72 75 63 74 75 72 65 2e 5c 72 5c 6e 2b 5c 73 5c ructure.\r\n+\s\
0c00: 73 2a 2f 5c 72 5c 6e 2b 5c 73 5c 73 77 73 64 2e s*/\r\n+\s\swsd.
0c10: 66 57 53 41 49 6e 69 74 5c 73 3d 5c 73 30 3b 5c fWSAInit\s=\s0;\
0c20: 72 5c 6e 2b 5c 73 5c 73 77 73 64 2e 68 53 6f 63 r\n+\s\swsd.hSoc
0c30: 6b 65 74 5c 73 3d 5c 73 49 4e 56 41 4c 49 44 5f ket\s=\sINVALID_
0c40: 53 4f 43 4b 45 54 3b 5c 72 5c 6e 2b 5c 72 5c 6e SOCKET;\r\n+\r\n
0c50: 2b 5c 73 5c 73 2f 2a 5c 72 5c 6e 2b 5c 73 5c 73 +\s\s/*\r\n+\s\s
0c60: 2a 2a 5c 73 52 65 67 69 73 74 65 72 5c 73 74 68 **\sRegister\sth
0c70: 65 5c 73 65 78 69 74 5c 73 66 75 6e 63 74 69 6f e\sexit\sfunctio
0c80: 6e 2e 5c 72 5c 6e 2b 5c 73 5c 73 2a 2f 5c 72 5c n.\r\n+\s\s*/\r\
0c90: 6e 2b 5c 73 5c 73 61 74 65 78 69 74 28 63 67 69 n+\s\satexit(cgi
0ca0: 5f 68 61 6e 64 6c 65 5f 68 74 74 70 5f 72 65 71 _handle_http_req
0cb0: 75 65 73 74 5f 65 78 69 74 29 3b 5c 72 5c 6e 2b uest_exit);\r\n+
0cc0: 5c 72 5c 6e 2b 5c 73 5c 73 2f 2a 5c 72 5c 6e 2b \r\n+\s\s/*\r\n+
0cd0: 5c 73 5c 73 2a 2a 5c 73 53 65 74 5c 73 74 68 65 \s\s**\sSet\sthe
0ce0: 5c 73 6d 6f 64 65 5c 73 6f 66 5c 73 74 68 65 5c \smode\sof\sthe\
0cf0: 73 68 74 74 70 5c 73 69 6e 70 75 74 5c 73 61 6e shttp\sinput\san
0d00: 64 5c 73 6f 75 74 70 75 74 5c 73 73 74 72 65 61 d\soutput\sstrea
0d10: 6d 73 5c 73 74 6f 5c 73 62 69 6e 61 72 79 2e 5c ms\sto\sbinary.\
0d20: 72 5c 6e 2b 5c 73 5c 73 2a 2f 5c 72 5c 6e 2b 5c r\n+\s\s*/\r\n+\
0d30: 73 5c 73 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c s\s_setmode(_fil
0d40: 65 6e 6f 28 67 2e 68 74 74 70 49 6e 29 2c 5c 73 eno(g.httpIn),\s
0d50: 5c 73 5f 4f 5f 42 49 4e 41 52 59 29 3b 5c 72 5c \s_O_BINARY);\r\
0d60: 6e 2b 5c 73 5c 73 5f 73 65 74 6d 6f 64 65 28 5f n+\s\s_setmode(_
0d70: 66 69 6c 65 6e 6f 28 67 2e 68 74 74 70 4f 75 74 fileno(g.httpOut
0d80: 29 2c 5c 73 5f 4f 5f 42 49 4e 41 52 59 29 3b 5c ),\s_O_BINARY);\
0d90: 72 5c 6e 2b 5c 72 5c 6e 2b 5c 73 5c 73 2f 2a 5c r\n+\r\n+\s\s/*\
0da0: 72 5c 6e 2b 5c 73 5c 73 2a 2a 5c 73 49 6e 69 74 r\n+\s\s**\sInit
0db0: 69 61 6c 69 7a 65 5c 73 74 68 65 5c 73 77 69 6e ialize\sthe\swin
0dc0: 64 6f 77 73 5c 73 73 6f 63 6b 65 74 5c 73 41 50 dows\ssocket\sAP
0dd0: 49 2e 5c 73 54 68 69 73 5c 73 69 73 5c 73 72 65 I.\sThis\sis\sre
0de0: 71 75 69 72 65 64 5c 73 69 66 5c 73 77 65 5c 73 quired\sif\swe\s
0df0: 6e 65 65 64 5c 73 74 6f 5c 72 5c 6e 2b 5c 73 5c need\sto\r\n+\s\
0e00: 73 2a 2a 5c 73 63 61 6c 6c 5c 73 61 6e 79 5c 73 s**\scall\sany\s
0e10: 6f 74 68 65 72 5c 73 57 69 6e 64 6f 77 73 5c 73 other\sWindows\s
0e20: 53 6f 63 6b 65 74 5c 73 66 75 6e 63 74 69 6f 6e Socket\sfunction
0e30: 2e 5c 72 5c 6e 2b 5c 73 5c 73 2a 2f 5c 72 5c 6e .\r\n+\s\s*/\r\n
0e40: 2b 5c 73 5c 73 69 66 28 5c 73 57 53 41 53 74 61 +\s\sif(\sWSASta
0e50: 72 74 75 70 28 4d 41 4b 45 57 4f 52 44 28 32 2c rtup(MAKEWORD(2,
0e60: 32 29 2c 5c 73 26 77 64 29 5c 73 3d 3d 5c 73 30 2),\s&wd)\s==\s0
0e70: 5c 73 29 5c 73 77 73 64 2e 66 57 53 41 49 6e 69 \s)\swsd.fWSAIni
0e80: 74 5c 73 3d 5c 73 31 3b 5c 72 5c 6e 2b 5c 72 5c t\s=\s1;\r\n+\r\
0e90: 6e 2b 5c 73 5c 73 2f 2a 5c 72 5c 6e 2b 5c 73 5c n+\s\s/*\r\n+\s\
0ea0: 73 2a 2a 5c 73 57 69 6e 64 6f 77 73 5c 73 53 6f s**\sWindows\sSo
0eb0: 63 6b 65 74 5c 73 68 61 6e 64 6c 65 73 5c 73 6d cket\shandles\sm
0ec0: 75 73 74 5c 73 62 65 5c 73 68 61 6e 64 6c 65 64 ust\sbe\shandled
0ed0: 5c 73 64 69 66 66 65 72 65 6e 74 6c 79 5c 73 74 \sdifferently\st
0ee0: 68 61 6e 5c 73 66 69 6c 65 5c 73 68 61 6e 64 6c han\sfile\shandl
0ef0: 65 73 2e 5c 72 5c 6e 2b 5c 73 5c 73 2a 2a 5c 73 es.\r\n+\s\s**\s
0f00: 54 68 65 72 65 5c 73 69 73 5c 73 6e 6f 5c 73 66 There\sis\sno\sf
0f10: 75 6e 63 74 69 6f 6e 5c 73 74 6f 5c 73 64 65 74 unction\sto\sdet
0f20: 65 63 74 5c 73 69 66 5c 73 61 5c 73 66 69 6c 65 ect\sif\sa\sfile
0f30: 5c 73 68 61 6e 64 6c 65 5c 73 69 73 5c 73 61 5c \shandle\sis\sa\
0f40: 73 73 6f 63 6b 65 74 5c 73 6f 72 5c 73 6e 6f 74 ssocket\sor\snot
0f50: 2c 5c 73 73 6f 5c 72 5c 6e 2b 5c 73 5c 73 2a 2a ,\sso\r\n+\s\s**
0f60: 5c 73 6c 65 74 73 5c 73 63 61 6c 6c 5c 73 61 5c \slets\scall\sa\
0f70: 73 73 6f 63 6b 65 74 5c 73 66 75 6e 63 74 69 6f ssocket\sfunctio
0f80: 6e 5c 73 77 69 74 68 5c 73 74 68 65 5c 73 68 61 n\swith\sthe\sha
0f90: 6e 64 6c 65 5c 73 66 72 6f 6d 5c 73 73 74 64 69 ndle\sfrom\sstdi
0fa0: 6e 2c 5c 73 61 6e 64 5c 73 69 66 5c 73 74 68 65 n,\sand\sif\sthe
0fb0: 72 65 5c 73 69 73 5c 72 5c 6e 2b 5c 73 5c 73 2a re\sis\r\n+\s\s*
0fc0: 2a 5c 73 6e 6f 5c 73 65 72 72 6f 72 2c 5c 73 61 *\sno\serror,\sa
0fd0: 73 73 75 6d 65 5c 73 69 74 5c 73 69 73 5c 73 61 ssume\sit\sis\sa
0fe0: 5c 73 73 6f 63 6b 65 74 21 5c 72 5c 6e 2b 5c 73 \ssocket!\r\n+\s
0ff0: 5c 73 2a 2f 5c 72 5c 6e 2b 5c 73 5c 73 69 66 28 \s*/\r\n+\s\sif(
1000: 5c 73 77 73 64 2e 66 57 53 41 49 6e 69 74 5c 73 \swsd.fWSAInit\s
1010: 29 7b 5c 72 5c 6e 2b 5c 73 5c 73 5c 73 5c 73 68 ){\r\n+\s\s\s\sh
1020: 53 6f 63 6b 5c 73 3d 5c 73 28 53 4f 43 4b 45 54 Sock\s=\s(SOCKET
1030: 29 5f 67 65 74 5f 6f 73 66 68 61 6e 64 6c 65 28 )_get_osfhandle(
1040: 5f 66 69 6c 65 6e 6f 28 73 74 64 69 6e 29 29 3b _fileno(stdin));
1050: 5c 72 5c 6e 2b 5c 73 5c 73 5c 73 5c 73 69 66 28 \r\n+\s\s\s\sif(
1060: 5c 73 67 65 74 73 6f 63 6b 6f 70 74 5c 73 28 68 \sgetsockopt\s(h
1070: 53 6f 63 6b 2c 5c 73 53 4f 4c 5f 53 4f 43 4b 45 Sock,\sSOL_SOCKE
1080: 54 2c 5c 73 53 4f 5f 54 59 50 45 2c 5c 72 5c 6e T,\sSO_TYPE,\r\n
1090: 2b 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c +\s\s\s\s\s\s\s\
10a0: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c s\s\s\s\s\s\s\s\
10b0: 73 5c 73 5c 73 5c 73 5c 73 28 63 68 61 72 5c 73 s\s\s\s\s(char\s
10c0: 2a 29 26 73 6f 63 6b 65 74 5f 74 79 70 65 2c 5c *)&socket_type,\
10d0: 73 26 73 6f 63 6b 65 74 5f 74 79 70 65 5f 6c 65 s&socket_type_le
10e0: 6e 29 5c 73 3d 3d 5c 73 30 5c 73 29 7b 5c 72 5c n)\s==\s0\s){\r\
10f0: 6e 2b 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 77 73 n+\s\s\s\s\s\sws
1100: 64 2e 68 53 6f 63 6b 65 74 5c 73 3d 5c 73 68 53 d.hSocket\s=\shS
1110: 6f 63 6b 3b 5c 72 5c 6e 2b 5c 73 5c 73 5c 73 5c ock;\r\n+\s\s\s\
1120: 73 7d 5c 72 5c 6e 2b 5c 73 5c 73 7d 5c 72 5c 6e s}\r\n+\s\s}\r\n
1130: 2b 5c 73 5c 73 72 65 74 75 72 6e 3b 5c 72 5c 6e +\s\sreturn;\r\n
1140: 2b 7d 5c 72 5c 6e 2b 5c 72 5c 6e 2b 23 5c 73 5c +}\r\n+\r\n+#\s\
1150: 73 64 65 66 69 6e 65 5c 73 43 47 49 5f 53 4f 43 sdefine\sCGI_SOC
1160: 4b 45 54 5c 73 77 73 64 2e 68 53 6f 63 6b 65 74 KET\swsd.hSocket
1170: 5c 72 5c 6e 2b 23 65 6c 73 65 5c 72 5c 6e 2b 23 \r\n+#else\r\n+#
1180: 5c 73 5c 73 64 65 66 69 6e 65 5c 73 43 47 49 5f \s\sdefine\sCGI_
1190: 53 4f 43 4b 45 54 5c 73 66 69 6c 65 6e 6f 28 67 SOCKET\sfileno(g
11a0: 2e 68 74 74 70 49 6e 29 5c 72 5c 6e 2b 23 65 6e .httpIn)\r\n+#en
11b0: 64 69 66 5c 73 2f 2a 5c 73 5f 5f 4d 49 4e 47 57 dif\s/*\s__MINGW
11c0: 33 32 5f 5f 5c 73 2a 2f 5c 72 5c 6e 2b 5c 72 5c 32__\s*/\r\n+\r\
11d0: 6e 5c 73 2f 2a 5c 72 5c 6e 5c 73 2a 2a 5c 73 54 n\s/*\r\n\s**\sT
11e0: 68 69 73 5c 73 72 6f 75 74 69 6e 65 5c 73 68 61 his\sroutine\sha
11f0: 6e 64 6c 65 73 5c 73 61 5c 73 73 69 6e 67 6c 65 ndles\sa\ssingle
1200: 5c 73 48 54 54 50 5c 73 72 65 71 75 65 73 74 5c \sHTTP\srequest\
1210: 73 77 68 69 63 68 5c 73 69 73 5c 73 63 6f 6d 69 swhich\sis\scomi
1220: 6e 67 5c 73 69 6e 5c 73 6f 6e 5c 72 5c 6e 5c 73 ng\sin\son\r\n\s
1230: 2a 2a 5c 73 73 74 61 6e 64 61 72 64 5c 73 69 6e **\sstandard\sin
1240: 70 75 74 5c 73 61 6e 64 5c 73 77 68 69 63 68 5c put\sand\swhich\
1250: 73 72 65 70 6c 69 65 73 5c 73 6f 6e 5c 73 73 74 sreplies\son\sst
1260: 61 6e 64 61 72 64 5c 73 6f 75 74 70 75 74 2e 5c andard\soutput.\
1270: 72 5c 6e 40 40 5c 73 2d 31 30 39 32 2c 36 5c 73 r\n@@\s-1092,6\s
1280: 2b 31 31 38 32 2c 39 5c 73 40 40 5c 72 5c 6e 5c +1182,9\s@@\r\n\
1290: 73 5c 73 5c 73 73 69 7a 65 5f 74 5c 73 73 69 7a s\s\ssize_t\ssiz
12a0: 65 5c 73 3d 5c 73 73 69 7a 65 6f 66 28 73 74 72 e\s=\ssizeof(str
12b0: 75 63 74 5c 73 73 6f 63 6b 61 64 64 72 5f 69 6e uct\ssockaddr_in
12c0: 29 3b 5c 72 5c 6e 5c 73 5c 73 5c 73 63 68 61 72 );\r\n\s\s\schar
12d0: 5c 73 7a 4c 69 6e 65 5b 32 30 30 30 5d 3b 5c 73 \szLine[2000];\s
12e0: 5c 73 5c 73 5c 73 5c 73 2f 2a 5c 73 41 5c 73 73 \s\s\s\s/*\sA\ss
12f0: 69 6e 67 6c 65 5c 73 6c 69 6e 65 5c 73 6f 66 5c ingle\sline\sof\
1300: 73 69 6e 70 75 74 2e 5c 73 2a 2f 5c 72 5c 6e 5c sinput.\s*/\r\n\
1310: 73 5c 72 5c 6e 2b 23 69 66 64 65 66 5c 73 5f 5f s\r\n+#ifdef\s__
1320: 4d 49 4e 47 57 33 32 5f 5f 5c 72 5c 6e 2b 5c 73 MINGW32__\r\n+\s
1330: 5c 73 63 67 69 5f 68 61 6e 64 6c 65 5f 68 74 74 \scgi_handle_htt
1340: 70 5f 72 65 71 75 65 73 74 5f 69 6e 69 74 28 29 p_request_init()
1350: 3b 5c 72 5c 6e 2b 23 65 6e 64 69 66 5c 72 5c 6e ;\r\n+#endif\r\n
1360: 5c 73 5c 73 5c 73 67 2e 66 75 6c 6c 48 74 74 70 \s\s\sg.fullHttp
1370: 52 65 70 6c 79 5c 73 3d 5c 73 31 3b 5c 72 5c 6e Reply\s=\s1;\r\n
1380: 5c 73 5c 73 5c 73 69 66 28 5c 73 66 67 65 74 73 \s\s\sif(\sfgets
1390: 28 7a 4c 69 6e 65 2c 5c 73 73 69 7a 65 6f 66 28 (zLine,\ssizeof(
13a0: 7a 4c 69 6e 65 29 2c 67 2e 68 74 74 70 49 6e 29 zLine),g.httpIn)
13b0: 3d 3d 30 5c 73 29 7b 5c 72 5c 6e 5c 73 5c 73 5c ==0\s){\r\n\s\s\
13c0: 73 5c 73 5c 73 6d 61 6c 66 6f 72 6d 65 64 5f 72 s\s\smalformed_r
13d0: 65 71 75 65 73 74 28 29 3b 5c 72 5c 6e 40 40 5c equest();\r\n@@\
13e0: 73 2d 31 31 31 36 2c 37 5c 73 2b 31 32 30 39 2c s-1116,7\s+1209,
13f0: 37 5c 73 40 40 5c 72 5c 6e 5c 73 5c 73 5c 73 63 7\s@@\r\n\s\s\sc
1400: 67 69 5f 73 65 74 65 6e 76 28 22 50 41 54 48 5f gi_setenv("PATH_
1410: 49 4e 46 4f 22 2c 5c 73 7a 54 6f 6b 65 6e 29 3b INFO",\szToken);
1420: 5c 72 5c 6e 5c 73 5c 73 5c 73 63 67 69 5f 73 65 \r\n\s\s\scgi_se
1430: 74 65 6e 76 28 22 51 55 45 52 59 5f 53 54 52 49 tenv("QUERY_STRI
1440: 4e 47 22 2c 5c 73 26 7a 54 6f 6b 65 6e 5b 69 5d NG",\s&zToken[i]
1450: 29 3b 5c 72 5c 6e 5c 73 5c 73 5c 73 69 66 28 5c );\r\n\s\s\sif(\
1460: 73 7a 49 70 41 64 64 72 3d 3d 30 5c 73 26 26 5c szIpAddr==0\s&&\
1470: 72 5c 6e 2d 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 r\n-\s\s\s\s\s\s
1480: 5c 73 5c 73 67 65 74 70 65 65 72 6e 61 6d 65 28 \s\sgetpeername(
1490: 66 69 6c 65 6e 6f 28 67 2e 68 74 74 70 49 6e 29 fileno(g.httpIn)
14a0: 2c 5c 73 28 73 74 72 75 63 74 5c 73 73 6f 63 6b ,\s(struct\ssock
14b0: 61 64 64 72 2a 29 26 72 65 6d 6f 74 65 4e 61 6d addr*)&remoteNam
14c0: 65 2c 5c 73 5c 72 5c 6e 2b 5c 73 5c 73 5c 73 5c e,\s\r\n+\s\s\s\
14d0: 73 5c 73 5c 73 5c 73 5c 73 67 65 74 70 65 65 72 s\s\s\s\sgetpeer
14e0: 6e 61 6d 65 28 43 47 49 5f 53 4f 43 4b 45 54 2c name(CGI_SOCKET,
14f0: 5c 73 28 73 74 72 75 63 74 5c 73 73 6f 63 6b 61 \s(struct\ssocka
1500: 64 64 72 2a 29 26 72 65 6d 6f 74 65 4e 61 6d 65 ddr*)&remoteName
1510: 2c 5c 73 5c 72 5c 6e 5c 73 5c 73 5c 73 5c 73 5c ,\s\r\n\s\s\s\s\
1520: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c s\s\s\s\s\s\s\s\
1530: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c s\s\s\s\s\s\s\s\
1540: 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 5c s\s\s\s\s\s\s\s\
1550: 73 5c 73 5c 73 5c 73 5c 73 28 73 6f 63 6b 6c 65 s\s\s\s\s(sockle
1560: 6e 5f 74 2a 29 26 73 69 7a 65 29 3e 3d 30 5c 72 n_t*)&size)>=0\r
1570: 5c 6e 5c 73 5c 73 5c 73 29 7b 5c 72 5c 6e 5c 73 \n\s\s\s){\r\n\s
1580: 5c 73 5c 73 5c 73 5c 73 7a 49 70 41 64 64 72 5c \s\s\s\szIpAddr\
1590: 73 3d 5c 73 69 6e 65 74 5f 6e 74 6f 61 28 72 65 s=\sinet_ntoa(re
15a0: 6d 6f 74 65 4e 61 6d 65 2e 73 69 6e 5f 61 64 64 moteName.sin_add
15b0: 72 29 3b 5c 72 5c 6e 3c 2f 76 65 72 62 61 74 69 r);\r\n</verbati
15c0: 6d 3e 5c 72 5c 6e 5c 72 5c 6e 2d 2d 74 73 62 67 m>\r\n\r\n--tsbg
15d0: 0a 4a 20 66 6f 75 6e 64 69 6e 20 30 65 62 30 38 .J foundin 0eb08
15e0: 62 38 36 30 63 0a 4a 20 70 72 69 76 61 74 65 5f b860c.J private_
15f0: 63 6f 6e 74 61 63 74 20 37 36 35 31 38 66 62 34 contact 76518fb4
1600: 30 37 66 31 34 37 61 31 64 30 35 33 63 30 30 62 07f147a1d053c00b
1610: 35 62 39 39 33 32 38 31 61 33 33 39 63 30 65 33 5b993281a339c0e3
1620: 0a 4a 20 73 65 76 65 72 69 74 79 20 49 6d 70 6f .J severity Impo
1630: 72 74 61 6e 74 0a 4a 20 73 74 61 74 75 73 20 4f rtant.J status O
1640: 70 65 6e 0a 4a 20 74 69 74 6c 65 20 4d 61 6b 65 pen.J title Make
1650: 5c 73 74 68 65 5c 73 68 74 74 70 5c 73 63 6f 6d \sthe\shttp\scom
1660: 6d 61 6e 64 5c 73 77 6f 72 6b 69 6e 67 5c 73 6f mand\sworking\so
1670: 6e 5c 73 57 69 6e 64 6f 77 73 2e 0a 4a 20 74 79 n\sWindows..J ty
1680: 70 65 20 46 65 61 74 75 72 65 5f 52 65 71 75 65 pe Feature_Reque
1690: 73 74 0a 4b 20 32 33 38 34 37 36 34 31 30 37 66 st.K 2384764107f
16a0: 30 64 30 38 34 38 36 37 35 30 33 65 31 36 34 36 0d084867503e1646
16b0: 31 66 31 38 62 38 30 66 37 32 65 32 34 0a 55 20 1f18b80f72e24.U
16c0: 61 6e 6f 6e 79 6d 6f 75 73 0a 5a 20 38 32 65 65 anonymous.Z 82ee
16d0: 66 36 61 63 39 31 33 38 62 30 64 30 39 39 61 35 f6ac9138b0d099a5
16e0: 32 62 63 34 33 33 65 65 37 38 37 36 0a 2bc433ee7876.