// TODO doc func SupernodeClient(remotes ...peer.PeerInfo) core.RoutingOption { return func(ctx context.Context, ph host.Host, dstore ds.ThreadSafeDatastore) (routing.IpfsRouting, error) { if len(remotes) < 1 { return nil, errServersMissing } proxy := gcproxy.Standard(ph, remotes) ph.SetStreamHandler(gcproxy.ProtocolSNR, proxy.HandleStream) return supernode.NewClient(proxy, ph, ph.Peerstore(), ph.ID()) } }
// SupernodeServer returns a configuration for a routing server that stores // routing records to the provided datastore. Only routing records are store in // the datastore. func SupernodeServer(recordSource ds.ThreadSafeDatastore) core.RoutingOption { return func(ctx context.Context, ph host.Host, dstore ds.ThreadSafeDatastore) (routing.IpfsRouting, error) { server, err := supernode.NewServer(recordSource, ph.Peerstore(), ph.ID()) if err != nil { return nil, err } proxy := &gcproxy.Loopback{ Handler: server, Local: ph.ID(), } ph.SetStreamHandler(gcproxy.ProtocolSNR, proxy.HandleStream) return supernode.NewClient(proxy, ph, ph.Peerstore(), ph.ID()) } }