Initial commit
[remote/remote-mci.git] / protocols / MsgPayload.cc
blob1fc6faba61cccd5feb8e9a68489fe454b37d669b
1 #include "MsgPayload.h"
2 #include "macros.h"
3 namespace remote { namespace protocols {
5 MsgPayload::MsgPayload(uint8_t*& buffer, uint32_t& buflen)
7 data = NULL;
8 buffer = this->read(buffer,buflen);
11 MsgPayload::MsgPayload()
13 data = NULL;
14 length = 0;
17 MsgPayload::MsgPayload(const MsgPayload& o)
19 data = NULL;
20 setPayload(o.length,o.data);
23 MsgPayload::MsgPayload(const std::string& str)
25 data = NULL;
26 setPayload(str.length(),(uint8_t*)(str.c_str()));
29 MsgPayload::MsgPayload(BaseMsg& baseMsg)
31 length = baseMsg.getLength();
32 data = new uint8_t[length];
33 uint32_t len = length;
34 baseMsg.write(data,len);
37 MsgPayload::~MsgPayload()
39 if (data)
41 delete data;
42 data = 0;
46 const MsgPayload& MsgPayload::operator = (const MsgPayload& o)
48 setPayload(o.length,o.data);
49 return *this;
52 const MsgPayload& MsgPayload::operator = (const std::string& s)
54 setPayload(s.length(),(uint8_t*)(s.c_str()));
55 return *this;
58 uint32_t MsgPayload::getLength()
60 return sizeof(length)+length;
63 uint8_t* MsgPayload::read(uint8_t* buffer, uint32_t& buflen)
65 buffer = readvalue(length,buffer,buflen);
66 if (length > buflen)
68 log("Payload length %u greater than buffer length %u!\n",length,buflen);
69 __THROW__ ("Payload length greater than buffer length!");
72 if (data)
74 delete data;
75 data = 0;
78 if ( length > 0 )
80 data = new uint8_t[length];
82 memcpy(data,buffer,length);
83 buffer+=length;
84 buflen-=length;
87 return buffer;
90 uint8_t* MsgPayload::write(uint8_t* buffer, uint32_t& buflen)
92 buffer = writevalue(length,buffer,buflen);
94 if (length > buflen)
96 __THROW__ ("Payload length longer than buffer!");
99 if ( length > 0 )
101 memcpy(buffer,data,length);
102 buffer+=length;
103 buflen-=length;
105 return buffer;
108 void MsgPayload::print(_IO_FILE* s)
110 fprintf(s,"MESSAGE MsgPayload\n");
111 fprintf(s,"length: %u\n",length);
114 void MsgPayload::setPayload(uint32_t p_length, const uint8_t* p_data)
116 if (data)
118 delete data;
120 length = p_length;
121 data = new uint8_t[length];
122 memcpy(data,p_data,length);
125 std::string MsgPayload::getString()
127 if (data)
129 return std::string((char*)data,length);
131 else
133 return std::string("");
137 uint32_t MsgPayload::getDataLength()
139 return length;
142 const uint8_t* MsgPayload::getData()
144 return data;