35 # include <ace/Init_ACE.h>
36 # include <ace/config.h>
88 return __multi_name_space;
93 if (!contact.
getHost().empty()) {
105 if (store !=
nullptr) {
133 "enactConnection: SRC %s DST %s using carrier %s, MODE=%d, rev=%d",
149 yCError(NETWORK,
"Failure: cannot check subscriptions yet");
156 yCInfo(NETWORK,
"Success: port-to-port persistent connection added.");
172 if (reply.
check(
"carrier")) {
176 "Connection found between %s and %s using carrier %s",
182 return (carrier == style.
carrier) ? 0 : 1;
189 bool currentIsConnectionLess =
false;
190 bool currentIsPush =
true;
191 if (reply.
check(
"push")) {
194 if (reply.
check(
"connectionless")) {
195 currentIsConnectionLess = reply.
find(
"connectionless").
asBool();
197 if (currentIsConnectionLess && ((reversed && currentIsPush) || (!reversed && !currentIsPush))) {
242 ok = msg[0] ==
'A' || msg[0] ==
'R';
245 msg =
"no such connection";
252 yCError(NETWORK,
"%s %s",
"Failure:", msg.c_str());
254 yCInfo(NETWORK,
"%s %s",
"Success:", msg.c_str());
263 auto pos = carrier_name.find(
'+');
264 if (pos != std::string::npos) {
265 return carrier_name.substr(pos);
272 return carrier_name_with_params.substr(0, carrier_name_with_params.find(
'+'));
293 const std::string& dest,
298 "working on connection %s to %s (%s)",
303 if (dest.find(
' ') != std::string::npos || src.find(
' ') != std::string::npos) {
305 "Failure: no way to make connection %s->%s, one of the port names contains a space character.",
312 "METACONNECT: src=%s dest=%s style=%s",
322 "DYNAMIC_SRC: name=%s, carrier=%s",
326 "DYNAMIC_DST: name=%s, carrier=%s",
332 "Failure: no way to make connection, invalid source '%s'",
338 "Failure: no way to make connection, invalid destination '%s'",
339 dynamicDest.
getName().c_str());
353 if (
needsLookup(dynamicSrc) && (topicalNeedsLookup || !topical)) {
359 "Failure: could not find source port %s",
364 staticSrc = dynamicSrc;
367 staticSrc = dynamicSrc;
376 if (
needsLookup(dynamicDest) && (topicalNeedsLookup || !topical)) {
382 "Failure: could not find destination port %s",
387 staticDest = dynamicDest;
390 staticDest = dynamicDest;
394 "STATIC_SRC: name=%s, carrier=%s",
398 "STATIC_DST: name=%s, carrier=%s",
412 std::string carrierConstraint;
415 bool srcIsCompetent =
false;
416 bool srcIsTopic =
false;
421 "staticSrc.getCarrier = %s",
426 if (srcCarrier !=
nullptr) {
428 "srcCarrier is NOT null; its name is %s",
429 srcCarrier->
getName().c_str());
431 if (!srcBootstrap.empty()) {
434 "it is competent (bootstrapname is %s), while its name is %s",
435 srcBootstrap.c_str(),
436 srcCarrier->
getName().c_str());
437 srcIsCompetent =
true;
443 "it is NOT competent. its constraint is %s",
444 carrierConstraint.c_str());
447 srcCarrier =
nullptr;
455 bool destIsCompetent =
false;
456 bool destIsTopic =
false;
459 Carrier* destCarrier =
nullptr;
461 "staticDest.getCarrier = %s",
466 if (destCarrier !=
nullptr) {
468 "destCarrier is NOT null; its name is %s",
469 destCarrier->
getName().c_str());
471 if (!destBootstrap.empty()) {
473 "it is competent (bootstrapname is %s), while its name is %s",
474 destBootstrap.c_str(),
475 destCarrier->
getName().c_str());
476 destIsCompetent =
true;
482 "it is NOT competent. its constraint is %s",
483 carrierConstraint.c_str());
486 destCarrier =
nullptr;
493 if (srcIsTopic || destIsTopic) {
505 yCError(NETWORK,
"Failure: cannot check subscriptions yet");
514 yCError(NETWORK,
"Failure: cannot check subscriptions yet");
530 "dynamicSrc.getCarrier() = %s",
533 "dynamicDest.getCarrier() = %s",
536 "staticSrc.getCarrier() = %s",
539 "staticDest.getCarrier() = %s",
542 "carrierConstraint is %s",
543 carrierConstraint.c_str());
546 "style.carrier (1) is %s",
553 "style.carrier is %s ==> in connect command the user specified the carrier of src port",
560 "style.carrier is %s ==> in connect command the user specified the carrier of dest port or the carrier of the connection",
565 "at the end style style.carrier is %s",
570 if (!style.
carrier.empty() && !carrierConstraint.empty()) {
577 if (style_carrier_name != carrier_constraint_name) {
578 yCError(NETWORK,
"Failure: conflict between %s and %s", style_carrier_name.c_str(), carrier_constraint_name.c_str());
582 "style_carrier_name=%s and carrier_constraint_name=%s are equals!",
583 style_carrier_name.c_str(),
584 carrier_constraint_name.c_str());
588 if (!carrierConstraint.empty()) {
589 style.
carrier = carrierConstraint;
593 "if I'm here means that source or dest is not competent");
607 "if I'm here means that both src and dest are compentent and the user didn't specified a carrier in the connect command");
616 yCTrace(NETWORK,
"the chosen style carrier is static src");
622 "style_carrier with params =%s",
625 bool connectionIsPush =
false;
626 bool connectionIsPull =
false;
627 Carrier* connectionCarrier =
nullptr;
628 if (style.
carrier !=
"topic") {
630 if (connectionCarrier !=
nullptr) {
631 connectionIsPush = connectionCarrier->
isPush();
632 connectionIsPull = !connectionIsPush;
637 if ((srcIsCompetent && connectionIsPush) || topical) {
640 delete connectionCarrier;
643 if (destIsCompetent && connectionIsPull) {
645 delete connectionCarrier;
649 if (connectionCarrier !=
nullptr) {
650 if (!connectionIsPull) {
652 result = connectionCarrier->
connect(staticSrc, c, style, mode,
false);
655 result = connectionCarrier->
connect(staticDest, c, style, mode,
true);
658 if (connectionCarrier !=
nullptr) {
659 delete connectionCarrier;
660 connectionCarrier =
nullptr;
666 yCInfo(NETWORK,
"Success: added connection using custom carrier method");
669 yCError(NETWORK,
"Failure: custom carrier method did not work");
676 yCError(NETWORK,
"Failure: no way to make connection %s->%s", src.c_str(), dest.c_str());
682 bool NetworkBase::connect(
const std::string& src,
const std::string& dest,
const std::string& carrier,
bool quiet)
686 if (!carrier.empty()) {
689 return connect(src, dest, style);
693 const std::string& dest,
701 const std::string& dest,
706 return disconnect(src, dest, style);
710 const std::string& dest,
721 if (!carrier.empty()) {
724 return disconnect(src, dest, style);
728 const std::string& dest,
733 return isConnected(src, dest, style);
740 if (!carrier.empty()) {
743 return isConnected(src, dest, style);
750 return exists(port, style, checkVer);
755 bool silent = style.
quiet;
759 yCInfo(NETWORK,
"Address of port %s is not valid", port.c_str());
770 if (out ==
nullptr) {
772 yCInfo(NETWORK,
"Cannot connect to port %s", port.c_str());
810 yCInfo(NETWORK,
"Waiting for %s->%s...", source.c_str(), destination.c_str());
832 yCInfo(NETWORK,
"Waiting for %s...", target.c_str());
837 bool result = exists(target,
true,
false);
849 bool result = waitPort(port, quiet);
867 initMinimum(clockType);
881 #if defined(YARP_HAS_ACE)
897 static YARP_ACE& init()
912 yarp::os::impl::signal(SIGPIPE, SIG_IGN);
963 if (!clock.empty()) {
972 yCDebug(NETWORK,
"Using SYSTEM clock");
977 yCDebug(NETWORK,
"Using NETWORK clock");
984 yCDebug(NETWORK,
"Using CUSTOM clock");
990 yCFatal(NETWORK,
"yarpClockInit called with unknown clock type. Quitting");
997 yCDebug(NETWORK,
"query name %s", name.c_str());
998 if (getNameServerName() == name) {
999 yCDebug(NETWORK,
"query recognized as name server: %s", name.c_str());
1000 return getNameServerContact();
1012 yCDebug(NETWORK,
"register name %s", name.c_str());
1067 #ifndef YARP_NO_DEPRECATED
1076 return setConnectionQos(src, dest, style, style, quiet);
1102 bool ret =
write(srcCon, cmd, reply,
true,
true, 2.0);
1105 yCError(NETWORK,
"Cannot write to '%s'", src.c_str());
1111 yCError(NETWORK,
"Cannot set qos properties of '%s'. (%s)", src.c_str(), reply.
toString().c_str());
1135 bool ret =
write(destCon, cmd, reply,
true,
true, 2.0);
1138 yCError(NETWORK,
"Cannot write to '%s'", dest.c_str());
1144 yCError(NETWORK,
"Cannot set qos properties of '%s'. (%s)", dest.c_str(), reply.
toString().c_str());
1167 yCError(NETWORK,
"Cannot write to '%s'", port.c_str());
1173 yCError(NETWORK,
"Cannot get qos properties of '%s'. (%s)", port.c_str(), reply.
toString().c_str());
1191 if (!
getPortQos(src, dest, srcStyle, quiet)) {
1194 if (!
getPortQos(dest, src, destStyle, quiet)) {
1202 if (portName.empty()) {
1206 if (portName ==
"...") {
1210 if (portName.at(0) !=
'/') {
1214 if (portName.at(portName.size() - 1) ==
'/') {
1218 if (portName.find(
' ') != std::string::npos) {
1234 style.
admin = admin;
1235 style.
quiet = quiet;
1238 return write(contact, cmd, reply, style);
1258 yCError(NETWORK,
"Cannot make connection to '%s'", ec.
toString().c_str());
1263 bool ok = port.
write(cmd, reply);
1267 const char* connectionName =
"admin";
1268 std::string name = contact.
getName();
1269 const char* targetName = name.c_str();
1276 yCError(NETWORK,
"cannot find port %s", targetName);
1285 if (out ==
nullptr) {
1287 yCError(NETWORK,
"Cannot connect to port %s", targetName);
1295 Route r(connectionName, targetName, (!style.
carrier.empty()) ? style.
carrier.c_str() :
"text_ack");
1307 yCError(NETWORK,
"could not write to connection");
1315 yCError(NETWORK,
"could not write to connection");
1324 if (out !=
nullptr) {
1343 yCInfo(NETWORK,
"No connection from %s to %s found",
1394 #ifndef YARP_NO_DEPRECATED
1397 if (verbosity < 0) {
1400 }
else if (verbosity == 0) {
1417 #ifndef YARP_NO_DEPRECATED
1437 #ifndef YARP_NO_DEPRECATED
1452 std::mutex& getNetworkMutex()
1454 static std::mutex mutex;
1461 getNetworkMutex().lock();
1466 getNetworkMutex().unlock();
1475 return sendMessage(port, writable, output, silent);
1480 std::string& output,
1487 yCError(NETWORK,
"Cannot find port named %s", port.c_str());
1492 if (out ==
nullptr) {
1494 yCError(NETWORK,
"Cannot connect to port named %s at %s", port.c_str(), srcAddress.
toURI().c_str());
1498 Route route(
"admin", port,
"text");
1501 bool ok = out->
open(route);
1504 yCError(NETWORK,
"Cannot make connection");
1512 bool wok = writable.
write(bw);
1515 yCError(NETWORK,
"Cannot write on connection");
1520 if (!disconnect.
write(bw)) {
1522 yCError(NETWORK,
"Cannot write on connection");
1549 return sendMessage(target, pc, silent);
1553 const std::string& dest,
1557 return sendMessage(src, pc, silent);
1585 if (factory ==
nullptr) {
1620 return getContent().isTextMode();
1625 return getContent().isBareMode();
1630 return getContent().canEscape();
1635 getContent().handleEnvelope(envelope);
1640 return getContent().requireAck();
1645 return getContent().supportReply();
1650 return getContent().isLocal();
1655 return getContent().isPush();
1660 return getContent().isConnectionless();
1665 return getContent().isBroadcast();
1670 return getContent().isActive();
1675 return getContent().modifiesIncomingData();
1680 return getContent().modifyIncomingData(reader);
1685 return getContent().acceptIncomingData(reader);
1690 return getContent().modifiesOutgoingData();
1695 return getContent().modifyOutgoingData(writer);
1700 return getContent().acceptOutgoingData(writer);
1705 return getContent().modifiesReply();
1710 return getContent().modifyReply(reader);
1715 getContent().setCarrierParams(params);
1720 getContent().getCarrierParams(params);
1725 getContent().getHeader(header);
1730 getContent().prepareDisconnect();
1735 return getContent().getName();
1743 return getContent().checkHeader(header);
1748 getContent().setParameters(header);
1753 return getContent().canAccept();
1758 return getContent().canOffer();
1763 return getContent().prepareSend(proto);
1768 return getContent().sendHeader(proto);
1773 return getContent().expectReplyToHeader(proto);
1778 return getContent().write(proto, writer);
1783 return getContent().reply(proto, writer);
1788 return getContent().expectExtraHeader(proto);
1793 return getContent().respondToHeader(proto);
1798 return getContent().expectIndex(proto);
1803 return getContent().expectSenderSpecifier(proto);
1808 return getContent().sendAck(proto);
1813 return getContent().expectAck(proto);
1818 return getContent().toString();
1823 getContent().close();
1828 return getContent().getBootstrapCarrierName();
1835 bool reversed)
override
1837 return getContent().connect(src, dest, style, mode, reversed);
1842 return getContent().configure(proto);
1846 return getContent().configureFromProperty(options);
1851 return getContent().createFace();
1880 if (plugin.
open(settings)) {
1889 return car.getContent();
1894 return car.getContent();
1900 if (ncar ==
nullptr) {
1903 if (!ncar->isValid()) {
1926 if (dll ==
nullptr) {
1928 if (factory ==
nullptr) {
1934 if (factory ==
nullptr) {
1935 yCError(NETWORK,
"Failed to register carrier");
1939 if (dll !=
nullptr) {
1940 yCError(NETWORK,
"Failed to find library %s with carrier %s", dll, name);
1942 yCError(NETWORK,
"Failed to find library support for carrier %s", name);
1956 return !globalAlloc;
1972 if (!nameServerContact.
getName().empty()) {
1973 setNameServerName(nameServerContact.
getName());
1977 bool result = nameConfig.
toFile();
1988 if (store !=
nullptr) {
1990 return store->
process(cmd, reply, contact);
2005 if (!range.empty()) {
2006 int irange = yarp::conf::numeric::from_string<int>(range);
#define YARP_ENACT_DISCONNECT
#define YARP_ENACT_EXISTS
#define YARP_ENACT_CONNECT
#define YARP_CONFIG_NAMESPACE_FILENAME
static int enactConnection(const Contact &src, const Contact &dest, const ContactStyle &style, int mode, bool reversed)
static bool getPortQos(const std::string &port, const std::string &unit, QosStyle &style, bool quiet)
static std::string collectParams(Contact &c)
static int metaConnect(const std::string &src, const std::string &dest, ContactStyle style, int mode)
static bool needsLookup(const Contact &contact)
static int __yarp_is_initialized
static MultiNameSpace & getNameSpace()
static YarpAutoInit yarp_auto_init
destructor is called on shutdown.
static std::string extractCarrierNameOnly(const std::string &carrier_name_with_params)
static int noteDud(const Contact &src)
static bool __yarp_auto_init_active
static bool rpc(const Contact &c, const char *carrier, Bottle &writer, Bottle &reader)
bool modifiesReply() const override
Check if this carrier modifies outgoing data through the Carrier::modifyReply method.
void getHeader(yarp::os::Bytes &header) const override
Provide 8 bytes describing this connection sufficiently to allow the other side of a connection to se...
bool canEscape() const override
Check if carrier can encode administrative messages, as opposed to just user data.
bool checkHeader(const yarp::os::Bytes &header) override
Given the first 8 bytes received on a connection, decide if this is the right carrier type to use for...
const PortWriter & modifyOutgoingData(const PortWriter &writer) override
Modify outgoing payload data, if appropriate.
std::string getName() const override
Get the name of this connection type ("tcp", "mcast", "shmem", ...)
bool sendAck(ConnectionState &proto) override
Send an acknowledgement, if needed for this carrier.
bool isTextMode() const override
Check if carrier is textual in nature.
bool expectAck(ConnectionState &proto) override
Receive an acknowledgement, if expected for this carrier.
void prepareDisconnect() override
Do cleanup and preparation for the coming disconnect, if necessary.
bool reply(ConnectionState &proto, SizedWriter &writer) override
bool isBareMode() const override
Check if carrier excludes type information from payload.
bool modifiesIncomingData() const override
Check if this carrier modifies incoming data through the Carrier::modifyIncomingData method.
SharedLibraryClassFactory< Carrier > * factory
void handleEnvelope(const std::string &envelope) override
Carriers that do not distinguish data from administrative headers (i.e.
bool expectReplyToHeader(ConnectionState &proto) override
Process reply to header, if one is expected for this carrier.
bool sendHeader(ConnectionState &proto) override
Write a header appropriate to the carrier to the connection, followed by any carrier-specific data.
bool isBroadcast() const override
Check if this carrier uses a broadcast mechanism.
bool write(ConnectionState &proto, SizedWriter &writer) override
Write a message.
bool modifiesOutgoingData() const override
Check if this carrier modifies outgoing data through the Carrier::modifyOutgoingData method.
SharedLibraryClass< Carrier > car
bool isPush() const override
Check if carrier is "push" or "pull" style.
yarp::os::Face * createFace() const override
Create new Face object that the carrier needs.
bool canAccept() const override
Check if reading is implemented for this carrier.
virtual const Carrier & getContent() const
bool configure(ConnectionState &proto) override
Give carrier a shot at looking at how the connection is set up.
bool configureFromProperty(yarp::os::Property &options) override
bool isLocal() const override
Check if carrier operates within a single process.
bool acceptIncomingData(ConnectionReader &reader) override
Determine whether incoming data should be accepted.
ForwardingCarrier(SharedLibraryClassFactory< Carrier > *factory, Carrier *owner)
bool supportReply() const override
This flag is used by YARP to determine whether the connection can carry RPC traffic,...
std::string toString() const override
Get name of carrier.
bool canOffer() const override
Check if writing is implemented for this carrier.
bool isConnectionless() const override
Check if this carrier is connectionless (like udp, mcast) or connection based (like tcp).
Carrier * create() const override
Factory method.
bool prepareSend(ConnectionState &proto) override
Perform any initialization needed before writing on a connection.
std::string getBootstrapCarrierName() const override
Get the name of the carrier that should be used prior to handshaking, if a port is registered with th...
void setCarrierParams(const Property ¶ms) override
Configure carrier from port administrative commands.
~ForwardingCarrier() override
bool isValid() const override
Check if this object is really a connection, or just an empty placeholder.
int connect(const yarp::os::Contact &src, const yarp::os::Contact &dest, const yarp::os::ContactStyle &style, int mode, bool reversed) override
Some carrier types may require special connection logic.
bool acceptOutgoingData(const PortWriter &writer) override
Determine whether outgoing data should be accepted.
ConnectionReader & modifyIncomingData(ConnectionReader &reader) override
Modify incoming payload data, if appropriate.
bool expectExtraHeader(ConnectionState &proto) override
Receive any carrier-specific header.
PortReader & modifyReply(PortReader &reader) override
Modify reply payload data, if appropriate.
bool respondToHeader(ConnectionState &proto) override
Respond to the header.
bool expectIndex(ConnectionState &proto) override
Expect a message header, if there is one for this carrier.
bool isActive() const override
Check if carrier is alive and error free.
void close() override
Close the carrier.
bool expectSenderSpecifier(ConnectionState &proto) override
Expect the name of the sending port.
virtual Carrier & getContent()
void setParameters(const yarp::os::Bytes &header) override
Configure this carrier based on the first 8 bytes of the connection.
bool requireAck() const override
Check if carrier has flow control, requiring sent messages to be acknowledged by recipient.
void getCarrierParams(Property ¶ms) const override
Get carrier configuration and deliver it by port administrative commands.
const Carrier & getContent() const override
std::string getDllName() const
Carrier & getContent() override
StubCarrier(const char *dll_name, const char *fn_name)
Carrier * create() const override
Factory method.
std::string getFnName() const
StubCarrier(const char *name)
A single-use class to shut down the yarp library if it was initialized automatically.
~YarpAutoInit()
Shut down the yarp library if it was automatically initialized.
A simple collection of objects that can be described and transmitted in a portable way.
void addVocab32(yarp::conf::vocab32_t x)
Places a vocabulary item in the bottle, at the end of the list.
Property & addDict()
Places an empty key/value object in the bottle, at the end of the list.
Bottle & addList()
Places an empty nested list in the bottle, at the end of the list.
size_type size() const
Gets the number of elements in the bottle.
bool read(ConnectionReader &reader) override
Set the bottle's value based on input from a network connection.
Value & get(size_type index) const
Reads a Value v from a certain part of the list.
Bottle & findGroup(const std::string &key) const override
Gets a list corresponding to a given keyword.
bool check(const std::string &key) const override
Check if there exists a property of the given name.
void clear()
Empties the bottle of any objects it contains.
void addInt32(std::int32_t x)
Places a 32-bit integer in the bottle, at the end of the list.
void addString(const char *str)
Places a string in the bottle, at the end of the list.
std::string toString() const override
Gives a human-readable textual representation of the bottle.
Value & find(const std::string &key) const override
Gets a value corresponding to a given keyword.
A simple abstraction for a block of bytes.
A base class for connection types (tcp, mcast, shmem, ...) which are called carriers in YARP.
virtual Carrier * create() const =0
Factory method.
bool isPush() const override
Check if carrier is "push" or "pull" style.
virtual int connect(const Contact &src, const Contact &dest, const ContactStyle &style, int mode, bool reversed)
Some carrier types may require special connection logic.
virtual std::string getBootstrapCarrierName() const
Get the name of the carrier that should be used prior to handshaking, if a port is registered with th...
static bool addCarrierPrototype(Carrier *carrier)
Add a new connection type.
static Carrier * chooseCarrier(const std::string &name)
Select a carrier by name.
static OutputProtocol * connect(const Contact &address)
Initiate a connection to an address.
An interface for reading from a network connection.
The basic state of a connection - route, streams in use, etc.
virtual bool isTextMode() const =0
Check if carrier is textual in nature.
virtual bool isBareMode() const
Check if carrier excludes type information from payload.
virtual bool canEscape() const =0
Check if carrier can encode administrative messages, as opposed to just user data.
virtual std::string getName() const =0
Get the name of this connection type ("tcp", "mcast", "shmem", ...)
The initial point-of-contact with a port.
static void setMinimumForwardLevel(LogType level)
Set current minimum forward level (it does nothing if forwarding is not enabled)
static void setMinimumPrintLevel(LogType level)
Set current minimum print level.
Contact getNameServerContact() const override
Get an address for a name server that manages the name space, if available.
Contact registerName(const std::string &name) override
Record contact information to tie to a port name.
virtual NameStore * getQueryBypass()
Get any alternative place to make name queries, if one was set by queryBypass()
Value * getProperty(const std::string &name, const std::string &key) override
Get the value of a named key from a named port.
virtual void queryBypass(NameStore *store)
Set an alternative place to make name queries.
bool connectionHasNameOfEndpoints() const override
When connections are made involving ports managed by this NameSpace do the ports involved end up know...
Contact queryName(const std::string &name) override
Map from port name to contact information.
bool serverAllocatesPortNumbers() const override
Check if a central server is responsible for allocating port numbers, or if this should be left up to...
bool activate(bool force=false)
Contact unregisterName(const std::string &name) override
Disassociate contact information from a port name.
Contact registerContact(const Contact &contact) override
Record contact information (should include a port name).
Contact unregisterContact(const Contact &contact) override
Disassociate contact information (should include a port name).
virtual bool setProperty(const std::string &name, const std::string &key, const Value &value) override
Associate a key/value pair with a named port.
bool setLocalMode(bool flag)
virtual Contact detectNameServer(bool useDetectedServer, bool &scanNeeded, bool &serverUsed) override
Find a name server for this NameSpace, if applicable.
virtual bool writeToNameServer(PortWriter &cmd, PortReader &reply, const ContactStyle &style) override
Write a message to a name server for this NameSpace, if applicable.
An abstract name space for ports.
virtual bool checkNetwork()
Check if a name space is available.
virtual bool disconnectTopicFromPort(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Stop subscribing a port to a topic.
virtual bool localOnly() const =0
Check if the NameSpace is only valid for the current process ("local").
virtual bool disconnectPortFromTopic(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Stop publishing a port to a topic.
virtual bool connectPortToPortPersistently(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Connect two ports with persistence.
virtual bool connectTopicToPort(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Subscribe a port to a topic.
virtual bool connectPortToTopic(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Publish a port to a topic.
virtual bool disconnectPortToPortPersistently(const Contact &src, const Contact &dest, const ContactStyle &style)=0
Disconnect two ports, removing any persistence.
Abstract interface for a database of port names.
virtual bool announce(const std::string &name, int activity)=0
virtual bool process(PortWriter &in, PortReader &out, const Contact &source)=0
static bool initialized()
Returns true if YARP has been fully initialized.
static std::string getNameServerName()
Get the name of the port associated with the nameserver (usually "/root", but this can be overwritten...
static bool isNetworkInitialized()
static bool getLocalMode()
Get current value of flag "localMode", see setLocalMode function.
static Contact getNameServerContact()
Get the contact information for the port associated with the nameserver (usually "/root",...
static bool sync(const std::string &port, bool quiet=true)
Wait for a port to be ready and responsive.
static bool connect(const std::string &src, const std::string &dest, const std::string &carrier="", bool quiet=true)
Request that an output port connect to an input port.
static void queryBypass(NameStore *store)
Redirect queries to another source.
static void yarpClockInit(yarp::os::yarpClockType clockType, Clock *custom=nullptr)
This function specifically initialize the clock In case clockType is one of the valid cases: YARP_CLO...
static std::string getEnvironment(const char *key, bool *found=nullptr)
Read a variable from the environment.
static std::string readString(bool *eof=nullptr)
Read a line of arbitrary length from standard input.
static void unlock()
Call post() on a global mutual-exclusion semaphore allocated by YARP.
static bool registerCarrier(const char *name, const char *dll)
Register a carrier to make available at runtime.
static Contact unregisterName(const std::string &name)
Removes the registration for a name from the name server.
static NameStore * getQueryBypass()
static Contact unregisterContact(const Contact &contact)
Removes the registration for a contact from the name server.
static std::string getPathSeparator()
Get an OS-appropriate path separator (e.g.
static bool waitPort(const std::string &target, bool quiet=false)
Delays the system until a specified port is open.
static bool setNameServerName(const std::string &name)
Set the name of the port associated with the nameserver (usually "/root", but this can be overwritten...
static bool getConnectionQos(const std::string &src, const std::string &dest, QosStyle &srcStyle, QosStyle &destStyle, bool quiet=true)
Gets the Qos preferences of a connection.
static void unsetEnvironment(const std::string &key)
Remove an environment variable.
static Contact registerContact(const Contact &contact)
Register contact information with the name server.
static bool setNameServerContact(Contact &nameServerContact)
Set explicitly the nameserver information.
static std::string getDirectorySeparator()
Get an OS-appropriate directory separator (e.g.
static int poll(const std::string &target, bool silent=false)
Sends a 'describe yourself' message to a specified port, in order to receive information about the po...
static Contact queryName(const std::string &name)
Find out information about a registered name.
static bool exists(const std::string &port, bool quiet=true, bool checkVer=true)
Check for a port to be ready and responsive.
static void setVerbosity(int verbosity)
Set level of verbosity of YARP messages.
static void initMinimum()
Basic system initialization, not including plugins.
static int sendMessage(const std::string &port, yarp::os::PortWriter &writable, bool silent=false)
Just a reminder to sendMessage with temporary output parameter that will be discarded.
static void setEnvironment(const std::string &key, const std::string &val)
Set or change an environment variable.
static void autoInitMinimum()
Basic system initialization, not including plugins.
static void finiMinimum()
Deinitialization, excluding plugins.
static Contact detectNameServer(bool useDetectedServer, bool &scanNeeded, bool &serverUsed)
Scan for an available name server.
static bool setProperty(const char *name, const char *key, const Value &value)
Names registered with the nameserver can have arbitrary key->value properties associated with them.
static int getDefaultPortRange()
Under normal operation, YARP has a name server that manages a pool of (socket) ports starting at a po...
static void lock()
Call wait() on a global mutual-exclusion semaphore allocated by YARP.
static std::string getConfigFile(const char *fname)
Search for a configuration file in YARP's standard config file path.
static Contact registerName(const std::string &name)
Register a name with the name server.
static int disconnectInput(const std::string &src, const std::string &dest, bool silent=false)
Sends a disconnection command to the specified port.
static bool waitConnection(const std::string &source, const std::string &destination, bool quiet=false)
Delays the system until a specified connection is established.
static void assertion(bool shouldBeTrue)
An assertion.
static bool checkNetwork()
Check if the YARP Network is up and running.
static bool writeToNameServer(PortWriter &cmd, PortReader &reply, const ContactStyle &style)
Variant write method specialized to name server.
static bool disconnect(const std::string &src, const std::string &dest, bool quiet)
Request that an output port disconnect from an input port.
static bool localNetworkAllocation()
Check where the name server in use expects processes to allocate their own network resources.
static Value * getProperty(const char *name, const char *key)
Look up the value associated with a particular key for a named entry registered with the nameserver.
static bool isValidPortName(const std::string &portName)
Checks that the port has a valid name.
static bool setConnectionQos(const std::string &src, const std::string &dest, const QosStyle &srcStyle, const QosStyle &destStyle, bool quiet=true)
Adjust the Qos preferences of a connection.
static bool write(const Contact &contact, PortWriter &cmd, PortReader &reply, bool admin=false, bool quiet=false, double timeout=-1)
Send a single command to a port and await a single response.
static bool isConnected(const std::string &src, const std::string &dest, bool quiet)
Check if a connection exists between two ports.
static bool setLocalMode(bool flag)
Chooses whether communication is process-local.
The output side of an active connection between two ports.
virtual Connection & getConnection()=0
Get the connection whose protocol operations we are managing.
virtual bool open(const Route &route)=0
Start negotiating a carrier, using the given route (this should generally match the name of the sendi...
virtual InputProtocol & getInput()=0
Get an interface for doing read operations on the connection.
virtual void close()=0
Negotiate an end to operations.
virtual bool setTimeout(double timeout)=0
Set the timeout to be used for network operations.
virtual bool write(SizedWriter &writer)=0
Write a message on the connection.
Interface implemented by all objects that can read themselves from the network, such as Bottle object...
Interface implemented by all objects that can write themselves to the network, such as Bottle objects...
virtual bool write(ConnectionWriter &writer) const =0
Write this object to a network connection.
A mini-server for network communication.
bool write(const PortWriter &writer, const PortWriter *callback=nullptr) const override
Write an object to the port.
void setAdminMode(bool adminMode=true)
Turn on/off "admin" mode.
bool addOutput(const std::string &name) override
Add an output connection to the specified port.
bool openFake(const std::string &name)
Start port without making it accessible from the network.
A class for storing options and configuration information.
void put(const std::string &key, const std::string &value)
Associate the given key with the given string.
Preferences for the port's Quality of Service.
int getThreadPolicy() const
returns the communication thread scheduling policy
void setThreadPriority(int priority)
sets the communication thread priority level
void setPacketPrioritybyTOS(int tos)
sets the packet priority given as TOS value
int getPacketPriorityAsTOS() const
returns the packet TOS value
int getThreadPriority() const
returns the communication thread priority level
void setThreadPolicy(int policy)
sets the communication thread scheduling policy
Information about a connection between two ports.
bool open(SharedLibraryClassFactory< T > &factory)
Construct an instance using the specified factory.
T & getContent()
Gives access to the created instance.
virtual bool close()
Destroy an instance if one has been created.
bool isValid() const
Check whether a valid instance has been created.
int addRef()
Increment the reference count of this factory.
int getReferenceCount() const
Get the current reference count of this factory.
std::string getName() const
Get the name associated with this factory.
int removeRef()
Decrement the reference count of this factory.
Minimal requirements for an efficient Writer.
static void delaySystem(double seconds)
A single value (typically within a Bottle).
virtual bool asBool() const
Get boolean value.
virtual std::int32_t asInt32() const
Get 32-bit integer value.
virtual Bottle * asList() const
Get list value.
std::string toString() const override
Return a standard text representation of the content of the object.
virtual bool isInt32() const
Checks if value is a 32-bit integer.
virtual std::string asString() const
Get string value.
Pick out a set of relevant plugins.
void scan()
Find plugin configuration files, and run [plugin] sections through the select method.
Collect hints for finding a particular plugin.
bool setSelector(YarpPluginSelector &selector)
Use a selector to find a plugin or plugins.
std::string getLibraryName() const
void setLibraryMethodName(const std::string &dll_name, const std::string &fn_name)
Set the name of the library to load and the method name to use as a factory.
void setPluginName(const std::string &name)
Set the name of the plugin to load.
std::string getMethodName() const
bool open(YarpPluginSettings &settings)
Load a library and prepare an object factory, based on the hints supplied.
SharedLibraryClassFactory< T > * getFactory() const
A helper for creating cached object descriptions.
void setReplyHandler(PortReader &reader) override
This sets a handler to deal with replies to the message.
Small helper class to help deal with legacy YARP configuration files.
std::string getNamespace(bool refresh=false)
static std::string expandFilename(const char *fname)
bool fromFile(const char *ns=nullptr)
bool writeConfig(const std::string &fileName, const std::string &text)
std::string getConfigFileName(const char *stem=nullptr, const char *ns=nullptr)
void setAddress(const Contact &address)
bool toFile(bool clean=false)
Simple Readable and Writable object representing a command to a YARP port.
bool write(yarp::os::ConnectionWriter &writer) const override
Write this object to a network connection.
#define yCInfo(component,...)
#define yCError(component,...)
#define yCAssert(component, x)
#define yCTrace(component,...)
#define yCDebug(component,...)
#define yCFatal(component,...)
#define YARP_OS_LOG_COMPONENT(name, name_string)
bool unset(const std::string &key)
Remove an environment variable.
static constexpr char path_separator
bool set_string(const std::string &key, const std::string &value)
Set a string to an environment variable.
std::string get_string(const std::string &key, bool *found=nullptr)
Read a string from an environment variable.
static constexpr value_type preferred_separator
yarpClockType getClockType()
void useSystemClock()
Configure YARP to use system time (this is the default).
bool isClockInitialized()
Check if YARP clock is initialized.
void useNetworkClock(const std::string &clock, const std::string &localPortName="")
Configure YARP to read time from a specified topic.
void useCustomClock(Clock *clock)
Configure YARP clients to use a custom clock source provided by the user.
std::string readString(bool *eof)
void startTurboBoost()
For OS where it makes sense sets the scheduler to be called more often.
The components from which ports and connections are built.
An interface to the operating system, including Port based communication.
@ YARP_CLOCK_UNINITIALIZED
constexpr yarp::conf::vocab32_t createVocab32(char a, char b=0, char c=0, char d=0)
Create a vocab from chars.
bool write(const ImageOf< PixelRgb > &src, const std::string &dest, image_fileformat format=FORMAT_PPM)