77 |
fd = statcode = 0; |
fd = statcode = 0; |
78 |
method = HTTP_GET; |
method = HTTP_GET; |
79 |
nleft = -1; |
nleft = -1; |
80 |
|
error = 0; |
81 |
} |
} |
82 |
|
|
83 |
|
|
200 |
|
|
201 |
if (isalpha (*_host)) { |
if (isalpha (*_host)) { |
202 |
hp = gethostbyname (_host); |
hp = gethostbyname (_host); |
203 |
if (!hp) |
if (!hp) { |
204 |
|
this->error = (int)WSAGetLastError (); |
205 |
return WPTERR_WINSOCK_CONNECT; |
return WPTERR_WINSOCK_CONNECT; |
206 |
|
} |
207 |
memcpy (&srv.sin_addr, hp->h_addr, hp->h_length); |
memcpy (&srv.sin_addr, hp->h_addr, hp->h_length); |
208 |
} |
} |
209 |
else { |
else { |
210 |
addr = inet_addr (_host); |
addr = inet_addr (_host); |
211 |
if (addr == INADDR_NONE) |
if (addr == INADDR_NONE) { |
212 |
|
this->error = (int)WSAGetLastError (); |
213 |
return WPTERR_WINSOCK_CONNECT; |
return WPTERR_WINSOCK_CONNECT; |
214 |
|
} |
215 |
memcpy (&srv.sin_addr, &addr, sizeof addr); |
memcpy (&srv.sin_addr, &addr, sizeof addr); |
216 |
} |
} |
217 |
|
|
218 |
fd = socket (AF_INET, SOCK_STREAM, 0); |
fd = socket (AF_INET, SOCK_STREAM, 0); |
219 |
if (fd < 0) |
if (fd < 0) { |
220 |
|
this->error = (int)WSAGetLastError (); |
221 |
return WPTERR_WINSOCK_SOCKET; |
return WPTERR_WINSOCK_SOCKET; |
222 |
|
} |
223 |
|
|
224 |
if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, |
if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, |
225 |
(const char*)&i, sizeof i)) { |
(const char*)&i, sizeof i)) { |
226 |
closesocket (fd); |
closesocket (fd); |
227 |
fd = 0; |
fd = 0; |
228 |
|
this->error = (int)WSAGetLastError (); |
229 |
return WPTERR_WINSOCK_SOCKET; |
return WPTERR_WINSOCK_SOCKET; |
230 |
} |
} |
231 |
|
|
232 |
if (::connect (fd, (struct sockaddr *)&srv, sizeof srv)) { |
if (::connect (fd, (struct sockaddr *)&srv, sizeof srv)) { |
233 |
closesocket (fd); |
closesocket (fd); |
234 |
fd = 0; |
fd = 0; |
235 |
|
this->error = (int)WSAGetLastError (); |
236 |
return WPTERR_WINSOCK_CONNECT; |
return WPTERR_WINSOCK_CONNECT; |
237 |
} |
} |
238 |
|
|
559 |
} |
} |
560 |
free_if_malloc (url); |
free_if_malloc (url); |
561 |
free_if_malloc (host); |
free_if_malloc (host); |
562 |
if (fd != 0) |
if (fd != 0) { |
563 |
closesocket (fd); |
closesocket (fd); |
564 |
|
fd = 0; |
565 |
|
} |
566 |
} |
} |
567 |
|
|
568 |
|
|
569 |
|
/* Read @buflen bytes from the http stream into the buffer @buf. */ |
570 |
int |
int |
571 |
wHTTP::read (void *buf, unsigned int buflen) |
wHTTP::read (void *buf, unsigned int buflen) |
572 |
{ |
{ |
593 |
} |
} |
594 |
|
|
595 |
|
|
596 |
|
/* Write the buffer @buf to the http stream. */ |
597 |
int |
int |
598 |
wHTTP::write (const void *buf, unsigned buflen) |
wHTTP::write (const void *buf, unsigned buflen) |
599 |
{ |
{ |
603 |
return -1; |
return -1; |
604 |
return send (fd, (const char*)buf, (int)buflen, 0); |
return send (fd, (const char*)buf, (int)buflen, 0); |
605 |
} |
} |
606 |
|
|
607 |
|
|
608 |
|
/* Return the winsock specific error code. */ |
609 |
|
int wHTTP::getErrorCode (void) |
610 |
|
{ |
611 |
|
return error; |
612 |
|
} |