Add simple wifi packet decoding to web applet.
diff --git a/app.py b/app.py
index 9f5cd7c..1649113 100644
--- a/app.py
+++ b/app.py
@@ -11,9 +11,12 @@
 import tornado.template
 from google.appengine.ext import blobstore
 from google.appengine.ext.webapp import blobstore_handlers
+import wifipacket
+
 
 loader = tornado.template.Loader('.')
 
+
 class _BaseHandler(webapp2.RequestHandler):
   def render(self, template, **kwargs):
     d = dict()
@@ -40,12 +43,8 @@
     blobres = str(urllib.unquote(blobres))
     blob_info = blobstore.BlobInfo.get(blobres)
     reader = blob_info.open()
-    total = 0
-    while 1:
-      d = reader.read(1024*1024)
-      total += len(d)
-      if not d: break
-    self.render('view.html', blob=blob_info, total=total)
+    packets = wifipacket.Packetize(reader)
+    self.render('view.html', blob=blob_info, packets=packets)
 
 
 settings = dict(
diff --git a/view.html b/view.html
index 458f4f5..068275c 100644
--- a/view.html
+++ b/view.html
@@ -7,5 +7,8 @@
 
   filename: {{blob.filename}}<p>
   size: {{blob.size}}<p>
-  total: {{total}}<p>
+
+  {% for p, frame in packets %}
+    {{p.get('ta')}}<br>
+  {% end %}
 {% end %}
diff --git a/wifipacket.py b/wifipacket.py
index 1961242..57ffb37 100755
--- a/wifipacket.py
+++ b/wifipacket.py
@@ -250,6 +250,7 @@
 
     # pcap packet data
     radiotap = stream.read(incl_len)
+    if len(radiotap) < incl_len: break  # EOF
 
     opt.incl_len = incl_len
     opt.orig_len = orig_len
@@ -308,11 +309,13 @@
     ofs = 4
     for i, fieldname in enumerate(typefields):
       if fieldname == 'seq':
+        if len(frame) < ofs + 2: break
         seq = struct.unpack('<H', frame[ofs:ofs + 2])[0]
         opt.seq = (seq & 0xfff0) >> 4
         opt.frag = (seq & 0x000f)
         ofs += 2
       else:
+        if len(frame) < ofs + 6: break
         opt[fieldname] = MacAddr(frame[ofs:ofs + 6])
         ofs += 6