MCPcopy Create free account
hub / github.com/daodst/chat / GetMissingEvents

Function GetMissingEvents

federationapi/routing/missingevents.go:34–78  ·  view source on GitHub ↗

GetMissingEvents returns missing events between earliest_events & latest_events. Events are fetched from room DAG starting from latest_events until we reach earliest_events or the limit.

(
	httpReq *http.Request,
	request *gomatrixserverlib.FederationRequest,
	rsAPI api.FederationRoomserverAPI,
	roomID string,
)

Source from the content-addressed store, hash-verified

32// GetMissingEvents returns missing events between earliest_events & latest_events.
33// Events are fetched from room DAG starting from latest_events until we reach earliest_events or the limit.
34func GetMissingEvents(
35 httpReq *http.Request,
36 request *gomatrixserverlib.FederationRequest,
37 rsAPI api.FederationRoomserverAPI,
38 roomID string,
39) util.JSONResponse {
40 var gme getMissingEventRequest
41 if err := json.Unmarshal(request.Content(), &gme); err != nil {
42 return util.JSONResponse{
43 Code: http.StatusBadRequest,
44 JSON: jsonerror.NotJSON("The request body could not be decoded into valid JSON. " + err.Error()),
45 }
46 }
47
48 // If we don't think we belong to this room then don't waste the effort
49 // responding to expensive requests for it.
50 if err := ErrorIfLocalServerNotInRoom(httpReq.Context(), rsAPI, roomID); err != nil {
51 return *err
52 }
53
54 var eventsResponse api.QueryMissingEventsResponse
55 if err := rsAPI.QueryMissingEvents(
56 httpReq.Context(), &api.QueryMissingEventsRequest{
57 EarliestEvents: gme.EarliestEvents,
58 LatestEvents: gme.LatestEvents,
59 Limit: gme.Limit,
60 ServerName: request.Origin(),
61 },
62 &eventsResponse,
63 ); err != nil {
64 util.GetLogger(httpReq.Context()).WithError(err).Error("query.QueryMissingEvents failed")
65 return jsonerror.InternalServerError()
66 }
67
68 eventsResponse.Events = filterEvents(eventsResponse.Events, roomID)
69
70 resp := gomatrixserverlib.RespMissingEvents{
71 Events: gomatrixserverlib.NewEventJSONsFromHeaderedEvents(eventsResponse.Events),
72 }
73
74 return util.JSONResponse{
75 Code: http.StatusOK,
76 JSON: resp,
77 }
78}
79
80// filterEvents returns only those events with matching roomID
81func filterEvents(

Callers 1

SetupFunction · 0.85

Calls 5

filterEventsFunction · 0.85
ContextMethod · 0.80
QueryMissingEventsMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected