MCPcopy Create free account
hub / github.com/MonaSolutions/MonaServer / writeOne

Method writeOne

MonaCore/sources/AMFReader.cpp:174–665  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

172}
173
174bool AMFReader::writeOne(UInt8 type, DataWriter& writer) {
175
176 switch (type) {
177
178 case AMF0_REF: {
179 packet.next();
180 UInt16 reference = packet.read16();
181 if(reference>=_amf0References.size()) {
182 ERROR("AMF0 reference not found")
183 return false;
184 }
185 if (writeReference(writer, (reference+1) << 1))
186 return true;
187 UInt32 reset(packet.position());
188 packet.reset(_amf0References[reference]);
189 bool referencing(_referencing);
190 _referencing = false;
191 bool written = readNext(writer);
192 _referencing = referencing;
193 packet.reset(reset);
194 return written;
195 }
196
197 case STRING: {
198 type = packet.read8();
199 UInt32 size(0);
200 if (type == AMF_LONG_STRING) {
201 size = packet.read32();
202 if (size > packet.available()) {
203 ERROR("AMF long string bad-formed with a ", size, " size exceeding the ", packet.available(), " bytes available");
204 return false;
205 }
206 writer.writeString(STR packet.current(), size);
207 packet.next(size);
208 return true;
209 }
210 const char* value(readText(size));
211 if (!value)
212 return false;
213 writer.writeString(value, size);
214 return true;
215 }
216
217 case BOOLEAN:
218 type = packet.read8();
219 writer.writeBoolean(_amf3 ? (type == AMF3_TRUE) : packet.read8()!=0x00);
220 return true;
221
222 case NUMBER: {
223 type = packet.read8();
224 if (!_amf3 || type==AMF3_NUMBER) {
225 writer.writeNumber(packet.readNumber<double>());
226 return true;
227 }
228 // Forced in AMF3 here!
229 UInt32 value = packet.read7BitValue();
230 if(value>AMF_MAX_INTEGER)
231 value-=(1<<29);

Callers

nothing calls this directly

Calls 15

read16Method · 0.80
positionMethod · 0.80
read8Method · 0.80
read32Method · 0.80
read7BitValueMethod · 0.80
errorMethod · 0.80
nextMethod · 0.45
sizeMethod · 0.45
resetMethod · 0.45
availableMethod · 0.45
writeStringMethod · 0.45
currentMethod · 0.45

Tested by

no test coverage detected