package proxy

// The proxy protocol is:
// (1) Server establishes a VC to the proxy to register its routing id and authenticate.
// (2) The server opens a flow and sends a "Request" message and waits for a "Response"
//     message.
// (3) This flow is then kept alive with no more data read/written.
//     Closure of this flow indicates that proxying has (or should be) stopped.
// (4) The proxy immediately closes any other flows on the VC.

// Request is the message sent by a server to request that the proxy route
// traffic intended for the server's RoutingID to the network connection
// between the server and the proxy.
type Request struct {
}

// Response is sent by the proxy to the server after processing Request.
type Response struct {
  // Error is a description of why the proxy refused to proxy the server.
  // A nil error indicates that the proxy will route traffic to the server.
  Error error
  // Endpoint is the string representation of an endpoint that can be
  // used to communicate with the server through the proxy.
  Endpoint string
}