<< Back
// FVSDK_Session.h : header file FTP Voyager Software Development Kit session information
//
// Copyright © 1997-2008 - Rhino Software, Inc.
// FTP Voyager® is a registered trademark of Rhino Software, Inc.
// http://www.RhinoSoft.com/
//
// Author:  Mark P. Peterson
// Date:    August 19, 2005
//
// You are free to use/modify this code but leave this header intact.
// FTP Voyager, the FTP Voyager Software Development Kit, and FtpTree ActiveX
// Control are not public domain.  Any registration IDs or non-public domain
// software from Rhino Software, Inc. remains copyrighted.  For more information
// refer to the license agreement distributed with the FTP Voyager SDK.
//
// If you decide to use the FTP Voyager Software Development Kit, or FtpTree
// ActiveX control, you must first purchase a license.  For more information
// visit http://www.RhinoSoft.com/
//------------------------------------------------------------------------------

// prevent multiple inclusions of this file
#ifndef _FVSDK_Session_HEADER
#define _FVSDK_Session_HEADER

#include "FVSDK_ErrorCodes.h"

/////////////////////////////////////////////////////////////////////////////
// pack to one byte boundaries
#pragma pack(push)
#pragma pack(1)

/////////////////////////////////////////////////////////////////////////////
// forward declarations
typedef struct FVSDK_TransferStatusStruct FVSDK_TransferStatus;

/////////////////////////////////////////////////////////////////////////////
// version numbers
const UINT      FVSDK_SESS_VERSION_1            = 1;
const UINT      FVSDK_SESS_VERSION_2            = 2;

// the current session structure version
#define FVSDK_SESSION_CURRENT_VERSION           FVSDK_SESS_VERSION_2

/////////////////////////////////////////////////////////////////////////////
// typedefs
typedef WORD    FVSDK_SESSION_ID;
typedef void*   FVSDK_CALLBACK_DATA;

/////////////////////////////////////////////////////////////////////////////
// function typedefs
// log callback
typedef void (CALLBACK* FVSDK_LOG_TEXT_FUNC)    (FVSDK_CALLBACK_DATA pvData, UINT nType, LPCTSTR pszText);
// password callbacks
typedef BOOL (CALLBACK* FVSDK_ASKPASS_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszBuffer, int nBufferSize);
typedef BOOL (CALLBACK* FVSDK_ASKPASSC_FUNC)    (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszBuffer, int nBufferSize);
typedef void (CALLBACK* FVSDK_PASSCHG_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPassword);
// file transfer callbacks
typedef void (CALLBACK* FVSDK_FLUP_REN_FUNC)    (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszOldFileName, LPCTSTR pszNewFileName);
typedef void (CALLBACK* FVSDK_FLUP_FUNC)        (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszSourcePath, LPCTSTR pszDestPath);
typedef void (CALLBACK* FVSDK_FLDOWN_FUNC)      (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszSourcePath, LPCTSTR pszDestPath);
typedef void (CALLBACK* FVSDK_FLDNERR_FUNC)     (FVSDK_CALLBACK_DATA pvData, long nErr, long nCause, LPCTSTR pszError, LPCTSTR pszRemotePath, LPCTSTR pszDestFileName, LPCTSTR pszExtraInfo);
typedef void (CALLBACK* FVSDK_FLUPERR_FUNC)     (FVSDK_CALLBACK_DATA pvData, long nErr, long nCause, LPCTSTR pszError, LPCTSTR pszRemotePath, LPCTSTR pszLocalPath);
// creation / deletion / change callbacks
typedef void (CALLBACK* FVSDK_LCDIRCR_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
typedef void (CALLBACK* FVSDK_LCDIRDL_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
typedef void (CALLBACK* FVSDK_LCFLCHG_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
typedef void (CALLBACK* FVSDK_RMDIRDEL_FUNC)    (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
typedef void (CALLBACK* FVSDK_RMDIRCR_FUNC)     (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
typedef void (CALLBACK* FVSDK_RMFILEDL_FUNC)    (FVSDK_CALLBACK_DATA pvData, LPCTSTR pszPath);
// help callback
typedef void (CALLBACK* FVSDK_HELP_FUNC)        (FVSDK_CALLBACK_DATA pvData, UINT nSource);
// transfer status callbacks
typedef void (CALLBACK* FVSDK_TRANSTAT_FUNC)    (FVSDK_CALLBACK_DATA pvData, UINT nStatus, FVSDK_TransferStatus* pStatus);

/////////////////////////////////////////////////////////////////////////////
// constants
/*** FVSDK_Session.nAutoUpload Constants ***/
const USHORT    FVSDK_AUTO_UPLOAD_ASK                       = 0;    // ask the user to upload a changed file while using FVSDK_RemoteEdit() or FVSDK_RemoteView()
const USHORT    FVSDK_AUTO_UPLOAD_AUTOMATIC                 = 1;    // don't ask the user to upload a changed file while using FVSDK_RemoteEdit() or FVSDK_RemoteView(), upload it if it's changed
const USHORT    FVSDK_AUTO_UPLOAD_DISABLED                  = 2;    // don't do anything using using FVSDK_RemoteEdit() or FVSDK_RemoteView() after the user completes his work
/*** END FVSDK_Session.nAutoUpload ***/

/*** FVSDK_Session.nPasswordSecurityMode Constants ***/
const USHORT    FVSDK_PASSWORD_REGULAR                      = 0;    // use only regular passwords
const USHORT    FVSDK_PASSWORD_MD4                          = 1;    // use only MD4 S/Key passwords, when requested by server
const USHORT    FVSDK_PASSWORD_MD5                          = 2;    // use MD4 or MD5 S/Key passwords, when requested by server
/*** END FVSDK_Session.nPasswordSecurityMode ***/

/*** FVSDK_Session.nSecurityType Constants ***/
const USHORT    FVSDK_ST_REGULAR                            = 0;    // regular, clear text FTP
const USHORT    FVSDK_ST_SSL_EXPLICIT                       = 1;    // start with regular FTP, send AUTH SSL to go to SSL mode after connecting
const USHORT    FVSDK_ST_SSL_IMPLICIT                       = 2;    // start with SSL, usually on port 990
const USHORT    FVSDK_ST_TLS_EXPLICIT                       = 3;    // start with regular FTP, send AUTH TLS to go to TLS mode after connecting
const USHORT    FVSDK_ST_SSH                                = 4;    // SFTP using SSH2, contact RhinoSoft.com for more information
/*** END FVSDK_Session.nSecurityType ***/

/*** FVSDK_Session.nCompressionMode Constants ***/
const USHORT    FVSDK_DSCMP_DISABLED                        = 0;    // compression is off
const USHORT    FVSDK_DSCMP_AUTOMATIC                       = 1;    // automatically determine if compression can be used
const USHORT    FVSDK_DSCMP_ZLIB                            = 2;    // force zLib compression
/*** END FVSDK_Session.nCompressionMode ***/

/*** FVSDK_Session.nAccessType Constants ***/
const UINT      FVSDK_AT_SITE                               = 0;    // use SITE site
const UINT      FVSDK_AT_DIRECT                             = 1;    // direct to net
const UINT      FVSDK_AT_USER_AFTER_LOGON                   = 2;    // USER, PASSWORD to proxy, then USER=user@site to site
const UINT      FVSDK_AT_OPEN                               = 3;    // use OPEN site
const UINT      FVSDK_AT_SOCKS4                             = 4;    // SOCKS4 Proxy Server
const UINT      FVSDK_AT_SOCKS5                             = 5;    // SOCKS5 Proxy Server
const UINT      FVSDK_AT_SOCKS4A                            = 6;    // SOCKS4a Proxy Server
const UINT      FVSDK_AT_FIREUSERID_AT_SITE_PORT            = 7;    // USER fireID@remoteHost
const UINT      FVSDK_AT_HTTP                               = 8;    // HTTP Proxy Server
// intentional gap
const UINT      FVSDK_AT_USERID_AT_SITE                     = 10;   // USER userid@site
const UINT      FVSDK_AT_USERID_AT_SITE_COLON_PORT          = 11;   // USER userid@site:21
const UINT      FVSDK_AT_USERID_AT_SITE_SPACE_PORT          = 12;   // USER userid@site 21
const UINT      FVSDK_AT_USERID_AT_SITE_SPACE_PROXY_NAME    = 13;   // USER userid@site proxy_name_or_IP
/*** END FVSDK_Session.nAccessType ***/

/*** pfnLogText(nType) Constants ***/
const UINT      FVSDK_COMMAND_LOG_TYPE                      = 0;    // command sent to the FTP server
const UINT      FVSDK_RESPONSE_LOG_TYPE                     = 1;    // response received from the server in response to a command
const UINT      FVSDK_UNSOLICITED_LOG_TYPE                  = 2;    // unsolicited response received from server, not a response to a command
const UINT      FVSDK_STATUS_LOG_TYPE                       = 3;    // informational status generated by FTP Voyager SDK
const UINT      FVSDK_ERROR_LOG_TYPE                        = 4;    // informational error message generated by FTP Voyager SDK
/*** END pfnLogText(nType) ***/

/*** pfnHelpButtonPressed(nSource) Constants ***/
const UINT      FVSDK_HELP_BUTTON_FIND_FILES                = 0;    // the find files help button has been pressed
const UINT      FVSDK_HELP_BUTTON_SYNC_FOLDERS              = 1;    // the synchronize folders help button has been pressed
const UINT      FVSDK_HELP_BUTTON_FILE_EDIT                 = 2;    // the online edit dialog help button has been pressed
/*** END pfnHelpButtonPressed(nSource) ***/

/*** FVSDK_Session.nAdjustServerTimeGMT Constants ***/
const UINT      FVSDK_GMT_ADJUST_AUTO                       = 0;    // automatically adjust for the server's time zone when appropriate
const UINT      FVSDK_GMT_ADJUST_NONE                       = 1;    // don't adjust for the server's time zone
const UINT      FVSDK_GMT_ADJUST_MINUTE_OFFSET              = 2;    // use nMinuteOffsetGMT to adjust the time offset on the server
/*** END FVSDK_Session.nAdjustServerTimeGMT ***/

/////////////////////////////////////////////////////////////////////////////
// macros
#define DEFAULT_TEXT_FILES          ".txt,.text,.htm,.html,.c,.cpp,.h,.hpp,.mak,.cgi,.pl,.pm,.shtml,.phtml,.css,.php,.inc,.1st,.asp,.bat,.bash,.cfm,.dhtml,.xml,.mak,.pinerc,.pl,.pm,.qmail,.screenrc"

/////////////////////////////////////////////////////////////////////////////
// FVSDK_Session structure

/*** FVSDK_Session Structure Description ***

The FVSDK_Session structure is used by the FTP Voyager Software Development Kit to keep
track of individual connections to FTP servers and to provide a convenient way of configuring
and setting options for a connection.

In most implementations, FVSDK_NewSession() should be used to allocate and initialize the
structure variables.  The pointer to the allocated structure is then passed to all connection
oriented SDK functions.  When finished with the structure, call FVSDK_FreeSession() to release
the allocated memory.

When allocating an FVSDK_Session object directly within your application use, FVSDK_InitSession()
and FVSDK_CloseSession() to initialize and close the session, respectively.

In order to ensure the data integrity of the FVSDK_Session structure, the nSize value must be
set to the number of bytes in the structure and the nVersion value must be set to FVSDK_SESSION_CURRENT_VERSION.
If these values don't match the expected values, the FTP Voyager SDK returns an error value as
found in FVSDK_ErrorCodes.h.

Only one instance of an FVSDK_Session object can be used per connection.

The default value for each member element is found in square brackets [] after the description.

*** End Description ***/

/*** BEGIN FVSDK_Session ***/
typedef struct FVSDK_SessionStruct
{
    // administrative variables
    UINT                nSize;                              // size, in bytes, of this structure [no default]
    UINT                nVersion;                           // version number of this structure, use the largest version number defined in FVSDK_Session.h, [must be FVSDK_SESSION_CURRENT_VERSION]
    FVSDK_SESSION_ID    nSessionID;                         // the unique session number used by the DLL [no default]
    FVSDK_ERROR_CODE    fvecLastError;                      // the last error number [FVSDK_OK]

    /////////////////////////////////////////////////////////////////////////////
    // FV site profile configuration values
    // attributes
    HWND                hwndMainWnd;                        // can be NULL, but should be a handle to the application's main window when using user interface options [NULL]
    LPCTSTR             pszAppName;                         // the name of the application using the FVSDK, used in certain dialog box titles [NULL]
    LPCTSTR             pszAppVersion;                      // the version number of your application, used by FVSDK when sending servers the CLNT command [NULL]
    BOOL                bPasv;                              // use PASV mode (instead of PORT mode) [FALSE]
    LPCTSTR             pszTempPath;                        // NULL to use the Windows defined temporary directory, otherwise the full path to a local directory
    BOOL                bMaintainDownloadFileTime;          // maintain the dates and times of downloaded files [TRUE]
    BOOL                bMaintainUploadFileTime;            // maintain the dates and times of uploaded files, will NOT work with all servers [TRUE]
    BOOL                bConvertFutureFiles;                // convert files dated in the future to the correct year; For example, UNIX usually doesn't include the year [TRUE]
    BOOL                bUseLocalTimeForAnonymous;          // convert dates and times to local time assuming the server dates and times are in GMT (when connecting to UNIX style servers). [TRUE]
    BOOL                bConvertFileNamesToUpper;           // convert all files names to upper case when uploading [FALSE]
    BOOL                bConvertFileNamesToLower;           // convert all file names to lower case when uploading [FALSE]
    BOOL                bConvertUpperToLower;               // convert all upper case file names to lower case when uploading [FALSE]
    BOOL                bConvertFileNamesToUFC;             // converts the first character to upper case when uploading [FALSE]
    BOOL                bThoroughLinkResolution;            // use thorough UNIX link resolution, attempting CWD commands on UNIX links to determine if the item is a file or directory [TRUE]
    BOOL                bAsciiMode;                         // use ASCII mode [FALSE]
    BOOL                bAutoASCII;                         // use Automatic ASCII mode, pszTextFileExtensions must be set [FALSE]
    BOOL                bUseMVSUNIXDirListings;             // use UNIX style listings when connected to an MVS server [FALSE]
    BOOL                bChangeLocalDate;                   // change the local file's date and time to the uploaded file's date and time when unable to maintain the uploaded file's date and time [FALSE]
    USHORT              nAutoUpload;                        // automatic upload setting to use when using the FVSDK_RemoteEdit() function [FVSDK_AUTO_UPLOAD_ASK]
    USHORT              nPasswordSecurityMode;              // password security mode to use, if requested by server: none, MD4, or MD5; both MD4 and MD5 are automatic if needed.  Values are defined in FVSDK_Session.h [FVSDK_PASSWORD_MD5]
    USHORT              nSecurityType;                      // No Security, SSL Explicit (AUTH SSL command is sent), SSL Implicit, TLS Explicit (AUTH TLS command is sent), or SFTP Using SSH2; constants found in FVSDK_Session.h [FVSDK_ST_REGULAR]
    BOOL                bConnectionSaver;                   // enable blocking on file transfers, uses a single connection instead of two to transfer a file [TRUE]
    BOOL                bSupportsResume;                    // FALSE to disable checking for resume support on the server [TRUE]
    BOOL                bSupportsFEAT;                      // FALSE to disable the use of the FEAT command; some servers disconnect when an unrecognized command is sent [TRUE]
    BOOL                bUseSimpleListings;                 // force use of NLST instead of LIST or MLST / MLSD [FALSE]
    BOOL                bClearCommandChannel;               // send the CCC command after starting SSL; the data channel remains encrypted [FALSE]
    BOOL                bClearDataChannel;                  // use a clear, unencrypted data channel when using SSL [FALSE]
    BOOL                bUseMLST;                           // use MLST / MLSD instead of LIST when the server supports these commands [TRUE]
    BOOL                bDisplayErrors;                     // display transfer errors that may occur [FALSE]
    BOOL                bLoginOnly;                         // login without attempting to discover information about the server.  When TRUE, FEAT, SYST, CWD, PWD, etc. will not be sent to the server after connecting.  Setting to TRUE will cause the bSupportsResume and bSupportsFEAT values to be ignored. [FALSE]

    // filtering options
    LPCTSTR             pszInclFilter;                      // NULL for none, set to a comma separated string for include filtering (i.e., "*.exe,*.txt,*.htm,*.html") [NULL]
    LPCTSTR             pszExclFilter;                      // NULL for none, set to a comma separated string for exclude filtering (i.e., "_vti*,*.tmp,*.temp,*.bin") [NULL]
    BOOL                bFilterIncludeFolders;              // include folders when applying filters [TRUE]
    BOOL                bFilterApplyToUploads;              // apply filters to uploads [TRUE]
    BOOL                bFilterApplyToDownloads;            // apply filters to downloads [TRUE]
    BOOL                bFilterApplyToServerToServer;       // apply filters to server-to-server transfers [TRUE]
    BOOL                bFilterApplyToSyncFolders;          // apply filters to Synchronize Folders [TRUE]

    // get and put file tries
    UINT                nGetFileTries;                      // the number of attempts to make when downloading a file [1]
    UINT                nPutFileTries;                      // the number of attempts to make when uploading a file [1]

    // XCRC
    BOOL                bCheckXCRC;                         // use the XCRC command to verify the contents of a transferred file [TRUE]

    // transfer rate
    BOOL                bLimitUploadRate;                   // limit the upload rate to dUploadRate [FALSE]
    BOOL                bLimitDownloadRate;                 // limit the download rate to dDownloadRate [FALSE]
    double              dUploadRate;                        // limit upload transfers to this value (KB/sec) [10]
    double              dDownloadRate;                      // limit download transfers to this value (KB/sec) [10]

    // compression
    USHORT              nCompressionMode;                   // compression mode, as found in FVSDK_Session.h [FVSDK_DSCMP_AUTOMATIC]
    USHORT              nZlibCompressionLevel;              // 1 - 9.  1 is least compression and lowest CPU cycles; 9 is the highest compression but more CPU cycles [6]

    // auto rename settings
    BOOL                bUploadAutoRename;                  // automatically rename files matching ppszUploadRenames on upload [FALSE]
    LPCTSTR*            ppszUploadRenames;                  // NULL terminated array of strings for auto rename on upload [NULL]
    BOOL                bDownloadAutoRename;                // automatically rename files matching ppszDownloadRenames on download [FALSE]
    LPCTSTR*            ppszDownloadRenames;                // NULL terminated array of strings for auto rename on download [NULL]

    // cleanup temp files
    BOOL                bCleanupTempFiles;                  // delete files downloaded to temporary directory when finished editing [TRUE]

    // set the list parameter
    LPCTSTR             pszListParameter;                   // extra parameters to use with LIST command, such as "-al" and "-alT" [NULL]

    // GMT conversion
    int                 nMinuteOffsetGMT;                   // minutes to offset from GMT [0]
    UINT                nAdjustServerTimeGMT;               // automatically adjust dates and times from GMT, see constants found in FVSDK_Session.h for possible values [FVSDK_GMT_ADJUST_AUTO]

    // VMS and MVS special flags
    BOOL                bSkipVMSVersions;                   // remove VMS version numbers from the end of file names [TRUE]
    BOOL                bStripMVSExtensions;                // remove MVS extensions from file names [TRUE]

    // profile name, used by FTP Voyager for fully qualified site profiles
    LPCTSTR             pszProfileName;                     // NULL terminated string representing a "profile name" like FTP Voyager uses for Site Profiles, this is descriptive only [NULL]

    // set the connection settings
    DWORD               dwConnectionTimeout;                // time, in milliseconds, to wait before timing out a connection attempt [60 * 1000]
    DWORD               dwConnectionRetries;                // the number of times to reconnect upon a command failure [2]
    UINT                nConnectionAttempts;                // the number of times to retry the initial connection [3]
    DWORD               dwReceiveTimeout;                   // time, in milliseconds, to wait on a request to receive data before cancelling the request [60 * 1000]
    DWORD               dwSendTimeout;                      // time, in milliseconds, to wait on a request to send data before cancelling the request [60 * 1000]
    BOOL                bKeepAlive;                         // enable keep alive functionality [TRUE]
    DWORD               dwKeepAliveIdleTime;                // time, in seconds, between issuing keep alive commands [30]
    DWORD               dwConnectionDelay;                  // time, in milliseconds, to wait between reconnect attempts (connection throttling) [5 * 1000]

    // transfer dialog and animations played in pop-up transfer dialogs
    BOOL                bShowTransferDialogs;               // show pop-up transfer dialogs while transferring files [FALSE]
    BOOL                bShowTransferAnimations;            // enable transfer animations [TRUE]
    LPCTSTR             pszSingleUploadAnimationFile;       // NULL for none, or a pointer to a string containing the full path to the .AVI file [NULL]
    LPCTSTR             pszSingleDownloadAnimationFile;     // NULL for none, or a pointer to a string containing the full path to the .AVI file [NULL]
    LPCTSTR             pszMultipleUploadAnimationFile;     // NULL for none, or a pointer to a string containing the full path to the .AVI file [NULL]
    LPCTSTR             pszMultipleDownloadAnimationFile;   // NULL for none, or a pointer to a string containing the full path to the .AVI file [NULL]

    // WAV files to play for connection and transfer completion, must be NULL or the full path to the .WAV file
    LPCTSTR             pszConnectSoundFile;                // NULL for none, full path name to a .WAV file to play when done connecting to a site [NULL]
    LPCTSTR             pszTransferCompleteSoundFile;       // NULL for none, full path name to a .WAV file to play when done transferring a file [NULL]

    LPCTSTR             pszTextFileExtensions;              // NULL for none, comma separated string of text file extensions used for AUTO ASCII mode, see defaults found in FVSDK_Session.h [DEFAULT_TEXT_FILES]

    // access type
    UINT                nAccessType;                        // proxy server to use for connecting, see nAccessType constants found in FVSDK_Session.h [FVSDK_AT_DIRECT]
    LPCTSTR             pszProxyName;                       // pointer to the proxy name or IP address, must resolve to an IP address [NULL]
    LPCTSTR             pszProxyUserID;                     // NULL if no user ID is required by the proxy, otherwise a string containing the proxy server user ID [NULL]
    UINT                nProxyPort;                         // the proxy server port number, defaults: SOCKS is 1080, user@... is 21, etc. [21]
    LPCTSTR             pszProxyPassword;                   // NULL if no password is required by the proxy, otherwise a string containing the proxy server password [NULL]
    char                chUserAtDelim;                      // usually '@', representing the user @ proxy server type ['@']

    // confirmations
    BOOL                bConfirmUploadOverwrite;            // enable upload confirmation messages when overwriting an existing file on the server [TRUE]
    BOOL                bConfirmDownloadOverwrite;          // enable download confirmation messages when overwriting an existing local file [TRUE]
    BOOL                bConfirmAutoUploadOverwrite;        // enable upload confirmation messages when overwriting a file when automatically uploading a file using online editing [TRUE]
    BOOL                bConfirmFileDelete;                 // enable confirmation messages when attempting to delete a file [TRUE]
    BOOL                bConfirmFolderDelete;               // enable confirmation messages when attempting to delete a folder and its contents [TRUE]
    BOOL                bConfirmFolderShortCutDelete;       // enable confirmation messages when attempting to delete a folder short cut [TRUE]
    BOOL                bUploadNewerOnly;                   // upload newer local files only (i.e., when uploading in batch) [FALSE]
    BOOL                bDownloadNewerOnly;                 // download newer remote files only (i.e., when downloading in batch) [FALSE]
    BOOL                bUsePwdForKeepAlive;                // use PWD in addition to NOOP when issuing keep alive commands [FALSE]

    // login information
    LPCTSTR             pszServer;                          // either a resolvable server name or IP address [NULL]
    UINT                nPort;                              // the port number of the server, normally 21 for standard FTP, 990 for Implicit SSL, 22 for SFTP using SSH2 [21]
    LPCTSTR             pszUserID;                          // user ID to use when logging in, NULL for none [anonymous]
    LPCTSTR             pszPassword;                        // password to use when logging in, NULL for none [NULL]
    LPCTSTR             pszDefaultDirectory;                // the default "initial" directory, NULL for none [NULL]
    LPCTSTR             pszAccount;                         // NULL for none, string containing an account name for login to a server [NULL]

    // anonymous password
    LPCTSTR             pszAnonymousPassword;               // NULL for the default, or a string containing a password to use when logging in anonymously [NULL]

    // show raw directory listings as part of the log?
    BOOL                bShowRawListings;                   // return raw directory listings with the server's response [FALSE]

    // SSL settings
    LPCTSTR             pszSSLCertPath;                     // NULL for none, or the full path to the certificate file [NULL]
    LPCTSTR             pszSSLPrivateKeyPath;               // NULL for none, or the full path to the private key file [NULL]
    LPCTSTR             pszSSLCertPassword;                 // NULL for none, or the specified certificate's password [NULL]

    // SSH settings, contact RhinoSoft.com for SSH support
    BOOL                bSSHUsePasswordAuth;                // use password authentication with SSH [FALSE]
    BOOL                bSSHUsePublicKeyAuth;               // use public key authentication with SSH [FALSE]
    BOOL                bSSHUseCompression;                 // use compression with SSH [TRUE]
    LPCTSTR             pszSSHPrivateKeyPassword;           // NULL for none, or the password for the private key [NULL]
    LPCTSTR             pszSSHPrivateKeyFile;               // NULL for none, or the path to the private key file [NULL]

    // port ranges
    BOOL                bUsePortRange;                      // use only the ports starting with dwPortRangeStart through dwPortRangeEnd for PORT commands [FALSE]
    DWORD               dwPortRangeStart;                   // when bUsePortRange is TRUE, the starting port range to use [2000]
    DWORD               dwPortRangeEnd;                     // when bUsePortRange is TRUE, the starting port range to use [2050]
    LPCTSTR             pszPublicIPName;                    // NULL for none, or the public IP address or domain name to use when providing the IP address with the PORT command [NULL]

    // Dial on Demand (DOD)
    LPCTSTR             pszDodEntry;                        // the DOD entry to use when dialing [NULL]
    LPCTSTR             pszDodUserID;                       // the user ID to use when dialing [NULL]
    LPCTSTR             pszDodPassword;                     // the password to use when dialing [NULL]
    LPCTSTR             pszDodDomain;                       // the NT domain to connect to when dialing, NULL for none [NULL]
    UINT                nDodTries;                          // the number of times to try to successfully connect using DOD [1]
    LPCTSTR             pszDodCallBackNumber;               // the phone number to use for callbacks [NULL]

    // FTP Voyager Add-On support
    BOOL                bUseAddOns;                         // use the add-ons defined in ppszAddOns [FALSE]
    LPCTSTR*            ppszAddOns;                         // NULL terminated array of strings (full paths to an add-on DLL) [NULL]

    // The following are callback function pointers and their associated
    // data pointer that is passed back to the callback function.
    // The data pointer is used to help identify the context of the
    // callback.  The data pointer can be a pointer or other data
    // that can help identify the session making the call.

    // log information callback functions
    FVSDK_LOG_TEXT_FUNC pfnLogText;                         // callback function to use for logging commands, responses, status, and errors; see types listed in FVSDK_Session.h 
    FVSDK_CALLBACK_DATA pvLogTextData;

    // password callbacks
    FVSDK_ASKPASS_FUNC  pfnAskPassword;                     // callback function when server asks for a password; return TRUE and set pszBuffer to the password, FALSE to terminate the connection
    FVSDK_CALLBACK_DATA pvAskPasswordData;
    FVSDK_ASKPASSC_FUNC pfnAskChangePassword;               // callback function when server asks for a password to be changed; return TRUE and set pszBuffer to the new password, FALSE to terminate the connection
    FVSDK_CALLBACK_DATA pvAskChangePasswordData;
    FVSDK_PASSCHG_FUNC  pfnPasswordChanged;                 // callback function when the password has been changed for the user ID on the server
    FVSDK_CALLBACK_DATA pvPasswordChangedData;

    // file transfer callbacks
    FVSDK_FLUP_REN_FUNC pfnUploadFileRename;                // callback function used when a file has been renamed after upload; the original and new file names are passed as paramters
    FVSDK_CALLBACK_DATA pvUploadFileRenameData;
    FVSDK_FLUP_FUNC     pfnFileUploaded;                    // callback function used when a file has been uploaded using FVSDK_Upload(); both the source and destination paths are the parameters
    FVSDK_CALLBACK_DATA pvFileUploadedData;
    FVSDK_FLDOWN_FUNC   pfnFileDownloaded;                  // callback function used when a file has been downloaded using FVSDK_Download(); both the source and destination paths are the parameters
    FVSDK_CALLBACK_DATA pvFileDownloadedData;
    FVSDK_FLDNERR_FUNC  pfnDownloadError;                   // callback function used when a download error occurs using FVSDK_Download(); errors defined in FtpTreeErrors.h
    FVSDK_CALLBACK_DATA pvDownloadErrorData;
    FVSDK_FLUPERR_FUNC  pfnUploadError;                     // callback function used when an upload error occurs using FVSDK_Upload(); errors defined in FtpTreeErrors.h
    FVSDK_CALLBACK_DATA pvUploadErrorData;

    // creation / deletion / change callbacks
    FVSDK_LCDIRCR_FUNC  pfnLocalDirCreated;                 // callback function used when a local directory has been created
    FVSDK_CALLBACK_DATA pvLocalDirCreatedData;
    FVSDK_LCDIRDL_FUNC  pfnLocalDeleted;                    // callback function used when a local file or directory is deleted
    FVSDK_CALLBACK_DATA pvLocalDeletedData;
    FVSDK_LCFLCHG_FUNC  pfnLocalFileChanged;                // callback function used when a local file is changed
    FVSDK_CALLBACK_DATA pvLocalFileChangedData;
    FVSDK_RMDIRCR_FUNC  pfnRemoteDirectoryCreated;          // callback function used when a remote directory is created; the parameter is the full path to the remote directory
    FVSDK_CALLBACK_DATA pvRemoteDirectoryCreatedData;
    FVSDK_RMDIRDEL_FUNC pfnRemoteDirectoryDeleted;          // callback function used when a remote directory is deleted; the parameter is the full path to the remote directory
    FVSDK_CALLBACK_DATA pvRemoteDirectoryDeletedData;
    FVSDK_RMFILEDL_FUNC pfnRemoteFileDeleted;               // callback function used when a remote file is deleted; the parameter is the full path to the remote file
    FVSDK_CALLBACK_DATA pvRemoteFileDeletedData;

    // help callbacks
    FVSDK_HELP_FUNC     pfnHelpButtonPressed;               // callback function used when the user presses the help button in an FVSDK dialog (Sync Folders, Find Files, or Online Edit)
    FVSDK_CALLBACK_DATA pvHelpButtonPressedData;

    // transfer status callback
    FVSDK_TRANSTAT_FUNC pfnNotifyTransferStatus;            // callback function used when the transfer status changes; see FVSDK_TransferStatus.h for more information
    FVSDK_CALLBACK_DATA pvNotifyTransferStatusData;

} FVSDK_Session;
/*** END FVSDK_Session ***/

// restore structure packing
#pragma pack(pop)

/////////////////////////////////////////////////////////////////////////////
#endif