I'm acutally using this btw. Nice work!
You got some typos in your plugin. (Declaring the UploadFile native without the underscore and missing a ! before FileExists(remotetargets.cfg...)
It's working fine for the binary data i'm using it for even and especially on mapchanges.
Adding those options in CurlUploadFile
curl_easy_setopt_int(hCurl, CURLOPT_FTP_CREATE_MISSING_DIRS, CURLFTP_CREATE_DIR);
curl_easy_setopt_int(hCurl, CURLOPT_USE_SSL, CURLUSESSL_TRY);
Supporting a "any:data" parameter in the UploadFile native which just gets added to the hTrie_UploadEntry trie on call and passed to the callback forward.
And that +1 in your getFileBasename function seems out of place. Shouldn't that be inside the ?