public override void HandleMessage(Streams.XmppStream stream, Message msg, XmppHandlerContext context) { //Private msg if (msg.Type == MessageType.chat) { if (Member.ResolveRoomJid(msg.From) == null) { //Error msg.SwitchDirection(); msg.From = Member.RoomFrom; msg.Type = MessageType.error; msg.Error = new Error(ErrorCondition.ItemNotFound); context.Sender.SendTo(stream, msg); } else { //Send msg.To = Member.RealJid; msg.From = Member.ResolveRoomJid(msg.From); Member.Send(msg); } } else { msg.SwitchDirection(); msg.From = Member.RoomFrom; msg.Type = MessageType.error; msg.Error = new Error(ErrorCondition.BadRequest); context.Sender.SendTo(stream, msg); } }
public override void HandlePresence(Streams.XmppStream stream, Presence presence, XmppHandlerContext context) { if (presence.Type == PresenceType.available || presence.Type == PresenceType.unavailable) { if (!ReferenceEquals(Member.Stream, stream)) { //Set stream Member.Stream = stream; if (presence.Type == PresenceType.available) { //If stream changed then we should broadcast presences Member.ReEnterRoom(); } } Member.ChangePesence(presence); } else { //Bad request presence.SwitchDirection(); presence.From = Member.RoomFrom; presence.Type = PresenceType.error; presence.Error = new Error(ErrorCondition.BadRequest); context.Sender.SendTo(stream, presence); } }
public override IQ HandleIQ(Streams.XmppStream stream, IQ iq, XmppHandlerContext context) { Unique unique = (Unique)iq.SelectSingleElement(typeof(Unique)); if (unique != null) { // Gen unique id unique.Value = UniqueId.CreateNewId(16); iq.Type = IqType.result; iq.SwitchDirection(); return(iq); } iq.SwitchDirection(); iq.Type = IqType.error; iq.Error = new Error(ErrorType.cancel, ErrorCondition.ItemNotFound); return(iq); }
public override void HandleMessage(Streams.XmppStream stream, Message msg, XmppHandlerContext context) { User user = (User)msg.SelectSingleElement(typeof(User)); if (user != null) { HandleUserMessage(msg, user, stream); } else { //Groupchat message MucRoomMember member = Room.GetRealMember(msg.From); if (member != null && ReferenceEquals(member.Stream, stream) && member.Role != Role.none) { if (msg.Type == MessageType.groupchat) { if (msg.Subject != null) { Room.ChangeSubject(member, msg.Subject); } else { MessageBroadcast(msg, member); } } else { msg.SwitchDirection(); msg.Type = MessageType.error; msg.Error = new Error(ErrorCondition.NotAcceptable); context.Sender.SendTo(stream, msg); } } else { msg.SwitchDirection(); msg.Type = MessageType.error; msg.Error = new Error(ErrorCondition.Forbidden); context.Sender.SendTo(stream, msg); } } }
public override void HandlePresence(Streams.XmppStream stream, Presence presence, XmppHandlerContext context) { string userName = presence.To.Resource; if (!string.IsNullOrEmpty(userName) && presence.Type == PresenceType.available) { //New member MucRoomMember member = Room.GetRealMember(presence.From); if (member != null) { if (ReferenceEquals(stream, member.Stream)) { if (!Room.TryNickChange(presence)) { ErrorPresence(presence, ErrorCondition.NotAcceptable); context.Sender.SendTo(stream, presence); } } else { //Conflict. user with this jid already in room ErrorPresence(presence, ErrorCondition.Conflict); context.Sender.SendTo(stream, presence); } } else { //Doesn't exists MucRoomMember newMember = new MucRoomMember(Room, presence.To, presence.From, stream, context); Room.TryEnterRoom(newMember, presence); } } else { ErrorPresence(presence, ErrorCondition.BadRequest); context.Sender.SendTo(stream, presence); } }