/* * msg_queue_flush() * * wysy³a wiadomo¶ci z kolejki. * * 0 je¶li wys³ano, -1 je¶li nast±pi³ b³±d przy wysy³aniu, -2 je¶li * kolejka pusta. */ int msg_queue_flush() { list_t l = msg_queue; if (!l) return -2; for (; l; l = l->next) { struct msg_queue *m = l->data; int new_seq; unsigned char *tmp = xstrdup(m->msg); iso_to_cp(tmp); if (m->uin_count == 1) { if (m->secure) msg_encrypt(m->uins[0], &tmp); new_seq = gg_send_message_richtext(sess, m->msg_class, m->uins[0], tmp, m->format, m->formatlen); } else new_seq = gg_send_message_confer_richtext(sess, m->msg_class, m->uin_count, m->uins, tmp, m->format, m->formatlen); xfree(tmp); if (new_seq != -1) m->msg_seq = new_seq; else return -1; } return 0; }
bool GaduChatService::sendMessage(const Chat &chat, FormattedMessage &message, bool silent) { kdebugf(); QString plain = message.toPlain(); QList<Contact> contacts = chat.contacts().toContactList(); if (plain.isEmpty()) // for image sending message.prepend(FormattedMessagePart(" ", false, false, false, QColor(0, 0, 0))); unsigned int uinsCount = 0; unsigned int formatsSize = 0; QScopedArrayPointer<unsigned char> formats(GaduFormatter::createFormats(Protocol->account(), message, formatsSize)); bool stop = false; kdebugmf(KDEBUG_INFO, "\n%s\n", (const char *)unicode2latin(plain)); QByteArray data = plain.toUtf8(); emit filterRawOutgoingMessage(chat, data, stop); plain = QString::fromUtf8(data); emit filterOutgoingMessage(chat, plain, stop); if (stop) { kdebugmf(KDEBUG_FUNCTION_END, "end: filter stopped processing\n"); return false; } if (data.length() >= 2000) { MessageDialog::show("dialog-warning", tr("Kadu"), tr("Filtered message too long (%1>=%2)").arg(data.length()).arg(2000)); kdebugmf(KDEBUG_FUNCTION_END, "end: filtered message too long\n"); return false; } uinsCount = contacts.count(); int messageId = -1; if (uinsCount > 1) { QScopedArrayPointer<UinType> uins(new UinType[uinsCount]); unsigned int i = 0; foreach (const Contact &contact, contacts) uins[i++] = Protocol->uin(contact); if (formatsSize) messageId = gg_send_message_confer_richtext( Protocol->gaduSession(), GG_CLASS_CHAT, uinsCount, uins.data(), (unsigned char *)data.data(), formats.data(), formatsSize); else messageId = gg_send_message_confer( Protocol->gaduSession(), GG_CLASS_CHAT, uinsCount, uins.data(), (unsigned char *)data.data()); }