util: Move packet trace file read to protolib

This patch moves the code for opening an input protobuf packet trace into
a function defined in the protobuf library. This is because the code is
commonly used in decode scripts and is independent of the src protobuf
message.
This commit is contained in:
Radhika Jagtap 2014-08-10 05:39:20 -04:00
parent dbdce42b88
commit 2ee47fc8d1
2 changed files with 27 additions and 17 deletions

View file

@ -48,7 +48,6 @@
# r,128,64,4000,0 # r,128,64,4000,0
# w,232123,64,500000,0 # w,232123,64,500000,0
import gzip
import protolib import protolib
import sys import sys
@ -81,22 +80,8 @@ def main():
print "Usage: ", sys.argv[0], " <protobuf input> <ASCII output>" print "Usage: ", sys.argv[0], " <protobuf input> <ASCII output>"
exit(-1) exit(-1)
try: # Open the file in read mode
# First see if this file is gzipped proto_in = protolib.openFileRd(sys.argv[1])
try:
# Opening the file works even if it is not a gzip file
proto_in = gzip.open(sys.argv[1], 'rb')
# Force a check of the magic number by seeking in the
# file. If we do not do it here the error will occur when
# reading the first message.
proto_in.seek(1)
proto_in.seek(0)
except IOError:
proto_in = open(sys.argv[1], 'rb')
except IOError:
print "Failed to open ", sys.argv[1], " for reading"
exit(-1)
try: try:
ascii_out = open(sys.argv[2], 'w') ascii_out = open(sys.argv[2], 'w')

View file

@ -71,8 +71,33 @@
# with protobuf python messages. For eg, the decode scripts for different # with protobuf python messages. For eg, the decode scripts for different
# types of proto objects can use the same function to decode a single message # types of proto objects can use the same function to decode a single message
import gzip
import struct import struct
def openFileRd(in_file):
"""
This opens the file passed as argument for reading using an appropriate
function depending on if it is gzipped or not. It returns the file
handle.
"""
try:
# First see if this file is gzipped
try:
# Opening the file works even if it is not a gzip file
proto_in = gzip.open(in_file, 'rb')
# Force a check of the magic number by seeking in the
# file. If we do not do it here the error will occur when
# reading the first message.
proto_in.seek(1)
proto_in.seek(0)
except IOError:
proto_in = open(in_file, 'rb')
except IOError:
print "Failed to open ", in_file, " for reading"
exit(-1)
return proto_in
def DecodeVarint(in_file): def DecodeVarint(in_file):
""" """
The decoding of the Varint32 is copied from The decoding of the Varint32 is copied from