aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api/input.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-04-29 11:34:31 +0100
committerGitHub <noreply@github.com>2020-04-29 11:34:31 +0100
commita308e61331f549ae0964f83dff88abc282033ed3 (patch)
tree7dad59cce409fd1f3e806d0b928b141a4fc7fcd5 /roomserver/api/input.go
parenta4b9edb28e32b505cf3a67bcba1acacd4a882155 (diff)
Federation sender API remodel (#988)
* Define an input API for the federationsender * Wiring for rooomserver input API and federation sender input API * Whoops, commit common too * Merge input API into query API * Rename FederationSenderQueryAPI to FederationSenderInternalAPI * Fix dendritejs * Rename Input to Perform * Fix a couple of inputs -> performs * Remove needless storage interface, add comments
Diffstat (limited to 'roomserver/api/input.go')
-rw-r--r--roomserver/api/input.go16
1 files changed, 15 insertions, 1 deletions
diff --git a/roomserver/api/input.go b/roomserver/api/input.go
index bb4e040d..d9cffad2 100644
--- a/roomserver/api/input.go
+++ b/roomserver/api/input.go
@@ -21,6 +21,7 @@ import (
"net/http"
commonHTTP "github.com/matrix-org/dendrite/common/http"
+ fsAPI "github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/gomatrixserverlib"
opentracing "github.com/opentracing/opentracing-go"
)
@@ -106,6 +107,9 @@ type InputRoomEventsResponse struct {
// RoomserverInputAPI is used to write events to the room server.
type RoomserverInputAPI interface {
+ // needed to avoid chicken and egg scenario when setting up the
+ // interdependencies between the roomserver and the FS input API
+ SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI)
InputRoomEvents(
ctx context.Context,
request *InputRoomEventsRequest,
@@ -122,12 +126,22 @@ func NewRoomserverInputAPIHTTP(roomserverURL string, httpClient *http.Client) (R
if httpClient == nil {
return nil, errors.New("NewRoomserverInputAPIHTTP: httpClient is <nil>")
}
- return &httpRoomserverInputAPI{roomserverURL, httpClient}, nil
+ return &httpRoomserverInputAPI{roomserverURL, httpClient, nil}, nil
}
type httpRoomserverInputAPI struct {
roomserverURL string
httpClient *http.Client
+ // The federation sender API allows us to send federation
+ // requests from the new perform input requests, still TODO.
+ fsInputAPI fsAPI.FederationSenderInternalAPI
+}
+
+// SetFederationSenderInputAPI passes in a federation sender input API reference
+// so that we can avoid the chicken-and-egg problem of both the roomserver input API
+// and the federation sender input API being interdependent.
+func (h *httpRoomserverInputAPI) SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI) {
+ h.fsInputAPI = fsInputAPI
}
// InputRoomEvents implements RoomserverInputAPI