buddy.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package handler
  2. import (
  3. "context"
  4. "github.com/mk6i/retro-aim-server/server/oscar"
  5. "io"
  6. "log/slog"
  7. "github.com/mk6i/retro-aim-server/server/oscar/middleware"
  8. "github.com/mk6i/retro-aim-server/state"
  9. "github.com/mk6i/retro-aim-server/wire"
  10. )
  11. type BuddyService interface {
  12. RightsQuery(ctx context.Context, inFrame wire.SNACFrame) wire.SNACMessage
  13. }
  14. func NewBuddyHandler(logger *slog.Logger, buddyService BuddyService) BuddyHandler {
  15. return BuddyHandler{
  16. BuddyService: buddyService,
  17. RouteLogger: middleware.RouteLogger{
  18. Logger: logger,
  19. },
  20. }
  21. }
  22. type BuddyHandler struct {
  23. BuddyService
  24. middleware.RouteLogger
  25. }
  26. func (rt BuddyHandler) RightsQuery(ctx context.Context, _ *state.Session, inFrame wire.SNACFrame, r io.Reader, rw oscar.ResponseWriter) error {
  27. inSNAC := wire.SNAC_0x03_0x02_BuddyRightsQuery{}
  28. if err := wire.Unmarshal(&inSNAC, r); err != nil {
  29. return err
  30. }
  31. outSNAC := rt.BuddyService.RightsQuery(ctx, inFrame)
  32. rt.LogRequestAndResponse(ctx, inFrame, inSNAC, outSNAC.Frame, outSNAC.Body)
  33. return rw.SendSNAC(outSNAC.Frame, outSNAC.Body)
  34. }