本文整理汇总了C++中ConnectionState::getStreams方法的典型用法代码示例。如果您正苦于以下问题:C++ ConnectionState::getStreams方法的具体用法?C++ ConnectionState::getStreams怎么用?C++ ConnectionState::getStreams使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ConnectionState
的用法示例。
在下文中一共展示了ConnectionState::getStreams方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readYarpInt
bool yarp::os::impl::UdpCarrier::expectReplyToHeader(ConnectionState& proto) {
// I am the sender
int myPort = proto.getStreams().getLocalAddress().getPort();
ConstString myName = proto.getStreams().getLocalAddress().getHost();
ConstString altName = proto.getStreams().getRemoteAddress().getHost();
int altPort = readYarpInt(proto);
if (altPort==-1) {
return false;
}
DgramTwoWayStream *stream = new DgramTwoWayStream();
yAssert(stream!=YARP_NULLPTR);
proto.takeStreams(YARP_NULLPTR); // free up port from tcp
bool ok =
stream->open(Contact(myName,myPort),Contact(altName,altPort));
if (!ok) {
delete stream;
return false;
}
proto.takeStreams(stream);
return true;
}
示例2: DgramTwoWayStream
bool yarp::os::impl::McastCarrier::becomeMcast(ConnectionState& proto, bool sender) {
#ifndef YARP_HAS_ACE
return false;
#else
YARP_UNUSED(sender);
DgramTwoWayStream *stream = new DgramTwoWayStream();
yAssert(stream!=YARP_NULLPTR);
Contact remote = proto.getStreams().getRemoteAddress();
Contact local;
local = proto.getStreams().getLocalAddress();
bool test = true;
//(yarp::NameConfig::getEnv("YARP_MCAST_TEST")!="");
/*
if (test) {
printf(" MULTICAST is being extended; some temporary status messages added\n");
printf(" Local: %s\n", local.toString().c_str());
printf(" Remote: %s\n", remote.toString().c_str());
}
*/
proto.takeStreams(YARP_NULLPTR); // free up port from tcp
if (sender) {
/*
Multicast behavior seems a bit variable.
We assume here that if packages need to be broadcast
to targets via different network interfaces, that
we'll need to send independently on those two
interfaces. This may or may not always be the case,
the author doesn't know, so is being cautious.
*/
key = proto.getRoute().getFromName();
if (test) {
key += "/net=";
key += local.getHost();
}
YARP_DEBUG(Logger::get(),
ConstString("multicast key: ") + key);
addSender(key);
}
bool ok = true;
if (isElect()||!sender) {
if (test) {
ok = stream->join(mcastAddress,sender,local);
} else {
ok = stream->join(mcastAddress,sender);
}
}
if (!ok) {
delete stream;
return false;
}
proto.takeStreams(stream);
return true;
#endif
}
示例3: DgramTwoWayStream
bool yarp::os::impl::UdpCarrier::respondToHeader(ConnectionState& proto) {
// I am the receiver
// issue: need a fresh port number...
DgramTwoWayStream *stream = new DgramTwoWayStream();
yAssert(stream!=YARP_NULLPTR);
Contact remote = proto.getStreams().getRemoteAddress();
bool ok = stream->open(remote);
if (!ok) {
delete stream;
return false;
}
int myPort = stream->getLocalAddress().getPort();
writeYarpInt(myPort,proto);
proto.takeStreams(stream);
return true;
}
示例4:
bool H264Carrier::expectReplyToHeader(ConnectionState& proto)
{
// I'm the receiver...
cfgParams.remotePort = proto.getRoute().getToContact().getPort();
auto* stream = new H264Stream(cfgParams);
if (stream==nullptr) { return false; }
yarp::os::Contact remote = proto.getStreams().getRemoteAddress();
bool ok = stream->open(remote);
//std::cout << "Remote contact info: host=" << proto.getRoute().getToContact().getHost() << " port= " << proto.getRoute().getToContact().getPort() <<std::endl;
if (!ok)
{
delete stream;
return false;
}
stream->start();
proto.takeStreams(stream);
return true;
}
示例5: target
bool yarp::os::impl::McastCarrier::sendHeader(ConnectionState& proto) {
// need to do more than the default
bool ok = defaultSendHeader(proto);
if (!ok) return false;
YARP_DEBUG(Logger::get(),"Adding extra mcast header");
Contact addr;
Contact alt = proto.getStreams().getLocalAddress();
ConstString altKey =
proto.getRoute().getFromName() +
"/net=" + alt.getHost();
McastCarrier *elect = getCaster().getElect(altKey);
if (elect!=YARP_NULLPTR) {
YARP_DEBUG(Logger::get(),"picking up peer mcast name");
addr = elect->mcastAddress;
mcastName = elect->mcastName;
} else {
// fetch an mcast address
Contact target("...", "mcast", "...", 0);
addr = NetworkBase::registerContact(target);
mcastName = addr.getRegName();
if (addr.isValid()) {
// mark owner of mcast address
NetworkBase::setProperty(proto.getRoute().getFromName().c_str(),
"owns",
Value(mcastName.c_str()));
}
}
int ip[] = { 224, 3, 1, 1 };
int port = 11000;
if (addr.isValid()) {
SplitString ss(addr.getHost().c_str(),'.');
if (ss.size()!=4) {
addr = Contact();
} else {
yAssert(ss.size()==4);
for (int i=0; i<4; i++) {
ip[i] = NetType::toInt(ss.get(i));
}
port = addr.getPort();
}
}
if (!addr.isValid()) {
YARP_ERROR(Logger::get(), "Name server not responding helpfully, setting mcast name arbitrarily.");
YARP_ERROR(Logger::get(), "Only a single mcast address supported in this mode.");
addr = Contact("/tmp/mcast", "mcast", "224.3.1.1", 11000);
}
ManagedBytes block(6);
for (int i=0; i<4; i++) {
((unsigned char*)block.get())[i] = (unsigned char)ip[i];
}
block.get()[5] = (char)(port%256);
block.get()[4] = (char)(port/256);
proto.os().write(block.bytes());
mcastAddress = addr;
return true;
}
示例6: writeYarpInt
bool yarp::os::impl::TcpCarrier::respondToHeader(ConnectionState& proto) {
int cport = proto.getStreams().getLocalAddress().getPort();
writeYarpInt(cport, proto);
return proto.checkStreams();
}
示例7: blk
bool yarp::os::impl::HttpCarrier::expectSenderSpecifier(ConnectionState& proto) {
proto.setRoute(proto.getRoute().addFromName("web"));
ConstString remainder = proto.is().readLine();
if (!urlDone) {
for (unsigned int i=0; i<remainder.length(); i++) {
if (remainder[i]!=' ') {
url += remainder[i];
} else {
break;
}
}
}
bool done = false;
expectPost = false;
contentLength = 0;
while (!done) {
ConstString result = proto.is().readLine();
if (result == "") {
done = true;
} else {
//printf(">>> %s\n", result.c_str());
Bottle b;
b.fromString(result.c_str());
if (b.get(0).asString()=="Content-Length:") {
//printf("]]] got length %d\n", b.get(1).asInt());
contentLength = b.get(1).asInt();
}
if (b.get(0).asString()=="Content-Type:") {
//printf("]]] got type %s\n", b.get(1).asString());
if (b.get(1).asString()=="application/x-www-form-urlencoded") {
expectPost = true;
}
}
}
}
if (expectPost) {
//printf("[[[this is a post message of length %d]]]\n", contentLength);
ManagedBytes blk(contentLength+1);
Bytes start(blk.get(),contentLength);
proto.is().readFull(start);
blk.get()[contentLength] = '\0';
//printf("message: %s\n", blk.get());
input = blk.get();
} else {
//printf("message: %s\n", url.c_str());
input = url;
}
prop.fromQuery(input.c_str());
prop.put("REQUEST_URI",url.c_str());
//printf("Property %s\n",prop.toString().c_str());
Contact home = NetworkBase::getNameServerContact();
Contact me = proto.getStreams().getLocalAddress();
ConstString from = "<html><head><link href=\"http://";
from += home.getHost();
from += ":";
from += NetType::toString(home.getPort());
from += "/web/main.css\" rel=\"stylesheet\" type=\"text/css\"/></head><body bgcolor='#ffffcc'><h1>yarp port ";
from += proto.getRoute().getToName();
from += "</h1>\n";
from += "<p>(<a href=\"http://";
from += home.getHost();
from += ":";
from += NetType::toString(home.getPort());
from += "/data=list\">All ports</a>) \n";
from += "(<a href=\"http://";
from += me.getHost();
from += ":";
from += NetType::toString(me.getPort());
from += "/\">connections</a>) \n";
from += "(<a href=\"http://";
from += me.getHost();
from += ":";
from += NetType::toString(me.getPort());
from += "/data=help\">help</a>) \n";
from += "(<a href=\"http://";
from += me.getHost();
from += ":";
from += NetType::toString(me.getPort());
from += "/r\">read</a>) \n";
from += "</p>\n";
from += "<p>\n";
from += "<form method=\"post\" action=\"http://";
from += me.getHost();
from += ":";
from += NetType::toString(me.getPort());
from += "/form\">";
prefix = from;
//Bytes b2((char*)from.c_str(),from.length());
//.........这里部分代码省略.........
示例8: sendHeader
bool TcpRosCarrier::sendHeader(ConnectionState& proto) {
dbg_printf("Route is %s\n", proto.getRoute().toString().c_str());
Name n(proto.getRoute().getCarrierName() + "://test");
ConstString mode = "topic";
ConstString modeValue = n.getCarrierModifier("topic");
if (modeValue=="") {
mode = "service";
modeValue = n.getCarrierModifier("service");
isService = true;
}
if (modeValue=="") {
printf("*** no topic or service specified!\n");
mode = "topic";
modeValue = "notopic";
isService = false;
}
ConstString rawValue = n.getCarrierModifier("raw");
if (rawValue=="2") {
raw = 2;
dbg_printf("ROS-native mode requested\n");
} else if (rawValue=="1") {
raw = 1;
dbg_printf("Raw mode requested\n");
} else if (rawValue=="0") {
raw = 0;
dbg_printf("Cooked mode requested\n");
}
RosHeader header;
dbg_printf("Writing to %s\n", proto.getStreams().getRemoteAddress().toString().c_str());
dbg_printf("Writing from %s\n", proto.getStreams().getLocalAddress().toString().c_str());
ConstString rtyp = getRosType(proto);
if (rtyp!="") {
header.data["type"] = rtyp.c_str();
}
header.data[mode.c_str()] = modeValue.c_str();
header.data["md5sum"] = (md5sum!="")?md5sum:"*";
if (message_definition!="") {
header.data["message_definition"] = message_definition;
}
NestedContact nc(proto.getRoute().getFromName());
header.data["callerid"] = nc.getNodeName();
header.data["persistent"] = "1";
string header_serial = header.writeHeader();
string header_len(4,'\0');
char *at = (char*)header_len.c_str();
RosHeader::appendInt(at,header_serial.length());
dbg_printf("Writing %s -- %d bytes\n",
RosHeader::showMessage(header_len).c_str(),
(int)header_len.length());
Bytes b1((char*)header_len.c_str(),header_len.length());
proto.os().write(b1);
dbg_printf("Writing %s -- %d bytes\n",
RosHeader::showMessage(header_serial).c_str(),
(int)header_serial.length());
Bytes b2((char*)header_serial.c_str(),header_serial.length());
proto.os().write(b2);
return proto.os().isOk();
}
示例9: write
//.........这里部分代码省略.........
// At startup, we check for what kind of messages are going
// through, and prepare an appropriate byte-rejiggering if
// needed.
if (translate==TCPROS_TRANSLATE_UNKNOWN) {
dbg_printf("* TCPROS_TRANSLATE_UNKNOWN\n");
FlexImage *img = NULL;
if (typ=="yarp/image"||typ=="yarp/bottle") {
img = wi.checkForImage(writer);
}
if (img) {
translate = TCPROS_TRANSLATE_IMAGE;
ConstString frame = "/frame";
ri.init(*img,frame);
} else {
if (WireBottle::extractBlobFromBottle(writer,wt)) {
translate = TCPROS_TRANSLATE_BOTTLE_BLOB;
} else {
translate = TCPROS_TRANSLATE_INHIBIT;
}
}
}
} else {
translate = TCPROS_TRANSLATE_INHIBIT;
}
// Apply byte-rejiggering if needed.
switch (translate) {
case TCPROS_TRANSLATE_IMAGE:
{
dbg_printf("* TCPROS_TRANSLATE_IMAGE\n");
FlexImage *img = wi.checkForImage(writer);
if (img==NULL) {
fprintf(stderr, "TCPROS Expected an image, but did not get one.\n");
return false;
}
ri.update(img,seq,Time::now());
seq++;
flex_writer = &ri;
}
break;
case TCPROS_TRANSLATE_BOTTLE_BLOB:
{
dbg_printf("* TCPROS_TRANSLATE_BOTTLE_BLOB\n");
if (!WireBottle::extractBlobFromBottle(writer,wt)) {
fprintf(stderr, "TCPROS Expected a bottle blob, but did not get one.\n");
return false;
}
flex_writer = &wt;
}
break;
case TCPROS_TRANSLATE_TWIDDLER:
{
dbg_printf("* TCPROS_TRANSLATE_TWIDDLER\n");
twiddler_output.attach(writer,twiddler);
if (twiddler_output.update()) {
flex_writer = &twiddler_output;
} else {
flex_writer = NULL;
}
}
break;
case TCPROS_TRANSLATE_INHIBIT:
dbg_printf("* TCPROS_TRANSLATE_INHIBIT\n");
break;
default:
dbg_printf("* TCPROS_TRANSLATE_OTHER\n");
break;
}
if (flex_writer == NULL) {
return false;
}
int len = 0;
for (size_t i=0; i<flex_writer->length(); i++) {
len += (int)flex_writer->length(i);
}
dbg_printf("Prepping to write %d blocks (%d bytes)\n",
(int)flex_writer->length(),
len);
string header_len(4,'\0');
char *at = (char*)header_len.c_str();
RosHeader::appendInt(at,len);
Bytes b1((char*)header_len.c_str(),header_len.length());
proto.os().write(b1);
flex_writer->write(proto.os());
dbg_printf("done sending\n");
if (isService) {
if (!sender) {
if (!persistent) {
proto.os().close();
}
}
}
return proto.getStreams().isOk();
}
示例10: write
bool XmlRpcCarrier::write(ConnectionState& proto, SizedWriter& writer) {
StringOutputStream sos;
StringInputStream sis;
writer.write(sos);
sis.reset(sos.toString());
ConstString header;
if (sender) {
header = sis.readLine();
}
ConstString body = sis.readLine();
Value v;
if (header.length()>0 && header[0]=='q') {
body = "yarp.quit";
// XMLRPC does not need a quit message, this should get stripped
return false;
}
Bottle *bot = v.asList();
bot->fromString(body.c_str());
ConstString methodName;
if (sender) {
methodName = bot->get(0).toString();
*bot = bot->tail();
}
XmlRpcValue args;
if (bot->size()==1) {
toXmlRpcValue(bot->get(0),args);
} else {
toXmlRpcValue(v,args);
}
std::string req;
if (sender) {
const Contact& addr = host.isValid()?host:proto.getStreams().getRemoteAddress();
XmlRpcClient c(addr.getHost().c_str(),(addr.getPort()>0)?addr.getPort():80);
c.generateRequest(methodName.c_str(),args);
req = c.getRequest();
} else {
XmlRpcServerConnection c(0,NULL);
c.generateResponse(args.toXml());
req = c.getResponse();
}
int start = 0;
if (sender) {
if (req.length()<8) {
fprintf(stderr, "XmlRpcCarrier fail, %s:%d\n", __FILE__, __LINE__);
return false;
}
for (int i=0; i<(int)req.length(); i++) {
if (req[i] == '\n') {
start++;
break;
}
start++;
}
if (!firstRound) {
Bytes b((char*)http.c_str(),http.length());
proto.os().write(b);
}
firstRound = false;
}
Bytes b((char*)req.c_str()+start,req.length()-start);
proto.os().write(b);
return proto.os().isOk();
}