mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-17 03:43:11 -06:00
Extract mDNSListener from base.go
This commit is contained in:
parent
6209cad494
commit
1de97144bf
|
|
@ -21,8 +21,10 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
gostream "github.com/libp2p/go-libp2p-gostream"
|
gostream "github.com/libp2p/go-libp2p-gostream"
|
||||||
|
p2pdisc "github.com/libp2p/go-libp2p/p2p/discovery"
|
||||||
"github.com/matrix-org/dendrite/appservice"
|
"github.com/matrix-org/dendrite/appservice"
|
||||||
"github.com/matrix-org/dendrite/clientapi"
|
"github.com/matrix-org/dendrite/clientapi"
|
||||||
"github.com/matrix-org/dendrite/clientapi/producers"
|
"github.com/matrix-org/dendrite/clientapi/producers"
|
||||||
|
|
@ -47,6 +49,35 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func createKeyDB(
|
||||||
|
base *basecomponent.BaseDendrite,
|
||||||
|
) keydb.Database {
|
||||||
|
db, err := keydb.NewDatabase(
|
||||||
|
string(base.Cfg.Database.ServerKey),
|
||||||
|
base.Cfg.Matrix.ServerName,
|
||||||
|
base.Cfg.Matrix.PrivateKey.Public().(ed25519.PublicKey),
|
||||||
|
base.Cfg.Matrix.KeyID,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
logrus.WithError(err).Panicf("failed to connect to keys db")
|
||||||
|
}
|
||||||
|
mdns := mDNSListener{
|
||||||
|
host: base.LibP2P,
|
||||||
|
keydb: db,
|
||||||
|
}
|
||||||
|
serv, err := p2pdisc.NewMdnsService(
|
||||||
|
base.LibP2PContext,
|
||||||
|
base.LibP2P,
|
||||||
|
time.Second*10,
|
||||||
|
"_matrix-dendrite-p2p._tcp",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
serv.RegisterNotifee(&mdns)
|
||||||
|
return db
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
instanceName := flag.String("name", "dendrite-p2p", "the name of this P2P demo instance")
|
instanceName := flag.String("name", "dendrite-p2p", "the name of this P2P demo instance")
|
||||||
instancePort := flag.Int("port", 8080, "the port that the client API will listen on")
|
instancePort := flag.Int("port", 8080, "the port that the client API will listen on")
|
||||||
|
|
@ -96,7 +127,7 @@ func main() {
|
||||||
|
|
||||||
accountDB := base.CreateAccountsDB()
|
accountDB := base.CreateAccountsDB()
|
||||||
deviceDB := base.CreateDeviceDB()
|
deviceDB := base.CreateDeviceDB()
|
||||||
keyDB := base.CreateKeyDB()
|
keyDB := createKeyDB(base)
|
||||||
federation := base.CreateFederationClient()
|
federation := base.CreateFederationClient()
|
||||||
keyRing := keydb.CreateKeyRing(federation.Client, keyDB)
|
keyRing := keydb.CreateKeyRing(federation.Client, keyDB)
|
||||||
|
|
||||||
|
|
|
||||||
49
cmd/dendrite-p2p-demo/mdnslistener.go
Normal file
49
cmd/dendrite-p2p-demo/mdnslistener.go
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
|
"github.com/matrix-org/dendrite/common/keydb"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mDNSListener struct {
|
||||||
|
keydb keydb.Database
|
||||||
|
host host.Host
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *mDNSListener) HandlePeerFound(p peer.AddrInfo) {
|
||||||
|
if err := n.host.Connect(context.Background(), p); err != nil {
|
||||||
|
fmt.Println("Error adding peer", p.ID.String(), "via mDNS:", err)
|
||||||
|
}
|
||||||
|
if pubkey, err := p.ID.ExtractPublicKey(); err == nil {
|
||||||
|
raw, _ := pubkey.Raw()
|
||||||
|
if err := n.keydb.StoreKeys(
|
||||||
|
context.Background(),
|
||||||
|
map[gomatrixserverlib.PublicKeyLookupRequest]gomatrixserverlib.PublicKeyLookupResult{
|
||||||
|
{
|
||||||
|
ServerName: gomatrixserverlib.ServerName(p.ID.String()),
|
||||||
|
KeyID: "ed25519:p2pdemo",
|
||||||
|
}: {
|
||||||
|
VerifyKey: gomatrixserverlib.VerifyKey{
|
||||||
|
Key: gomatrixserverlib.Base64String(raw),
|
||||||
|
},
|
||||||
|
ValidUntilTS: math.MaxUint64 >> 1,
|
||||||
|
ExpiredTS: gomatrixserverlib.PublicKeyNotExpired,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
); err != nil {
|
||||||
|
fmt.Println("Failed to store keys:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("Discovered", len(n.host.Peerstore().Peers())-1, "other libp2p peer(s):")
|
||||||
|
for _, peer := range n.host.Peerstore().Peers() {
|
||||||
|
if peer != n.host.ID() {
|
||||||
|
fmt.Println("-", peer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,24 +19,20 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
|
||||||
|
|
||||||
"golang.org/x/crypto/ed25519"
|
"golang.org/x/crypto/ed25519"
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p"
|
"github.com/libp2p/go-libp2p"
|
||||||
circuit "github.com/libp2p/go-libp2p-circuit"
|
circuit "github.com/libp2p/go-libp2p-circuit"
|
||||||
crypto "github.com/libp2p/go-libp2p-core/crypto"
|
crypto "github.com/libp2p/go-libp2p-core/crypto"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
|
||||||
routing "github.com/libp2p/go-libp2p-core/routing"
|
routing "github.com/libp2p/go-libp2p-core/routing"
|
||||||
|
|
||||||
host "github.com/libp2p/go-libp2p-core/host"
|
host "github.com/libp2p/go-libp2p-core/host"
|
||||||
p2phttp "github.com/libp2p/go-libp2p-http"
|
p2phttp "github.com/libp2p/go-libp2p-http"
|
||||||
dht "github.com/libp2p/go-libp2p-kad-dht"
|
dht "github.com/libp2p/go-libp2p-kad-dht"
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||||
p2pdisc "github.com/libp2p/go-libp2p/p2p/discovery"
|
|
||||||
"github.com/matrix-org/dendrite/common/keydb"
|
"github.com/matrix-org/dendrite/common/keydb"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
"github.com/matrix-org/naffka"
|
"github.com/matrix-org/naffka"
|
||||||
|
|
@ -256,22 +252,6 @@ func (b *BaseDendrite) CreateKeyDB() keydb.Database {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.WithError(err).Panicf("failed to connect to keys db")
|
logrus.WithError(err).Panicf("failed to connect to keys db")
|
||||||
}
|
}
|
||||||
if b.LibP2P != nil {
|
|
||||||
mdns := mDNSListener{
|
|
||||||
host: b.LibP2P,
|
|
||||||
keydb: db,
|
|
||||||
}
|
|
||||||
serv, err := p2pdisc.NewMdnsService(
|
|
||||||
b.LibP2PContext,
|
|
||||||
b.LibP2P,
|
|
||||||
time.Second*10,
|
|
||||||
"_matrix-dendrite-p2p._tcp",
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
serv.RegisterNotifee(&mdns)
|
|
||||||
}
|
|
||||||
|
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
@ -382,41 +362,3 @@ func setupNaffka(cfg *config.Dendrite) (sarama.Consumer, sarama.SyncProducer) {
|
||||||
|
|
||||||
return naff, naff
|
return naff, naff
|
||||||
}
|
}
|
||||||
|
|
||||||
type mDNSListener struct {
|
|
||||||
keydb keydb.Database
|
|
||||||
host host.Host
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *mDNSListener) HandlePeerFound(p peer.AddrInfo) {
|
|
||||||
//fmt.Println("Found libp2p peer via mDNS:", p)
|
|
||||||
if err := n.host.Connect(context.Background(), p); err != nil {
|
|
||||||
fmt.Println("Error adding peer", p.ID.String(), "via mDNS:", err)
|
|
||||||
}
|
|
||||||
if pubkey, err := p.ID.ExtractPublicKey(); err == nil {
|
|
||||||
raw, _ := pubkey.Raw()
|
|
||||||
if err := n.keydb.StoreKeys(
|
|
||||||
context.Background(),
|
|
||||||
map[gomatrixserverlib.PublicKeyLookupRequest]gomatrixserverlib.PublicKeyLookupResult{
|
|
||||||
gomatrixserverlib.PublicKeyLookupRequest{
|
|
||||||
ServerName: gomatrixserverlib.ServerName(p.ID.String()),
|
|
||||||
KeyID: "ed25519:p2pdemo",
|
|
||||||
}: gomatrixserverlib.PublicKeyLookupResult{
|
|
||||||
VerifyKey: gomatrixserverlib.VerifyKey{
|
|
||||||
Key: gomatrixserverlib.Base64String(raw),
|
|
||||||
},
|
|
||||||
ValidUntilTS: math.MaxUint64 >> 1,
|
|
||||||
ExpiredTS: gomatrixserverlib.PublicKeyNotExpired,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
); err != nil {
|
|
||||||
fmt.Println("Failed to store keys:", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Println("Discovered", len(n.host.Peerstore().Peers())-1, "other libp2p peer(s):")
|
|
||||||
for _, peer := range n.host.Peerstore().Peers() {
|
|
||||||
if peer != n.host.ID() {
|
|
||||||
fmt.Println("-", peer)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -32,7 +32,7 @@ require (
|
||||||
github.com/uber/jaeger-client-go v2.22.1+incompatible
|
github.com/uber/jaeger-client-go v2.22.1+incompatible
|
||||||
github.com/uber/jaeger-lib v2.2.0+incompatible
|
github.com/uber/jaeger-lib v2.2.0+incompatible
|
||||||
go.uber.org/atomic v1.6.0
|
go.uber.org/atomic v1.6.0
|
||||||
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d
|
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d
|
||||||
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44 // indirect
|
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44 // indirect
|
||||||
gopkg.in/Shopify/sarama.v1 v1.20.1
|
gopkg.in/Shopify/sarama.v1 v1.20.1
|
||||||
gopkg.in/h2non/bimg.v1 v1.0.18
|
gopkg.in/h2non/bimg.v1 v1.0.18
|
||||||
|
|
|
||||||
2
go.sum
2
go.sum
|
|
@ -566,11 +566,11 @@ github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSv
|
||||||
github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
|
github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
|
||||||
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
|
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
|
go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
|
||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
|
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
|
||||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.uber.org/atomic v1.3.0 h1:vs7fgriifsPbGdK3bNuMWapNn3qnZhCRXc19NRdq010=
|
go.uber.org/atomic v1.3.0 h1:vs7fgriifsPbGdK3bNuMWapNn3qnZhCRXc19NRdq010=
|
||||||
go.uber.org/atomic v1.3.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue