ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/socket++-1.10/ftp.h
Revision: 1.1
Committed: Mon Feb 26 15:01:39 2001 UTC (23 years, 8 months ago) by ab11
Content type: text/plain
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Log Message:
Networking class. Assumed to be bug free.

File Contents

# Content
1 // ftp.h
2 // Copyright (C) 1992-1995 Gnanasekaran Swaminathan <gs4t@virginia.edu>
3 //
4 // Permission is granted to use at your own risk and distribute this software
5 // in source and binary forms provided the above copyright
6 // notice and this paragraph are preserved on all copies.
7 // This software is provided "as is" with no express or implied warranty.
8 //
9 // Version: 17Oct95 1.10
10
11 #ifndef FTP_H
12 #define FTP_H
13
14 #include <protocol.h>
15 #include <sys/param.h>
16
17 class ftp: public protocol {
18 public:
19 enum reptype {
20 rt_ascii_nonprint,
21 rt_ascii_telnet,
22 rt_ascii_asa,
23 rt_ebcdic_nonprint,
24 rt_ebcdic_telnet,
25 rt_ebcdic_asa,
26 rt_image,
27 rt_local
28 };
29
30 enum filestru {
31 fs_file,
32 fs_record,
33 fs_page
34 };
35
36 enum transmode {
37 tm_stream,
38 tm_block,
39 tm_comp
40 };
41
42 enum replycodea {
43 rca_posprelim = '1',
44 rca_poscomp = '2',
45 rca_posinter = '3',
46 rca_error = '4',
47 rca_negtranscomp = '4',
48 rca_negpermcomp = '5'
49 };
50
51 enum replycodeb {
52 rcb_syntax = '0',
53 rcb_info = '1',
54 rcb_conn = '2',
55 rcb_auth = '3',
56 rcb_unspec = '4',
57 rcb_filesys = '5'
58 };
59
60 class ftpbuf: public protocol::protocolbuf {
61 // the following are used when this is used as a server
62 char* usr;
63 char* password;
64 char* account;
65 char cwd [MAXPATHLEN];
66 char parentdir [MAXPATHLEN];
67 ftp::filestru fs;
68 ftp::transmode tm;
69 sockinetaddr udata; // user will listen at this addr for data conn.
70 int serverportno;
71 char replycode [5];
72
73 ostream* o;
74
75 ftp::replycodea send_cmd (const char* cmd, const char* arg=0);
76 ftp::replycodea ftpdata (int portno, istream* i, ostream* out,
77 const char* cmd, const char* arg=0);
78
79 ftpbuf (ftpbuf&);
80 ftpbuf& operator = (ftpbuf&);
81 public:
82 ftpbuf (ostream* out = 0);
83
84 ftp::replycodea get_response ();
85 const char* reply_code () const { return replycode; }
86
87 ftp::replycodea help () { return send_cmd ("HELP"); }
88 ftp::replycodea noop () { return send_cmd ("NOOP"); }
89 ftp::replycodea quit () { return send_cmd ("QUIT"); }
90 ftp::replycodea abort () { return send_cmd ("ABOR"); }
91 ftp::replycodea user (const char* name) {return send_cmd ("USER", name);}
92 ftp::replycodea passwd (const char* pw) {return send_cmd ("PASS", pw); }
93 ftp::replycodea acct (const char* ac) {return send_cmd ("ACCT", ac);}
94 ftp::replycodea cd (const char* dir);
95 ftp::replycodea useraddr (sockinetaddr sa);
96 ftp::replycodea useraddr (const char* host, int portno);
97 ftp::replycodea server_port (int portno);
98 ftp::replycodea rep_type (ftp::reptype rt);
99 ftp::replycodea file_stru (ftp::filestru fs);
100 ftp::replycodea trans_mode (ftp::transmode tm);
101
102 // service commands
103 ftp::replycodea getfile (const char* rpath, const char* lpath);
104 ftp::replycodea list (const char* lpath=0, int justnames = 0);
105 ftp::replycodea putfile (const char* lpath, const char* rpath);
106 ftp::replycodea putfile (const char* lpath);
107 ftp::replycodea append (const char* lpath, const char* rpath);
108 ftp::replycodea allocate (int numbytes);
109 ftp::replycodea restart (int marker);
110 ftp::replycodea rename (const char* rpath, const char* newrpath);
111 ftp::replycodea rmfile (const char* rpath);
112 ftp::replycodea rmdir (const char* rpath);
113 ftp::replycodea mkdir (const char* rpath);
114 ftp::replycodea pwd () { return send_cmd ("PWD"); }
115 ftp::replycodea system () { return send_cmd ("SYST"); }
116 ftp::replycodea status () { return send_cmd ("STAT"); }
117
118 virtual void serve_clients (int portno = -1);
119 virtual const char* rfc_name () const { return "ftp"; }
120 virtual const char* rfc_doc () const { return "rfc959"; }
121 };
122
123 protected:
124 ftp (): ios (0) {}
125
126 public:
127 ftp (ostream* out);
128 ~ftp () { delete ios::rdbuf (); ios::init (0); }
129
130
131 ftpbuf* rdbuf () { return (ftpbuf*) protocol::rdbuf (); }
132 ftpbuf* operator -> () { return rdbuf (); }
133 };
134
135 #endif // !FTP_H