{"id":17911492,"url":"https://github.com/aojea/hairpin","last_synced_at":"2025-04-03T10:22:31.179Z","repository":{"id":57632160,"uuid":"411184083","full_name":"aojea/hairpin","owner":"aojea","description":"Hairpin creates a synchronous, in-memory, half-duplex connection. Data write on the connection is processed and sent back.","archived":false,"fork":false,"pushed_at":"2021-09-28T15:54:26.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-08T23:43:47.846Z","etag":null,"topics":["golang","network"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aojea.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}},"created_at":"2021-09-28T07:43:10.000Z","updated_at":"2021-09-28T15:54:28.000Z","dependencies_parsed_at":"2022-08-31T12:04:26.787Z","dependency_job_id":null,"html_url":"https://github.com/aojea/hairpin","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aojea%2Fhairpin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aojea%2Fhairpin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aojea%2Fhairpin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aojea%2Fhairpin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aojea","download_url":"https://codeload.github.com/aojea/hairpin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246981508,"owners_count":20863910,"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":["golang","network"],"created_at":"2024-10-28T19:38:53.120Z","updated_at":"2025-04-03T10:22:31.064Z","avatar_url":"https://github.com/aojea.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hairpin\n\nHairpin creates a synchronous, in-memory, half-duplex connection, and allows to set\na custom function to process the data that is going through the connection.\n\nThe data written in the connection is executed by the custom Handler and sent back to the connection.\nOperations are serialized, once a packet is processed, Writes() are blocked until the processed packet is Read().\n\nPartial Reads are allowed, but Writes() will not be unblocked until the Read() buffer is fully drained.\n\nHairpin implements golang net.Conn interface and is very useful for protocol testing.\n\n## Example\n\nImplement an in-memory DNS resolver using a custom handler that is able to process DNS requests\n\nhttps://github.com/aojea/mem-resolver","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faojea%2Fhairpin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faojea%2Fhairpin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faojea%2Fhairpin/lists"}