void OftHeader::writeData(QIODevice *dev) { DataUnit data; debug() << "Outgoing oft message with type" << hex << type; data.append<quint16>(type); data.append<quint64>(cookie); data.append<quint16>(encrypt); data.append<quint16>(compress); data.append<quint16>(totalFiles); data.append<quint16>(filesLeft); data.append<quint16>(totalParts); data.append<quint16>(partsLeft); data.append<quint32>(totalSize); data.append<quint32>(size); data.append<quint32>(modTime); data.append<quint32>(checksum); data.append<quint32>(receivedResourceForkChecksum); data.append<quint32>(resourceForkSize); data.append<quint32>(creationTime); data.append<quint32>(resourceForkChecksum); data.append<quint32>(bytesReceived); data.append<quint32>(receivedChecksum); { QByteArray ident = identification.toLatin1(); resizeArray(ident, 32); data.append(ident); } data.append<quint8>(flags); data.append<quint8>(0x1C); data.append<quint8>(0x11); { QByteArray dummy; resizeArray(dummy, 69); data.append(dummy); } resizeArray(macFileInfo, 16); data.append(macFileInfo); data.append<quint16>(CodecUtf16Be); data.append<quint16>(0); { QByteArray name = utf16Codec()->fromUnicode(fileName); name = name.mid(2); if (name.size() < 64) resizeArray(name, 64); else name.append("\0\0"); data.append(name); } DataUnit header; header.append<quint32>(0x4F465432); // Protocol version: "OFT2" header.append<quint16>(data.dataSize() + 6); header.append(data); dev->write(header.data()); }
QByteArray Channel1MessageData::fromUnicode(const QString &message, Channel1Codec charset) { QTextCodec *codec = 0; if (charset == CodecUtf16Be) codec = utf16Codec(); else codec = asciiCodec(); QByteArray data = codec->fromUnicode(message); if (charset == CodecUtf16Be) data = data.mid(2); // Remove BOM which are shown by some clients as an unknown symbol return data; }