Hi all,
I may have come up with a practical way to upload content to
Gemini servers in-band, that is, speaking only valid Gemini
(mostly) within the Gemini protocol specification.
The proposed mechanism allows a Gemini client to temporarily act
as a Gemini server, with the Gemini server briefly playing the
part of a Gemini client. Entirely within an otherwise standard
Gemini transaction, a server and client can agree to swap roles,
with the server then waiting for any content that the client may
send (i.e., "upload") to the server.
Being in a sense, "reversed Gemini", I've decided to call this
mechanism "Inimeg"[1].
Inimeg strictly follows the Gemini spec and only extends it in
three respects:
* The "inimeg://" URL scheme, used by a Gemini client for an
Inimeg "upload" request
* The 7X range of status code, sent by a Gemini server in response
to an Inimeg request
* The Inimeg transaction, a Gemini transaction with partial role
reversal
I was careful not break or be in conflict with solarpunk's
excellent Gemini spec. A heavily inspired "speculative
specification" for Inimeg can be found at [2].
Do not hesitate to try out Inimeg in the open Playground, as
mentioned in [1]. Much less work has gone into the crude server
implementation[3] than the spec but it should serve to demonstrate
the general idea. (Note that the same server process that hosts
the spec [2] also hosts the playground, so please don't be too
unfriendly with it. It should hold up to casual experimentation
though.)
So. What do you think?
benthor
[1]:
gemini://inimeg.space/
[2]:
gemini://inimeg.space/specification.gmi
[3]:
https://git.sr.ht/~benthor/lunokhod
(
gemini://inimeg.space only speaks TLS 1.3 at the moment, I humbly
apologize to the folks who are stuck with TLS 1.2)