aboutsummaryrefslogtreecommitdiff
path: root/cmd/dendrite-demo-pinecone/conn/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/dendrite-demo-pinecone/conn/client.go')
-rw-r--r--cmd/dendrite-demo-pinecone/conn/client.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/cmd/dendrite-demo-pinecone/conn/client.go b/cmd/dendrite-demo-pinecone/conn/client.go
new file mode 100644
index 00000000..bf23085d
--- /dev/null
+++ b/cmd/dendrite-demo-pinecone/conn/client.go
@@ -0,0 +1,91 @@
+package conn
+
+import (
+ "fmt"
+ "net"
+ "net/http"
+ "strings"
+
+ "github.com/gorilla/websocket"
+ "github.com/matrix-org/dendrite/setup"
+ "github.com/matrix-org/gomatrixserverlib"
+
+ pineconeRouter "github.com/matrix-org/pinecone/router"
+ pineconeSessions "github.com/matrix-org/pinecone/sessions"
+)
+
+func ConnectToPeer(pRouter *pineconeRouter.Router, peer string) error {
+ var parent net.Conn
+ if strings.HasPrefix(peer, "ws://") || strings.HasPrefix(peer, "wss://") {
+ c, _, err := websocket.DefaultDialer.Dial(peer, nil)
+ if err != nil {
+ return fmt.Errorf("websocket.DefaultDialer.Dial: %w", err)
+ }
+ parent = WrapWebSocketConn(c)
+ } else {
+ var err error
+ parent, err = net.Dial("tcp", peer)
+ if err != nil {
+ return fmt.Errorf("net.Dial: %w", err)
+ }
+ }
+ if parent == nil {
+ return fmt.Errorf("failed to wrap connection")
+ }
+ _, err := pRouter.AuthenticatedConnect(parent, "static", pineconeRouter.PeerTypeRemote)
+ return err
+}
+
+type RoundTripper struct {
+ inner *http.Transport
+}
+
+func (y *RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
+ req.URL.Scheme = "http"
+ return y.inner.RoundTrip(req)
+}
+
+func CreateClient(
+ base *setup.BaseDendrite, s *pineconeSessions.Sessions,
+) *gomatrixserverlib.Client {
+ tr := &http.Transport{}
+ tr.RegisterProtocol(
+ "matrix", &RoundTripper{
+ inner: &http.Transport{
+ MaxIdleConns: 100,
+ MaxIdleConnsPerHost: 5,
+ Dial: s.Dial,
+ DialContext: s.DialContext,
+ DialTLS: s.DialTLS,
+ DialTLSContext: s.DialTLSContext,
+ },
+ },
+ )
+ return gomatrixserverlib.NewClient(
+ gomatrixserverlib.WithTransport(tr),
+ )
+}
+
+func CreateFederationClient(
+ base *setup.BaseDendrite, s *pineconeSessions.Sessions,
+) *gomatrixserverlib.FederationClient {
+ tr := &http.Transport{}
+ tr.RegisterProtocol(
+ "matrix", &RoundTripper{
+ inner: &http.Transport{
+ MaxIdleConns: 100,
+ MaxIdleConnsPerHost: 5,
+ Dial: s.Dial,
+ DialContext: s.DialContext,
+ DialTLS: s.DialTLS,
+ DialTLSContext: s.DialTLSContext,
+ },
+ },
+ )
+ return gomatrixserverlib.NewFederationClient(
+ base.Cfg.Global.ServerName,
+ base.Cfg.Global.KeyID,
+ base.Cfg.Global.PrivateKey,
+ gomatrixserverlib.WithTransport(tr),
+ )
+}