Qore Programming Language 2.1.1
Loading...
Searching...
No Matches
QoreFtpClient.h
1/* -*- mode: c++; indent-tabs-mode: nil -*- */
2/*
3 QoreFtpClient.h
4
5 thread-safe Qore QoreFtpClient object
6
7 Qore Programming Language
8
9 Copyright (C) 2003 - 2024 Qore Technologies, s.r.o.
10
11 Permission is hereby granted, free of charge, to any person obtaining a
12 copy of this software and associated documentation files (the "Software"),
13 to deal in the Software without restriction, including without limitation
14 the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 and/or sell copies of the Software, and to permit persons to whom the
16 Software is furnished to do so, subject to the following conditions:
17
18 The above copyright notice and this permission notice shall be included in
19 all copies or substantial portions of the Software.
20
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 DEALINGS IN THE SOFTWARE.
28
29 Note that the Qore library is released under a choice of three open-source
30 licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
31 information.
32*/
33
34#ifndef _QORE_QOREFTPCLIENT_H
35
36#define _QORE_QOREFTPCLIENT_H
37
38#include <qore/InputStream.h>
39#include <qore/OutputStream.h>
40
41#define DEFAULT_FTP_CONTROL_PORT 21
42#define DEFAULT_FTP_DATA_PORT 20
43
44#define DEFAULT_USERNAME "anonymous"
45#define DEFAULT_PASSWORD "[email protected]"
46
47class FtpResp;
48class Queue;
49
51
72 friend class qore_ftp_private;
73public:
75
81 DLLEXPORT QoreFtpClient(const QoreString *url, ExceptionSink* xsink);
82
84 DLLEXPORT QoreFtpClient();
85
87 DLLEXPORT ~QoreFtpClient();
88
90
95 DLLEXPORT int connect(ExceptionSink* xsink);
96
98
101 DLLEXPORT int disconnect();
102
104
112 DLLEXPORT int cwd(const char* dir, ExceptionSink* xsink);
113
115
121 DLLEXPORT QoreStringNode* pwd(ExceptionSink* xsink);
122
124
132 DLLEXPORT int put(const char* localpath, const char* remotename, ExceptionSink* xsink);
133
135
143 DLLEXPORT int put(InputStream* is, const char* remotename, ExceptionSink* xsink);
144
146
157 DLLEXPORT int get(const char* remotepath, const char* localname, ExceptionSink* xsink);
158
160
171 DLLEXPORT int get(const char* remotepath, OutputStream* os, ExceptionSink* xsink);
172
174
183 DLLEXPORT int putData(const void* data, size_t len, const char* remotename, ExceptionSink* xsink);
184
186
192 DLLEXPORT QoreStringNode* getAsString(const char* remotepath, ExceptionSink* xsink);
193
195
205 DLLEXPORT QoreStringNode* getAsString(ExceptionSink* xsink, const char* remotepath,
206 const QoreEncoding* encoding = QCS_DEFAULT);
207
209
216 DLLEXPORT BinaryNode* getAsBinary(const char* remotepath, ExceptionSink* xsink);
217
219
227 DLLEXPORT int rename(const char* from, const char* to, ExceptionSink* xsink);
228
230
238 DLLEXPORT QoreStringNode* list(const char* path, bool long_list, ExceptionSink* xsink);
239
241
248 DLLEXPORT int del(const char* file, ExceptionSink* xsink);
249
251
258 DLLEXPORT int mkdir(const char* remotepath, ExceptionSink* xsink);
259
261
268 DLLEXPORT int rmdir(const char* remotepath, ExceptionSink* xsink);
269
271 DLLEXPORT int getPort() const;
272
274 DLLEXPORT const char* getUserName() const;
275
277 DLLEXPORT const char* getPassword() const;
278
280 DLLEXPORT const char* getHostName() const;
281
283
289 DLLEXPORT void setURL(const QoreString *url, ExceptionSink* xsink);
290
292
295 DLLEXPORT QoreStringNode* getURL() const;
296
298 DLLEXPORT void setPort(int p);
299
301 DLLEXPORT void setUserName(const char* u);
302
304 DLLEXPORT void setPassword(const char* p);
305
307 DLLEXPORT void setHostName(const char* h);
308
310
312 DLLEXPORT int setSecure();
313
315
317 DLLEXPORT int setInsecure();
318
320
324 DLLEXPORT int setInsecureData();
325
327
330 DLLEXPORT bool isSecure() const;
331
333
336 DLLEXPORT bool isDataSecure() const;
337
339
343 DLLEXPORT bool isConnected() const;
344
346
349 DLLEXPORT const char* getSSLCipherName() const;
350
352
355 DLLEXPORT const char* getSSLCipherVersion() const;
356
358 DLLEXPORT long verifyPeerCertificate() const;
359
361 DLLEXPORT void setModeAuto();
362
364 DLLEXPORT void setModeEPSV();
365
367 DLLEXPORT void setModePASV();
368
370 DLLEXPORT void setModePORT();
371
373 DLLEXPORT const char* getMode() const;
374
375 DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
376 DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, Queue* wq, QoreValue arg, int64 min_ms = 1000);
377 DLLEXPORT QoreHashNode* getUsageInfo() const;
378 DLLEXPORT void clearStats();
379
381
387 DLLEXPORT void setNetworkFamily(int family);
388
390
394 DLLEXPORT int getNetworkFamily() const;
395
397
413 DLLEXPORT QoreHashNode* getControlPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
414
416
432 DLLEXPORT QoreHashNode* getDataPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
433
435
451 DLLEXPORT QoreHashNode* getControlSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
452
454
470 DLLEXPORT QoreHashNode* getDataSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
471
473
479 DLLEXPORT QoreHashNode* sendControlMessage(const char* cmd, const char* arg, ExceptionSink* xsink);
480
482
484 DLLLOCAL void setTimeout(int timeout_ms);
485
487
489 DLLLOCAL int getTimeout() const;
490
492 DLLLOCAL void setEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
493
495 DLLLOCAL void setDataEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
496
498 DLLLOCAL void setControlEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
499
500 DLLLOCAL void cleanup(ExceptionSink* xsink);
501
502protected:
504 hashdecl qore_ftp_private* priv;
505
506 DLLLOCAL QoreFtpClient(const QoreFtpClient&) = delete;
507 DLLLOCAL QoreFtpClient& operator=(const QoreFtpClient&) = delete;
508};
509
510#endif // _QORE_QOREFTPCLIENT_H
DLLEXPORT const QoreEncoding * QCS_DEFAULT
the default encoding for the Qore library
holds arbitrary binary data
Definition BinaryNode.h:41
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition ExceptionSink.h:50
Interface for private data of input streams.
Definition InputStream.h:44
Interface for private data of output streams.
Definition OutputStream.h:44
defines string encoding functions in Qore
Definition QoreEncoding.h:83
provides thread-safe access to FTP servers through Qore data structures
Definition QoreFtpClient.h:71
DLLLOCAL int getTimeout() const
returns the socket I/O timeout value as an integer in milliseconds
DLLEXPORT const char * getSSLCipherName() const
returns the name of the SSL Cipher for the currently-connected control connection,...
DLLEXPORT int disconnect()
disconnects from the remote host if connected
DLLEXPORT int get(const char *remotepath, OutputStream *os, ExceptionSink *xsink)
gets a file from the remote server and writes it to an OutputStream
DLLEXPORT bool isDataSecure() const
returns the secure data connection parameter flag
DLLEXPORT QoreStringNode * getAsString(const char *remotepath, ExceptionSink *xsink)
gets a file from the remote server and returns it as a string
DLLEXPORT QoreFtpClient()
creates the object with no connection parameters
DLLEXPORT const char * getHostName() const
returns the hostname connection parameter
DLLEXPORT void setPort(int p)
sets the port connection parameter
DLLLOCAL void setControlEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the event queue for the control socket
DLLEXPORT bool isConnected() const
Returns the socket connection status.
DLLEXPORT int cwd(const char *dir, ExceptionSink *xsink)
changes the working directory on the remote host
DLLEXPORT QoreHashNode * getDataSocketInfo(ExceptionSink *xsink, bool host_lookup) const
returns information for the current control socket; the socket must be open
DLLEXPORT int getPort() const
returns the port number connection parameter
DLLEXPORT int rename(const char *from, const char *to, ExceptionSink *xsink)
renames/moves a file on the remote server
DLLLOCAL void setDataEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the event queue for the data socket
DLLEXPORT void setModePASV()
sets the connection mode for the next connection to "PASV" (passive mode)
DLLEXPORT QoreStringNode * getURL() const
returns a URL string representing the current connection parameters, caller owns the reference count ...
DLLEXPORT int rmdir(const char *remotepath, ExceptionSink *xsink)
removes a directory on the remote server
DLLEXPORT int setInsecureData()
sets the secure data connection parameter flag
DLLEXPORT void setUserName(const char *u)
sets the user name connection parameter
DLLEXPORT const char * getSSLCipherVersion() const
returns the version string of the SSL Cipher for the currently-connected control connection,...
DLLEXPORT int put(const char *localpath, const char *remotename, ExceptionSink *xsink)
sends a file from the local filesystem to the remote server
DLLEXPORT bool isSecure() const
returns the secure connection parameter flag
DLLEXPORT QoreStringNode * pwd(ExceptionSink *xsink)
returns the working directory on the remote host (caller owns the reference count returned)
DLLLOCAL void setEventQueue(ExceptionSink *xsink, Queue *q, QoreValue arg, bool with_data)
sets the same event queue for data and control sockets
DLLEXPORT const char * getPassword() const
returns the password connection parameter
DLLEXPORT const char * getMode() const
returns a string for the connection mode: "port", "pasv", "epsv", or "auto" if not connected and auto...
DLLEXPORT int putData(const void *data, size_t len, const char *remotename, ExceptionSink *xsink)
sends a file data io the remote server
hashdecl qore_ftp_private * priv
private implementation of the object
Definition QoreFtpClient.h:504
DLLLOCAL void setTimeout(int timeout_ms)
sets the socket I/O timeout value in milliseconds
DLLEXPORT QoreStringNode * getAsString(ExceptionSink *xsink, const char *remotepath, const QoreEncoding *encoding=QCS_DEFAULT)
gets a file from the remote server and returns it as a string
DLLEXPORT void setModeEPSV()
sets the connection mode for the next connection to "EPSV" (extended passive mode)
DLLEXPORT void setModePORT()
sets the connection mode for the next connection to "PORT"
DLLEXPORT long verifyPeerCertificate() const
returns the peer certificate verification code
DLLEXPORT void setModeAuto()
sets the connection mode for the next connection to "auto"
DLLEXPORT QoreFtpClient(const QoreString *url, ExceptionSink *xsink)
creates the object and sets connection parameters based on the url passed
DLLEXPORT BinaryNode * getAsBinary(const char *remotepath, ExceptionSink *xsink)
gets a file from the remote server and returns it as a binary node
DLLEXPORT QoreHashNode * sendControlMessage(const char *cmd, const char *arg, ExceptionSink *xsink)
Sends a message on the control port and returns a FtpResponseInfo hash or nullptr (if an exception is...
DLLEXPORT int connect(ExceptionSink *xsink)
connects to the remote host and logs in
DLLEXPORT int put(InputStream *is, const char *remotename, ExceptionSink *xsink)
sends the content of an InputStream to the remote server
DLLEXPORT QoreStringNode * list(const char *path, bool long_list, ExceptionSink *xsink)
returns a string listing the directory contents on the remote host (caller owns the reference count r...
DLLEXPORT void setHostName(const char *h)
sets the host name connection parameter
DLLEXPORT void setNetworkFamily(int family)
sets the network family to use with new connections
DLLEXPORT QoreHashNode * getControlSocketInfo(ExceptionSink *xsink, bool host_lookup) const
returns information for the current control socket; the socket must be open
DLLEXPORT QoreHashNode * getDataPeerInfo(ExceptionSink *xsink, bool host_lookup) const
returns peer information for a connected data socket
DLLEXPORT int getNetworkFamily() const
returns the network family to use with new connections
DLLEXPORT int mkdir(const char *remotepath, ExceptionSink *xsink)
creates a directory on the remote server
DLLEXPORT void setPassword(const char *p)
sets the password connection parameter
DLLEXPORT QoreHashNode * getControlPeerInfo(ExceptionSink *xsink, bool host_lookup) const
returns peer information for a connected control socket
DLLEXPORT int setInsecure()
unsets the secure connection parameter flag (to use the FTP protocol)
DLLEXPORT int get(const char *remotepath, const char *localname, ExceptionSink *xsink)
gets a file from the remote server and saves it on the local filesystem
DLLEXPORT int del(const char *file, ExceptionSink *xsink)
deletes the given file on the remote server
DLLEXPORT void setURL(const QoreString *url, ExceptionSink *xsink)
sets the connection parameters from a URL
DLLEXPORT int setSecure()
sets the secure connection parameter flag (to use the FTPS protocol)
DLLEXPORT const char * getUserName() const
returns the user name connection parameter
DLLEXPORT ~QoreFtpClient()
disconnects from the host if necessary and frees all memory associated with the object
This is the hash or associative list container type in Qore, dynamically allocated only,...
Definition QoreHashNode.h:51
Qore's string type supported by the QoreEncoding class.
Definition QoreString.h:93
Qore's string value type, reference counted, dynamically-allocated only.
Definition QoreStringNode.h:50
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition common.h:266
The main value class in Qore, designed to be passed by value.
Definition QoreValue.h:279