veyron/runtimes/google/ipc/stream/proxy: Proxy protocol changes.
(1) "Servers" will be proxied only if they explicitly ask to.
(The previous behavior was that any client connection would
result in its routing id being added to the proxy's routing
table).
(2) An explicit request<->response protocol is defined between
the server wishing to be proxied and the proxy.
These changes pave the way for upcoming changes to the proxy:
(a) Servers will be able to ask the proxy to mount the proxied endpoint
in a mounttable. This is required as the endpoint of the proxy as viewed by
the server can be different from the endpoint of the proxy as accessible
in a different network domain (the "externally accessible" endpoint).
For example, consider a proxy running on the home router.
Servers inside the home network would "export" themselves by
"Listening" on say ("veyron", "@2@tcp@192.168.1.1...)
however, their intent is to mount themselves with the external
IP address of the proxy.
The explicit request/response messages will be used to
enable this.
(b) Multiple connections for the same routing id to the proxy:
It is currently not possible for two network connections
from the same routing id to be proxied. This may be useful
if there are multiple network paths to the proxy (say
multiple network protocols). One of the reasons this has
been disallowed so far is to prevent denial of service (DoS)
attacks, wherein a malicious process registers the routing id
of a good server. However, with the changes in this commit,
it should be easy to allow a server to proxy itself over
multiple network connections as long as the identity of the
server in all the network connections is the same.
Change-Id: Ied6ab99bf26e5a7d0b6bce16d13a006a64a75b5a
8 files changed