0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 5c 0a 2a 20 20 20 20 20 ********\.*
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0060: 20 20 20 20 20 20 20 20 20 20 6d 73 77 73 6f 63 mswsoc
0070: 6b 2e 64 20 20 20 20 20 20 20 20 20 20 20 20 20 k.d
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0090: 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 *.*
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 *.*
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00f0: 20 20 20 20 20 20 57 69 6e 64 6f 77 73 20 41 50 Windows AP
0100: 49 20 68 65 61 64 65 72 20 6d 6f 64 75 6c 65 20 I header module
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0120: 20 20 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20 *.*
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0170: 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 *.*
0180: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 64 20 66 Translated f
0190: 72 6f 6d 20 4d 69 6e 47 57 20 57 69 6e 64 6f 77 rom MinGW Window
01a0: 73 20 68 65 61 64 65 72 73 20 20 20 20 20 20 20 s headers
01b0: 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 20 20 *.*
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01d0: 20 20 20 20 20 20 20 20 20 20 62 79 20 44 61 6e by Dan
01e0: 69 65 6c 20 4b 65 65 70 20 20 20 20 20 20 20 20 iel Keep
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0200: 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20 *.*
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a *.
0250: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
0260: 20 20 20 20 20 20 20 20 50 6c 61 63 65 64 20 69 Placed i
0270: 6e 74 6f 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 nto public domai
0280: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n
0290: 20 20 20 20 20 20 20 20 2a 0a 5c 2a 2a 2a 2a 2a *.\*****
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
02d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
02e0: 2a 2a 2f 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32 **/.module win32
02f0: 2e 6d 73 77 73 6f 63 6b 3b 0a 0a 69 6d 70 6f 72 .mswsock;..impor
0300: 74 20 77 69 6e 33 32 2e 77 69 6e 62 61 73 65 2c t win32.winbase,
0310: 20 77 69 6e 33 32 2e 77 69 6e 64 65 66 3b 0a 70 win32.windef;.p
0320: 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 77 69 rivate import wi
0330: 6e 33 32 2e 62 61 73 65 74 79 70 73 2c 20 77 69 n32.basetyps, wi
0340: 6e 33 32 2e 77 33 32 61 70 69 3b 0a 0a 2f 2f 20 n32.w32api;..//
0350: 46 49 58 4d 45 3a 20 63 6c 65 61 6e 20 75 70 20 FIXME: clean up
0360: 57 69 6e 64 6f 77 73 20 76 65 72 73 69 6f 6e 20 Windows version
0370: 73 75 70 70 6f 72 74 0a 0a 76 65 72 73 69 6f 6e support..version
0380: 20 28 57 69 6e 33 32 5f 57 69 6e 73 6f 63 6b 32 (Win32_Winsock2
0390: 29 20 70 72 61 67 6d 61 28 6d 73 67 2c 0a 20 22 ) pragma(msg,. "
03a0: 56 65 72 73 69 6f 6e 20 57 69 6e 33 32 5f 57 69 Version Win32_Wi
03b0: 6e 73 6f 63 6b 32 20 69 73 20 64 65 70 72 65 63 nsock2 is deprec
03c0: 61 74 65 64 3b 20 57 69 6e 73 6f 63 6b 32 20 69 ated; Winsock2 i
03d0: 73 20 6e 6f 77 20 69 6d 70 6f 72 74 65 64 20 62 s now imported b
03e0: 79 20 64 65 66 61 75 6c 74 22 29 3b 0a 0a 2f 2f y default");..//
03f0: 20 50 75 6c 6c 20 69 6e 20 57 69 6e 73 6f 63 6b Pull in Winsock
0400: 31 20 69 66 20 74 68 65 20 75 73 65 72 20 68 61 1 if the user ha
0410: 73 20 70 75 74 20 22 57 69 6e 33 32 5f 57 69 6e s put "Win32_Win
0420: 73 6f 63 6b 31 22 20 6f 6e 20 74 68 65 20 63 6f sock1" on the co
0430: 6d 70 69 6c 65 0a 2f 2f 20 6c 69 6e 65 3b 20 6f mpile.// line; o
0440: 74 68 65 72 77 69 73 65 2c 20 64 65 66 61 75 6c therwise, defaul
0450: 74 20 74 6f 20 57 69 6e 73 6f 63 6b 32 2e 0a 76 t to Winsock2..v
0460: 65 72 73 69 6f 6e 20 28 57 69 6e 33 32 5f 57 69 ersion (Win32_Wi
0470: 6e 73 6f 63 6b 31 29 20 7b 0a 09 69 6d 70 6f 72 nsock1) {..impor
0480: 74 20 77 69 6e 33 32 2e 77 69 6e 73 6f 63 6b 3b t win32.winsock;
0490: 0a 7d 20 65 6c 73 65 20 7b 0a 09 69 6d 70 6f 72 .} else {..impor
04a0: 74 20 77 69 6e 33 32 2e 77 69 6e 73 6f 63 6b 32 t win32.winsock2
04b0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 66 20 28 ;.}..static if (
04c0: 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 5f 4f 4e 4c _WIN32_WINNT_ONL
04d0: 59 29 20 7b 0a 09 73 74 61 74 69 63 20 69 66 20 Y) {..static if
04e0: 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d (_WIN32_WINNT >=
04f0: 20 30 78 35 30 30 29 20 7b 0a 09 09 65 6e 75 6d 0x500) {...enum
0500: 20 7b 0a 09 09 09 2f 2a 20 57 69 6e 4e 54 35 2b {..../* WinNT5+
0510: 3a 0a 09 09 09 20 20 20 6d 73 2d 68 65 6c 70 3a :.... ms-help:
0520: 2f 2f 4d 53 2e 4d 53 44 4e 51 54 52 2e 32 30 30 //MS.MSDNQTR.200
0530: 33 46 45 42 2e 31 30 33 33 2f 77 69 6e 73 6f 63 3FEB.1033/winsoc
0540: 6b 2f 77 69 6e 73 6f 63 6b 2f 73 6f 63 6b 65 74 k/winsock/socket
0550: 5f 6f 70 74 69 6f 6e 73 2e 68 74 6d 20 2a 2f 0a _options.htm */.
0560: 09 09 09 53 4f 5f 4d 41 58 44 47 20 20 20 20 20 ...SO_MAXDG
0570: 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 30 39 = 0x7009
0580: 2c 0a 09 09 09 53 4f 5f 4d 41 58 50 41 54 48 44 ,....SO_MAXPATHD
0590: 47 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 G = 0x70
05a0: 30 41 2c 0a 09 09 7d 0a 09 7d 0a 0a 09 65 6e 75 0A,...}..}...enu
05b0: 6d 20 7b 0a 09 09 2f 2a 20 57 69 6e 4e 54 34 2b m {.../* WinNT4+
05c0: 3a 0a 09 09 20 20 20 6d 73 2d 68 65 6c 70 3a 2f :... ms-help:/
05d0: 2f 4d 53 2e 4d 53 44 4e 51 54 52 2e 32 30 30 33 /MS.MSDNQTR.2003
05e0: 46 45 42 2e 31 30 33 33 2f 77 69 6e 73 6f 63 6b FEB.1033/winsock
05f0: 2f 77 69 6e 73 6f 63 6b 2f 73 6f 63 6b 65 74 5f /winsock/socket_
0600: 6f 70 74 69 6f 6e 73 5f 66 6f 72 5f 77 69 6e 64 options_for_wind
0610: 6f 77 73 5f 6e 74 5f 34 5f 30 5f 32 2e 68 74 6d ows_nt_4_0_2.htm
0620: 20 2a 2f 0a 09 09 53 4f 5f 43 4f 4e 4e 44 41 54 */...SO_CONNDAT
0630: 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d A =
0640: 20 30 78 37 30 30 30 2c 0a 09 09 53 4f 5f 43 4f 0x7000,...SO_CO
0650: 4e 4e 4f 50 54 20 20 20 20 20 20 20 20 20 20 20 NNOPT
0660: 20 20 20 20 3d 20 30 78 37 30 30 31 2c 0a 09 09 = 0x7001,...
0670: 53 4f 5f 44 49 53 43 44 41 54 41 20 20 20 20 20 SO_DISCDATA
0680: 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 30 = 0x700
0690: 32 2c 0a 09 09 53 4f 5f 44 49 53 43 4f 50 54 20 2,...SO_DISCOPT
06a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 =
06b0: 30 78 37 30 30 33 2c 0a 09 09 53 4f 5f 43 4f 4e 0x7003,...SO_CON
06c0: 4e 44 41 54 41 4c 45 4e 20 20 20 20 20 20 20 20 NDATALEN
06d0: 20 20 20 3d 20 30 78 37 30 30 34 2c 0a 09 09 53 = 0x7004,...S
06e0: 4f 5f 43 4f 4e 4e 4f 50 54 4c 45 4e 20 20 20 20 O_CONNOPTLEN
06f0: 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 30 35 = 0x7005
0700: 2c 0a 09 09 53 4f 5f 44 49 53 43 44 41 54 41 4c ,...SO_DISCDATAL
0710: 45 4e 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 EN = 0
0720: 78 37 30 30 36 2c 0a 09 09 53 4f 5f 44 49 53 43 x7006,...SO_DISC
0730: 4f 50 54 4c 45 4e 20 20 20 20 20 20 20 20 20 20 OPTLEN
0740: 20 20 3d 20 30 78 37 30 30 37 2c 0a 0a 09 09 2f = 0x7007,..../
0750: 2a 20 57 69 6e 4e 54 34 3a 0a 09 09 20 20 20 6d * WinNT4:... m
0760: 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e 4d 53 44 4e s-help://MS.MSDN
0770: 51 54 52 2e 32 30 30 33 46 45 42 2e 31 30 33 33 QTR.2003FEB.1033
0780: 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 73 6f 63 6b /winsock/winsock
0790: 2f 73 6f 63 6b 65 74 5f 6f 70 74 69 6f 6e 73 2e /socket_options.
07a0: 68 74 6d 20 2a 2f 0a 09 09 53 4f 5f 55 50 44 41 htm */...SO_UPDA
07b0: 54 45 5f 41 43 43 45 50 54 5f 43 4f 4e 54 45 4e TE_ACCEPT_CONTEN
07c0: 54 20 3d 20 30 78 37 30 30 42 2c 0a 09 7d 0a 7d T = 0x700B,..}.}
07d0: 0a 0a 65 6e 75 6d 20 7b 0a 09 2f 2a 20 57 69 6e ..enum {../* Win
07e0: 39 35 2b 2c 20 57 69 6e 4e 54 34 2b 20 62 75 74 95+, WinNT4+ but
07f0: 20 61 70 70 61 72 65 6e 74 6c 79 20 73 68 6f 75 apparently shou
0800: 6c 64 6e 27 74 20 75 73 65 64 3a 20 6d 61 72 6b ldn't used: mark
0810: 20 61 73 20 64 65 70 72 65 63 61 74 65 64 3f 0a as deprecated?.
0820: 09 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 . ms-help://MS
0830: 2e 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 .MSDNQTR.2003FEB
0840: 2e 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 .1033/winsock/wi
0850: 6e 73 6f 63 6b 2f 73 6f 63 6b 65 74 5f 6f 70 74 nsock/socket_opt
0860: 69 6f 6e 73 2e 68 74 6d 20 2a 2f 0a 09 53 4f 5f ions.htm */..SO_
0870: 4f 50 45 4e 54 59 50 45 20 20 20 20 20 20 20 20 OPENTYPE
0880: 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 = 0x70
0890: 30 38 2c 0a 0a 09 2f 2a 20 57 69 6e 39 35 2b 3b 08,.../* Win95+;
08a0: 20 74 68 65 73 65 20 74 77 6f 20 61 72 65 20 70 these two are p
08b0: 61 73 73 65 64 20 74 6f 20 74 68 65 20 53 4f 5f assed to the SO_
08c0: 4f 50 45 4e 54 59 50 45 20 6f 70 74 69 6f 6e 20 OPENTYPE option
08d0: 61 73 20 61 72 67 75 6d 65 6e 74 73 2c 0a 09 20 as arguments,..
08e0: 20 20 73 6f 20 77 6f 75 6c 64 20 74 68 65 79 20 so would they
08f0: 62 65 20 64 65 70 72 65 63 61 74 65 64 20 61 73 be deprecated as
0900: 20 77 65 6c 6c 3f 0a 09 20 20 20 6d 73 2d 68 65 well?.. ms-he
0910: 6c 70 3a 2f 2f 4d 53 2e 4d 53 44 4e 51 54 52 2e lp://MS.MSDNQTR.
0920: 32 30 30 33 46 45 42 2e 31 30 33 33 2f 77 69 6e 2003FEB.1033/win
0930: 73 6f 63 6b 2f 77 69 6e 73 6f 63 6b 2f 73 6f 63 sock/winsock/soc
0940: 6b 65 74 5f 6f 70 74 69 6f 6e 73 2e 68 74 6d 20 ket_options.htm
0950: 2a 2f 0a 09 53 4f 5f 53 59 4e 43 48 52 4f 4e 4f */..SO_SYNCHRONO
0960: 55 53 5f 41 4c 45 52 54 20 20 20 20 20 20 20 20 US_ALERT
0970: 20 3d 20 30 78 30 30 31 30 2c 0a 09 53 4f 5f 53 = 0x0010,..SO_S
0980: 59 4e 43 48 52 4f 4e 4f 55 53 5f 4e 4f 4e 41 4c YNCHRONOUS_NONAL
0990: 45 52 54 20 20 20 20 20 20 3d 20 30 78 30 30 32 ERT = 0x002
09a0: 30 2c 0a 0a 09 2f 2a 20 57 69 6e 39 35 3a 0a 09 0,.../* Win95:..
09b0: 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e ms-help://MS.
09c0: 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 2e MSDNQTR.2003FEB.
09d0: 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 1033/winsock/win
09e0: 73 6f 63 6b 2f 73 6f 63 6b 65 74 5f 6f 70 74 69 sock/socket_opti
09f0: 6f 6e 73 2e 68 74 6d 20 2a 2f 0a 09 53 4f 5f 43 ons.htm */..SO_C
0a00: 4f 4e 4e 45 43 54 5f 54 49 4d 45 20 20 20 20 20 ONNECT_TIME
0a10: 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 30 30 = 0x700
0a20: 43 2c 0a 7d 0a 0a 0a 73 74 61 74 69 63 20 69 66 C,.}...static if
0a30: 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 5f 4f (_WIN32_WINNT_O
0a40: 4e 4c 59 29 20 7b 0a 09 65 6e 75 6d 20 7b 0a 09 NLY) {..enum {..
0a50: 09 54 43 50 5f 42 53 44 55 52 47 45 4e 54 20 3d .TCP_BSDURGENT =
0a60: 20 30 78 37 30 30 30 2c 0a 09 7d 0a 0a 09 2f 2a 0x7000,..}.../*
0a70: 20 54 68 65 73 65 20 2a 61 70 70 65 61 72 2a 20 These *appear*
0a80: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 73 20 to be constants
0a90: 66 6f 72 20 70 61 73 73 69 6e 67 20 74 6f 20 74 for passing to t
0aa0: 68 65 20 54 72 61 6e 73 6d 69 74 46 69 6c 65 20 he TransmitFile
0ab0: 2f 0a 09 20 20 20 54 72 61 6e 73 6d 69 74 50 61 /.. TransmitPa
0ac0: 63 6b 65 74 73 20 66 75 6e 63 74 69 6f 6e 73 2c ckets functions,
0ad0: 20 77 68 69 63 68 20 61 72 65 20 61 76 61 69 6c which are avail
0ae0: 61 62 6c 65 20 69 6e 20 57 69 6e 4e 54 33 2e 35 able in WinNT3.5
0af0: 31 2b 0a 09 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 1+.. ms-help:/
0b00: 2f 4d 53 2e 4d 53 44 4e 51 54 52 2e 32 30 30 33 /MS.MSDNQTR.2003
0b10: 46 45 42 2e 31 30 33 33 2f 77 69 6e 73 6f 63 6b FEB.1033/winsock
0b20: 2f 77 69 6e 73 6f 63 6b 2f 74 72 61 6e 73 6d 69 /winsock/transmi
0b30: 74 66 69 6c 65 5f 32 2e 68 74 6d 20 2a 2f 0a 09 tfile_2.htm */..
0b40: 65 6e 75 6d 20 7b 0a 09 09 54 46 5f 44 49 53 43 enum {...TF_DISC
0b50: 4f 4e 4e 45 43 54 20 20 20 20 20 20 20 20 20 3d ONNECT =
0b60: 20 31 2c 0a 09 09 54 46 5f 52 45 55 53 45 5f 53 1,...TF_REUSE_S
0b70: 4f 43 4b 45 54 20 20 20 20 20 20 20 3d 20 32 2c OCKET = 2,
0b80: 0a 09 09 54 46 5f 57 52 49 54 45 5f 42 45 48 49 ...TF_WRITE_BEHI
0b90: 4e 44 20 20 20 20 20 20 20 3d 20 34 2c 0a 09 09 ND = 4,...
0ba0: 54 46 5f 55 53 45 5f 44 45 46 41 55 4c 54 5f 57 TF_USE_DEFAULT_W
0bb0: 4f 52 4b 45 52 20 3d 20 30 2c 0a 09 09 54 46 5f ORKER = 0,...TF_
0bc0: 55 53 45 5f 53 59 53 54 45 4d 5f 54 48 52 45 41 USE_SYSTEM_THREA
0bd0: 44 20 20 3d 20 31 36 2c 0a 09 09 54 46 5f 55 53 D = 16,...TF_US
0be0: 45 5f 4b 45 52 4e 45 4c 5f 41 50 43 20 20 20 20 E_KERNEL_APC
0bf0: 20 3d 20 33 32 0a 09 7d 0a 7d 0a 0a 2f 2a 20 57 = 32..}.}../* W
0c00: 69 6e 39 35 2b 2c 20 57 69 6e 4e 54 33 2e 35 31 in95+, WinNT3.51
0c10: 2b 0a 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d +. ms-help://M
0c20: 53 2e 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 S.MSDNQTR.2003FE
0c30: 42 2e 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 B.1033/winsock/w
0c40: 69 6e 73 6f 63 6b 2f 74 72 61 6e 73 6d 69 74 5f insock/transmit_
0c50: 66 69 6c 65 5f 62 75 66 66 65 72 73 5f 32 2e 68 file_buffers_2.h
0c60: 74 6d 20 2a 2f 0a 73 74 72 75 63 74 20 54 52 41 tm */.struct TRA
0c70: 4e 53 4d 49 54 5f 46 49 4c 45 5f 42 55 46 46 45 NSMIT_FILE_BUFFE
0c80: 52 53 20 7b 0a 09 50 56 4f 49 44 20 48 65 61 64 RS {..PVOID Head
0c90: 3b 0a 09 44 57 4f 52 44 20 48 65 61 64 4c 65 6e ;..DWORD HeadLen
0ca0: 67 74 68 3b 0a 09 50 56 4f 49 44 20 54 61 69 6c gth;..PVOID Tail
0cb0: 3b 0a 09 44 57 4f 52 44 20 54 61 69 6c 4c 65 6e ;..DWORD TailLen
0cc0: 67 74 68 3b 0a 7d 0a 61 6c 69 61 73 20 54 52 41 gth;.}.alias TRA
0cd0: 4e 53 4d 49 54 5f 46 49 4c 45 5f 42 55 46 46 45 NSMIT_FILE_BUFFE
0ce0: 52 53 2a 20 50 54 52 41 4e 53 4d 49 54 5f 46 49 RS* PTRANSMIT_FI
0cf0: 4c 45 5f 42 55 46 46 45 52 53 2c 20 4c 50 54 52 LE_BUFFERS, LPTR
0d00: 41 4e 53 4d 49 54 5f 46 49 4c 45 5f 42 55 46 46 ANSMIT_FILE_BUFF
0d10: 45 52 53 3b 0a 0a 65 78 74 65 72 6e 28 57 69 6e ERS;..extern(Win
0d20: 64 6f 77 73 29 20 7b 0a 09 2f 2a 20 57 69 6e 39 dows) {../* Win9
0d30: 35 2b 2c 20 57 69 6e 4e 54 33 2e 35 31 2b 0a 09 5+, WinNT3.51+..
0d40: 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e ms-help://MS.
0d50: 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 2e MSDNQTR.2003FEB.
0d60: 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 1033/winsock/win
0d70: 73 6f 63 6b 2f 77 73 61 72 65 63 76 65 78 5f 32 sock/wsarecvex_2
0d80: 2e 68 74 6d 20 2a 2f 0a 09 69 6e 74 20 57 53 41 .htm */..int WSA
0d90: 52 65 63 76 45 78 28 53 4f 43 4b 45 54 2c 20 63 RecvEx(SOCKET, c
0da0: 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 har*, int, int*)
0db0: 3b 0a 0a 09 2f 2a 20 57 69 6e 39 35 2b 2c 20 57 ;.../* Win95+, W
0dc0: 69 6e 4e 54 33 2e 35 31 2b 0a 09 20 20 20 6d 73 inNT3.51+.. ms
0dd0: 2d 68 65 6c 70 3a 2f 2f 4d 53 2e 4d 53 44 4e 51 -help://MS.MSDNQ
0de0: 54 52 2e 32 30 30 33 46 45 42 2e 31 30 33 33 2f TR.2003FEB.1033/
0df0: 77 69 6e 73 6f 63 6b 2f 77 69 6e 73 6f 63 6b 2f winsock/winsock/
0e00: 67 65 74 61 63 63 65 70 74 65 78 53 4f 43 4b 41 getacceptexSOCKA
0e10: 44 44 52 73 5f 32 2e 68 74 6d 20 2a 2f 0a 09 56 DDRs_2.htm */..V
0e20: 4f 49 44 20 47 65 74 41 63 63 65 70 74 45 78 53 OID GetAcceptExS
0e30: 6f 63 6b 61 64 64 72 73 28 50 56 4f 49 44 2c 20 ockaddrs(PVOID,
0e40: 44 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 44 57 DWORD, DWORD, DW
0e50: 4f 52 44 2c 20 53 4f 43 4b 41 44 44 52 2a 2a 2c ORD, SOCKADDR**,
0e60: 20 4c 50 49 4e 54 2c 20 53 4f 43 4b 41 44 44 52 LPINT, SOCKADDR
0e70: 2a 2a 2c 20 4c 50 49 4e 54 29 3b 0a 0a 09 73 74 **, LPINT);...st
0e80: 61 74 69 63 20 69 66 20 28 5f 57 49 4e 33 32 5f atic if (_WIN32_
0e90: 57 49 4e 4e 54 5f 4f 4e 4c 59 29 20 7b 0a 09 09 WINNT_ONLY) {...
0ea0: 2f 2a 20 57 69 6e 4e 54 33 2e 35 31 2b 0a 09 09 /* WinNT3.51+...
0eb0: 20 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e ms-help://MS.
0ec0: 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 2e MSDNQTR.2003FEB.
0ed0: 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 1033/winsock/win
0ee0: 73 6f 63 6b 2f 74 72 61 6e 73 6d 69 74 66 69 6c sock/transmitfil
0ef0: 65 5f 32 2e 68 74 6d 20 2a 2f 0a 09 09 42 4f 4f e_2.htm */...BOO
0f00: 4c 20 54 72 61 6e 73 6d 69 74 46 69 6c 65 28 53 L TransmitFile(S
0f10: 4f 43 4b 45 54 2c 20 48 41 4e 44 4c 45 2c 20 44 OCKET, HANDLE, D
0f20: 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 4c 50 4f WORD, DWORD, LPO
0f30: 56 45 52 4c 41 50 50 45 44 2c 20 4c 50 54 52 41 VERLAPPED, LPTRA
0f40: 4e 53 4d 49 54 5f 46 49 4c 45 5f 42 55 46 46 45 NSMIT_FILE_BUFFE
0f50: 52 53 2c 20 44 57 4f 52 44 29 3b 0a 0a 09 09 2f RS, DWORD);..../
0f60: 2a 20 57 69 6e 4e 54 33 2e 35 31 2b 0a 09 09 20 * WinNT3.51+...
0f70: 20 20 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e 4d ms-help://MS.M
0f80: 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 2e 31 SDNQTR.2003FEB.1
0f90: 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 73 033/winsock/wins
0fa0: 6f 63 6b 2f 61 63 63 65 70 74 65 78 5f 32 2e 68 ock/acceptex_2.h
0fb0: 74 6d 20 2a 2f 0a 09 09 61 6c 69 61 73 20 42 4f tm */...alias BO
0fc0: 4f 4c 20 66 75 6e 63 74 69 6f 6e 28 53 4f 43 4b OL function(SOCK
0fd0: 45 54 2c 20 53 4f 43 4b 45 54 2c 20 50 56 4f 49 ET, SOCKET, PVOI
0fe0: 44 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44 2c D, DWORD, DWORD,
0ff0: 20 44 57 4f 52 44 2c 20 4c 50 44 57 4f 52 44 2c DWORD, LPDWORD,
1000: 20 4c 50 4f 56 45 52 4c 41 50 50 45 44 29 20 4c LPOVERLAPPED) L
1010: 50 46 4e 5f 41 43 43 45 50 54 45 58 3b 0a 20 20 PFN_ACCEPTEX;.
1020: 20 20 20 20 20 20 63 6f 6e 73 74 20 47 55 49 44 const GUID
1030: 20 57 53 41 49 44 5f 41 43 43 45 50 54 45 58 20 WSAID_ACCEPTEX
1040: 3d 20 7b 30 78 62 35 33 36 37 64 66 31 2c 30 78 = {0xb5367df1,0x
1050: 63 62 61 63 2c 30 78 31 31 63 66 2c 5b 30 78 39 cbac,0x11cf,[0x9
1060: 35 2c 30 78 63 61 2c 30 78 30 30 2c 30 78 38 30 5,0xca,0x00,0x80
1070: 2c 30 78 35 66 2c 30 78 34 38 2c 30 78 61 31 2c ,0x5f,0x48,0xa1,
1080: 30 78 39 32 5d 7d 3b 0a 0a 20 20 20 20 20 20 20 0x92]};..
1090: 20 61 6c 69 61 73 20 42 4f 4f 4c 20 66 75 6e 63 alias BOOL func
10a0: 74 69 6f 6e 28 53 4f 43 4b 45 54 2c 20 53 4f 43 tion(SOCKET, SOC
10b0: 4b 41 44 44 52 2a 2c 20 69 6e 74 2c 20 50 56 4f KADDR*, int, PVO
10c0: 49 44 2c 20 44 57 4f 52 44 2c 20 4c 50 44 57 4f ID, DWORD, LPDWO
10d0: 52 44 2c 20 4c 50 4f 56 45 52 4c 41 50 50 45 44 RD, LPOVERLAPPED
10e0: 29 20 4c 50 46 4e 5f 43 4f 4e 4e 45 43 54 45 58 ) LPFN_CONNECTEX
10f0: 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 ;. const
1100: 47 55 49 44 20 57 53 41 49 44 5f 43 4f 4e 4e 45 GUID WSAID_CONNE
1110: 43 54 45 58 20 3d 20 7b 30 78 32 35 61 32 30 37 CTEX = {0x25a207
1120: 62 39 2c 30 78 64 64 66 33 2c 30 78 34 36 36 30 b9,0xddf3,0x4660
1130: 2c 5b 30 78 38 65 2c 30 78 65 39 2c 30 78 37 36 ,[0x8e,0xe9,0x76
1140: 2c 30 78 65 35 2c 30 78 38 63 2c 30 78 37 34 2c ,0xe5,0x8c,0x74,
1150: 30 78 30 36 2c 30 78 33 65 5d 7d 3b 0a 09 7d 0a 0x06,0x3e]};..}.
1160: 7d 0a 0a 76 65 72 73 69 6f 6e 28 57 69 6e 33 32 }..version(Win32
1170: 5f 57 69 6e 73 6f 63 6b 31 29 20 7b 0a 7d 20 65 _Winsock1) {.} e
1180: 6c 73 65 20 7b 0a 09 73 74 61 74 69 63 20 69 66 lse {..static if
1190: 20 28 57 49 4e 56 45 52 20 3e 20 30 78 35 30 31 (WINVER > 0x501
11a0: 29 20 7b 0a 09 09 2f 2a 09 54 68 65 73 65 20 61 ) {.../*.These a
11b0: 70 70 65 61 72 20 74 6f 20 62 65 20 63 6f 6e 73 ppear to be cons
11c0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 54 52 tants for the TR
11d0: 41 4e 53 4d 49 54 5f 50 41 43 4b 45 54 53 5f 45 ANSMIT_PACKETS_E
11e0: 4c 45 4d 45 4e 54 0a 09 09 20 2a 09 73 74 72 75 LEMENT... *.stru
11f0: 63 74 75 72 65 20 62 65 6c 6f 77 2c 20 73 6f 20 cture below, so
1200: 49 27 76 65 20 67 69 76 65 6e 20 74 68 65 6d 20 I've given them
1210: 74 68 65 20 73 61 6d 65 20 6d 69 6e 69 6d 75 6d the same minimum
1220: 20 76 65 72 73 69 6f 6e 0a 09 09 20 2a 2f 0a 09 version... */..
1230: 09 65 6e 75 6d 20 7b 0a 09 09 09 54 50 5f 45 4c .enum {....TP_EL
1240: 45 4d 45 4e 54 5f 46 49 4c 45 20 20 20 3d 20 31 EMENT_FILE = 1
1250: 2c 0a 09 09 09 54 50 5f 45 4c 45 4d 45 4e 54 5f ,....TP_ELEMENT_
1260: 4d 45 4d 4f 52 59 20 3d 20 32 2c 0a 09 09 09 54 MEMORY = 2,....T
1270: 50 5f 45 4c 45 4d 45 4e 54 5f 45 4f 50 20 20 20 P_ELEMENT_EOP
1280: 20 3d 20 34 0a 09 09 7d 0a 0a 09 09 2f 2a 09 57 = 4...}..../*.W
1290: 69 6e 58 50 2b 2c 20 53 72 76 32 6b 33 2b 0a 09 inXP+, Srv2k3+..
12a0: 09 20 2a 09 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 . *.ms-help://MS
12b0: 2e 4d 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 .MSDNQTR.2003FEB
12c0: 2e 31 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 .1033/winsock/wi
12d0: 6e 73 6f 63 6b 2f 74 72 61 6e 73 6d 69 74 5f 70 nsock/transmit_p
12e0: 61 63 6b 65 74 73 5f 65 6c 65 6d 65 6e 74 5f 32 ackets_element_2
12f0: 2e 68 74 6d 0a 09 09 20 2a 2f 0a 09 09 73 74 72 .htm... */...str
1300: 75 63 74 20 54 52 41 4e 53 4d 49 54 5f 50 41 43 uct TRANSMIT_PAC
1310: 4b 45 54 53 5f 45 4c 45 4d 45 4e 54 20 7b 0a 09 KETS_ELEMENT {..
1320: 09 09 55 4c 4f 4e 47 20 64 77 45 6c 46 6c 61 67 ..ULONG dwElFlag
1330: 73 3b 0a 09 09 09 55 4c 4f 4e 47 20 63 4c 65 6e s;....ULONG cLen
1340: 67 74 68 3b 0a 09 09 09 75 6e 69 6f 6e 20 7b 0a gth;....union {.
1350: 09 09 09 09 73 74 72 75 63 74 20 7b 0a 09 09 09 ....struct {....
1360: 09 09 4c 41 52 47 45 5f 49 4e 54 45 47 45 52 20 ..LARGE_INTEGER
1370: 6e 46 69 6c 65 4f 66 66 73 65 74 3b 0a 09 09 09 nFileOffset;....
1380: 09 09 48 41 4e 44 4c 45 20 20 20 20 20 20 20 20 ..HANDLE
1390: 68 46 69 6c 65 3b 0a 09 09 09 09 7d 0a 09 09 09 hFile;.....}....
13a0: 09 50 56 4f 49 44 20 70 42 75 66 66 65 72 3b 0a .PVOID pBuffer;.
13b0: 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 2f 2a 09 57 ...}...}..../*.W
13c0: 69 6e 58 50 2b 2c 20 53 65 72 76 65 72 32 30 30 inXP+, Server200
13d0: 33 2b 3a 0a 09 09 20 2a 09 6d 73 2d 68 65 6c 70 3+:... *.ms-help
13e0: 3a 2f 2f 4d 53 2e 4d 53 44 4e 51 54 52 2e 32 30 ://MS.MSDNQTR.20
13f0: 30 33 46 45 42 2e 31 30 33 33 2f 77 69 6e 73 6f 03FEB.1033/winso
1400: 63 6b 2f 77 69 6e 73 6f 63 6b 2f 77 73 61 6d 73 ck/winsock/wsams
1410: 67 5f 32 2e 68 74 6d 0a 09 09 20 2a 2f 0a 09 09 g_2.htm... */...
1420: 73 74 72 75 63 74 20 57 53 41 4d 53 47 20 7b 0a struct WSAMSG {.
1430: 09 09 09 4c 50 53 4f 43 4b 41 44 44 52 20 6e 61 ...LPSOCKADDR na
1440: 6d 65 3b 0a 09 09 09 49 4e 54 20 20 20 20 20 20 me;....INT
1450: 20 20 6e 61 6d 65 6c 65 6e 3b 0a 09 09 09 4c 50 namelen;....LP
1460: 57 53 41 42 55 46 20 20 20 6c 70 42 75 66 66 65 WSABUF lpBuffe
1470: 72 73 3b 0a 09 09 09 44 57 4f 52 44 20 20 20 20 rs;....DWORD
1480: 20 20 64 77 42 75 66 66 65 72 43 6f 75 6e 74 3b dwBufferCount;
1490: 0a 09 09 09 57 53 41 42 55 46 20 20 20 20 20 43 ....WSABUF C
14a0: 6f 6e 74 72 6f 6c 3b 0a 09 09 09 44 57 4f 52 44 ontrol;....DWORD
14b0: 20 20 20 20 20 20 64 77 46 6c 61 67 73 3b 0a 09 dwFlags;..
14c0: 09 7d 0a 0a 09 09 61 6c 69 61 73 20 57 53 41 4d .}....alias WSAM
14d0: 53 47 2a 20 50 57 53 41 4d 53 47 2c 20 4c 50 57 SG* PWSAMSG, LPW
14e0: 53 41 4d 53 47 3b 0a 0a 09 09 2f 2a 20 41 63 63 SAMSG;..../* Acc
14f0: 6f 72 64 69 6e 67 20 74 6f 20 4d 53 44 4e 20 64 ording to MSDN d
1500: 6f 63 73 2c 20 74 68 65 20 57 53 41 4d 53 47 2e ocs, the WSAMSG.
1510: 43 6f 6e 74 72 6f 6c 20 62 75 66 66 65 72 20 73 Control buffer s
1520: 74 61 72 74 73 20 77 69 74 68 20 61 0a 09 09 20 tarts with a...
1530: 20 20 63 6d 73 67 68 64 72 20 68 65 61 64 65 72 cmsghdr header
1540: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e of the followin
1550: 67 20 66 6f 72 6d 2e 20 20 53 65 65 20 61 6c 73 g form. See als
1560: 6f 20 52 46 43 20 32 32 39 32 2e 20 2a 2f 0a 09 o RFC 2292. */..
1570: 09 2f 2a 20 44 4b 3a 20 43 6f 6e 66 69 72 6d 65 ./* DK: Confirme
1580: 64 2e 20 20 53 6f 20 49 20 73 75 70 70 6f 73 65 d. So I suppose
1590: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 67 65 these should ge
15a0: 74 20 74 68 65 20 73 61 6d 65 20 76 65 72 73 69 t the same versi
15b0: 6f 6e 20 61 73 0a 09 09 20 20 20 57 53 41 4d 53 on as... WSAMS
15c0: 47 2e 2e 2e 20 2a 2f 0a 09 09 73 74 72 75 63 74 G... */...struct
15d0: 20 57 53 41 43 4d 53 47 48 44 52 20 7b 0a 09 09 WSACMSGHDR {...
15e0: 09 55 49 4e 54 20 63 6d 73 67 5f 6c 65 6e 3b 0a .UINT cmsg_len;.
15f0: 09 09 09 49 4e 54 20 20 63 6d 73 67 5f 6c 65 76 ...INT cmsg_lev
1600: 65 6c 3b 0a 09 09 09 49 4e 54 20 20 63 6d 73 67 el;....INT cmsg
1610: 5f 74 79 70 65 3b 0a 09 09 09 2f 2f 20 66 6f 6c _type;....// fol
1620: 6c 6f 77 65 64 20 62 79 20 55 43 48 41 52 20 63 lowed by UCHAR c
1630: 6d 73 67 5f 64 61 74 61 5b 5d 3b 0a 09 09 7d 0a msg_data[];...}.
1640: 0a 09 09 2f 2a 20 54 4f 44 4f 3a 20 53 74 61 6e .../* TODO: Stan
1650: 64 61 72 64 20 50 6f 73 69 78 2e 31 67 20 6d 61 dard Posix.1g ma
1660: 63 72 6f 73 20 61 73 20 70 65 72 20 52 46 43 20 cros as per RFC
1670: 32 32 39 32 2c 20 77 69 74 68 20 57 53 41 5f 75 2292, with WSA_u
1680: 67 6c 69 66 69 63 61 74 69 6f 6e 2e 20 2a 2f 0a glification. */.
1690: 09 09 2f 2a 20 44 4b 3a 20 4d 69 6e 47 57 20 64 ../* DK: MinGW d
16a0: 6f 65 73 6e 27 74 20 64 65 66 69 6e 65 20 74 68 oesn't define th
16b0: 65 73 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 ese, and neither
16c0: 20 64 6f 65 73 20 74 68 65 20 4d 53 44 4e 20 64 does the MSDN d
16d0: 6f 63 73 2e 20 20 4d 69 67 68 74 20 68 61 76 65 ocs. Might have
16e0: 0a 09 09 20 20 20 74 6f 20 61 63 74 75 61 6c 6c ... to actuall
16f0: 79 20 6c 6f 6f 6b 20 75 70 20 52 46 43 20 32 32 y look up RFC 22
1700: 39 32 2e 2e 2e 20 2a 2f 0a 09 09 2f 2b 0a 09 09 92... */.../+...
1710: 23 69 66 20 30 0a 09 09 23 64 65 66 69 6e 65 20 #if 0...#define
1720: 57 53 41 5f 43 4d 53 47 5f 46 49 52 53 54 48 44 WSA_CMSG_FIRSTHD
1730: 52 28 6d 68 64 72 29 0a 09 09 23 64 65 66 69 6e R(mhdr)...#defin
1740: 65 20 57 53 41 5f 43 4d 53 47 5f 4e 58 54 48 44 e WSA_CMSG_NXTHD
1750: 52 28 6d 68 64 72 2c 20 63 6d 73 67 29 0a 09 09 R(mhdr, cmsg)...
1760: 23 64 65 66 69 6e 65 20 57 53 41 5f 43 4d 53 47 #define WSA_CMSG
1770: 5f 53 50 41 43 45 28 6c 65 6e 67 74 68 29 0a 09 _SPACE(length)..
1780: 09 23 64 65 66 69 6e 65 20 57 53 41 5f 43 4d 53 .#define WSA_CMS
1790: 47 5f 4c 45 4e 28 6c 65 6e 67 74 68 29 0a 09 09 G_LEN(length)...
17a0: 23 65 6e 64 69 66 0a 09 09 2b 2f 0a 0a 09 09 65 #endif...+/....e
17b0: 78 74 65 72 6e 28 57 69 6e 64 6f 77 73 29 0a 09 xtern(Windows)..
17c0: 09 7b 0a 09 09 09 2f 2a 09 57 69 6e 58 50 2b 2c .{..../*.WinXP+,
17d0: 20 53 72 76 32 6b 33 2b 0a 09 09 09 20 2a 09 6d Srv2k3+.... *.m
17e0: 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e 4d 53 44 4e s-help://MS.MSDN
17f0: 51 54 52 2e 32 30 30 33 46 45 42 2e 31 30 33 33 QTR.2003FEB.1033
1800: 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 73 6f 63 6b /winsock/winsock
1810: 2f 64 69 73 63 6f 6e 6e 65 63 74 65 78 5f 32 2e /disconnectex_2.
1820: 68 74 6d 0a 09 09 09 20 2a 2f 0a 09 09 09 42 4f htm.... */....BO
1830: 4f 4c 20 44 69 73 63 6f 6e 6e 65 63 74 45 78 28 OL DisconnectEx(
1840: 53 4f 43 4b 45 54 2c 20 4c 50 4f 56 45 52 4c 41 SOCKET, LPOVERLA
1850: 50 50 45 44 2c 20 44 57 4f 52 44 2c 20 44 57 4f PPED, DWORD, DWO
1860: 52 44 29 3b 0a 0a 09 09 09 2f 2a 09 57 69 6e 58 RD);...../*.WinX
1870: 50 2b 2c 20 53 72 76 32 6b 33 2b 0a 09 09 09 20 P+, Srv2k3+....
1880: 2a 09 6d 73 2d 68 65 6c 70 3a 2f 2f 4d 53 2e 4d *.ms-help://MS.M
1890: 53 44 4e 51 54 52 2e 32 30 30 33 46 45 42 2e 31 SDNQTR.2003FEB.1
18a0: 30 33 33 2f 77 69 6e 73 6f 63 6b 2f 77 69 6e 73 033/winsock/wins
18b0: 6f 63 6b 2f 77 73 61 72 65 63 76 6d 73 67 5f 32 ock/wsarecvmsg_2
18c0: 2e 68 74 6d 0a 09 09 09 20 2a 2f 0a 09 09 09 69 .htm.... */....i
18d0: 6e 74 20 57 53 41 52 65 63 76 4d 73 67 28 53 4f nt WSARecvMsg(SO
18e0: 43 4b 45 54 2c 20 4c 50 57 53 41 4d 53 47 2c 20 CKET, LPWSAMSG,
18f0: 4c 50 44 57 4f 52 44 2c 20 4c 50 57 53 41 4f 56 LPDWORD, LPWSAOV
1900: 45 52 4c 41 50 50 45 44 2c 20 4c 50 57 53 41 4f ERLAPPED, LPWSAO
1910: 56 45 52 4c 41 50 50 45 44 5f 43 4f 4d 50 4c 45 VERLAPPED_COMPLE
1920: 54 49 4f 4e 5f 52 4f 55 54 49 4e 45 29 3b 0a 09 TION_ROUTINE);..
1930: 09 7d 0a 09 7d 0a 7d 0a .}..}.}.