Commit dd4a4470 authored by tavit ohanian's avatar tavit ohanian

refactor after forking multiformats

parent 1c8d0ade
go-ipfs-config go-dms3-config
================== ==================
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai)
...@@ -9,7 +9,7 @@ go-ipfs-config ...@@ -9,7 +9,7 @@ go-ipfs-config
> Go-ipfs configuration datastructure. > Go-ipfs configuration datastructure.
Documentation lives in the go-ipfs repo: [docs/config.md](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md). Documentation lives in the go-dms3 repo: [docs/config.md](https://gitlab.dms3.io/dms3/public/go-dms3/blob/master/docs/config.md).
## Table of Contents ## Table of Contents
......
...@@ -6,5 +6,6 @@ type Addresses struct { ...@@ -6,5 +6,6 @@ type Addresses struct {
Announce []string // swarm addresses to announce to the network Announce []string // swarm addresses to announce to the network
NoAnnounce []string // swarm addresses not to announce to the network NoAnnounce []string // swarm addresses not to announce to the network
API Strings // address for the local API (RPC) API Strings // address for the local API (RPC)
Gateway Strings // address to listen on for IPFS HTTP object gateway Gateway Strings // address to listen on for DMS3 HTTP object gateway
Indexer []string // addresses for the index repository server
} }
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"fmt" "fmt"
) )
// AutoNATServiceMode configures the ipfs node's AutoNAT service. // AutoNATServiceMode configures the dms3 node's AutoNAT service.
type AutoNATServiceMode int type AutoNATServiceMode int
const ( const (
...@@ -56,7 +56,7 @@ type AutoNATConfig struct { ...@@ -56,7 +56,7 @@ type AutoNATConfig struct {
// Throttle configures AutoNAT dialback throttling. // Throttle configures AutoNAT dialback throttling.
// //
// If unset, the conservative libp2p defaults will be unset. To help the // If unset, the conservative p2p defaults will be unset. To help the
// network, please consider setting this and increasing the limits. // network, please consider setting this and increasing the limits.
// //
// By default, the limits will be a total of 30 dialbacks, with a // By default, the limits will be a total of 30 dialbacks, with a
......
...@@ -4,23 +4,40 @@ import ( ...@@ -4,23 +4,40 @@ import (
"errors" "errors"
"fmt" "fmt"
peer "github.com/libp2p/go-libp2p-core/peer" ma "gitlab.dms3.io/mf/go-multiaddr"
ma "github.com/multiformats/go-multiaddr" peer "gitlab.dms3.io/p2p/go-p2p-core/peer"
) )
// DefaultBootstrapAddresses are the hardcoded bootstrap addresses // DefaultBootstrapAddresses are the hardcoded bootstrap addresses
// for IPFS. they are nodes run by the IPFS team. docs on these later. // for DMS3. they are nodes run by the DMS3 team. docs on these later.
// As with all p2p networks, bootstrap is an important security concern. // As with all p2p networks, bootstrap is an important security concern.
// //
// NOTE: This is here -- and not inside cmd/ipfs/init.go -- because of an // NOTE: This is here -- and not inside cmd/dms3/init.go -- because of an
// import dependency issue. TODO: move this into a config/default/ package. // import dependency issue. TODO: move this into a config/default/ package.
var DefaultBootstrapAddresses = []string{ var DefaultBootstrapAddresses = []string{
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN", // TODO: change these addresses for dms3:
"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa", // use dms3 domain DNS entries
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb", // change mount mount point to dms3
"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt", // change node address hash
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io //
"/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io // ToDo: when out own protocol is allocated, change the /p2p/ below to what we expect from the peer
"/ip4/96.237.195.51/tcp/4101/p2p/QmXg5LqE4UMcx5212oD8UjY8DYGxkGg2Z8PzWHwR5F3XEg", // www.vectavi.com
"/ip4/96.237.195.52/tcp/4101/p2p/Qma628Kv2DpZhPhupP8C14FJLRYadPWEhWB9PaBfyVFPSS", // maps.vectavi.com
"/ip4/96.237.195.53/tcp/4101/p2p/QmRbhHwLo6uoHcEMnnnf8u99RB9ubetUUsuhdQXpnD8f8H", // geos.vectavi.com
"/ip4/96.237.195.54/tcp/4101/p2p/QmYxbm54mnRMnMwuJqBEEDjcq1VDL3JLffSNajWWaKw56X", // metircs.vectavi.com
// moe.i.dms3.io
// larry.i.dms3.io
// curly.i.dms3.io
// shemp.i.dms3.io
/*
"/dnsaddr/bootstrap.dms3.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
"/dnsaddr/bootstrap.dms3.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
"/dnsaddr/bootstrap.dms3.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
"/dnsaddr/bootstrap.dms3.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ip fs.io
"/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ip fs.io
*/
} }
// ErrInvalidPeerAddr signals an address is not a valid peer address. // ErrInvalidPeerAddr signals an address is not a valid peer address.
...@@ -32,12 +49,12 @@ func (c *Config) BootstrapPeers() ([]peer.AddrInfo, error) { ...@@ -32,12 +49,12 @@ func (c *Config) BootstrapPeers() ([]peer.AddrInfo, error) {
// DefaultBootstrapPeers returns the (parsed) set of default bootstrap peers. // DefaultBootstrapPeers returns the (parsed) set of default bootstrap peers.
// if it fails, it returns a meaningful error for the user. // if it fails, it returns a meaningful error for the user.
// This is here (and not inside cmd/ipfs/init) because of module dependency problems. // This is here (and not inside cmd/dms3/init) because of module dependency problems.
func DefaultBootstrapPeers() ([]peer.AddrInfo, error) { func DefaultBootstrapPeers() ([]peer.AddrInfo, error) {
ps, err := ParseBootstrapPeers(DefaultBootstrapAddresses) ps, err := ParseBootstrapPeers(DefaultBootstrapAddresses)
if err != nil { if err != nil {
return nil, fmt.Errorf(`failed to parse hardcoded bootstrap peers: %s return nil, fmt.Errorf(`failed to parse hardcoded bootstrap peers: %s
This is a problem with the ipfs codebase. Please report it to the dev team.`, err) This is a problem with the dms3 codebase. Please report it to the dev team.`, err)
} }
return ps, nil return ps, nil
} }
......
// package config implements the ipfs config file datastructures and utilities. // package config implements the dms3 config file datastructures and utilities.
package config package config
import ( import (
...@@ -12,7 +12,7 @@ import ( ...@@ -12,7 +12,7 @@ import (
"github.com/mitchellh/go-homedir" "github.com/mitchellh/go-homedir"
) )
// Config is used to load ipfs config files. // Config is used to load dms3 config files.
type Config struct { type Config struct {
Identity Identity // local node's peer identity Identity Identity // local node's peer identity
Datastore Datastore // local node's storage Datastore Datastore // local node's storage
...@@ -20,7 +20,7 @@ type Config struct { ...@@ -20,7 +20,7 @@ type Config struct {
Mounts Mounts // local node's mount points Mounts Mounts // local node's mount points
Discovery Discovery // local node's discovery mechanisms Discovery Discovery // local node's discovery mechanisms
Routing Routing // local node's routing settings Routing Routing // local node's routing settings
Ipns Ipns // Ipns settings Dms3Ns Dms3Ns // Dms3Ns settings
Bootstrap []string // local nodes's bootstrap peer addresses Bootstrap []string // local nodes's bootstrap peer addresses
Gateway Gateway // local node's gateway server options Gateway Gateway // local node's gateway server options
API API // local node's API settings API API // local node's API settings
...@@ -39,13 +39,13 @@ type Config struct { ...@@ -39,13 +39,13 @@ type Config struct {
const ( const (
// DefaultPathName is the default config dir name // DefaultPathName is the default config dir name
DefaultPathName = ".ipfs" DefaultPathName = ".dms3"
// DefaultPathRoot is the path to the default config dir location. // DefaultPathRoot is the path to the default config dir location.
DefaultPathRoot = "~/" + DefaultPathName DefaultPathRoot = "~/" + DefaultPathName
// DefaultConfigFile is the filename of the configuration file // DefaultConfigFile is the filename of the configuration file
DefaultConfigFile = "config" DefaultConfigFile = "config"
// EnvDir is the environment variable used to change the path root. // EnvDir is the environment variable used to change the path root.
EnvDir = "IPFS_PATH" EnvDir = "DMS3_PATH"
) )
// PathRoot returns the default configuration root directory // PathRoot returns the default configuration root directory
......
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"encoding/json" "encoding/json"
) )
// DefaultDataStoreDirectory is the directory to store all the local IPFS data. // DefaultDataStoreDirectory is the directory to store all the local DMS3 data.
const DefaultDataStoreDirectory = "datastore" const DefaultDataStoreDirectory = "datastore"
// Datastore tracks the configuration of the datastore. // Datastore tracks the configuration of the datastore.
......
package config package config
type Ipns struct { type Dms3Ns struct {
RepublishPeriod string RepublishPeriod string
RecordLifetime string RecordLifetime string
......
package config package config
type Experiments struct { type Experiments struct {
FilestoreEnabled bool FilestoreEnabled bool
UrlstoreEnabled bool UrlstoreEnabled bool
ShardingEnabled bool ShardingEnabled bool
GraphsyncEnabled bool GraphsyncEnabled bool
Libp2pStreamMounting bool P2pStreamMounting bool
P2pHttpProxy bool P2pHttpProxy bool
StrategicProviding bool StrategicProviding bool
} }
...@@ -2,14 +2,14 @@ package config ...@@ -2,14 +2,14 @@ package config
type GatewaySpec struct { type GatewaySpec struct {
// Paths is explicit list of path prefixes that should be handled by // Paths is explicit list of path prefixes that should be handled by
// this gateway. Example: `["/ipfs", "/ipns", "/api"]` // this gateway. Example: `["/dms3", "/dms3ns", "/api"]`
Paths []string Paths []string
// UseSubdomains indicates whether or not this gateway uses subdomains // UseSubdomains indicates whether or not this gateway uses subdomains
// for IPFS resources instead of paths. That is: http://CID.ipfs.GATEWAY/... // for DMS3 resources instead of paths. That is: http://CID.dms3.GATEWAY/...
// //
// If this flag is set, any /ipns/$id and/or /ipfs/$id paths in PathPrefixes // If this flag is set, any /dms3ns/$id and/or /dms3/$id paths in PathPrefixes
// will be permanently redirected to http://$id.[ipns|ipfs].$gateway/. // will be permanently redirected to http://$id.[dms3ns|dms3].$gateway/.
// //
// We do not support using both paths and subdomains for a single domain // We do not support using both paths and subdomains for a single domain
// for security reasons (Origin isolation). // for security reasons (Origin isolation).
...@@ -36,19 +36,19 @@ type Gateway struct { ...@@ -36,19 +36,19 @@ type Gateway struct {
Writable bool Writable bool
// PathPrefixes is an array of acceptable url paths that a client can // PathPrefixes is an array of acceptable url paths that a client can
// specify in X-Ipfs-Path-Prefix header. // specify in X-Dms3-Path-Prefix header.
// //
// The X-Ipfs-Path-Prefix header is used to specify a base path to prepend // The X-Dms3-Path-Prefix header is used to specify a base path to prepend
// to links in directory listings and for trailing-slash redirects. It is // to links in directory listings and for trailing-slash redirects. It is
// intended to be set by a frontend http proxy like nginx. // intended to be set by a frontend http proxy like nginx.
// //
// Example: To mount blog.ipfs.io (a DNSLink site) at ipfs.io/blog // Example: To mount blog.dms3.io (a DNSLink site) at dms3.io/blog
// set PathPrefixes to ["/blog"] and nginx config to translate paths // set PathPrefixes to ["/blog"] and nginx config to translate paths
// and pass Host header (for DNSLink): // and pass Host header (for DNSLink):
// location /blog/ { // location /blog/ {
// rewrite "^/blog(/.*)$" $1 break; // rewrite "^/blog(/.*)$" $1 break;
// proxy_set_header Host blog.ipfs.io; // proxy_set_header Host blog.dms3.io;
// proxy_set_header X-Ipfs-Gateway-Prefix /blog; // proxy_set_header X-Dms3-Gateway-Prefix /blog;
// proxy_pass http://127.0.0.1:8080; // proxy_pass http://127.0.0.1:8080;
// } // }
PathPrefixes []string PathPrefixes []string
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ package config ...@@ -3,7 +3,7 @@ package config
import ( import (
"encoding/base64" "encoding/base64"
ic "github.com/libp2p/go-libp2p-core/crypto" ic "gitlab.dms3.io/p2p/go-p2p-core/crypto"
) )
const IdentityTag = "Identity" const IdentityTag = "Identity"
......
...@@ -7,9 +7,9 @@ import ( ...@@ -7,9 +7,9 @@ import (
"io" "io"
"time" "time"
"github.com/ipfs/interface-go-ipfs-core/options" "gitlab.dms3.io/dms3/interface-go-dms3-core/options"
ci "github.com/libp2p/go-libp2p-core/crypto" ci "gitlab.dms3.io/p2p/go-p2p-core/crypto"
peer "github.com/libp2p/go-libp2p-core/peer" peer "gitlab.dms3.io/p2p/go-p2p-core/peer"
) )
func Init(out io.Writer, nBitsForKeypair int) (*Config, error) { func Init(out io.Writer, nBitsForKeypair int) (*Config, error) {
...@@ -54,11 +54,11 @@ func InitWithIdentity(identity Identity) (*Config, error) { ...@@ -54,11 +54,11 @@ func InitWithIdentity(identity Identity) (*Config, error) {
// setup the node mount points. // setup the node mount points.
Mounts: Mounts{ Mounts: Mounts{
IPFS: "/ipfs", DMS3: "/dms3",
IPNS: "/ipns", DMS3NS: "/dms3ns",
}, },
Ipns: Ipns{ Dms3Ns: Dms3Ns{
ResolveCacheSize: 128, ResolveCacheSize: 128,
}, },
...@@ -112,15 +112,15 @@ const DefaultConnMgrGracePeriod = time.Second * 20 ...@@ -112,15 +112,15 @@ const DefaultConnMgrGracePeriod = time.Second * 20
func addressesConfig() Addresses { func addressesConfig() Addresses {
return Addresses{ return Addresses{
Swarm: []string{ Swarm: []string{
"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4101",
"/ip6/::/tcp/4001", "/ip6/::/tcp/4101",
"/ip4/0.0.0.0/udp/4001/quic", "/ip4/0.0.0.0/udp/4101/quic",
"/ip6/::/udp/4001/quic", "/ip6/::/udp/4101/quic",
}, },
Announce: []string{}, Announce: []string{},
NoAnnounce: []string{}, NoAnnounce: []string{},
API: Strings{"/ip4/127.0.0.1/tcp/5001"}, API: Strings{"/ip4/127.0.0.1/tcp/5101"},
Gateway: Strings{"/ip4/127.0.0.1/tcp/8080"}, Gateway: Strings{"/ip4/127.0.0.1/tcp/8180"},
} }
} }
...@@ -173,6 +173,16 @@ func flatfsSpec() map[string]interface{} { ...@@ -173,6 +173,16 @@ func flatfsSpec() map[string]interface{} {
"compression": "none", "compression": "none",
}, },
}, },
map[string]interface{}{
"mountpoint": "/index",
"type": "measure",
"prefix": "index.leveldb.datastore",
"child": map[string]interface{}{
"type": "indexds",
"path": "index/datastore",
"compression": "none",
},
},
}, },
} }
} }
......
...@@ -4,8 +4,8 @@ import ( ...@@ -4,8 +4,8 @@ import (
"bytes" "bytes"
"testing" "testing"
"github.com/ipfs/interface-go-ipfs-core/options" "gitlab.dms3.io/dms3/interface-go-dms3-core/options"
crypto_pb "github.com/libp2p/go-libp2p-core/crypto/pb" crypto_pb "gitlab.dms3.io/p2p/go-p2p-core/crypto/pb"
) )
func TestCreateIdentity(t *testing.T) { func TestCreateIdentity(t *testing.T) {
......
...@@ -2,7 +2,7 @@ package config ...@@ -2,7 +2,7 @@ package config
// Mounts stores the (string) mount points // Mounts stores the (string) mount points
type Mounts struct { type Mounts struct {
IPFS string DMS3 string
IPNS string DMS3NS string
FuseAllowOther bool FuseAllowOther bool
} }
package config package config
import "github.com/libp2p/go-libp2p-core/peer" import "gitlab.dms3.io/p2p/go-p2p-core/peer"
// Peering configures the peering service. // Peering configures the peering service.
type Peering struct { type Peering struct {
......
...@@ -14,7 +14,7 @@ type Profile struct { ...@@ -14,7 +14,7 @@ type Profile struct {
// Description briefly describes the functionality of the profile. // Description briefly describes the functionality of the profile.
Description string Description string
// Transform takes ipfs configuration and applies the profile to it. // Transform takes dms3 configuration and applies the profile to it.
Transform Transformer Transform Transformer
// InitOnly specifies that this profile can only be applied on init. // InitOnly specifies that this profile can only be applied on init.
...@@ -51,7 +51,7 @@ var defaultServerFilters = []string{ ...@@ -51,7 +51,7 @@ var defaultServerFilters = []string{
var Profiles = map[string]Profile{ var Profiles = map[string]Profile{
"server": { "server": {
Description: `Disables local host discovery, recommended when Description: `Disables local host discovery, recommended when
running IPFS on machines with public IPv4 addresses.`, running DMS3 on machines with public IPv4 addresses.`,
Transform: func(c *Config) error { Transform: func(c *Config) error {
c.Addresses.NoAnnounce = appendSingle(c.Addresses.NoAnnounce, defaultServerFilters) c.Addresses.NoAnnounce = appendSingle(c.Addresses.NoAnnounce, defaultServerFilters)
...@@ -75,7 +75,7 @@ profile, enables discovery in local networks.`, ...@@ -75,7 +75,7 @@ profile, enables discovery in local networks.`,
}, },
}, },
"test": { "test": {
Description: `Reduces external interference of IPFS daemon, this Description: `Reduces external interference of DMS3 daemon, this
is useful when using the daemon in test environments.`, is useful when using the daemon in test environments.`,
Transform: func(c *Config) error { Transform: func(c *Config) error {
...@@ -156,11 +156,11 @@ This is the fastest datastore. Use this datastore if performance, especially ...@@ -156,11 +156,11 @@ This is the fastest datastore. Use this datastore if performance, especially
when adding many gigabytes of files, is critical. However: when adding many gigabytes of files, is critical. However:
* This datastore will not properly reclaim space when your datastore is * This datastore will not properly reclaim space when your datastore is
smaller than several gigabytes. If you run IPFS with '--enable-gc' (you have smaller than several gigabytes. If you run DMS3 with '--enable-gc' (you have
enabled block-level garbage collection), you plan on storing very little data in enabled block-level garbage collection), you plan on storing very little data in
your IPFS node, and disk usage is more critical than performance, consider using your DMS3 node, and disk usage is more critical than performance, consider using
flatfs. flatfs.
* This datastore uses up to several gigabytes of memory. * This datastore uses up to several gigabytes of memory.
This profile may only be applied when first initializing the node.`, This profile may only be applied when first initializing the node.`,
......
package config package config
// Routing defines configuration options for libp2p routing // Routing defines configuration options for p2p routing
type Routing struct { type Routing struct {
// Type sets default daemon routing mode. // Type sets default daemon routing mode.
// //
......
...@@ -8,14 +8,14 @@ import ( ...@@ -8,14 +8,14 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/ipfs/go-ipfs-config" "gitlab.dms3.io/dms3/go-dms3-config"
"github.com/facebookgo/atomicfile" "github.com/facebookgo/atomicfile"
) )
// ErrNotInitialized is returned when we fail to read the config because the // ErrNotInitialized is returned when we fail to read the config because the
// repo doesn't exist. // repo doesn't exist.
var ErrNotInitialized = errors.New("ipfs not initialized, please run 'ipfs init'") var ErrNotInitialized = errors.New("dms3 not initialized, please run 'dms3 init'")
// ReadConfigFile reads the config from `filename` into `cfg`. // ReadConfigFile reads the config from `filename` into `cfg`.
func ReadConfigFile(filename string, cfg interface{}) error { func ReadConfigFile(filename string, cfg interface{}) error {
......
...@@ -5,11 +5,11 @@ import ( ...@@ -5,11 +5,11 @@ import (
"runtime" "runtime"
"testing" "testing"
config "github.com/ipfs/go-ipfs-config" config "gitlab.dms3.io/dms3/go-dms3-config"
) )
func TestConfig(t *testing.T) { func TestConfig(t *testing.T) {
const filename = ".ipfsconfig" const filename = ".dms3config"
cfgWritten := new(config.Config) cfgWritten := new(config.Config)
cfgWritten.Identity.PeerID = "faketest" cfgWritten.Identity.PeerID = "faketest"
......
package config package config
type SwarmConfig struct { type SwarmConfig struct {
// AddrFilters specifies a set libp2p addresses that we should never // AddrFilters specifies a set p2p addresses that we should never
// dial or receive connections from. // dial or receive connections from.
AddrFilters []string AddrFilters []string
...@@ -25,13 +25,13 @@ type SwarmConfig struct { ...@@ -25,13 +25,13 @@ type SwarmConfig struct {
// EnableAutoRelay enables the "auto relay" feature. // EnableAutoRelay enables the "auto relay" feature.
// //
// When both EnableAutoRelay and EnableRelayHop are set, this go-ipfs node // When both EnableAutoRelay and EnableRelayHop are set, this go-dms3 node
// will advertise itself as a public relay. Otherwise it will find and use // will advertise itself as a public relay. Otherwise it will find and use
// advertised public relays when it determines that it's not reachable // advertised public relays when it determines that it's not reachable
// from the public internet. // from the public internet.
EnableAutoRelay bool EnableAutoRelay bool
// Transports contains flags to enable/disable libp2p transports. // Transports contains flags to enable/disable p2p transports.
Transports Transports Transports Transports
// ConnMgr configures the connection manager. // ConnMgr configures the connection manager.
...@@ -70,7 +70,7 @@ type Transports struct { ...@@ -70,7 +70,7 @@ type Transports struct {
} }
} }
// ConnMgr defines configuration options for the libp2p connection manager // ConnMgr defines configuration options for the p2p connection manager
type ConnMgr struct { type ConnMgr struct {
Type string Type string
LowWater int LowWater int
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment