void Connection::sendMessage(NetworkMessage& msg) { if(m_state != STATE_CONNECTED){ DEBUGPRINT(DEBUGPRINT_ERROR, DEBUGPRINT_LEVEL_OBLIGATORY, "Calling send when state != STATE_CONNECTED(state = %d)\n", m_state); return; } if(msg.getSize() == 0){ DEBUGPRINT(DEBUGPRINT_WARNING, DEBUGPRINT_LEVEL_OBLIGATORY, "Sending size = 0 in message\n"); return; } //add message size msg.addHeader(); //and encrypt if needed if(m_cryptoEnable && m_crypto){ m_crypto->encrypt(msg); } //and add checksum if needed if(m_checksumEnable){ msg.addChecksum(); } //wait until all bytes are sent int sendBytes = 0; do{ socketret_t b = send(m_socket, msg.getBuffer() + sendBytes, min(msg.getSize() - sendBytes, 1000), 0); if(b <= 0){ closeConnectionError(ERROR_SEND_FAIL); return; } sendBytes += b; } while(sendBytes < msg.getSize()); m_sentBytes += sendBytes; }