23 t.setNsNameValue(
"alloc",
"tmpid",
"*");
27 t.setNsNameValue(
"alloc",
"*",
"free");
28 std::list<Triple> match = db->
query(
t,&context);
30 name = match.begin()->name;
36 t.setNsNameValue(
"alloc",
"tmpid",
"*");
37 std::list<Triple> lst = db->
query(
t,
nullptr);
39 tmpid = atoi(lst.begin()->value.c_str());
47 std::snprintf(buf, 256,
"%d", tmpid);
48 t.setNsNameValue(
"alloc",
"tmpid",buf);
50 t.setNsNameValue(
"alloc",
"tmpid",
"*");
52 std::snprintf(buf, 256,
"/tmp/port/%u", tmpid);
56 t.setNsNameValue(
"alloc",name.c_str(),
"in_use");
87 t.setNsNameValue(
"alloc",
"regid",
"*");
91 t.setNsNameValue(
"prefer",
"*",c.
getName().c_str());
92 std::list<Triple> match = db->
query(
t,&context);
94 npref = match.begin()->name;
95 pref = atoi(npref.c_str());
96 t.setNsNameValue(
"alloc",npref.c_str(),
"in_use");
97 match = db->
query(
t,&context);
98 if (match.size()==0) {
108 t.setNsNameValue(
"alloc",
"regid",
"*");
109 std::list<Triple> lst = db->
query(
t,
nullptr);
111 regid = atoi(lst.begin()->value.c_str());
119 t.setNsNameValue(
"alloc",
"*",
"free");
120 std::list<Triple> match = db->
query(
t,&context);
121 if (match.size()>0) {
122 nstring = match.begin()->name;
123 number = atoi(nstring.c_str());
127 yCError(ALLOCATORONTRIPLES,
"Ran out of port numbers");
128 yCError(ALLOCATORONTRIPLES,
"* Make sure ports/programs get closed properly.");
129 yCError(ALLOCATORONTRIPLES,
"* If programs terminate without closing ports, run \"yarp clean\" from time to time..");
136 std::snprintf(buf, 256,
"%d", regid);
137 t.setNsNameValue(
"alloc",
"regid",buf);
139 t.setNsNameValue(
"alloc",
"regid",
"*");
145 t.setNsNameValue(
"alloc",nstring.c_str(),
"in_use");
147 t.setNsNameValue(
"prefer",nstring.c_str(),c.
getName().c_str());
168 t.setNsNameValue(
"alloc",
"mcastCursor",
"*");
171 if (context.
rid>=0) {
172 t.setNsNameValue(
"alloc",
"*",
"free");
173 std::list<Triple> match = db->
query(
t,&context);
174 if (match.size()>0) {
175 name = match.begin()->name;
180 if (mcastCursor==-1) {
181 t.setNsNameValue(
"alloc",
"mcastCursor",
"*");
182 std::list<Triple> lst = db->
query(
t,
nullptr);
184 mcastCursor = atoi(lst.begin()->value.c_str());
186 if (mcastCursor==-1) {
192 std::snprintf(buf, 256,
"%d", mcastCursor);
193 t.setNsNameValue(
"alloc",
"mcastCursor",buf);
195 t.setNsNameValue(
"alloc",
"mcastCursor",
"*");
198 int v1 = mcastCursor%255;
199 int v2 = mcastCursor/255;
201 yCError(ALLOCATORONTRIPLES,
"Ran out of mcast addresses");
204 std::snprintf(buf, 256,
"224.1.%d.%d", v2+1, v1+1);
208 t.setNsNameValue(
"alloc",name.c_str(),
"in_use");
218 std::string portName = c.
getName();
220 std::string hostName = c.
getHost();
224 t.setNsNameValue(
"alloc",
"tmpid",
"*");
227 t.setNsNameValue(
"alloc",portName.c_str(),
"in_use");
228 if (db->
find(
t,&context)>=0) {
229 t.setNsNameValue(
"alloc",portName.c_str(),
"free");
233 t.setNsNameValue(
"alloc",
"regid",
"*");
236 std::snprintf(buf, 256,
"%d", portNumber);
237 t.setNsNameValue(
"alloc",buf,
"in_use");
238 if (db->
find(
t,&context)>=0) {
239 t.setNsNameValue(
"alloc",buf,
"free");
243 t.setNsNameValue(
"alloc",
"mcastCursor",
"*");
245 t.setNsNameValue(
"alloc",hostName.c_str(),
"in_use");
246 if (db->
find(
t,&context)>=0) {
247 t.setNsNameValue(
"alloc",hostName.c_str(),
"free");
yarp::os::Contact completeSocket(const yarp::os::Contact &c) override
bool freePortResources(const yarp::os::Contact &c) override
yarp::os::Contact completePortNumber(const yarp::os::Contact &c)
yarp::os::Contact completeHost(const yarp::os::Contact &c)
Side information for controlling access to triples.
virtual std::list< Triple > query(Triple &ti, TripleContext *context)=0
virtual int find(Triple &t, TripleContext *context)=0
virtual void update(Triple &t, TripleContext *context)=0
The basic unit of data the name server works with.
#define yCError(component,...)
#define YARP_SERVERSQL_LOG_COMPONENT(name, name_string)
An interface to the operating system, including Port based communication.