| 846 | } |
| 847 | |
| 848 | bool V1Transport::SetMessageToSend(CSerializedNetMsg& msg) noexcept |
| 849 | { |
| 850 | AssertLockNotHeld(m_send_mutex); |
| 851 | // Determine whether a new message can be set. |
| 852 | LOCK(m_send_mutex); |
| 853 | if (m_sending_header || m_bytes_sent < m_message_to_send.data.size()) return false; |
| 854 | |
| 855 | // create dbl-sha256 checksum |
| 856 | uint256 hash = Hash(msg.data); |
| 857 | |
| 858 | // create header |
| 859 | CMessageHeader hdr(m_magic_bytes, msg.m_type.c_str(), msg.data.size()); |
| 860 | memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE); |
| 861 | |
| 862 | // serialize header |
| 863 | m_header_to_send.clear(); |
| 864 | VectorWriter{m_header_to_send, 0, hdr}; |
| 865 | |
| 866 | // update state |
| 867 | m_message_to_send = std::move(msg); |
| 868 | m_sending_header = true; |
| 869 | m_bytes_sent = 0; |
| 870 | return true; |
| 871 | } |
| 872 | |
| 873 | Transport::BytesToSend V1Transport::GetBytesToSend(bool have_next_message) const noexcept |
| 874 | { |