commit-gnuradio
[Top][All Lists]
Advanced

[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)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]