NetCode Class

Properties   Methods   Events   Config Settings   Errors  

The NetCode class can be used to encode or decode files or strings using a variety of popular encoding formats, such as Base64, UUencode, and URL. UUEncode , MIME's Base64 Quoted-Printable , and URL encoding formats, as well as secure hash functions such as MD5 and SHA1, are currently supported.

Syntax

NetCode

Remarks

The encoding format is specified by the Format property. The binary data, or the name of the file containing binary data, is specified by the DecodedData property and the encoded data or filename is specified by the EncodedData property. The FileName property may be used to override the default file names or to specify a directory during uuencoding. After uudecoding, the FileName property contains the fully specified file name of the decoded file.

Understanding Encoding/Decoding

Most mail systems use only 7 bits to transmit messages. A binary file, such as an archive or a non-plaintext-formatted file produced from a text processor should be first encoded in 7-bit code before email transfer.

Decoding is the inverse process (i.e., creation of the original file from the encoded data). Encoded data are often split over several files because of the size limit placed on the email message. Each message is preceded by information about this splitting, as well as the mail header. NetCode supports this case in both directions:

- During encoding, setting the MaxFileSize configuration setting to the maximum size of a message body instructs NetCode to split the encoded data over several files. Multiple filenames can be specified by using question marks "?" (see the EncodedData property for more information).

- During decoding, the body messages can be saved in separate files named namexxx.ext, where xxx is a numeral starting at 000 and ext is ".uue", ".b16", or ".q_p" according to Format. These multiple filenames should be given to EncodedData.

Property List


The following is the full list of the properties of the class with short descriptions. Click on the links for further details.

DecodedDataThis property includes the decoded data.
DecodedFileThis property includes the filename of the decoded data.
EncodedDataThis property includes the encoded data.
EncodedFileThis property includes the filename of the encoded data.
FileCntThis property shows the number of encoded files the class has read from or written into.
FileNameThis property includes the destination filename for the encoded data.
FormatThis property includes the type of encoding to be used.
ModeThis property includes the UNIX-style filemode when uuencoding and uudecoding.
OverwriteThis property controls whether created file(s) should overwrite already existing file(s).
ProgressStepThis property controls the granularity at which the Progress event is fired. Values are 0-100.

Method List


The following is the full list of the methods of the class with short descriptions. Click on the links for further details.

ConfigSets or retrieves a configuration setting.
DecodeThis method decodes a string.
EncodeThis method encodes the data.
ResetReset the class.
ResetDataThis method resets the values of all data and stream properties.
SetInputStreamThis method sets the input stream of data.
SetOutputStreamThis method sets the output stream of data.

Event List


The following is the full list of the events fired by the class with short descriptions. Click on the links for further details.

ErrorFired when information is available about errors during data delivery.
ProgressThis event occurs when PercentDone of the input is read.

Config Settings


The following is a list of config settings for the class with short descriptions. Click on the links for further details.

Base64LineBreakTells the class whether to include line breaks in Base64 encoded content or not.
EncodeHashWhether the hash value is hex encoded.
HMACAlgorithmThe hash algorithm to use when generating a Hash-based Message Authentication Code (HMAC).
HMACKeyA key to use when generating a Hash-based Message Authentication Code (HMAC).
MaxFileSizeWhen encoding, controls whether encoded data should be split into several files and gives the maximum allowed size for these files.
UseExtendedHexBase32Specifies whether or not the Extended Hex alphabet is used.
UseModifiedUTF7Specifies whether or not a modified form of UTF-7 for IMAP mailbox naming is used.
BuildInfoInformation about the product's build.
CodePageThe system code page used for Unicode to Multibyte translations.
LicenseInfoInformation about the current license.
MaskSensitiveWhether sensitive data is masked in log messages.
ProcessIdleEventsWhether the class uses its internal event loop to process events when the main thread is idle.
SelectWaitMillisThe length of time in milliseconds the class will wait when DoEvents is called if there are no events to process.
UseInternalSecurityAPIWhether or not to use the system security libraries or an internal implementation.

DecodedData Property (NetCode Class)

This property includes the decoded data.

Syntax

ANSI (Cross Platform)
int GetDecodedData(char* &lpDecodedData, int &lenDecodedData);
int SetDecodedData(const char* lpDecodedData, int lenDecodedData); Unicode (Windows) INT GetDecodedData(LPSTR &lpDecodedData, INT &lenDecodedData);
INT SetDecodedData(LPCSTR lpDecodedData, INT lenDecodedData);
int ipworks_netcode_getdecodeddata(void* lpObj, char** lpDecodedData, int* lenDecodedData);
int ipworks_netcode_setdecodeddata(void* lpObj, const char* lpDecodedData, int lenDecodedData);
QByteArray GetDecodedData();
int SetDecodedData(QByteArray qbaDecodedData);

Default Value

""

Remarks

This property contains the decoded data. When uuencoding, the value of FileName is the filename that will be written in EncodedData. If FileName is empty, an error will be returned.

This property is not available at design time.

Data Type

Binary String

DecodedFile Property (NetCode Class)

This property includes the filename of the decoded data.

Syntax

ANSI (Cross Platform)
char* GetDecodedFile();
int SetDecodedFile(const char* lpszDecodedFile); Unicode (Windows) LPWSTR GetDecodedFile();
INT SetDecodedFile(LPCWSTR lpszDecodedFile);
char* ipworks_netcode_getdecodedfile(void* lpObj);
int ipworks_netcode_setdecodedfile(void* lpObj, const char* lpszDecodedFile);
QString GetDecodedFile();
int SetDecodedFile(QString qsDecodedFile);

Default Value

""

Remarks

This property contains the filename of the decoded data. When uuencoding, the value of FileName is the filename that will be written in EncodedData. If FileName is empty, the value of the DecodedFile property is taken, if a valid file has been specified. It is recommended that EncodedData contains the full path and that FileName contains only the filename so that no problems occur while uudecoding in a foreign system.

When decoding, the class tries to generate the name for the created file in the following order: DecodedFile, FileName, or when the format is UUEncode, the specified filename in the uuencoded data. If DecodedFile or FileName end with a backslash "\" they are interpreted as directories, and the class will try to create the given filename in this directory. If this is the case, FileName shows the name of the file that was created.

Data Type

String

EncodedData Property (NetCode Class)

This property includes the encoded data.

Syntax

ANSI (Cross Platform)
int GetEncodedData(char* &lpEncodedData, int &lenEncodedData);
int SetEncodedData(const char* lpEncodedData, int lenEncodedData); Unicode (Windows) INT GetEncodedData(LPSTR &lpEncodedData, INT &lenEncodedData);
INT SetEncodedData(LPCSTR lpEncodedData, INT lenEncodedData);
int ipworks_netcode_getencodeddata(void* lpObj, char** lpEncodedData, int* lenEncodedData);
int ipworks_netcode_setencodeddata(void* lpObj, const char* lpEncodedData, int lenEncodedData);
QByteArray GetEncodedData();
int SetEncodedData(QByteArray qbaEncodedData);

Default Value

""

Remarks

This property contains the data that either have been encoded or are set to be decoded.

This property is not available at design time.

Data Type

Binary String

EncodedFile Property (NetCode Class)

This property includes the filename of the encoded data.

Syntax

ANSI (Cross Platform)
char* GetEncodedFile();
int SetEncodedFile(const char* lpszEncodedFile); Unicode (Windows) LPWSTR GetEncodedFile();
INT SetEncodedFile(LPCWSTR lpszEncodedFile);
char* ipworks_netcode_getencodedfile(void* lpObj);
int ipworks_netcode_setencodedfile(void* lpObj, const char* lpszEncodedFile);
QString GetEncodedFile();
int SetEncodedFile(QString qsEncodedFile);

Default Value

""

Remarks

This property contains the filename of the encoded data. If the encoded data are spread over several files, the filenames are passed to EncodedFile in the form name?. Question marks "?" are expanded to numerals starting with 0. The filenames should exist as path\file000.ext and are passed to EncodedFile in the form name???. Question marks "?" are expanded to numerals starting with 000 (the number of zeros "0" equals that of question marks "?").

The class appends the extension ".uue", ".b16", or ".q_p" depending on Format immediately after the generated numbers. FileCnt contains the number of encoded files.

See also the Format property, and the MaxFileSize configuration setting when working with multiple files.

Data Type

String

FileCnt Property (NetCode Class)

This property shows the number of encoded files the class has read from or written into.

Syntax

ANSI (Cross Platform)
int GetFileCnt();

Unicode (Windows)
INT GetFileCnt();
int ipworks_netcode_getfilecnt(void* lpObj);
int GetFileCnt();

Default Value

0

Remarks

This property shows the number of encoded files the class has read from or written into. If the user specifies one or more questions marks "?" in EncodedFile, they will be expanded from 000 to FileCnt - 1 (the number of question marks "?" specifies the number of figures).

Please refer to EncodedFile for filename conventions.

This property is read-only.

Data Type

Integer

FileName Property (NetCode Class)

This property includes the destination filename for the encoded data.

Syntax

ANSI (Cross Platform)
char* GetFileName();
int SetFileName(const char* lpszFileName); Unicode (Windows) LPWSTR GetFileName();
INT SetFileName(LPCWSTR lpszFileName);
char* ipworks_netcode_getfilename(void* lpObj);
int ipworks_netcode_setfilename(void* lpObj, const char* lpszFileName);
QString GetFileName();
int SetFileName(QString qsFileName);

Default Value

""

Remarks

This property contains the destination filename for the encoded data. When uuencoding, this property contains the filename that is specified in the uuencoded data.

When decoding, if the value of the property is not empty, it shows the class where to write the decoded data. It can be either the filename or the directory where the file should be written. If is should be written to a directory, it should end with a backslash "\".

After a decode operation, this property contains the filename for the created file. If the file couldn't be created because of an illegal filename, examining this property might provide a hint about the reason of the failure.

This property must be set to "" (empty string) after each decode operation because it contains the full specification of the file.

An error occurs if a uuencoding operation is initiated with an empty FileName.

If you want to first check the uuencoded filename before creating it on disk, you may assign an illegal directory name to this property (always use a closing backslash "\" to denote it as a directory), then trap the error and check the filename appended to this property.

Data Type

String

Format Property (NetCode Class)

This property includes the type of encoding to be used.

Syntax

ANSI (Cross Platform)
int GetFormat();
int SetFormat(int iFormat); Unicode (Windows) INT GetFormat();
INT SetFormat(INT iFormat);

Possible Values

FMT_UUENCODE(0), 
FMT_BASE_64(1),
FMT_QP(2),
FMT_URL(3),
FMT_JIS(4),
FMT_YENCODE(5),
FMT_MD5HASH(6),
FMT_SHA1HASH(7),
FMT_HEX(8),
FMT_HTML(9),
FMT_HMAC(10),
FMT_UTF8(11),
FMT_UTF7(12),
FMT_BASE_32(13),
FMT_BASE_64URL(14),
FMT_SHA256HASH(15),
FMT_PUNYCODE(16)
int ipworks_netcode_getformat(void* lpObj);
int ipworks_netcode_setformat(void* lpObj, int iFormat);
int GetFormat();
int SetFormat(int iFormat);

Default Value

0

Remarks

This property contains the type of encoding to be used. The following are the possible values for this property, and the corresponding descriptions:

fmtUUEncode (0)3 Bytes are encoded into 4 readable characters. If multiple filenames are specified, then the extension ".uue" is used/expected.
fmtBase64 (1)Encoding format of MIME. This is much like UUEncode but another subset of printable characters is used. If multiple filenames are specified, then the extension ".b64" is used/expected.
fmtQP (2)Quoted-Printable is another MIME format coding only special characters. It is mostly used if the text contains special accented characters. If multiple filenames are specified, then the extension ".q_p" is used/expected.
fmtURL (3)Encoding of nonprintable, 8-bit or unsafe characters as defined in RFC 1738. (No multiple filenames can be specified with this encoding.)
fmtJIS (4)Japanese Industrial Standards encoding of Japanese character sets.
fmtYEncode (5)Similar to Base64, but uses 8-bit encoding to reduce the amount of data being sent and received. Designed for binaries on the Usenet or Email.
fmtMD5Hash (6)The Message Digest 5 hashing algorithm produces a 128-bit hash output.
fmtSHA1Hash (7)The Secure Hash Algorithm produces a 128-bit hash output.
fmtHex (8)Creates a hexadecimal string representation of the decoded data.
fmtHTML (9)Creates an HTML-encoded string. Supports decimal, hex, and named HTML character representations.
fmtHMAC (10)Creates a Hash-based Message Authentication Code for the given data. To set the key, use HMACKey. To set the hash algorithm to use to create the MAC, use HMACAlgorithm.
fmtUTF8 (11)Converts strings to/from UTF-8 to the current code page (Windows only).
fmtUTF7 (12)Converts strings to/from UTF-7 to the current code page (Windows only).
fmtBase32 (13)Similar to Base64, but uses 32 printable characters. If multiple filenames are specified, then the extension ".b32" is used/expected.
fmtBase64URL (14)Base64 encoding for use within URLs. The "+" character is replaced with "-". The "/" character is replaced with "_". The padding character "=" is omitted.
fmtSHA256 (15)The Secure Hash Algorithm 2 produces a 256-bit hash output.
fmtPunycode (16)Converts string to/from Punycode. The CodePage configuration setting must be set to a value capable of interpreting the non-ASCII character data being encoded/decoded. For instance 65001. In addition the C++ Edition on Windows requires use of the NetCodeW class which supports wide chars.

Data Type

Integer

Mode Property (NetCode Class)

This property includes the UNIX-style filemode when uuencoding and uudecoding.

Syntax

ANSI (Cross Platform)
char* GetMode();
int SetMode(const char* lpszMode); Unicode (Windows) LPWSTR GetMode();
INT SetMode(LPCWSTR lpszMode);
char* ipworks_netcode_getmode(void* lpObj);
int ipworks_netcode_setmode(void* lpObj, const char* lpszMode);
QString GetMode();
int SetMode(QString qsMode);

Default Value

"0755"

Remarks

This property contains the UNIX-style filemode when uuencoding and uudecoding. The filemode is usually an octal number, such as 755 or 600, which gives the protections of that file. If the file to uudecode is correctly read, then this property contains the protection string given in the uuencoded data.

This is given for compatibility with other systems and is used only when Format is fmtUUE.

Data Type

String

Overwrite Property (NetCode Class)

This property controls whether created file(s) should overwrite already existing file(s).

Syntax

ANSI (Cross Platform)
int GetOverwrite();
int SetOverwrite(int bOverwrite); Unicode (Windows) BOOL GetOverwrite();
INT SetOverwrite(BOOL bOverwrite);
int ipworks_netcode_getoverwrite(void* lpObj);
int ipworks_netcode_setoverwrite(void* lpObj, int bOverwrite);
bool GetOverwrite();
int SetOverwrite(bool bOverwrite);

Default Value

FALSE

Remarks

This property controls whether created file(s) should overwrite already existing file(s).

Note: More than one file may be created during uuencoding.

Data Type

Boolean

ProgressStep Property (NetCode Class)

This property controls the granularity at which the Progress event is fired. Values are 0-100.

Syntax

ANSI (Cross Platform)
int GetProgressStep();
int SetProgressStep(int iProgressStep); Unicode (Windows) INT GetProgressStep();
INT SetProgressStep(INT iProgressStep);
int ipworks_netcode_getprogressstep(void* lpObj);
int ipworks_netcode_setprogressstep(void* lpObj, int iProgressStep);
int GetProgressStep();
int SetProgressStep(int iProgressStep);

Default Value

1

Remarks

This property controls the granularity at which the Progress event is fired. Values are 0-100. If this property is not 0, the Progress event will be fired when 0%, n* ProgressStep and 100% of input data are read.

If this property is 0, the Progress event is disabled.

Data Type

Integer

Config Method (NetCode Class)

Sets or retrieves a configuration setting.

Syntax

ANSI (Cross Platform)
char* Config(const char* lpszConfigurationString);

Unicode (Windows)
LPWSTR Config(LPCWSTR lpszConfigurationString);
char* ipworks_netcode_config(void* lpObj, const char* lpszConfigurationString);
QString Config(const QString& qsConfigurationString);

Remarks

Config is a generic method available in every class. It is used to set and retrieve configuration settings for the class.

These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the class, access to these internal properties is provided through the Config method.

To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).

To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.

Error Handling (C++)

This method returns a String value; after it returns, call the GetLastErrorCode() method to obtain its result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message.

Decode Method (NetCode Class)

This method decodes a string.

Syntax

ANSI (Cross Platform)
int Decode();

Unicode (Windows)
INT Decode();
int ipworks_netcode_decode(void* lpObj);
int Decode();

Remarks

This method decodes according to the Format type. The class will decode the data in the input stream if SetInputStream has been set to a valid stream. If this stream is null, the class will then try to read the data from the file set by the EncodedFile property. If no valid file has been specified, the class will use the EncodedData property.

The resulting decoded data are written to the output stream if one has been set. If not, the component will attempt to write the decoded data to the DecodedFile. If no file was specified, the decoded data may be retrieved through the DecodedData property.

When UUDecoding the created filename will by default be the one specified in the uuencoded data. The FileName property will contain this value. DecodedFile or, if DecodedFile is empty, FileName can be used to override this value.

When YDecoding, the source path and filename is specified in EncodedFile and the destination path and filename in DecodedFile. If the encoded data indicate the name of the original file before decoding, this value will be stored in the FileName property. To decode a multipart message, all parts must be concatenated in order in the source file.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

Encode Method (NetCode Class)

This method encodes the data.

Syntax

ANSI (Cross Platform)
int Encode();

Unicode (Windows)
INT Encode();
int ipworks_netcode_encode(void* lpObj);
int Encode();

Remarks

This method encodes the data according to the Format type. The class will encode the data in the input stream if SetInputStream has been set to a valid stream. If this stream is null, the class will then try to read the data from the file set by the DecodedFile property. If no valid file has been specified, the class will use the DecodedData property.

The resulting encoded data are written to the output stream if one has been set. If not, the component will attempt to write the encoded data to the EncodedFile. If no file was specified, the encoded data may be retrieved through the EncodedData property.

The data are considered binary while uuencoding and Base64 Formats, and text during QuotedPrintable ones.

When uuencoding or yencoding, the filename encoded into the data is taken from the FileName property.

The current version of NetCode does not create message headers. If a MIME standard encoding is used, such as Base64 Encoding or Quoted Printable Encoding, the user should fill the header values appropriately.

If EncodedFile and MaxFileSize is set and the encoded data take more space than MaxFileSize, the data are split over several files. In this case, the user can specify more than one filename by passing them to EncodedFile in the form name?. The filenames should exist as path\file0.ext, path\file1.ext ... Question marks "?" are expanded to numerals starting with 0. NetCode appends the extension ".uue", ".b16", or ".q_p" (depending on the value of Format) to the filename.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

Reset Method (NetCode Class)

Reset the class.

Syntax

ANSI (Cross Platform)
int Reset();

Unicode (Windows)
INT Reset();
int ipworks_netcode_reset(void* lpObj);
int Reset();

Remarks

This method will reset the class's properties to their default values.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

ResetData Method (NetCode Class)

This method resets the values of all data and stream properties.

Syntax

ANSI (Cross Platform)
int ResetData();

Unicode (Windows)
INT ResetData();
int ipworks_netcode_resetdata(void* lpObj);
int ResetData();

Remarks

This method resets the values of all data and stream properties. It is an easy way to reset the class's properties before another call to Encode or Decode. The input and output streams and the data and file properties will all be reset.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

SetInputStream Method (NetCode Class)

This method sets the input stream of data.

Syntax

ANSI (Cross Platform)
int SetInputStream(IPWorksStream* sInputStream);

Unicode (Windows)
INT SetInputStream(IPWorksStream* sInputStream);
int ipworks_netcode_setinputstream(void* lpObj, IPWorksStream* sInputStream);
int SetInputStream(IPWorksStream* sInputStream);

Remarks

Use this method to set the input stream of data for the component to read from. If Encode or Decode is called, and this is not null, the data will be read from this stream when the specified action occurs. You may reset this by calling ResetData.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

SetOutputStream Method (NetCode Class)

This method sets the output stream of data.

Syntax

ANSI (Cross Platform)
int SetOutputStream(IPWorksStream* sOutputStream);

Unicode (Windows)
INT SetOutputStream(IPWorksStream* sOutputStream);
int ipworks_netcode_setoutputstream(void* lpObj, IPWorksStream* sOutputStream);
int SetOutputStream(IPWorksStream* sOutputStream);

Remarks

Use this method to set the output stream of data for the component to write. If Encode or Decode is called, and this is not null, the data will be written to this stream when the specified action occurs. You may reset this by calling ResetData.

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

Error Event (NetCode Class)

Fired when information is available about errors during data delivery.

Syntax

ANSI (Cross Platform)
virtual int FireError(NetCodeErrorEventParams *e);
typedef struct {
int ErrorCode;
const char *Description; int reserved; } NetCodeErrorEventParams;
Unicode (Windows) virtual INT FireError(NetCodeErrorEventParams *e);
typedef struct {
INT ErrorCode;
LPCWSTR Description; INT reserved; } NetCodeErrorEventParams;
#define EID_NETCODE_ERROR 1

virtual INT IPWORKS_CALL FireError(INT &iErrorCode, LPSTR &lpszDescription);
class NetCodeErrorEventParams {
public:
  int ErrorCode();

  const QString &Description();

  int EventRetVal();
  void SetEventRetVal(int iRetVal);
};
// To handle, connect one or more slots to this signal. void Error(NetCodeErrorEventParams *e);
// Or, subclass NetCode and override this emitter function. virtual int FireError(NetCodeErrorEventParams *e) {...}

Remarks

The Error event is fired in case of exceptional conditions during message processing. Normally the class fails with an error.

The ErrorCode parameter contains an error code, and the Description parameter contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the Error Codes section.

Progress Event (NetCode Class)

This event occurs when PercentDone of the input is read.

Syntax

ANSI (Cross Platform)
virtual int FireProgress(NetCodeProgressEventParams *e);
typedef struct {
int PercentDone; int reserved; } NetCodeProgressEventParams;
Unicode (Windows) virtual INT FireProgress(NetCodeProgressEventParams *e);
typedef struct {
INT PercentDone; INT reserved; } NetCodeProgressEventParams;
#define EID_NETCODE_PROGRESS 2

virtual INT IPWORKS_CALL FireProgress(INT &iPercentDone);
class NetCodeProgressEventParams {
public:
  int PercentDone();

  int EventRetVal();
  void SetEventRetVal(int iRetVal);
};
// To handle, connect one or more slots to this signal. void Progress(NetCodeProgressEventParams *e);
// Or, subclass NetCode and override this emitter function. virtual int FireProgress(NetCodeProgressEventParams *e) {...}

Remarks

The ProgressStep property determines how often the event is fired.

IPWorksStream Type

Syntax

IPWorksStream (declared in ipworks.h)

Remarks

The NetCode class includes one or more API members that take a stream object as a parameter. To use such API members, create a concrete class that implements the IPWorksStream interface and pass the NetCode class an instance of that concrete class.

When implementing the IPWorksStream interface's properties and methods, they must behave as described below. If the concrete class's implementation does not behave as expected, undefined behavior may occur.

Properties

CanRead Whether the stream supports reading.

bool CanRead() { return true; }
CanSeek Whether the stream supports seeking.

bool CanSeek() { return true; }
CanWrite Whether the stream supports writing.

bool CanWrite() { return true; }
Length Gets the length of the stream, in bytes.

int64 GetLength() = 0;

Methods

Close Closes the stream, releasing all resources currently allocated for it.

void Close() {}

This method is called automatically when an IPWorksStream object is deleted.

Flush Forces all data held by the stream's buffers to be written out to storage.

int Flush() { return 0; }

Must return 0 if flushing is successful; or -1 if an error occurs or the stream is closed. If the stream does not support writing, this method must do nothing and return 0.

Read Reads a sequence of bytes from the stream and advances the current position within the stream by the number of bytes read.

int Read(void* buffer, int count) = 0;

Buffer specifies the buffer to populate with data from the stream. Count specifies the number of bytes that should be read from the stream.

Must return the total number of bytes read into Buffer; this may be less than Count if that many bytes are not currently available, or 0 if the end of the stream has been reached. Must return -1 if an error occurs, if reading is not supported, or if the stream is closed.

Seek Sets the current position within the stream based on a particular point of origin.

int64 Seek(int64 offset, int seekOrigin) = 0;

Offset specifies the offset in the stream to seek to, relative to SeekOrigin. Valid values for SeekOrigin are:

  • 0: Seek from beginning.
  • 1: Seek from current position.
  • 2: Seek from end.

Must return the new position within the stream; or -1 if an error occurs, if seeking is not supported, or if the stream is closed (however, see note below). If -1 is returned, the current position within the stream must remain unchanged.

Note: If the stream is not closed, it must always be possible to call this method with an Offset of 0 and a SeekOrigin of 1 to obtain the current position within the stream, even if seeking is not otherwise supported.

Write Writes a sequence of bytes to the stream and advances the current position within the stream by the number of bytes written.

int Write(const void* buffer, int count) = 0;

Buffer specifies the buffer with data to write to the stream. Count specifies the number of bytes that should be written to the stream.

Must return the total number of bytes written to the stream; this may be less than Count if that many bytes could not be written. Must return -1 if an error occurs, if writing is not supported, or if the stream is closed.

Config Settings (NetCode Class)

The class accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the class, access to these internal properties is provided through the Config method.

NetCode Config Settings

Base64LineBreak:   Tells the class whether to include line breaks in Base64 encoded content or not.

By default, when encoding to Base64 format, the component will insert line breaks every 76 characters. Setting the Base64LineBreak configuration setting to False will cause these line breaks to be omitted from the Base64 encoded content. The default value is True.

EncodeHash:   Whether the hash value is hex encoded.

This setting determines whether the MD5, SHA1, or SHA256 hash value is hex encoded. When calling Encode, if this setting is True (default), the hash value created will be hex encoded. When set to False, the output will not be hex encoded and will be binary. This is applicable only to the following formats:

  • MD5
  • SHA1
  • SHA256

HMACAlgorithm:   The hash algorithm to use when generating a Hash-based Message Authentication Code (HMAC).

HMACAlgorithm is used to tell the class which hashing algorithm to use to generate the Hash-based Message Authentication Code (HMAC). HMACAlgorithm can be "SHA1" (Secure Hash Algorithm 1), "MD5" (Message Digest 5), or one of the SHA-2 algorithms mentioned next. You may truncate the hash output by specifying the desired number of bits. For instance, "SHA1-96" and "MD5-96" are acceptable.

The component is capable of utilizing the set of HMAC SHA-2 algorithms ("SHA-224", "SHA-256", "SHA-384", and "SHA-512").

The component also supports "RIPEMD160" as an HMAC algorithm.

HMACKey:   A key to use when generating a Hash-based Message Authentication Code (HMAC).

When using the Format fmtHMAC, it may be necessary to supply the class with a key to use when generating the Hash-based Message Authentication Code (HMAC). This key is incorporated into the hashing process to add entropy to the resulting hash code, making the plaintext harder to guess and increasing the message security. You may also set this to a hex value. For instance, 0xAAAAAA is acceptable.

MaxFileSize:   When encoding, controls whether encoded data should be split into several files and gives the maximum allowed size for these files.

Some mailing systems require that the message size should not exceed a certain size. Assigning a nonzero value to MaxFileSize makes the class split the encoded data into several files. FileCnt will contain the number of files created. Please refer to EncodedFile for filename conventions.

The default value for this setting is 0 (no limit).

Note: If a non-zero value is assigned to MaxFileSize, then a multiple filename should also be assigned to EncodedFile (end with question marks "?") so that the class can expand the filenames.

Please refer to the Error Codes section for a complete list of possible errors.

UseExtendedHexBase32:   Specifies whether or not the Extended Hex alphabet is used.

When Format is set to fmtBase32, UseExtendedHexBase32 is used to tell the class whether or not to use the extended hex alphabet. The default value is False.

UseModifiedUTF7:   Specifies whether or not a modified form of UTF-7 for IMAP mailbox naming is used.

When Format is set to fmtUTF7, UseModifiedUTF7 is used to tell the class whether or not to use a modified version of UTF-7 for IMAP mailbox naming. The default value is False.

Base Config Settings

BuildInfo:   Information about the product's build.

When queried, this setting will return a string containing information about the product's build.

CodePage:   The system code page used for Unicode to Multibyte translations.

The default code page is Unicode UTF-8 (65001).

The following is a list of valid code page identifiers:

IdentifierName
037IBM EBCDIC - U.S./Canada
437OEM - United States
500IBM EBCDIC - International
708Arabic - ASMO 708
709Arabic - ASMO 449+, BCON V4
710Arabic - Transparent Arabic
720Arabic - Transparent ASMO
737OEM - Greek (formerly 437G)
775OEM - Baltic
850OEM - Multilingual Latin I
852OEM - Latin II
855OEM - Cyrillic (primarily Russian)
857OEM - Turkish
858OEM - Multilingual Latin I + Euro symbol
860OEM - Portuguese
861OEM - Icelandic
862OEM - Hebrew
863OEM - Canadian-French
864OEM - Arabic
865OEM - Nordic
866OEM - Russian
869OEM - Modern Greek
870IBM EBCDIC - Multilingual/ROECE (Latin-2)
874ANSI/OEM - Thai (same as 28605, ISO 8859-15)
875IBM EBCDIC - Modern Greek
932ANSI/OEM - Japanese, Shift-JIS
936ANSI/OEM - Simplified Chinese (PRC, Singapore)
949ANSI/OEM - Korean (Unified Hangul Code)
950ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC)
1026IBM EBCDIC - Turkish (Latin-5)
1047IBM EBCDIC - Latin 1/Open System
1140IBM EBCDIC - U.S./Canada (037 + Euro symbol)
1141IBM EBCDIC - Germany (20273 + Euro symbol)
1142IBM EBCDIC - Denmark/Norway (20277 + Euro symbol)
1143IBM EBCDIC - Finland/Sweden (20278 + Euro symbol)
1144IBM EBCDIC - Italy (20280 + Euro symbol)
1145IBM EBCDIC - Latin America/Spain (20284 + Euro symbol)
1146IBM EBCDIC - United Kingdom (20285 + Euro symbol)
1147IBM EBCDIC - France (20297 + Euro symbol)
1148IBM EBCDIC - International (500 + Euro symbol)
1149IBM EBCDIC - Icelandic (20871 + Euro symbol)
1200Unicode UCS-2 Little-Endian (BMP of ISO 10646)
1201Unicode UCS-2 Big-Endian
1250ANSI - Central European
1251ANSI - Cyrillic
1252ANSI - Latin I
1253ANSI - Greek
1254ANSI - Turkish
1255ANSI - Hebrew
1256ANSI - Arabic
1257ANSI - Baltic
1258ANSI/OEM - Vietnamese
1361Korean (Johab)
10000MAC - Roman
10001MAC - Japanese
10002MAC - Traditional Chinese (Big5)
10003MAC - Korean
10004MAC - Arabic
10005MAC - Hebrew
10006MAC - Greek I
10007MAC - Cyrillic
10008MAC - Simplified Chinese (GB 2312)
10010MAC - Romania
10017MAC - Ukraine
10021MAC - Thai
10029MAC - Latin II
10079MAC - Icelandic
10081MAC - Turkish
10082MAC - Croatia
12000Unicode UCS-4 Little-Endian
12001Unicode UCS-4 Big-Endian
20000CNS - Taiwan
20001TCA - Taiwan
20002Eten - Taiwan
20003IBM5550 - Taiwan
20004TeleText - Taiwan
20005Wang - Taiwan
20105IA5 IRV International Alphabet No. 5 (7-bit)
20106IA5 German (7-bit)
20107IA5 Swedish (7-bit)
20108IA5 Norwegian (7-bit)
20127US-ASCII (7-bit)
20261T.61
20269ISO 6937 Non-Spacing Accent
20273IBM EBCDIC - Germany
20277IBM EBCDIC - Denmark/Norway
20278IBM EBCDIC - Finland/Sweden
20280IBM EBCDIC - Italy
20284IBM EBCDIC - Latin America/Spain
20285IBM EBCDIC - United Kingdom
20290IBM EBCDIC - Japanese Katakana Extended
20297IBM EBCDIC - France
20420IBM EBCDIC - Arabic
20423IBM EBCDIC - Greek
20424IBM EBCDIC - Hebrew
20833IBM EBCDIC - Korean Extended
20838IBM EBCDIC - Thai
20866Russian - KOI8-R
20871IBM EBCDIC - Icelandic
20880IBM EBCDIC - Cyrillic (Russian)
20905IBM EBCDIC - Turkish
20924IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol)
20932JIS X 0208-1990 & 0121-1990
20936Simplified Chinese (GB2312)
21025IBM EBCDIC - Cyrillic (Serbian, Bulgarian)
21027Extended Alpha Lowercase
21866Ukrainian (KOI8-U)
28591ISO 8859-1 Latin I
28592ISO 8859-2 Central Europe
28593ISO 8859-3 Latin 3
28594ISO 8859-4 Baltic
28595ISO 8859-5 Cyrillic
28596ISO 8859-6 Arabic
28597ISO 8859-7 Greek
28598ISO 8859-8 Hebrew
28599ISO 8859-9 Latin 5
28605ISO 8859-15 Latin 9
29001Europa 3
38598ISO 8859-8 Hebrew
50220ISO 2022 Japanese with no halfwidth Katakana
50221ISO 2022 Japanese with halfwidth Katakana
50222ISO 2022 Japanese JIS X 0201-1989
50225ISO 2022 Korean
50227ISO 2022 Simplified Chinese
50229ISO 2022 Traditional Chinese
50930Japanese (Katakana) Extended
50931US/Canada and Japanese
50933Korean Extended and Korean
50935Simplified Chinese Extended and Simplified Chinese
50936Simplified Chinese
50937US/Canada and Traditional Chinese
50939Japanese (Latin) Extended and Japanese
51932EUC - Japanese
51936EUC - Simplified Chinese
51949EUC - Korean
51950EUC - Traditional Chinese
52936HZ-GB2312 Simplified Chinese
54936Windows XP: GB18030 Simplified Chinese (4 Byte)
57002ISCII Devanagari
57003ISCII Bengali
57004ISCII Tamil
57005ISCII Telugu
57006ISCII Assamese
57007ISCII Oriya
57008ISCII Kannada
57009ISCII Malayalam
57010ISCII Gujarati
57011ISCII Punjabi
65000Unicode UTF-7
65001Unicode UTF-8
The following is a list of valid code page identifiers for Mac OS only:
IdentifierName
1ASCII
2NEXTSTEP
3JapaneseEUC
4UTF8
5ISOLatin1
6Symbol
7NonLossyASCII
8ShiftJIS
9ISOLatin2
10Unicode
11WindowsCP1251
12WindowsCP1252
13WindowsCP1253
14WindowsCP1254
15WindowsCP1250
21ISO2022JP
30MacOSRoman
10UTF16String
0x90000100UTF16BigEndian
0x94000100UTF16LittleEndian
0x8c000100UTF32String
0x98000100UTF32BigEndian
0x9c000100UTF32LittleEndian
65536Proprietary

LicenseInfo:   Information about the current license.

When queried, this setting will return a string containing information about the license this instance of a class is using. It will return the following information:

  • Product: The product the license is for.
  • Product Key: The key the license was generated from.
  • License Source: Where the license was found (e.g., RuntimeLicense, License File).
  • License Type: The type of license installed (e.g., Royalty Free, Single Server).
  • Last Valid Build: The last valid build number for which the license will work.
MaskSensitive:   Whether sensitive data is masked in log messages.

In certain circumstances it may be beneficial to mask sensitive data, like passwords, in log messages. Set this to true to mask sensitive data. The default is true.

This setting only works on these classes: AS3Receiver, AS3Sender, Atom, Client(3DS), FTP, FTPServer, IMAP, OFTPClient, SSHClient, SCP, Server(3DS), Sexec, SFTP, SFTPServer, SSHServer, TCPClient, TCPServer.

ProcessIdleEvents:   Whether the class uses its internal event loop to process events when the main thread is idle.

If set to False, the class will not fire internal idle events. Set this to False to use the class in a background thread on Mac OS. By default, this setting is True.

SelectWaitMillis:   The length of time in milliseconds the class will wait when DoEvents is called if there are no events to process.

If there are no events to process when DoEvents is called, the class will wait for the amount of time specified here before returning. The default value is 20.

UseInternalSecurityAPI:   Whether or not to use the system security libraries or an internal implementation.

When set to false, the class will use the system security libraries by default to perform cryptographic functions where applicable.

Setting this configuration setting to true tells the class to use the internal implementation instead of using the system security libraries.

On Windows, this setting is set to false by default. On Linux/macOS, this setting is set to true by default.

To use the system security libraries for Linux, OpenSSL support must be enabled. For more information on how to enable OpenSSL, please refer to the OpenSSL Notes section.

Trappable Errors (NetCode Class)

Error Handling (C++)

Call the GetLastErrorCode() method to obtain the last called method's result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. Known error codes are listed below. If an error occurs, the GetLastError() method can be called to retrieve the associated error message.

NetCode Errors

1   Short uuencoded file.
2   The closing 'end' was not found (uudecoded file may be too short).
3   Cannot create the file for write (illegal name or disk is write-protected).
4   Cannot open the file for read (does not exist?).
5   Cannot read from file.
6   Cannot write to file (disk full?).
7   Please supply a filename for uuencoded data.
8   File exists and Overwrite was set to False.
9   Space is not sufficient in the output string.
10   The given filenames are insufficient to split all the encoded data.
11   Please supply a filename for the encoded data.
12   Encoded data cannot be written in more than 100 files.
13   Could not write to file. Permission denied.
14   Could not write to file. Disk full.
15   Too many open files. No more file handles are available, so no more files can be opened.
16   The given filename does not exist.
17   There are no more files to read from or write to.
18   The starting 'begin' was not found. Is it uuencoded data?
19   The current format is not supported.
20   The specified stream does not support Available().
21   Format error when YDecoding.
22   No '=yend' found when YDecoding.
23   Escape character found at end of line when YDecoding.
24   CRC check failed when YDecoding (Corrupt data).
25   Output buffer length was not calculated.
26   Invalid character in Base64 data.