{"id":34970534,"url":"https://github.com/howerj/tftp","last_synced_at":"2026-05-25T05:03:51.220Z","repository":{"id":147265915,"uuid":"270019594","full_name":"howerj/tftp","owner":"howerj","description":"Portable TFTP client and server","archived":false,"fork":false,"pushed_at":"2025-03-02T16:55:49.000Z","size":86,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-02T17:34:40.506Z","etag":null,"topics":["c","client","embedded","portable","server","tftp"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/howerj.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-06-06T15:18:44.000Z","updated_at":"2025-03-02T16:55:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"4c478f9a-1c75-4c90-95dd-11dc3ffd017c","html_url":"https://github.com/howerj/tftp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/howerj/tftp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Ftftp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Ftftp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Ftftp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Ftftp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/howerj","download_url":"https://codeload.github.com/howerj/tftp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Ftftp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33461092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T02:24:28.008Z","status":"ssl_error","status_checked_at":"2026-05-25T02:23:23.339Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["c","client","embedded","portable","server","tftp"],"created_at":"2025-12-26T23:44:30.771Z","updated_at":"2026-05-25T05:03:51.215Z","avatar_url":"https://github.com/howerj.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TFTP: Client/Server\n\n| Project    | Embeddable Non-blocking TFTP Client/Server Library |\n| ---------- | -------------------------------------------------- |\n| Author     | Richard James Howe                                 |\n| Copyright  | 2017-2018 Richard James Howe                       |\n| License    | MIT                                                |\n| Email      | howe.r.j.89@gmail.com                              |\n| Repository | \u003chttps://github.com/howerj/tftp\u003e                   |\n\nA [TFTP][] Client/Server, as specified in [RFC 1350][].\n\nThis is a work in progress, and is not usable at the moment.\n\n## Goals\n\n* Portable\n\nThe functionality required by the TFTP logic should be provided as a bunch of\nfunction pointers which can be given to an instance of the TFTP server or\nclient. This includes socket and file access functionality. This is to allow\nthe program to be ported fairly easily to different platforms and perhaps even\nembedded ones.\n\n* Non-blocking\n\nThe state machine that drives the TFTP client/server should be non-blocking,\nit will not wait around for data to arrive but instead inform the user that\nthere is nothing to do at the moment.\n\n* Easy-to-use\n\nThe API should be well documented and the program easy to use.\n\n## Non-Goals\n\nThese are **NOT** goals of the project:\n\n* Secure\n\nAny security, like preventing arbitrary directory traversal, should be done by\nthe programmer in the file-opening callback - preferably by white listing the\nfiles that can be read, and written to.\n\n* Runnable as an **inetd** service\n\nThis is project is meant to provide a simple client and server that someone\ncould use for testing TFTP, not for anything else.\n\n* Implement the Optional Extensions\n\nThey're optional! Hence they will not be implemented.\n\n## To Do\n\n* [x] Implement the client\n  * [x] Receive file\n  * [x] Send file\n* [x] Implement the server\n  * [x] Receive file\n  * [x] Send file\n* [ ] Ensure compliance and battle test it\n  * [ ] Make a small test suite\n  * [x] Lint everything\n  * [ ] Fuzzy it with AFL \u003chttp://lcamtuf.coredump.cx/afl/\u003e\n  * [x] Options for introducing errors\n  * [ ] Test on remote targets\n  * [ ] Test multiple concurrent connections\n* [ ] Port to Windows\n* [ ] Turn into library\n* [x] Man pages\n\n[MIT License]: LICENSE\n[TFTP]: https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol\n[RFC 1350]: https://tools.ietf.org/html/rfc1350\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhowerj%2Ftftp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhowerj%2Ftftp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhowerj%2Ftftp/lists"}