PCL
|
Synchronous network transfers. More...
#include <NetworkTransfer.h>
Public Types | |
using | download_event_handler = bool(Control::*)(NetworkTransfer &sender, const void *buffer, fsize_type size) |
using | progress_event_handler = bool(Control::*)(NetworkTransfer &sender, fsize_type downloadTotal, fsize_type downloadCurrent, fsize_type uploadTotal, fsize_type uploadCurrent) |
using | upload_event_handler = fsize_type(Control::*)(NetworkTransfer &sender, void *buffer, fsize_type maxSize) |
Public Member Functions | |
NetworkTransfer () | |
NetworkTransfer (const NetworkTransfer &)=delete | |
~NetworkTransfer () override | |
fsize_type | BytesTransferred () const |
void | CloseConnection () |
String | ContentType () const |
String | CustomHTTPHeaders () const |
bool | Download () |
void | EnsureUnique () override |
String | ErrorInformation () const |
void | OnDownloadDataAvailable (download_event_handler handler, Control &receiver) |
void | OnTransferProgress (progress_event_handler handler, Control &receiver) |
void | OnUploadDataRequested (upload_event_handler handler, Control &receiver) |
operator bool () const | |
NetworkTransfer & | operator= (const NetworkTransfer &)=delete |
bool | PerformedOK () const |
bool | POST (const String &fields) |
String | ProxyURL () const |
int | ResponseCode () const |
void | SetConnectionTimeout (int seconds) |
void | SetCustomHTTPHeaders (const String &nlsHeaders) |
void | SetProxyURL (const String &url, const String &userName=String(), const String &userPassword=String()) |
void | SetSSL (bool useSSL=true, bool forceSSL=false, bool verifyPeer=true, bool verifyHost=true) |
void | SetURL (const String &url, const String &userName=String(), const String &userPassword=String()) |
bool | SMTP (const String &mailFrom, const StringList &mailRecipients) |
double | TotalSpeed () const |
double | TotalTime () const |
bool | Upload (fsize_type uploadSize=0) |
String | URL () const |
bool | WasAborted () const |
Public Member Functions inherited from pcl::UIObject | |
virtual | ~UIObject () noexcept(false) |
bool | IsAlias () const |
bool | IsGarbage () const |
bool | IsNull () const |
bool | IsSameObject (const UIObject &o) const |
bool | IsUnique () const |
String | ObjectId () const |
IsoString | ObjectType () const |
bool | operator< (const UIObject &o) const |
bool | operator== (const UIObject &o) const |
size_type | RefCount () const |
void | SetObjectId (const String &id) |
Static Public Member Functions | |
static NetworkTransfer & | Null () |
Static Public Member Functions inherited from pcl::UIObject | |
static UIObject & | Null () |
Additional Inherited Members | |
Protected Member Functions inherited from pcl::UIObject | |
UIObject ()=default | |
UIObject (const UIObject &x) | |
UIObject (UIObject &&x) | |
UIObject & | operator= (const UIObject &x) |
UIObject & | operator= (UIObject &&x) |
NetworkTransfer is a simple network utility class with the following capabilities:
Definition at line 89 of file NetworkTransfer.h.
pcl::NetworkTransfer::NetworkTransfer | ( | ) |
Constructs a default NetworkTransfer object.
|
inlineoverride |
Destroys this client-side instance and dereferences the server-side object. If the server-side object becomes unreferenced, it will be garbage-collected and eventually destroyed by the core application.
When the server-side object is destroyed, all active network connections are also closed automatically. See the CloseConnection() member function form more information.
Definition at line 107 of file NetworkTransfer.h.
|
delete |
Copy constructor. This constructor is disabled because NetworkTransfer represents unique server-side objects.
fsize_type pcl::NetworkTransfer::BytesTransferred | ( | ) | const |
Returns the total number of bytes transferred in the last network operation performed with this object (whether successful or not).
void pcl::NetworkTransfer::CloseConnection | ( | ) |
Closes the internal network connection associated with this object.
Normally, when you call one of the Download(), Upload(), POST() or SMTP() member functions for the first time with a NetworkTransfer object, the PixInsight core application does not close the network connection automatically after completing the operation. The connection remains active for some time, ready to be reused if the same NetworkTransfer object is used again to perform additional (and compatible) data transfers. This greatly improves performance of network transactions.
By calling this function you can force immediate close of the active connection. If there is no active connection associated with this object, this function is simply ignored. Note that the destructor of NetworkTransfer also closes any active connection automatically.
String pcl::NetworkTransfer::ContentType | ( | ) | const |
The content type (or MIME type) reported by the remote server after a successful download operation, or an empty string if no valid content type could be retrieved, if the last operation was an upload, or if no transfer operation has been performed with this object.
String pcl::NetworkTransfer::CustomHTTPHeaders | ( | ) | const |
Returns the newline-separated list of custom HTTP headers defined for this object, or an empty string if no custom headers have been defined. Custom HTTP headers are defined by calling SetCustomHTTPHeaders().
bool pcl::NetworkTransfer::Download | ( | ) |
Performs a data download operation.
Returns true upon successful completion of the download operation. Returns false in the event of error, or if the operation was aborted.
|
inlineoverridevirtual |
Ensures that the server-side object managed by this instance is uniquely referenced.
Since network transfers are unique objects by definition, calling this member function has no effect.
Reimplemented from pcl::UIObject.
Definition at line 130 of file NetworkTransfer.h.
String pcl::NetworkTransfer::ErrorInformation | ( | ) | const |
Returns the error information generated in the last network transfer operation. Returns an empty string if no error occurred, or if no transfer operation has been performed with this object.
Note that this function may return some useful diagnostics information, even if the last operation was successful.
|
static |
Returns a reference to a null NetworkTransfer instance. A null NetworkTransfer does not correspond to an existing network transfer in the PixInsight core application.
|
inline |
A synonym for PerformedOK()
Definition at line 414 of file NetworkTransfer.h.
|
delete |
Copy assignment. This operator is disabled because NetworkTransfer represents unique server-side objects.
bool pcl::NetworkTransfer::PerformedOK | ( | ) | const |
Returns true if the last network transfer operation was successful; false in the event of error, if no transfer operation has been performed with this object, or if the last operation was aborted.
bool pcl::NetworkTransfer::POST | ( | const String & | fields | ) |
Performs an HTTP POST operation.
Example:
Returns true upon successful completion of the POST operation. Returns false in the event of error, or if the operation has been aborted.
This member function performs a download operation. The downloaded data will be the server response to the POSTed fields.
String pcl::NetworkTransfer::ProxyURL | ( | ) | const |
Returns the URL of the proxy server used in the last network transfer operation performed with this object, or an empty string if no proxy server has been specified.
int pcl::NetworkTransfer::ResponseCode | ( | ) | const |
Returns the server response code after the last call to Perform(). Returns zero if the response code could not be retrieved, or if no transfer operation has been done.
void pcl::NetworkTransfer::SetConnectionTimeout | ( | int | seconds | ) |
Sets the connection timeout for this NetworkTransfer object.
seconds | Connection timeout in seconds. Can legally be zero to reset the connection timeout to its default value of 30 seconds. |
If the specified timeout is not valid for some reason, or if an internal error occurs, this function throws an Error exception.
void pcl::NetworkTransfer::SetCustomHTTPHeaders | ( | const String & | nlsHeaders | ) |
Define a set of custom HTTP headers.
nlsHeaders | A newline-separated list of custom HTTP headers. To remove all custom headers and return to the default set of HTTP headers, specify an empty string. |
The specified list of custom headers will replace any previously defined list, if one was set by calling this function.
To disable an HTTP header, specify an empty header value (no characters after the ':'). For example:
"User-Agent:"
To define a custom header without a value, include no ':' separator and end the header with a semicolon:
"CustomHeader;"
Example:
void pcl::NetworkTransfer::SetProxyURL | ( | const String & | url, |
const String & | userName = String() , |
||
const String & | userPassword = String() |
||
) |
Sets the proxy URL of this NetworkTransfer object.
url | A valid URL identifying the proxy server used by this network transfer operation. |
userName | The user name for proxy authentication. The default value is an empty string. |
userPassword | The user password for proxy authentication. The default value is an empty string. |
The parameters used by this member function are identical to those of the SetURL() function.
If the specified URL is not syntactically valid, this function throws an Error exception. Existence or responsiveness of the proxy server are not verified.
void pcl::NetworkTransfer::SetSSL | ( | bool | useSSL = true , |
bool | forceSSL = false , |
||
bool | verifyPeer = true , |
||
bool | verifyHost = true |
||
) |
Set SSL/TLS options.
useSSL | Enable SSL/TLS for the FTP, SMTP, POP3 and IMAP protocols. These are protocols that start plain text by default but can be restarted automatically using secure connections. The default value is true. |
forceSSL | If true, SSL will be required for communication during the whole transfer operation; in this case, if SSL is not available the connection will fail. If this parameter is false, SSL/TLS will be used if available, but the operation will continue (insecurely) otherwise. The default value is false. |
verifyPeer | Verify the authenticity of the peer's certificate, and fail if it is not authentic. The peer's certificate is checked through a chain of certification authority (CA) cerfificates supplied by the calling machine. If this parameter is false, the connection won't fail if the authenticity of the server's certificate cannot be verified. This parameter works for all TLS based protocols: HTTPS, FTPS, SMTPS, etc. The default value is true. |
verifyHost | Verify the identity of the host. The connection will fail if the Common Name or Subject Alternate Name fields of the server's certificate don't match the host name in the URL set via the SetURL() member function. If this parameter is false, the connection won't fail if the identity of the server cannot be verified. This parameter works for all TLS based protocols: HTTPS, FTPS, SMTPS, etc. If the verifyPeer parameter is false, this parameter is ignored. The default value is true. |
By default, all NetworkTransfer objects are initialized to use SSL/TLS if possible for plain text protocols. Authenticity of peer and host certificates are always verified by default. In other words, the default parameter values of this member function reflect the default state of the object upon construction.
If the specified SSL settings are not valid for some reason, or if an internal error occurs, this function throws an Error exception.
void pcl::NetworkTransfer::SetURL | ( | const String & | url, |
const String & | userName = String() , |
||
const String & | userPassword = String() |
||
) |
Sets the URL of this NetworkTransfer object.
url | A valid URL identifying the network resource of this network transfer operation. |
userName | The user name for authentication. The default value is an empty string. |
userPassword | The user password for authentication. The default value is an empty string. |
URLs must be valid and conform to the URI specification from RFC 3986 (Uniform Resource Identifier: Generic Syntax). The HTTP, FTP, HTTPS, FTPS, SSH and SMTP protocols are supported.
The url may include user authentication data in the 'user:password@' format. It may also include a port specification. For example:
ftp://somebody:secretpwd@ftp.somewhere.com/mydir/myfile.txt:21
However, if explicit user name and password are specified, they will override any user authentication data included in the URL. In all cases, user authentication data will never be shown on the console.
If the specified URL is not syntactically valid, this function throws an Error exception. Existence or responsiveness of the server are not verified.
bool pcl::NetworkTransfer::SMTP | ( | const String & | mailFrom, |
const StringList & | mailRecipients | ||
) |
Performs an SMTP operation.
mailFrom | The 'return-to' email address. |
mailRecipients | The list of recipients for this SMTP operation, usually a list of email addresses that will receive the transferred data as an email message. |
Returns true upon successful completion of the SMTP operation. Returns false in the event of error, or if the operation has been aborted.
This member function performs an upload operation. The uploaded data will be the header and body of an email message. See RFC 5322 for detailed information on the data format applicable.
double pcl::NetworkTransfer::TotalSpeed | ( | ) | const |
Returns the transfer speed in KiB per second, measured for the last network transfer operation performed with this object.
double pcl::NetworkTransfer::TotalTime | ( | ) | const |
Returns the total elapsed time in seconds, measured for the last network transfer operation performed with this object.
bool pcl::NetworkTransfer::Upload | ( | fsize_type | uploadSize = 0 | ) |
Performs a data upload operation.
uploadSize | The total size in bytes of the data that will be transferred. For example, if you are going to upload a disk file, you should specify the file size here. If the size cannot be known in advance, this argument can legally be zero. However, specifying the total upload size can improve uploading performance significantly. The default value is zero. |
Returns true upon successful completion of the upload operation. Returns false in the event of error, or if the operation was aborted.
String pcl::NetworkTransfer::URL | ( | ) | const |
Returns the URL of the last network transfer operation performed with this object, or an empty string if no transfer operation has been done.
bool pcl::NetworkTransfer::WasAborted | ( | ) | const |
Returns true iff the last network transfer operation was aborted by an event handler. Returns false if the operation was not aborted (whether successful or not), or if no transfer operation has been performed with this object.