Unicode C
Unicode C
Upload to Tumbleweed SecureTransport FTPS Server
See more FTP Examples
Demonstrates how to connect, authenticate, and upload file to a Tumbleweed Secure Transport SSL FTP Server. Instead of providing a login name and password, you pass the string "site-auth" for the username, and an empty string for the password. You must also provide a client-side digital certificate -- as the certificate's credentials and validity are used to authenticate.Chilkat Unicode C Downloads
#include <C_CkFtp2W.h>
#include <C_CkCertStoreW.h>
#include <C_CkJsonObjectW.h>
#include <C_CkCertW.h>
void ChilkatSample(void)
{
BOOL success;
HCkFtp2W ftp;
HCkCertStoreW certStore;
const wchar_t *password;
HCkJsonObjectW jsonCN;
HCkCertW cert;
const wchar_t *localFilename;
const wchar_t *remoteFilename;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
ftp = CkFtp2W_Create();
// This code has been tested with the Tumbleweed server
// at sft.wellsfargo.com
CkFtp2W_putHostname(ftp,L"sft.wellsfargo.com");
// Use these exact strings for the username and password:
CkFtp2W_putUsername(ftp,L"site-auth");
CkFtp2W_putPassword(ftp,L"");
// Establish an AUTH SSL secure channel after connecting.
// Your client-side certificate is used for authentication when
// the SSL channel is established.
CkFtp2W_putAuthSsl(ftp,TRUE);
// The Ssl property is for establishing an implicit SSL connection
// on port 990. Do not set it.
CkFtp2W_putSsl(ftp,FALSE);
// Load a certificate from a .pfx
// A PFX may contain several certs, including the certificates
// in a chain of authority.
certStore = CkCertStoreW_Create();
password = L"***";
// Load the certs from a PFX into an in-memory certificate store:
success = CkCertStoreW_LoadPfxFile(certStore,L"my.pfx",password);
if (success != TRUE) {
wprintf(L"%s\n",CkCertStoreW_lastErrorText(certStore));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
return;
}
// Find the desired certificate.
jsonCN = CkJsonObjectW_Create();
CkJsonObjectW_UpdateString(jsonCN,L"CN",L"cert common name");
cert = CkCertW_Create();
success = CkCertStoreW_FindCert(certStore,jsonCN,cert);
if (success == FALSE) {
wprintf(L"Certificate not found!\n");
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
// Tell the Chilkat FTP2 component to use the client-side
// cert for the SSL connection:
success = CkFtp2W_SetSslClientCert(ftp,cert);
// Connect and authenticate with the FTP server.
success = CkFtp2W_Connect(ftp);
if (success != TRUE) {
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
else {
// LastErrorText contains information even when
// successful. This allows you to visually verify
// that the secure connection actually occurred.
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
}
wprintf(L"Secure FTP Channel Established!\n");
// Change to the remote directory where the file will be
// uploaded. If your file is to be uploaded to the FTP user
// account's home directory, this is not necessary.
success = CkFtp2W_ChangeRemoteDir(ftp,L"someSubDir");
if (success != TRUE) {
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
// You may include an absolute or relative path with the
// local filename. If no path is included, the file should
// be present in the current working directory of the calling
// process.
localFilename = L"someFile.dat";
remoteFilename = L"someFile.dat";
// Upload the file.
success = CkFtp2W_PutFile(ftp,localFilename,remoteFilename);
if (success != TRUE) {
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
success = CkFtp2W_Disconnect(ftp);
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
}