Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support ICAP (RFC-3507) #339

Open
GlenDC opened this issue Oct 18, 2024 · 3 comments
Open

Support ICAP (RFC-3507) #339

GlenDC opened this issue Oct 18, 2024 · 3 comments
Milestone

Comments

@GlenDC
Copy link
Member

GlenDC commented Oct 18, 2024

Add initial support for ICAP.
Once we have this we can look into what else related to ICAP we need.

RFC: https://www.rfc-editor.org/rfc/pdfrfc/rfc3507.txt.pdf

@GlenDC GlenDC added this to the v0.3 milestone Oct 18, 2024
@GlenDC
Copy link
Member Author

GlenDC commented Oct 22, 2024

https://github.com/chills42/icaparse can serve as inspiration

@GlenDC GlenDC changed the title Support ICAP Support ICAP (RFC-3507) Oct 22, 2024
@NOOMA-42
Copy link
Contributor

NOOMA-42 commented Dec 29, 2024

I'm interested in this and just made an draft PR. Could you assign me? I'd also like to clarify the scope of initial support.

@GlenDC
Copy link
Member Author

GlenDC commented Dec 29, 2024

I'm interested in this. Could you assign me? Just made an draft PR

Sure thing, all yours. I can see you already started with it, so it gives me hope.

Know though that this wasn't marked as mentor available. That doesn't mean I cannot guide, help or anything like that, but it more means that I assume you are pretty good at programming and can independently get most of the way there.

Some requirements for this crate are:

  • the ICAP Client/Server implementation needs to be usable within a rama service layer (meaning it needs to be tokio-async and work with a &self reference (not mutable, but shared)
  • ICAP client/server is typically used within a high-load traffic environment, as such this implementation needs to allocate as little as possible and be "fast"

There is a lot of similarities with HTTP/1 so can see if there is stuff/code/ideas that can be borrowed from rama-http-core h1 proto code.

The deliverables in order to close this ticket are:

  • a good enough first version of a client and server
  • example (in /examples
  • a integration test verifying this example works

E.g. the example can be

client <-----> proxy <---------> server
                    [icap client]
                         ^
                         ||
                        V
                  [icap server]

However in case your PR only implements the protocol layer with sufficient tests and some simple integration tests showcasing the server client then that is already good enough to start it as well.

The core protocol server and client are unrelated from a rama service/layer. They are just stuff on their own.

Next to this (in this PR or a follow up PR) a layer service will be added that wraps the client, so that one can easily send passing http traffic via an ICAP server given by the client in that layer.

This is a pretty big task though, so take it as far as you can, so for the sake of the quality of your work might not want to overdo the scope of your PR as to make sure you have the will, energy and motivation to deliver the stuff that you did do with pride and quality.

I'm here for you for feedback, guidance or anything else.

Given this work became a lot more priority for some people I might take over in a week or two should this not progress fast enough. That wouldn't say anything about you though, its just that I do need it at some point soon. Until then however I have plenty of other stuff that I can still do myself. So also don't stress on it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants