diff options
author | Tim O'Shea <tim.oshea753@gmail.com> | 2014-12-26 19:03:51 +0100 |
---|---|---|
committer | Tim O'Shea <tim.oshea753@gmail.com> | 2014-12-26 19:05:08 +0100 |
commit | 585cc65be340fe1ed4c99ff397c3d71f49b621c5 (patch) | |
tree | 604b62f2edcad8a554005b29c59191fc4a1d3451 | |
parent | c1f42c12af1b4deedf7d72c477b40d4cc369ee41 (diff) |
zmq: stream tag passing now works
-rw-r--r-- | gr-zeromq/lib/pub_sink_impl.cc | 1 | ||||
-rw-r--r-- | gr-zeromq/lib/pull_source_impl.cc | 2 | ||||
-rw-r--r-- | gr-zeromq/lib/req_source_impl.cc | 2 | ||||
-rw-r--r-- | gr-zeromq/lib/sub_source_impl.cc | 5 | ||||
-rw-r--r-- | gr-zeromq/lib/tag_headers.cc | 26 | ||||
-rw-r--r-- | gr-zeromq/lib/tag_headers.h | 2 |
6 files changed, 18 insertions, 20 deletions
diff --git a/gr-zeromq/lib/pub_sink_impl.cc b/gr-zeromq/lib/pub_sink_impl.cc index 6804c1d9ce..5afcb722b1 100644 --- a/gr-zeromq/lib/pub_sink_impl.cc +++ b/gr-zeromq/lib/pub_sink_impl.cc @@ -81,6 +81,7 @@ namespace gr { // create message copy and send zmq::message_t msg(header.length() + d_itemsize*d_vlen*noutput_items); + //std::cout << "PUB: Header Len: " << header.length() << ", Data Length: " << d_itemsize*d_vlen*noutput_items << "\n"; if(d_pass_tags) memcpy((void*) msg.data(), header.c_str(), header.length() ); memcpy((uint8_t *)msg.data() + header.length(), in, d_itemsize*d_vlen*noutput_items); diff --git a/gr-zeromq/lib/pull_source_impl.cc b/gr-zeromq/lib/pull_source_impl.cc index 96aa9d853a..87b330a862 100644 --- a/gr-zeromq/lib/pull_source_impl.cc +++ b/gr-zeromq/lib/pull_source_impl.cc @@ -90,7 +90,7 @@ namespace gr { std::vector<gr::tag_t> tags; buf = parse_tag_header(buf, rcv_offset, tags); for(size_t i=0; i<tags.size(); i++){ - tags[i].offset -= rcv_offset - nitems_read(0); + tags[i].offset -= rcv_offset - nitems_written(0); add_item_tag(0, tags[i]); } } diff --git a/gr-zeromq/lib/req_source_impl.cc b/gr-zeromq/lib/req_source_impl.cc index 6e2ad3daf4..5c5071e15e 100644 --- a/gr-zeromq/lib/req_source_impl.cc +++ b/gr-zeromq/lib/req_source_impl.cc @@ -98,7 +98,7 @@ namespace gr { std::vector<gr::tag_t> tags; buf = parse_tag_header(buf, rcv_offset, tags); for(size_t i=0; i<tags.size(); i++){ - tags[i].offset -= rcv_offset - nitems_read(0); + tags[i].offset -= rcv_offset - nitems_written(0); add_item_tag(0, tags[i]); } } diff --git a/gr-zeromq/lib/sub_source_impl.cc b/gr-zeromq/lib/sub_source_impl.cc index f1aeb91dd0..813ff5a1c0 100644 --- a/gr-zeromq/lib/sub_source_impl.cc +++ b/gr-zeromq/lib/sub_source_impl.cc @@ -89,9 +89,12 @@ namespace gr { if(d_pass_tags){ uint64_t rcv_offset; std::vector<gr::tag_t> tags; + //int olen = buf.size(); buf = parse_tag_header(buf, rcv_offset, tags); + //std::cout << "SUB: Header Len = " << olen - buf.size() << ", data len = " << buf.size() << "\n"; for(size_t i=0; i<tags.size(); i++){ - tags[i].offset -= rcv_offset - nitems_read(0); + //std::cout << "add item tag ... (offset = " << tags[i].offset << " rcv_offset = " << rcv_offset << " nitems_read(0) = " << nitems_written(0) << "\n"; + tags[i].offset -= rcv_offset - nitems_written(0); add_item_tag(0, tags[i]); } } diff --git a/gr-zeromq/lib/tag_headers.cc b/gr-zeromq/lib/tag_headers.cc index 42a65be5af..c47bac7ae1 100644 --- a/gr-zeromq/lib/tag_headers.cc +++ b/gr-zeromq/lib/tag_headers.cc @@ -36,9 +36,9 @@ namespace gr { ss.write( reinterpret_cast< const char* >( &offset ), sizeof(uint64_t) ); // offset ss.write( reinterpret_cast< const char* >( &ntags ), sizeof(size_t) ); // num tags std::stringbuf sb(""); - std::cout << "TX TAGS: (offset="<<offset<<" ntags="<<ntags<<")\n"; + //std::cout << "TX TAGS: (offset="<<offset<<" ntags="<<ntags<<")\n"; for(size_t i=0; i<tags.size(); i++){ - std::cout << "TX TAG: (" << tags[i].offset << ", " << tags[i].key << ", " << tags[i].value << ", " << tags[i].srcid << ")\n"; + //std::cout << "TX TAG: (" << tags[i].offset << ", " << tags[i].key << ", " << tags[i].value << ", " << tags[i].srcid << ")\n"; ss.write( reinterpret_cast< const char* >( &tags[i].offset ), sizeof(uint64_t) ); // offset sb.str(""); pmt::serialize( tags[i].key, sb ); // key @@ -51,35 +51,29 @@ namespace gr { } std::string - parse_tag_header(std::string &buf_in, uint64_t &offset_out, std::vector<gr::tag_t> tags_out) { + parse_tag_header(std::string &buf_in, uint64_t &offset_out, std::vector<gr::tag_t> &tags_out) { - std::cout << "sblen: " << buf_in.size() <<"\n"; std::istringstream iss( buf_in ); size_t rcv_ntags; iss.read( (char*)&offset_out, sizeof(uint64_t ) ); iss.read( (char*)&rcv_ntags, sizeof(size_t ) ); - std::cout << "RX TAGS: (offset="<<offset_out<<" ntags="<<rcv_ntags<<")\n"; + //std::cout << "RX TAGS: (offset="<<offset_out<<" ntags="<<rcv_ntags<<")\n"; int rd_offset = sizeof(uint64_t) + sizeof(size_t); + std::stringbuf sb( iss.str().substr(rd_offset) ); + for(size_t i=0; i<rcv_ntags; i++){ gr::tag_t newtag; - iss.read( (char*)&newtag.offset, sizeof(uint64_t ) ); - rd_offset += sizeof(uint64_t); - - std::stringbuf sb( iss.str().substr(rd_offset) ); - std::cout << "sblen: " << sb.str().size() << "\n"; - std::cout << "sbloc: " << sb.getloc() << "\n"; - //std::stringbuf sb( iss.str() ); - + sb.sgetn( (char*) &(newtag.offset), sizeof(uint64_t) ); newtag.key = pmt::deserialize( sb ); newtag.value = pmt::deserialize( sb ); newtag.srcid = pmt::deserialize( sb ); - std::cout << "sblen(after): " << sb.str().size() << "\n"; - std::cout << "sbloc(after): " << sb.getloc() << "\n"; + //std::cout << "RX TAG: (" << newtag.offset << ", " << newtag.key << ", " << newtag.value << ", " << newtag.srcid << ")\n"; tags_out.push_back(newtag); iss.str(sb.str()); } - return iss.str(); + int ndata = sb.in_avail(); + return iss.str().substr(iss.str().size() - ndata); } } /* namespace zeromq */ } /* namespace gr */ diff --git a/gr-zeromq/lib/tag_headers.h b/gr-zeromq/lib/tag_headers.h index 03300f881a..4c7a81238e 100644 --- a/gr-zeromq/lib/tag_headers.h +++ b/gr-zeromq/lib/tag_headers.h @@ -32,7 +32,7 @@ namespace gr { namespace zeromq { std::string gen_tag_header(uint64_t &offset, std::vector<gr::tag_t> &tags); - std::string parse_tag_header(std::string &buf_in, uint64_t &offset_out, std::vector<gr::tag_t> tags_out); + std::string parse_tag_header(std::string &buf_in, uint64_t &offset_out, std::vector<gr::tag_t> &tags_out); } /* namespace zeromq */ } /* namespace gr */ |