21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #include <netinet/in.h>
24 #include <sys/select.h>
26 #include <arpa/inet.h>
29 #define WSAGetLastError() (errno)
41 ((
CFtpGet *)obj)->WorkerThread();
106 listensockaddr.sin_family = AF_INET;
107 listensockaddr.sin_port = 0;
108 listensockaddr.sin_addr.s_addr = INADDR_ANY;
154 char *filestart = NULL;
155 char *dirstart = NULL;
156 for(
int i = strlen(pURL);
i>=0;
i--)
162 filestart = pURL+
i+1;
172 if((dirstart==NULL) || (filestart==NULL))
179 strncpy(
m_szDir,dirstart,(filestart-dirstart));
180 m_szDir[(filestart-dirstart)] =
'\0';
181 strncpy(
m_szHost,pURL,(dirstart-pURL));
190 if ( (thread_id = SDL_CreateThread(
FTPObjThread,
this)) == NULL )
208 SDL_WaitThread(thread_id, NULL);
275 char szCommandString[200];
278 sprintf(szCommandString,
"TYPE I\r\n");
348 char szCommandString[200];
360 iLength =
sizeof(listenaddr);
369 nLocalPort = listenaddr.sin_port;
382 sprintf(szCommandString,
"PORT %d,%d,%d,%d,%d,%d\r\n",
383 listenaddr.sin_addr.S_un.S_un_b.s_b1,
384 listenaddr.sin_addr.S_un.S_un_b.s_b2,
385 listenaddr.sin_addr.S_un.S_un_b.s_b3,
386 listenaddr.sin_addr.S_un.S_un_b.s_b4,
390 sprintf(szCommandString,
"PORT %d,%d,%d,%d,%d,%d\r\n",
391 (listenaddr.sin_addr.s_addr & 0xff000000) >> 24,
392 (listenaddr.sin_addr.s_addr & 0x00ff0000) >> 16,
393 (listenaddr.sin_addr.s_addr & 0x0000ff00) >> 8,
394 (listenaddr.sin_addr.s_addr & 0x000000ff),
401 if (nReplyCode != 200)
427 se = getservbyname(
"ftp", NULL);
431 hostaddr.sin_port = htons(21);
435 hostaddr.sin_port = se->s_port;
437 hostaddr.sin_family = AF_INET;
438 memcpy(&hostaddr.sin_addr,he->h_addr_list[0],4);
455 char szLoginString[200];
516 if((chunk[0]==0x0a) || (chunk[0]==0x0d))
543 rcode = atoi(szcode);
551 char sDataBuffer[4096];
560 nBytesRecv = recv(
m_DataSock, (
LPSTR)&sDataBuffer,
sizeof(sDataBuffer), 0);
565 fwrite(sDataBuffer,nBytesRecv,1,
LOCALFILE);
570 }
while (nBytesRecv > 0);
601 while ( select(0, &read_fds, NULL, NULL, &timeout) )
603 while ( select(
m_ControlSock+1, &read_fds, NULL, NULL, &timeout) )
#define FTP_STATE_DIRECTORY_INVALID
int FTPObjThread(void *obj)
#define FTP_STATE_CANT_WRITE_FILE
#define FTP_STATE_URL_PARSING_ERROR
#define FTP_STATE_CONNECTING
uint ReadFTPServerReply()
#define FTP_STATE_SOCKET_ERROR
#define FTP_STATE_FILE_RECEIVED
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define FTP_STATE_LOGGING_IN
#define FTP_STATE_STARTUP
void FlushControlChannel()
GLbitfield GLuint64 timeout
#define FTP_STATE_FILE_NOT_FOUND
#define FTP_STATE_LOGIN_ERROR
#define _strnicmp(s1, s2, n)
#define FTP_STATE_UNKNOWN_ERROR
#define FTP_STATE_CANT_CONNECT
CFtpGet(char *URL, char *localfile, char *Username=NULL, char *Password=NULL)
#define FTP_STATE_HOST_NOT_FOUND
GLsizei GLsizei GLuint * obj
#define FTP_STATE_INTERNAL_ERROR
int ConnectControlSocket()
#define FTP_STATE_RECV_FAILED
#define FTP_STATE_LOGGED_IN
#define _beginthread(x, y, z)
uint SendFTPCommand(char *command)
#define FTP_STATE_RECEIVING