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

Method PerformOutboundPeek

federationapi/internal/perform.go:307–385  ·  view source on GitHub ↗

PerformOutboundPeekRequest implements api.FederationInternalAPI

(
	ctx context.Context,
	request *api.PerformOutboundPeekRequest,
	response *api.PerformOutboundPeekResponse,
)

Source from the content-addressed store, hash-verified

305
306// PerformOutboundPeekRequest implements api.FederationInternalAPI
307func (r *FederationInternalAPI) PerformOutboundPeek(
308 ctx context.Context,
309 request *api.PerformOutboundPeekRequest,
310 response *api.PerformOutboundPeekResponse,
311) error {
312 // Look up the supported room versions.
313 var supportedVersions []gomatrixserverlib.RoomVersion
314 for version := range version.SupportedRoomVersions() {
315 supportedVersions = append(supportedVersions, version)
316 }
317
318 // Deduplicate the server names we were provided but keep the ordering
319 // as this encodes useful information about which servers are most likely
320 // to respond.
321 seenSet := make(map[gomatrixserverlib.ServerName]bool)
322 var uniqueList []gomatrixserverlib.ServerName
323 for _, srv := range request.ServerNames {
324 if seenSet[srv] {
325 continue
326 }
327 seenSet[srv] = true
328 uniqueList = append(uniqueList, srv)
329 }
330 request.ServerNames = uniqueList
331
332 // See if there's an existing outbound peek for this room ID with
333 // one of the specified servers.
334 if peeks, err := r.db.GetOutboundPeeks(ctx, request.RoomID); err == nil {
335 for _, peek := range peeks {
336 if _, ok := seenSet[peek.ServerName]; ok {
337 return nil
338 }
339 }
340 }
341
342 // Try each server that we were provided until we land on one that
343 // successfully completes the peek
344 var lastErr error
345 for _, serverName := range request.ServerNames {
346 if err := r.performOutboundPeekUsingServer(
347 ctx,
348 request.RoomID,
349 serverName,
350 supportedVersions,
351 ); err != nil {
352 logrus.WithError(err).WithFields(logrus.Fields{
353 "server_name": serverName,
354 "room_id": request.RoomID,
355 }).Warnf("Failed to peek room through server")
356 lastErr = err
357 continue
358 }
359
360 // We're all good.
361 return nil
362 }
363
364 // If we reach here then we didn't complete a peek for some reason.

Callers

nothing calls this directly

Calls 3

GetOutboundPeeksMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected