示例#1
0
        private void C_OmemoSessionBuildError(XMPPClient client, XMPP_API.Classes.Events.OmemoSessionBuildErrorEventArgs args)
        {
            Task.Run(() =>
            {
                ChatTable chat = ChatDBManager.INSTANCE.getChat(ChatTable.generateId(args.CHAT_JID, client.getXMPPAccount().getBareJid()));
                if (!(chat is null))
                {
                    // Add an error chat message:
                    ChatMessageTable msg = new ChatMessageTable()
                    {
                        id       = ChatMessageTable.generateErrorMessageId(AbstractMessage.getRandomId(), chat.id),
                        chatId   = chat.id,
                        date     = DateTime.Now,
                        fromUser = args.CHAT_JID,
                        isImage  = false,
                        message  = "Failed to encrypt and send " + args.MESSAGES.Count + " OMEMO message(s) with:\n" + args.ERROR,
                        state    = MessageState.UNREAD,
                        type     = MessageMessage.TYPE_ERROR
                    };
                    ChatDBManager.INSTANCE.setChatMessage(msg, true, false);

                    // Set chat messages to encrypted failed:
                    setOmemoChatMessagesSendFailed(args.MESSAGES, chat);
                }
            });
        }
示例#2
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private void OnOmemoSessionBuildError(XMPPClient xmppClient, OmemoSessionBuildErrorEventArgs args)
        {
            Task.Run(() =>
            {
                ChatModel chat;
                using (SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock())
                {
                    chat = DataCache.INSTANCE.GetChat(xmppClient.getXMPPAccount().getBareJid(), args.CHAT_JID, semaLock);
                }
                if (!(chat is null))
                {
                    // Add an error chat message:
                    ChatMessageModel msg = new ChatMessageModel()
                    {
                        chatId         = chat.id,
                        date           = DateTime.Now,
                        fromBareJid    = args.CHAT_JID,
                        isCC           = false,
                        isDummyMessage = false,
                        isEncrypted    = false,
                        isFavorite     = false,
                        isImage        = false,
                        message        = "Failed to encrypt and send " + args.MESSAGES.Count + " OMEMO message(s) with:\n" + args.ERROR,
                        stableId       = AbstractMessage.getRandomId(),
                        state          = MessageState.UNREAD,
                        type           = MessageMessage.TYPE_ERROR
                    };
                    DataCache.INSTANCE.AddChatMessage(msg, chat);

                    // Set chat messages to encrypted failed:
                    SetOmemoChatMessagesSendFailed(args.MESSAGES, chat);
                }
            });
        }
示例#3
0
        private async Task OnMucErrorMessageAsync(XMPPClient client, MUCErrorMessage errorMessage)
        {
            string room = Utils.getBareJidFromFullJid(errorMessage.getFrom());

            if (room is null)
            {
                return;
            }
            ChatModel chat;

            using (SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock())
            {
                chat = DataCache.INSTANCE.GetChat(client.getXMPPAccount().getBareJid(), room, semaLock);
            }
            if (chat is null || chat.muc is null)
            {
                return;
            }
            Logger.Error("Received an error message for MUC: " + chat.bareJid + "\n" + errorMessage.ERROR_MESSAGE);
            StopMucJoinHelper(chat);
            if (chat.muc.state != MucState.DISCONNECTED)
            {
                await SendMucLeaveMessageAsync(client, chat.muc);
            }
            using (SemaLock semaLock = chat.muc.NewSemaLock())
            {
                switch (errorMessage.ERROR_CODE)
                {
                // No access - user got baned:
                case 403:
                    chat.muc.state = MucState.BANED;
                    AddChatInfoMessage(chat, room, "Unable to join room!\nYou are baned from this room.");
                    return;

                default:
                    chat.muc.state = MucState.ERROR;
                    break;
                }
                chat.muc.Update();
            }

            // Add an error chat message:
            ChatMessageModel msg = new ChatMessageModel()
            {
                stableId    = errorMessage.ID ?? AbstractMessage.getRandomId(),
                chatId      = chat.id,
                date        = DateTime.Now,
                fromBareJid = Utils.getBareJidFromFullJid(errorMessage.getFrom()),
                isImage     = false,
                message     = "Code: " + errorMessage.ERROR_CODE + "\nType: " + errorMessage.ERROR_TYPE + "\nMessage:\n" + errorMessage.ERROR_MESSAGE,
                state       = MessageState.UNREAD,
                type        = MessageMessage.TYPE_ERROR
            };

            DataCache.INSTANCE.AddChatMessage(msg, chat);
        }
示例#4
0
        private void addChatInfoMessage(string chatId, string fromUser, string message)
        {
            ChatMessageTable msg = new ChatMessageTable
            {
                id       = ChatMessageTable.generateId(AbstractMessage.getRandomId(), chatId),
                chatId   = chatId,
                date     = DateTime.Now,
                fromUser = fromUser,
                isImage  = false,
                message  = message,
                state    = MessageState.UNREAD,
                type     = TYPE_CHAT_INFO
            };

            ChatDBManager.INSTANCE.setChatMessage(msg, true, false);
        }
示例#5
0
        private void AddChatInfoMessage(ChatModel chat, string fromBareJid, string message)
        {
            ChatMessageModel msg = new ChatMessageModel
            {
                chatId       = chat.id,
                fromBareJid  = fromBareJid,
                fromNickname = fromBareJid,
                date         = DateTime.Now,
                isImage      = false,
                message      = message,
                state        = MessageState.UNREAD,
                type         = TYPE_CHAT_INFO,
                stableId     = AbstractMessage.getRandomId()
            };

            DataCache.INSTANCE.AddChatMessage(msg, chat);
        }
示例#6
0
        private async Task onMUCErrorMessageAsync(XMPPClient client, MUCErrorMessage errorMessage)
        {
            string room = Utils.getBareJidFromFullJid(errorMessage.getFrom());

            if (room != null)
            {
                string    chatId = ChatTable.generateId(room, client.getXMPPAccount().getBareJid());
                ChatTable muc    = ChatDBManager.INSTANCE.getChat(chatId);
                if (muc != null)
                {
                    MUCChatInfoTable info = MUCDBManager.INSTANCE.getMUCInfo(chatId);
                    if (info != null)
                    {
                        Logger.Error("Received an error message for MUC: " + muc.chatJabberId + "\n" + errorMessage.ERROR_MESSAGE);

                        stopMUCJoinHelper(muc);

                        if (info.state != MUCState.DISCONNECTED)
                        {
                            await sendMUCLeaveMessageAsync(client, muc, info);
                        }

                        switch (errorMessage.ERROR_CODE)
                        {
                        // No access - user got baned:
                        case 403:
                            MUCDBManager.INSTANCE.setMUCState(info.chatId, MUCState.BANED, true);
                            addChatInfoMessage(info.chatId, room, "Unable to join room!\nYou are baned from this room.");
                            return;

                        default:
                            MUCDBManager.INSTANCE.setMUCState(info.chatId, MUCState.ERROR, true);
                            break;
                        }

                        // Add an error chat message:
                        ChatMessageTable msg = new ChatMessageTable()
                        {
                            id       = ChatMessageTable.generateErrorMessageId(errorMessage.ID ?? AbstractMessage.getRandomId(), muc.id),
                            chatId   = muc.id,
                            date     = DateTime.Now,
                            fromUser = errorMessage.getFrom(),
                            isImage  = false,
                            message  = "Code: " + errorMessage.ERROR_CODE + "\nType: " + errorMessage.ERROR_TYPE + "\nMessage:\n" + errorMessage.ERROR_MESSAGE,
                            state    = MessageState.UNREAD,
                            type     = MessageMessage.TYPE_ERROR
                        };
                        ChatDBManager.INSTANCE.setChatMessage(msg, true, false);
                    }
                }
            }
        }