uint32_t Node::encode(std::vector<uint8_t>& buffer) const { uint32_t size = 0; uint32_t ret = 0; buffer.push_back(static_cast<uint8_t>(marker)); size += 1; switch (marker) { case Marker::Number: ret = writeNumber(buffer, doubleValue); break; case Marker::Boolean: ret = writeBoolean(buffer, boolValue); break; case Marker::String: ret = writeString(buffer, stringValue); break; case Marker::Object: ret = writeObject(buffer, mapValue); break; case Marker::Null: /* Null */; break; case Marker::Undefined: /* Undefined */; break; case Marker::ECMAArray: ret = writeECMAArray(buffer, mapValue); break; case Marker::ObjectEnd: break; // should not happen case Marker::StrictArray: ret = writeStrictArray(buffer, vectorValue); break; case Marker::Date: ret = writeDate(buffer, dateValue); break; case Marker::LongString: ret = writeLongString(buffer, stringValue); break; case Marker::XMLDocument: ret = writeXMLDocument(buffer, stringValue); break; case Marker::TypedObject: ret = writeTypedObject(buffer); break; case Marker::SwitchToAMF3: ret = writeSwitchToAMF3(buffer); break; default: return 0; } size += ret; return size; }
void MessageEncoder::writeHeader(const Header& msg) { size_t fields(optimise ? optimisable(msg) : 5); if (fields) { void* token = startList8(&qpid::amqp::message::HEADER); writeBoolean(msg.isDurable()); if (fields > 1) writeUByte(msg.getPriority()); if (msg.getTtl()) writeUInt(msg.getTtl()); else if (fields > 2) writeNull(); if (msg.isFirstAcquirer()) writeBoolean(true); else if (fields > 3) writeNull(); if (msg.getDeliveryCount()) writeUInt(msg.getDeliveryCount()); else if (fields > 4) writeNull(); endList8(fields, token); } }
void Writer::write(Appender& appender, const Value& value, Size indent) { switch (value.getType()) { case Value::Type::Null: writeNull(appender); break; case Value::Type::Boolean: writeBoolean(appender, value.asBoolean()); break; case Value::Type::Number: writeNumber(appender, value.asDouble()); break; case Value::Type::String: writeString(appender, value.asString()); break; case Value::Type::Array: writeArray(appender, value, indent); break; case Value::Type::Object: writeObject(appender, value, indent); break; } }
void DataWriter::writeBooleanProperty(const string& name,bool value) { writePropertyName(name); writeBoolean(value); }
void MessageEncoder::writeMap(const qpid::types::Variant::Map& properties, const Descriptor* d, bool large) { void* token = large ? startMap32(d) : startMap8(d); for (qpid::types::Variant::Map::const_iterator i = properties.begin(); i != properties.end(); ++i) { writeString(i->first); switch (i->second.getType()) { case qpid::types::VAR_MAP: case qpid::types::VAR_LIST: //not allowed (TODO: revise, only strictly true for application-properties) whereas this is now a more general method) QPID_LOG(warning, "Ignoring nested map/list; not allowed in application-properties for AMQP 1.0"); case qpid::types::VAR_VOID: writeNull(); break; case qpid::types::VAR_BOOL: writeBoolean(i->second); break; case qpid::types::VAR_UINT8: writeUByte(i->second); break; case qpid::types::VAR_UINT16: writeUShort(i->second); break; case qpid::types::VAR_UINT32: writeUInt(i->second); break; case qpid::types::VAR_UINT64: writeULong(i->second); break; case qpid::types::VAR_INT8: writeByte(i->second); break; case qpid::types::VAR_INT16: writeShort(i->second); break; case qpid::types::VAR_INT32: writeInt(i->second); break; case qpid::types::VAR_INT64: writeULong(i->second); break; case qpid::types::VAR_FLOAT: writeFloat(i->second); break; case qpid::types::VAR_DOUBLE: writeDouble(i->second); break; case qpid::types::VAR_STRING: if (i->second.getEncoding() == BINARY) { writeBinary(i->second); } else { writeString(i->second); } break; case qpid::types::VAR_UUID: writeUuid(i->second); break; } } if (large) endMap32(properties.size()*2, token); else endMap8(properties.size()*2, token); }
bool Configurator::writeConfiguration (const char *filename) { std::ofstream file(filename == 0 ? Configurator::filename : filename, std::ios_base::out | std::ios_base::trunc); if (!file.good()) return false; if (!writeInt(file, 3)) return false; std::vector<VrrpService *> services = Configurator::services(); if (!writeInt(file, services.size())) return false; for (std::vector<VrrpService *>::const_iterator it = services.begin(); it != services.end(); ++it) { const VrrpService *service = *it; char ifname[IFNAMSIZ]; if_indextoname(service->interface(), ifname); int flags = 0; if (!service->hasAutoPrimaryIpAddress()) flags |= FLAG_HAS_PRIMARY_IP_ADDRESS; if ( !writeString(file, ifname) || !writeInt(file, service->virtualRouterId()) || !writeInt(file, service->family()) || !writeInt(file, service->priority()) || !writeInt(file, service->advertisementInterval() * 10) || !writeBoolean(file, service->acceptMode()) || !writeBoolean(file, service->preemptMode()) || !writeBoolean(file, service->enabled()) || !writeInt(file, flags)) return false; if (flags & FLAG_HAS_PRIMARY_IP_ADDRESS) { if (!writeIp(file, service->primaryIpAddress())) return false; } if ( !writeString(file, service->masterCommand()) || !writeString(file, service->backupCommand()) || !writeInt(file, service->vlanId())) { return false; } const IpSubnetSet &subnets = service->subnets(); if (!writeInt(file, subnets.size())) return false; for (IpSubnetSet::const_iterator subnet = subnets.begin(); subnet != subnets.end(); ++subnet) { if (!writeSubnet(file, *subnet)) return false; } } return true; }