As the Title suggests, this is an API that allows to transmit Files and even a file-tree from the ccFTP-Share. It works with a basic Client-Server System.
Each Revision is not compatible with other Revisions. For example sending a ServerVer request from a Rev3 client to a Rev2 Server causes the Server to reply with nsu (but appears as Rev2 on the Client), please note that if the Server runs in return mode the second var will be nil! Yet I'll try to make it very easy for developers to switch to a newer API Revision.

At the moment the API is very basic. But it has some good things with it: for example it is very simple to implement and use it.
Even though it's very basic, it still rocks AES256 encryption for Data transmission.
I'm already thinking about how to implement things like remote User managment.

Well enought talking lets get to the API itself. It is one API for both Client and Server. Here are the functions with a brief description on what they do:
Spoiler

-- Functions for Server

ccftp.runServer(hostname, [disable-autoloop], [FTP-share], [account-directory]) -- runs the FTP-Server with the Hostname 'hostname'; WARNING! Do not set / as FTP-Share! Bad minded people could use this to crash the FTP-Server
	 if disable-autoloop is set to true, it will return 5 vars: first tells you if the request was successfull, second tells you who sent the request, third tells you with which account the request was sent, fourth tells you what was requested, the last one tells you additional args on success and error code when not
	 if no modem is attached it returns nMa; if no hostname is specified it returns nHn

ccftp.getRunningHost()
	 returns true and currently running host if there is one
	 returns just false if there is no currently running host

ccftp.closeServer()
	 returns true if there was still a running host which is now disabled
	 returns false if there is not any running host on the system

ccftp.createUser(Username, Password, [account-directory]) -- creates a User with the Name 'Username' and the Password 'Password'
	 returns on success true
	 returns on fail: nUsrN (no UserName), nUsrP (no Password), UsrE (User already exists)

ccftp.renameUser(oldUsername, newUsername, Password, [account-directory]) -- renames User 'oldUsername' to 'newUsername'; Password is needed for securety
	 returns on success true
	 returns on fail: noUsrN (no oldUserName), nnUsrN (no newUserName), nUsrP (no Password), nsUsr (oldUser does not exist), nUsrE (new User does exist), pww (password wrong)

ccftp.changeUserPass(Username, oldPassword, newPassword, [account-directory]) -- changes the Password from 'Username'
	 returns on success true
	 returns on fail: nUsrN (no UserName), noUsrP (no old password), nnUsrP (no new password), nsUsr (User does not exist), pww (password wrong)

ccftp.removeUser(Username, Password, [account-directory]) -- delete the specified User
	 returns on success true
	 returns on fail: nUsrN (no UserName), nUsrP (no Password), nsUsr (User does not exist), pww (password wrong)


-- Functions for Clients

ccftp.getClientVer()
	 returns current local API Version (can also be used on a ccFTP Server) (implemeted in Rev2)

ccftp.getServerVer(Hostname)
	 returns on success current API Version of the Server 'Hostname'
	 returns on fail: nMa (no modem attached), nsh (no such host) (also returns if sent to Rev1 Server)

ccftp.getDirCont(Hostname, Username, Password, [Subdir]) -- gets the contents of the directory 'Subdir' in the Share; if Subdir is left empty, it gets the contents of the Share-root; this is the only unencrypted communication
	 returns on success 2 tabels, first is all files of the FTP-Share Subdir, second is all folders in the FTP-Share Subdir
	 returns on fail: nsh (no such host), ddne (dir does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)

ccftp.getFile(Hostname, Username, Password, FileonHost, FileonClient) -- downloads the File form Server to 'FileonClient'
	 returns on success true
	 returns on fail: nsh (no such host), fdne (file does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)

ccftp.pushFile(Hostname, Username, Password, FileonClient, FileonHost) -- uploads the 'FileonClient' to the Server with name 'FileonHost'
	 returns on success true
	 returns on fail: nsh (no such host), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)

ccftp.removeFile(Hostname, Username, Password, FileonHost)
	 returns on success true
	 returns on fail: nsh (no such host), fdne (file does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)

ccFTP is now under the MIT License. Please keep this in mind when republishing.
I would appreciate it, if you tell me for what you used it, but this isn't neccesary.
Download API: pastebin get jCMXvY1A /.ccftp/ccftp
Current Version: Rev3

This API is self-suppling, which means, that it needs 2 more API's (SHA256 by GravityScore & AES by KillaVanilla) but it'll download them by itself into the directory: /.ccftp
This is why I reccomend to keep this API in /.ccftp too.

And here's an example Server program I've written for the API (still uses Rev2): http://pastebin.com/rd6fZ8fH

Changelog:
Spoiler+ = added | - = removed | # = changed | * = Note
Rev3:
[indent=1]+ Client & Server check versions of each other before they communicate[/indent]
[indent=1]# ccFTP Server in return mode now returns which user send the request[/indent]
[indent=1]# now all of the communication happens encrypted[/indent]
[indent=1]# switched from AES128 to AES256[/indent]
[indent=1]- old, not working Servershell function[/indent]

Rev2:
[indent=1]+ function to delete files remotely[/indent]
[indent=1]+ function to get client and server API Version[/indent]
[indent=1]+ getRunningHost and closeServer functions[/indent]
[indent=1]# Server-Host-protocoll (results in incompatibilety)[/indent]
[indent=1]# run Server Arguments (changed order + added new option)[/indent]

Rev1:
[indent=1]* Initial Release[/indent]