aboutsummaryrefslogtreecommitdiff
path: root/federationsender/api/api.go
blob: 1340179e19c53f023a5f52e8e25816b0c83cd94c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package api

import (
	"context"
	"errors"
	"net/http"
)

// FederationSenderInternalAPI is used to query information from the federation sender.
type FederationSenderInternalAPI interface {
	// Query the joined hosts and the membership events accounting for their participation in a room.
	// Note that if a server has multiple users in the room, it will have multiple entries in the returned slice.
	// See `QueryJoinedHostServerNamesInRoom` for a de-duplicated version.
	QueryJoinedHostsInRoom(
		ctx context.Context,
		request *QueryJoinedHostsInRoomRequest,
		response *QueryJoinedHostsInRoomResponse,
	) error
	// Query the server names of the joined hosts in a room.
	// Unlike QueryJoinedHostsInRoom, this function returns a de-duplicated slice
	// containing only the server names (without information for membership events).
	QueryJoinedHostServerNamesInRoom(
		ctx context.Context,
		request *QueryJoinedHostServerNamesInRoomRequest,
		response *QueryJoinedHostServerNamesInRoomResponse,
	) error
	// Handle an instruction to make_join & send_join with a remote server.
	PerformJoinRequest(
		ctx context.Context,
		request *PerformJoinRequest,
		response *PerformJoinResponse,
	) error
	// Handle an instruction to make_leave & send_leave with a remote server.
	PerformLeaveRequest(
		ctx context.Context,
		request *PerformLeaveRequest,
		response *PerformLeaveResponse,
	) error
}

// NewFederationSenderInternalAPIHTTP creates a FederationSenderInternalAPI implemented by talking to a HTTP POST API.
// If httpClient is nil an error is returned
func NewFederationSenderInternalAPIHTTP(federationSenderURL string, httpClient *http.Client) (FederationSenderInternalAPI, error) {
	if httpClient == nil {
		return nil, errors.New("NewFederationSenderInternalAPIHTTP: httpClient is <nil>")
	}
	return &httpFederationSenderInternalAPI{federationSenderURL, httpClient}, nil
}

type httpFederationSenderInternalAPI struct {
	federationSenderURL string
	httpClient          *http.Client
}