{"id":15774921,"url":"https://github.com/thk2b/ftp","last_synced_at":"2025-03-31T14:35:14.210Z","repository":{"id":138600894,"uuid":"163788160","full_name":"thk2b/ftp","owner":"thk2b","description":"A FTP client and server implementation","archived":false,"fork":false,"pushed_at":"2019-08-12T03:44:58.000Z","size":1794,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-10-04T16:41:34.270Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thk2b.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-02T03:08:03.000Z","updated_at":"2019-08-12T03:45:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"682eb9e9-42a0-4e5c-a213-57d4ac7d04a5","html_url":"https://github.com/thk2b/ftp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thk2b%2Fftp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thk2b%2Fftp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thk2b%2Fftp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thk2b%2Fftp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thk2b","download_url":"https://codeload.github.com/thk2b/ftp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246483575,"owners_count":20784913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-04T16:41:27.289Z","updated_at":"2025-03-31T14:35:14.184Z","avatar_url":"https://github.com/thk2b.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FTP\nA FTP client and server implementation\n\n![screenshot](https://raw.githubusercontent.com/thk2b/ftp/master/media/screenshot.png)\n\n## Usage\n\n### Compile\n\nClone with the `--recurse-submodules` to download dependencies and run\n```\nmake\n```\n\n### Client\n\n```\n./client host [[ port=8080 ] -v | --help]\n```\n\nOnce connected, the client can retrive local files and send them over TCP to the server, or request remote files from the server and save them locally.\n\nThe following commands are supported\n\n|index|names|arguments|descriptions|\n|-|-|-|-|\n|n/a|help||print a help message|\n|0|quit, exit||exit the program|\n|1|ls|[ path ]|list files|\n|2|cd|[ path ]|change directory|\n|3|pwd||print present working directory\n|4|get|remote_path [ local_path ]|download a file from the server|\n|5|put|local_path [ remote_path ]|upload a file to the server|\n|6|pasv||manually create a data transfer connection with the server|\n|7|mkdir|path|create a directory on the server|\n\n### Server\n\n```\n./server [[[ host=0.0.0.0 ] port=8080 ] -v | --help]\n```\n\nThe server listens for TCP connections and handles clients concurently in separate processes. Each of these processes listens and executes commands sent by the client over TCP.\n\nUploaded files are put in a `./.ftp_data` directory.\n\n## Protocol\n\nThe protocol is the set of actions recognized by the client and server.\n\n|index|name|arguments|description|\n|-|-|-|-|\n|0|QUIT||close the connection and restore control of the terminal to the shell|\n|1|LIST|filename?|list server's current working directory|\n|2|CWD|path|change server's current working directory. Cannot move above the server's `data` directory.|\n|3|PWD||print the server's current working directory|\n|4|RETR|path|filename|request file from remote server, create or overrive local file|\n|5|STOR|path|send file to remote server, create or override file on the server|\n|6|PASV||enable passive mode|\n|7|MKD||create directory|\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthk2b%2Fftp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthk2b%2Fftp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthk2b%2Fftp/lists"}