Просмотр исходного кода

fix broken block/unblock caused by refactoring

Mike 2 лет назад
Родитель
Сommit
62cde055e9
3 измененных файлов с 25 добавлено и 17 удалено
  1. 20 8
      server/feedbag.go
  2. 4 8
      server/feedbag_test.go
  3. 1 1
      server/locate.go

+ 20 - 8
server/feedbag.go

@@ -351,8 +351,18 @@ func (s FeedbagService) DeleteItemHandler(sm SessionManager, sess *Session, fm F
 
 	for _, item := range snacPayloadIn.Items {
 		if item.ClassID == oscar.FeedbagClassIDDeny {
-			// notify previously blocked users that user is back online
-			if err := NotifyArrival(sess, sm, fm); err != nil {
+			err := NotifyBuddyArrived(item.Name, sess.ScreenName, sm)
+			switch {
+			case errors.Is(err, ErrSessNotFound):
+				continue
+			case err != nil:
+				return XMessage{}, err
+			}
+			err = NotifyBuddyArrived(sess.ScreenName, item.Name, sm)
+			switch {
+			case errors.Is(err, ErrSessNotFound):
+				continue
+			case err != nil:
 				return XMessage{}, err
 			}
 		}
@@ -380,14 +390,11 @@ func (s FeedbagService) StartClusterHandler(oscar.SNAC_0x13_0x11_FeedbagStartClu
 func NotifyBuddyArrived(screenNameFrom, screenNameTo string, sm SessionManager) error {
 	sess, err := sm.RetrieveByScreenName(screenNameFrom)
 	switch {
-	case errors.Is(err, ErrSessNotFound):
-		fallthrough
-	case sess.Invisible(): // don't tell user this buddy is online
-		return nil
 	case err != nil:
 		return err
+	case sess.Invisible(): // don't tell user this buddy is online
+		return nil
 	}
-
 	sm.SendToScreenName(screenNameTo, XMessage{
 		snacFrame: oscar.SnacFrame{
 			FoodGroup: BUDDY,
@@ -416,7 +423,12 @@ func NotifyBuddyDeparted(screenNameFrom, screenNameTo string, sm SessionManager)
 			SubGroup:  BuddyDeparted,
 		},
 		snacOut: oscar.SNAC_0x03_0x0B_BuddyDeparted{
-			TLVUserInfo: sess.GetTLVUserInfo(),
+			TLVUserInfo: oscar.TLVUserInfo{
+				// don't include the TLV block, otherwise the AIM client fails
+				// to process the block event
+				ScreenName:   sess.ScreenName,
+				WarningLevel: sess.GetWarning(),
+			},
 		},
 	})
 

+ 4 - 8
server/feedbag_test.go

@@ -433,10 +433,8 @@ func TestInsertItemHandler(t *testing.T) {
 						},
 						snacOut: oscar.SNAC_0x03_0x0B_BuddyDeparted{
 							TLVUserInfo: oscar.TLVUserInfo{
-								ScreenName: "user_screen_name",
-								TLVBlock: oscar.TLVBlock{
-									TLVList: defaultSess.GetUserInfo(),
-								},
+								ScreenName:   "user_screen_name",
+								WarningLevel: 0,
 							},
 						},
 					},
@@ -450,10 +448,8 @@ func TestInsertItemHandler(t *testing.T) {
 						},
 						snacOut: oscar.SNAC_0x03_0x0B_BuddyDeparted{
 							TLVUserInfo: oscar.TLVUserInfo{
-								ScreenName: "buddy_1",
-								TLVBlock: oscar.TLVBlock{
-									TLVList: defaultSess.GetUserInfo(),
-								},
+								ScreenName:   "buddy_1",
+								WarningLevel: 0,
 							},
 						},
 					},

+ 1 - 1
server/locate.go

@@ -128,7 +128,7 @@ func (s LocateService) UserInfoQuery2Handler(sess *Session, sm SessionManager, f
 	blocked, err := fm.Blocked(sess.ScreenName, snacPayloadIn.ScreenName)
 	switch {
 	case err != nil:
-		return XMessage{}, nil
+		return XMessage{}, err
 	case blocked != BlockedNo:
 		return XMessage{
 			snacFrame: oscar.SnacFrame{