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, 6 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

# User Rev Content
1 ab11 1.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