[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4739 - in gnuradio/trunk/gnuradio-core/src: lib/gener
From: |
eb |
Subject: |
[Commit-gnuradio] r4739 - in gnuradio/trunk/gnuradio-core/src: lib/general python/gnuradio/gruimpl |
Date: |
Mon, 12 Mar 2007 16:08:07 -0600 (MDT) |
Author: eb
Date: 2007-03-12 16:08:06 -0600 (Mon, 12 Mar 2007)
New Revision: 4739
Modified:
gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc
gnuradio/trunk/gnuradio-core/src/python/gnuradio/gruimpl/crc.py
Log:
New fix for gr_framer_sink_1 hang on zero length payload.
Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc
2007-03-12 04:38:36 UTC (rev 4738)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc
2007-03-12 22:08:06 UTC (rev 4739)
@@ -57,11 +57,6 @@
if (VERBOSE)
fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n",
payload_len, whitener_offset);
- if (payload_len < 4) { // should be at least the length of the CRC
field
- enter_search();
- return;
- }
-
d_state = STATE_HAVE_HEADER;
d_packetlen = payload_len;
d_packet_whitener_offset = whitener_offset;
@@ -132,13 +127,25 @@
// we have a full header, check to see if it has been received
properly
if (header_ok()){
int payload_len;
- int payload_offset;
- header_payload(&payload_len, &payload_offset);
- enter_have_header(payload_len, payload_offset);
+ 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;
@@ -157,7 +164,8 @@
// build a message
// 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);
+ 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
Modified: gnuradio/trunk/gnuradio-core/src/python/gnuradio/gruimpl/crc.py
===================================================================
--- gnuradio/trunk/gnuradio-core/src/python/gnuradio/gruimpl/crc.py
2007-03-12 04:38:36 UTC (rev 4738)
+++ gnuradio/trunk/gnuradio-core/src/python/gnuradio/gruimpl/crc.py
2007-03-12 22:08:06 UTC (rev 4739)
@@ -28,6 +28,8 @@
return s + struct.pack(">I", hexint(crc))
def check_crc32(s):
+ if len(s) < 4:
+ return (False, '')
msg = s[:-4]
#print "msg = '%s'" % (msg,)
actual = gr.crc32(msg)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4739 - in gnuradio/trunk/gnuradio-core/src: lib/general python/gnuradio/gruimpl,
eb <=