#include "Message.h"
#include <cassert>
namespace panda { namespace protocol { namespace websocket {
bool Message::add_frame (const Frame& frame) {
assert(_state != State::DONE);
if (frame.error()) {
_error = frame.error();
_state = State::DONE;
return true;
}
if (!_frame_count++) {
_opcode = frame.opcode();
if (_opcode == Opcode::CLOSE) {
_close_code = frame.close_code();
_close_message = frame.close_message();
}
}
if (_max_size && _payload_length + frame.payload_length() > _max_size) {
_error = errc::max_message_size;
_state = State::DONE;
return true;
}
for (const auto& s : frame.payload) {
_payload_length += s.length();
payload.push_back(s);
}
if (frame.final()) _state = State::DONE;
return _state == State::DONE;
}
}}}