X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gnuradio-core%2Fsrc%2Flib%2Fgeneral%2Fgr_framer_sink_1.cc;h=9da271bac716e8d89a603d5121b67896aab96ac1;hb=ea29b08aeb54227e6628f655ccfdb96fe4d8c378;hp=63249d7ab5e20c242a153a79b89b424d7f161919;hpb=09a1e803a9e6587c78d20cdf16891e5295874668;p=debian%2Fgnuradio diff --git a/gnuradio-core/src/lib/general/gr_framer_sink_1.cc b/gnuradio-core/src/lib/general/gr_framer_sink_1.cc index 63249d7a..9da271ba 100644 --- a/gnuradio-core/src/lib/general/gr_framer_sink_1.cc +++ b/gnuradio-core/src/lib/general/gr_framer_sink_1.cc @@ -28,6 +28,7 @@ #include #include #include +#include #define VERBOSE 0 @@ -52,13 +53,14 @@ gr_framer_sink_1::enter_have_sync() } inline void -gr_framer_sink_1::enter_have_header(int payload_len) +gr_framer_sink_1::enter_have_header(int payload_len, int whitener_offset) { if (VERBOSE) - fprintf(stderr, "@ enter_have_header (payload_len = %d)\n", payload_len); + fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", payload_len, whitener_offset); d_state = STATE_HAVE_HEADER; d_packetlen = payload_len; + d_packet_whitener_offset = whitener_offset; d_packetlen_cnt = 0; d_packet_byte = 0; d_packet_byte_index = 0; @@ -125,15 +127,26 @@ gr_framer_sink_1::work (int noutput_items, // we have a full header, check to see if it has been received properly if (header_ok()){ - int payload_len = header_payload_len(); - if (payload_len <= MAX_PKT_LEN) // reasonable? - enter_have_header(payload_len); // yes. - else - enter_search(); // no. + int payload_len; + int whitener_offset; + header_payload(&payload_len, &whitener_offset); + enter_have_header(payload_len, whitener_offset); + + if (d_packetlen == 0){ // check for zero-length payload + // build a zero-length message + // NOTE: passing header field as arg1 is not scalable + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, 0); + + d_target_queue->insert_tail(msg); // send it + msg.reset(); // free it up + + enter_search(); + } } else - enter_search(); // no. - break; // we're in a new state + enter_search(); // bad header + break; // we're in a new state } } break; @@ -151,7 +164,9 @@ gr_framer_sink_1::work (int noutput_items, if (d_packetlen_cnt == d_packetlen){ // packet is filled // build a message - gr_message_sptr msg = gr_make_message(0, 0, 0, d_packetlen_cnt); + // NOTE: passing header field as arg1 is not scalable + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt); memcpy(msg->msg(), d_packet, d_packetlen_cnt); d_target_queue->insert_tail(msg); // send it