void Thread :: ShutdownInternalThread(bool waitForThread) { if (IsInternalThreadRunning()) { (void) SendMessageToInternalThread(MessageRef()); // a NULL message ref tells him to quit if (waitForThread) WaitForInternalThreadToExit(); } }
MessageRef SLIPFramedDataMessageIOGateway :: PopNextOutgoingMessage() { MessageRef msg = RawDataMessageIOGateway::PopNextOutgoingMessage(); if (msg() == NULL) return MessageRef(); MessageRef slipMsg = GetLightweightCopyOfMessageFromPool(*msg()); if (slipMsg() == NULL) return MessageRef(); (void) slipMsg()->RemoveName(PR_NAME_DATA_CHUNKS); // make sure we don't modify the field object in (msg) // slipMsg will be like (msg), except that we've slip-encoded each data item const uint8 * buf; uint32 numBytes; for (int32 i=0; msg()->FindData(PR_NAME_DATA_CHUNKS, B_ANY_TYPE, i, (const void **) &buf, &numBytes) == B_NO_ERROR; i++) { ByteBufferRef slipData = SLIPEncodeBytes(buf, numBytes); if ((slipData()==NULL)||(slipMsg()->AddFlat(PR_NAME_DATA_CHUNKS, slipData) != B_NO_ERROR)) return MessageRef(); } return slipMsg; }
virtual MessageRef recv(int32_t timeout) { reading = true; int64_t end = Util::currentTimeMillis() + timeout; while(messages.empty()) { if(timeout == -1) { group->update(-1); } else { int64_t now = Util::currentTimeMillis(); int64_t left = end - now; if(left < 1) { reading = false; return MessageRef(); } group->update((int32_t) left); } } MessageRef ret(messages.front()); messages.pop_front(); reading = false; return ret; }
MessageRef ReadZipFile(DataIO & readFrom, bool loadData) { TCHECKPOINT; static const int NAME_BUF_LEN = 8*1024; // names longer than 8KB are ridiculous anyway! char * nameBuf = newnothrow_array(char, NAME_BUF_LEN); if (nameBuf) { MessageRef ret = GetMessageFromPool(); if (ret()) { zlib_filefunc_def zdefs = { fopen_dataio_func, fread_dataio_func, fwrite_dataio_func, ftell_dataio_func, fseek_dataio_func, fclose_dataio_func, ferror_dataio_func, &readFrom }; zipFile zf = unzOpen2(NULL, &zdefs); if (zf != NULL) { if (ReadZipFileAux(zf, *ret(), nameBuf, NAME_BUF_LEN, loadData) != B_NO_ERROR) ret.Reset(); unzClose(zf); } else ret.Reset(); // failure! } delete [] nameBuf; return ret; } else WARN_OUT_OF_MEMORY; return MessageRef(); }
void MailMessenger::authConnected(WP::err error) { if (error == WP::kContactNeeded) { startContactRequest(); return; } else if (error != WP::kOk) { emit jobDone(error); return; } MessageChannelRef targetMessageChannel = MessageChannelRef(); if (message->getChannel().staticCast<MessageChannel>()->isNewLocale()) { targetMessageChannel = MessageChannelRef( new MessageChannel(message->getChannel().staticCast<MessageChannel>(), targetContact, targetContact->getKeys()->getMainKeyId())); } QByteArray data; ProtocolOutStream outStream(&data); IqOutStanza *iqStanza = new IqOutStanza(kSet); outStream.pushStanza(iqStanza); Contact *myself = userIdentity->getMyself(); OutStanza *messageStanza = new OutStanza("put_message"); messageStanza->addAttribute("server_user", targetUser); messageStanza->addAttribute("channel", message->getChannel()->getUid()); outStream.pushChildStanza(messageStanza); QString signatureKeyId = myself->getKeys()->getMainKeyId(); // write new channel if (targetMessageChannel != NULL) { error = XMLSecureParcel::write(&outStream, myself, signatureKeyId, targetMessageChannel.data(), "channel"); if (error != WP::kOk) { emit jobDone(error); return; } } // write new channel info MessageChannelInfoRef info = message->getChannelInfo(); if (info->isNewLocale()) { error = XMLSecureParcel::write(&outStream, myself, signatureKeyId, info.data(), "channel_info"); if (error != WP::kOk) { emit jobDone(error); return; } } // write message error = XMLSecureParcel::write(&outStream, myself, signatureKeyId, message.data(), "message"); if (error != WP::kOk) { emit jobDone(error); return; } outStream.flush(); message = MessageRef(); serverReply = remoteConnection->send(data); connect(serverReply, SIGNAL(finished(WP::err)), this, SLOT(handleReply(WP::err))); }