iroh's Endpoint natively supports ALPN negotiation and set_alpns(). Our HandlerRegistry dispatches exactly like iroh's own ProtocolMap/Router pattern, but shared across both quinn and iroh connection sources. We use iroh::Endpoint directly (not iroh::Router) because our HandlerRegistry and AuthContext are shared across sources.