1
2 define
3 {
4 AF_UNIX = 1
5 AF_INET = 2
6
7 IPPROTO_IP = 0 /* dummy for IP */
8 IPPROTO_ICMP = 1 /* control message protocol */
9 IPPROTO_IGMP = 2 /* internet group management protocol */
10 IPPROTO_GGP = 3 /* gateway^2 (deprecated) */
11 IPPROTO_TCP = 6 /* tcp */
12 IPPROTO_PUP = 12 /* pup */
13 IPPROTO_UDP = 17 /* user datagram protocol */
14 IPPROTO_IDP = 22 /* xns idp */
15 IPPROTO_ND = 77 /* UNOFFICIAL net disk proto */
16 IPPROTO_RAW = 255 /* raw IP packet */
17
18 SOCK_STREAM = 1 /* stream socket */
19 SOCK_DGRAM = 2 /* datagram socket */
20 SOCK_RAW = 3 /* raw-protocol interface */
21 SOCK_RDM = 4 /* reliably-delivered message */
22 SOCK_SEQPACKET = 5 /* sequenced packet stream */
23
24 WSADESCRIPTION_LEN = 257 //256
25 WSASYS_STATUS_LEN = 129 //128
26 INVALID_SOCKET = 0xFFFFFFFF
27 SOCKET_ERROR = 0xFFFFFFFF
28 }
29
30 define <export>
31 {
32 ERRINET_DLLVERSION = 0x0001 // Не поддерживаемая версия
33 ERRINET_HTTPDATA // Получены не HTTP данные
34 ERRINET_USERBREAK // процесс прерван пользователем
35 ERRINET_OPENFILE // Невозможно открыть файл
36 ERRINET_WRITEFILE // Невозможно записать файл
37 ERRINET_READFILE // Невозможно прочитать файл
38 ERRFTP_RESPONSE // Неверный ответ сервера
39 ERRFTP_QUIT // Неверный ответ сервера на QUIT
40 ERRFTP_BADUSER // Несуществующее имя
41 ERRFTP_BADPSW // Неверный пароль
42 ERRFTP_PORT // Ошибка PORT
43
44 // Команды - уведомления
45 // nfyfunc( uint code, nfyinfo ni )
46 NFYINET_ERROR = 0x0001 // Ошибка код ошибки по inet_error
47 NFYINET_CONNECT // Соединение с сервером
48 NFYINET_SEND // Посылаем запрос
49 NFYINET_POST // Отправляем данные
50 NFYINET_HEAD // Обработали заголовок param на httpinfo
51 NFYINET_REDIRECT // Перенаправление в sparam
52 NFYINET_GET // Получили данные param - общий размер
53 NFYINET_PUT // Отправить данные param - общий размер
54 NFYINET_END // Конец процесса
55 NFYFTP_RESPONSE // Ответ сервера в поле head
56 NFYFTP_SENDCMD // Команда для сервера в поле head
57 NFYFTP_NOTPASV // Не может быть passive mode
58
59 // http_get & http_getfile
60 HTTPF_REDIRECT = 0x0001 // Использовать перенаправление
61 HTTPF_FILE = 0x1000 // buf содержит имя файла
62
63 // Флаги http_getfile функции
64 HTTPF_CONTINUE = 0x0100 // Если файл уже существует и его
65 // размер меньше, то докачивать
66 HTTPF_SETTIME = 0x0200 // Установить серверное время
67 // Флаги http_get функции
68 HTTPF_STR = 0x0010 // Добавлять 0 к данным
69 }
70
71 define
72 {
73 INET_HTTP = 0
74 INET_FTP
75 }
76
77 type WSAData {
78 ushort wVersion
79 ushort wHighVersion
80 reserved szDescription[ $WSADESCRIPTION_LEN ]
81 reserved szSystemStatus[ $WSASYS_STATUS_LEN ]
82 ushort iMaxSockets
83 ushort iMaxUdpDg
84 uint lpVendorInfo
85 }
86
87 type sockaddr_in
88 {
89 short sin_family
90 ushort sin_port
91 uint sin_addr
92 reserved sin_zero[8]
93 }
94
95 type sockaddr {
96 ushort sa_family
97 reserved sa_data[ 14 ]
98 }
99
100 type hostent
101 {
102 uint h_name /* official name of host */
103 uint h_aliases /* alias list */
104 short h_addrtype /* host address type */
105 short h_length /* length of address */
106 uint h_addr_list /* list of addresses */
107 }
108
109 type proxyinfo
110 {
111 str host // хост прокси
112 uint port // порт
113 uint enable // включено или нет
114 }
115
116 type httpinfo
117 {
118 uint code
119 datetime dt
120 str size
121 str location
122 }
123
124 type inetnotify
125 {
126 str url
127 str head
128 uint param
129 str sparam
130 }
131
132 global
133 {
134 uint ineterror // Код последней ошибки
135 arr proxy[2] of proxyinfo // массив proxy
136 str inet_useragent = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)"
137 }
138
139 import "ws2_32.dll" {
140 uint accept( uint, uint, uint )
141 uint bind( uint, uint, uint )
142 uint closesocket( uint )
143 uint connect( uint, uint, uint )
144 uint gethostbyname( uint )
145 uint getsockname( uint, uint, uint )
146 ushort htons( ushort )
147 uint inet_addr( uint )
148 uint inet_ntoa( uint )
149 uint listen( uint, uint )
150 uint ntohl( uint )
151 ushort ntohs( ushort )
152 uint recv( uint, uint, uint, uint )
153 uint send( uint, uint, uint, uint )
154 uint shutdown( uint, uint )
155 uint socket( uint, uint, uint ) -> createsocket
156 int WSACleanup()
157 uint WSAGetLastError()
158 int WSAStartup( ushort, WSAData )
159 }
160
161 func uint inet_error
162 {
163 return ineterror
164 }
165
166 func uint inet_seterror
167 {
168 ineterror = WSAGetLastError()
169 return 0
170 }
171
172 include
173 {
174 "strinet.g"
175 "socket.g"
176 "proxy.g"
177 "http.g"
178 "ftp.g"
179 }
180
181 func uint inet_init()
182 {
183 WSAData wsaData
184
185 ineterror = WSAStartup( 0x0202, wsaData )
186
187 if ineterror : return 0
188 if wsaData.wVersion != 0x0202
189 {
190 WSACleanup( )
191 ineterror = $ERRINET_DLLVERSION
192 return 0
193 }
194 return 1
195 }
196
197 func uint inet_close
198 {
199 ineterror = WSACleanup()
200 return !ineterror
201 }
Редактировать