//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-// bool OSX_MSF_Shell_Bind_32::initialize(const unsigned int &bport) { port = bport; Core::Logger::logIt ( "init payload... " ); initPayload(); Core::Logger::logItLn ( "done" ); return true; }
/** Packs a message into a zeromq message */ static zmq::message_t pack(const Message &msg) { ::capnp::MallocMessageBuilder builder; auto sermsg = builder.initRoot<serialize::Message>(); sermsg.setEndpoint(msg.endpoint()); sermsg.setExpectsAnswer(msg.expectsAnswer()); sermsg.setId(msg.id()); sermsg.setOriginator(msg.originator()); sermsg.setSchema(msg.schema()); sermsg.setType(static_cast<int>(msg.type())); if (!msg.data().empty()) { auto payload_builder = sermsg.initPayload(msg.data().size()); memcpy(&payload_builder[0], msg.data().data(), msg.data().size()); } auto data = capnp::messageToFlatArray(builder); auto byte_size = data.size() * sizeof(capnp::word); zmq::message_t ret(byte_size); memcpy(ret.data(), data.begin(), byte_size); return ret; }
bool TalkyMessage::deSerialise(char* &message, int &remainingBytesReceived) { try { memcpy(Company, message, 2); memcpy(Protocol, message+2, 2); memcpy(&Version, message+4, 2); memcpy(&Timestamp, message+6, 4); memcpy(&Type, message+10, 2); unsigned short tempLength; memcpy(&tempLength, message+12, 2); initPayload(tempLength); if (getTotalLength() > remainingBytesReceived) return false; memcpy(Payload, message+14, PayloadLength); if (message[getTotalLength()-1] != OFXTALKY_ENDCHAR) { throw("TalkyMessage.cpp: End charachter of message is wrong when deserialising"); return false; } } catch (string e) { throw("TalkyMessage.cpp: Failed to deserialise due to exception, likely memory overflow"); return false; } message += getTotalLength(); remainingBytesReceived -= getTotalLength(); return true; }
void TalkyMessage::setPayload(char* const message, unsigned short length) { initPayload(length); memcpy(Payload, message, length); }