46fad28d1230d3c88b8e4a3fd84b96306ef999d7
[oftp] / src / ftp.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/socket.h>
4 #include <arpa/inet.h>
5 #include <netinet/in.h>
6 #include <netdb.h>
7 #include "darray.h"
8 #include "ftp.h"
9 #include "util.h"
10
11 struct ftp *ftp_alloc(void)
12 {
13         struct ftp *ftp;
14
15         if(!(ftp = malloc(sizeof *ftp))) {
16                 return 0;
17         }
18         ftp->ctl = ftp->data = -1;
19         return ftp;
20 }
21
22 void ftp_free(struct ftp *ftp)
23 {
24         if(!ftp) return;
25         if(ftp->ctl >= 0) {
26                 ftp_close(ftp);
27         }
28 }
29
30 int ftp_connect(struct ftp *ftp, const char *hostname, int port)
31 {
32         struct hostent *host;
33         struct sockaddr_in addr;
34
35         if((ftp->ctl = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
36                 errmsg("failed to create control socket\n");
37                 return -1;
38         }
39
40         if(!(host = gethostbyname(hostname))) {
41                 errmsg("failed to resolve host: %s\n", hostname);
42                 closesocket(ftp->ctl);
43                 ftp->ctl = -1;
44                 return -1;
45         }
46
47         addr.sin_family = AF_INET;
48         addr.sin_addr.s_addr = inet_addr(host->h_addr);
49         addr.sin_port = htons(port);
50
51         if(connect(ftp->ctl, (struct sockaddr*)&addr, sizeof addr) == -1) {
52                 errmsg("failed to connect to: %s (port: %d)\n", hostname, port);
53                 closesocket(ftp->ctl);
54                 ftp->ctl = -1;
55                 return -1;
56         }
57                 
58         return 0;
59 }
60
61 void ftp_close(struct ftp *ftp)
62 {
63         if(ftp->ctl >= 0) {
64                 closesocket(ftp->ctl);
65         }
66         if(ftp->data >= 0) {
67                 closesocket(ftp->data);
68         }
69 }
70
71 int ftp_update(struct ftp *ftp)
72 {
73         return -1;
74 }
75
76 int ftp_chdir(struct ftp *ftp, const char *dirname)
77 {
78         return -1;
79 }