routes.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package handler
  2. import (
  3. "github.com/mk6i/retro-aim-server/server/oscar"
  4. "github.com/mk6i/retro-aim-server/wire"
  5. )
  6. // Handlers aggregates various specialized handlers required for processing
  7. // different types of OSCAR protocol requests. Each field corresponds to a
  8. // specific handler responsible for a distinct aspect of the OSCAR service,
  9. // such as managing buddy lists, chat sessions, and user alerts.
  10. type Handlers struct {
  11. AdminHandler
  12. AlertHandler
  13. BARTHandler
  14. BuddyHandler
  15. ChatHandler
  16. ChatNavHandler
  17. FeedbagHandler
  18. ICBMHandler
  19. LocateHandler
  20. OServiceHandler
  21. PermitDenyHandler
  22. }
  23. // NewBOSRouter initializes and configures a new Router instance for handling
  24. // OSCAR protocol requests in the context of a Basic Oscar Service (BOS).
  25. func NewBOSRouter(h Handlers) oscar.Router {
  26. router := oscar.NewRouter()
  27. router.Register(wire.Alert, wire.AlertNotifyCapabilities, h.AlertHandler.NotifyCapabilities)
  28. router.Register(wire.Alert, wire.AlertNotifyDisplayCapabilities, h.AlertHandler.NotifyDisplayCapabilities)
  29. router.Register(wire.BART, wire.BARTUploadQuery, h.BARTHandler.UploadQuery)
  30. router.Register(wire.BART, wire.BARTDownloadQuery, h.BARTHandler.DownloadQuery)
  31. router.Register(wire.Buddy, wire.BuddyAddBuddies, h.BuddyHandler.AddBuddies)
  32. router.Register(wire.Buddy, wire.BuddyDelBuddies, h.BuddyHandler.DelBuddies)
  33. router.Register(wire.Buddy, wire.BuddyRightsQuery, h.BuddyHandler.RightsQuery)
  34. router.Register(wire.ChatNav, wire.ChatNavCreateRoom, h.ChatNavHandler.CreateRoom)
  35. router.Register(wire.ChatNav, wire.ChatNavRequestChatRights, h.ChatNavHandler.RequestChatRights)
  36. router.Register(wire.ChatNav, wire.ChatNavRequestExchangeInfo, h.ChatNavHandler.RequestExchangeInfo)
  37. router.Register(wire.ChatNav, wire.ChatNavRequestRoomInfo, h.ChatNavHandler.RequestRoomInfo)
  38. router.Register(wire.Feedbag, wire.FeedbagDeleteItem, h.FeedbagHandler.DeleteItem)
  39. router.Register(wire.Feedbag, wire.FeedbagEndCluster, h.FeedbagHandler.EndCluster)
  40. router.Register(wire.Feedbag, wire.FeedbagInsertItem, h.FeedbagHandler.InsertItem)
  41. router.Register(wire.Feedbag, wire.FeedbagQuery, h.FeedbagHandler.Query)
  42. router.Register(wire.Feedbag, wire.FeedbagQueryIfModified, h.FeedbagHandler.QueryIfModified)
  43. router.Register(wire.Feedbag, wire.FeedbagRightsQuery, h.FeedbagHandler.RightsQuery)
  44. router.Register(wire.Feedbag, wire.FeedbagStartCluster, h.FeedbagHandler.StartCluster)
  45. router.Register(wire.Feedbag, wire.FeedbagUpdateItem, h.FeedbagHandler.UpdateItem)
  46. router.Register(wire.Feedbag, wire.FeedbagUse, h.FeedbagHandler.Use)
  47. router.Register(wire.ICBM, wire.ICBMAddParameters, h.ICBMHandler.AddParameters)
  48. router.Register(wire.ICBM, wire.ICBMChannelMsgToHost, h.ICBMHandler.ChannelMsgToHost)
  49. router.Register(wire.ICBM, wire.ICBMClientErr, h.ICBMHandler.ClientErr)
  50. router.Register(wire.ICBM, wire.ICBMClientEvent, h.ICBMHandler.ClientEvent)
  51. router.Register(wire.ICBM, wire.ICBMEvilRequest, h.ICBMHandler.EvilRequest)
  52. router.Register(wire.ICBM, wire.ICBMParameterQuery, h.ICBMHandler.ParameterQuery)
  53. router.Register(wire.Locate, wire.LocateGetDirInfo, h.LocateHandler.GetDirInfo)
  54. router.Register(wire.Locate, wire.LocateRightsQuery, h.LocateHandler.RightsQuery)
  55. router.Register(wire.Locate, wire.LocateSetDirInfo, h.LocateHandler.SetDirInfo)
  56. router.Register(wire.Locate, wire.LocateSetInfo, h.LocateHandler.SetInfo)
  57. router.Register(wire.Locate, wire.LocateSetKeywordInfo, h.LocateHandler.SetKeywordInfo)
  58. router.Register(wire.Locate, wire.LocateUserInfoQuery, h.LocateHandler.UserInfoQuery)
  59. router.Register(wire.Locate, wire.LocateUserInfoQuery2, h.LocateHandler.UserInfoQuery2)
  60. router.Register(wire.PermitDeny, wire.PermitDenyRightsQuery, h.PermitDenyHandler.RightsQuery)
  61. router.Register(wire.OService, wire.OServiceClientOnline, h.OServiceHandler.ClientOnline)
  62. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  63. router.Register(wire.OService, wire.OServiceIdleNotification, h.OServiceHandler.IdleNotification)
  64. router.Register(wire.OService, wire.OServiceNoop, h.OServiceHandler.Noop)
  65. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  66. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  67. router.Register(wire.OService, wire.OServiceServiceRequest, h.OServiceHandler.ServiceRequest)
  68. router.Register(wire.OService, wire.OServiceSetUserInfoFields, h.OServiceHandler.SetUserInfoFields)
  69. router.Register(wire.OService, wire.OServiceUserInfoQuery, h.OServiceHandler.UserInfoQuery)
  70. router.Register(wire.OService, wire.OServiceSetPrivacyFlags, h.OServiceHandler.SetPrivacyFlags)
  71. return router
  72. }
  73. // NewChatRouter initializes and configures a new Router instance specifically
  74. // for handling chat-related OSCAR protocol requests.
  75. func NewChatRouter(h Handlers) oscar.Router {
  76. router := oscar.NewRouter()
  77. router.Register(wire.Chat, wire.ChatChannelMsgToHost, h.ChatHandler.ChannelMsgToHost)
  78. router.Register(wire.OService, wire.OServiceClientOnline, h.ClientOnline)
  79. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  80. router.Register(wire.OService, wire.OServiceIdleNotification, h.OServiceHandler.IdleNotification)
  81. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  82. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  83. router.Register(wire.OService, wire.OServiceSetUserInfoFields, h.OServiceHandler.SetUserInfoFields)
  84. router.Register(wire.OService, wire.OServiceUserInfoQuery, h.OServiceHandler.UserInfoQuery)
  85. return router
  86. }
  87. // NewChatNavRouter initializes and configures a new Router instance for
  88. // handling OSCAR protocol requests in the context of the ChatNav service.
  89. func NewChatNavRouter(h Handlers) oscar.Router {
  90. router := oscar.NewRouter()
  91. router.Register(wire.ChatNav, wire.ChatNavCreateRoom, h.ChatNavHandler.CreateRoom)
  92. router.Register(wire.ChatNav, wire.ChatNavRequestChatRights, h.ChatNavHandler.RequestChatRights)
  93. router.Register(wire.ChatNav, wire.ChatNavRequestExchangeInfo, h.ChatNavHandler.RequestExchangeInfo)
  94. router.Register(wire.ChatNav, wire.ChatNavRequestRoomInfo, h.ChatNavHandler.RequestRoomInfo)
  95. router.Register(wire.OService, wire.OServiceClientOnline, h.ClientOnline)
  96. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  97. router.Register(wire.OService, wire.OServiceIdleNotification, h.OServiceHandler.IdleNotification)
  98. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  99. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  100. router.Register(wire.OService, wire.OServiceSetUserInfoFields, h.OServiceHandler.SetUserInfoFields)
  101. router.Register(wire.OService, wire.OServiceUserInfoQuery, h.OServiceHandler.UserInfoQuery)
  102. return router
  103. }
  104. func NewAlertRouter(h Handlers) oscar.Router {
  105. router := oscar.NewRouter()
  106. router.Register(wire.Alert, wire.AlertNotifyCapabilities, h.AlertHandler.NotifyCapabilities)
  107. router.Register(wire.Alert, wire.AlertNotifyDisplayCapabilities, h.AlertHandler.NotifyDisplayCapabilities)
  108. router.Register(wire.Alert, wire.AlertUserOnline, h.AlertHandler.NotifyDisplayCapabilities)
  109. router.Register(wire.OService, wire.OServiceClientOnline, h.ClientOnline)
  110. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  111. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  112. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  113. return router
  114. }
  115. func NewBARTRouter(h Handlers) oscar.Router {
  116. router := oscar.NewRouter()
  117. router.Register(wire.BART, wire.BARTUploadQuery, h.BARTHandler.UploadQuery)
  118. router.Register(wire.BART, wire.BARTDownloadQuery, h.BARTHandler.DownloadQuery)
  119. router.Register(wire.OService, wire.OServiceClientOnline, h.ClientOnline)
  120. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  121. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  122. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  123. return router
  124. }
  125. func NewAdminRouter(h Handlers) oscar.Router {
  126. router := oscar.NewRouter()
  127. router.Register(wire.OService, wire.OServiceClientOnline, h.OServiceHandler.ClientOnline)
  128. router.Register(wire.OService, wire.OServiceClientVersions, h.OServiceHandler.ClientVersions)
  129. router.Register(wire.OService, wire.OServiceRateParamsQuery, h.OServiceHandler.RateParamsQuery)
  130. router.Register(wire.OService, wire.OServiceRateParamsSubAdd, h.OServiceHandler.RateParamsSubAdd)
  131. router.Register(wire.Admin, wire.AdminAcctConfirmRequest, h.AdminHandler.ConfirmRequest)
  132. router.Register(wire.Admin, wire.AdminInfoQuery, h.AdminHandler.InfoQuery)
  133. router.Register(wire.Admin, wire.AdminInfoChangeRequest, h.AdminHandler.InfoChangeRequest)
  134. return router
  135. }