Пример #1
0
 public void TryEnterRoom(MucRoomMember member, Presence presence)
 {
     if (MucHelpers.IsJoinRequest(presence))
     {
         if (CanEnterRoom(member, presence))
         {
             if (RoomSettings.IsNew)
             {
                 member.Affiliation = Affiliation.owner;
                 member.Role        = Role.moderator;
             }
             //enter
             members.Add(member);
             RoomSettings.UpdateMemberInfo(member.RealJid, member.Affiliation, member.Role);                    //Update settings on enter
             //subscribe to events
             SetMemberEvents(member);
             MemberEnter(member);
         }
     }
     else
     {
         ErrorPresence(presence, ErrorCondition.BadRequest);
         member.Send(presence);
     }
 }
Пример #2
0
        private bool CanEnterRoom(MucRoomMember member, Presence presence)
        {
            if (RoomSettings.PasswordProtected)
            {
                string password = MucHelpers.GetPassword(presence);
                if (!RoomSettings.Password.Equals(password, StringComparison.Ordinal))
                {
                    // Return error
                    ErrorPresence(presence, ErrorCondition.NotAuthorized, 401);
                    member.Send(presence);
                    return(false);
                }
            }

            if (RoomSettings.UserNamesOnly)
            {
                if (!presence.From.User.Equals(presence.To.Resource))
                {
                    // username tries to enter with not his username
                    ErrorPresence(presence,
                                  ErrorCondition.Conflict, 406);
                    member.Send(presence);
                    return(false);
                }
            }

            // Check member
            if (RoomSettings.IsMember(presence.From))
            {
                // Add new
                member.Affiliation = RoomSettings.GetMemeberAffilation(presence.From);
                member.Role        = RoomSettings.GetMemeberRole(member.Affiliation);

                if (member.Affiliation == Affiliation.outcast)
                {
                    ErrorPresence(presence, ErrorCondition.Conflict, 403);
                    member.Send(presence);
                    return(false);
                }
                if (member.Role == Role.none)
                {
                    ErrorPresence(presence,
                                  ErrorCondition.Conflict, 403);
                    member.Send(presence);
                    return(false);
                }
            }
            else
            {
                // Return error
                ErrorPresence(presence, ErrorCondition.RegistrationRequired, 407);
                member.Send(presence);
                return(false);
            }
            return(true);
        }
Пример #3
0
 public override void HandlePresence(XmppStream stream, Presence presence, XmppHandlerContext context)
 {
     //Presence to open new room
     if (MucHelpers.IsJoinRequest(presence))
     {
         //Register
         Service.CreateRoom(new Jid(presence.To.Bare), null);
         Service.HandlerManager.ProcessStreamElement(presence, stream);//Forward to room
     }
     else
     {
         //Return error
         presence.Type  = PresenceType.error;
         presence.Error = new Error(ErrorType.cancel, ErrorCondition.NotAllowed);
         presence.SwitchDirection();
         context.Sender.SendTo(stream, presence);
     }
 }