Ethereal-dev: [Ethereal-dev] idl2eth update - 2 patches
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Frank Singleton <frank.singleton@xxxxxxxxxxxx>
Date: Fri, 12 Oct 2001 09:07:05 -0500
Hi, I have added some functionality to idl2eth to allow C code generation and display of CORBA IDL Enum's as symbolic values, along side the numerical value currently being displayed. Twas diffed against the 2001-10-10 nightly CVS tarball. patch1.diff - ethereal_be.py patch2.diff - ethereal_gen.py Cheers / Frank -- EUS/SV/Z Frank Singleton ASO Americas BSS Office : +1 972 583 3251 ECN 800 33251 Mobile : +1 214 228 0874 Amateur Radio: VK3FCS/KM5WS Email : frank.singleton@xxxxxxxxxxxx Hardware: HP Omnibook 4150 running Redhat Linux 7.1 (2.4.3-12 kernel).
--- ../ethereal-2001-10-10/ethereal_be.py Thu Aug 30 14:31:53 2001 +++ ../ethereal-2001-10-10.updated/ethereal_be.py Thu Oct 11 09:53:42 2001 @@ -1,6 +1,6 @@ # -*- python -*- # -# $Id: ethereal_be.py,v 1.4 2001/08/30 19:31:53 oabad Exp $ +# $Id: ethereal_be.py,v 1.7 2001/10/11 12:45:34 frank Exp $ # # File : ethereal_be.py # @@ -72,7 +72,7 @@ def __init__(self, st): self.st = st self.oplist = [] # list of operation nodes - self.enumlist = [] # list of enum nodes + self.enlist = [] # list of enum nodes self.atlist = [] # list of attribute nodes @@ -86,6 +86,9 @@ self.visitOperation(n) if isinstance(n, idlast.Attribute): self.visitAttribute(n) + if isinstance(n, idlast.Enum): + self.visitEnum(n) + def visitModule(self, node): for n in node.definitions(): @@ -97,7 +100,9 @@ self.visitOperation(n) if isinstance(n, idlast.Attribute): self.visitAttribute(n) - + if isinstance(n, idlast.Enum): + self.visitEnum(n) + def visitInterface(self, node): #if node.mainFile(): for c in node.callables(): @@ -106,6 +111,9 @@ if isinstance(c, idlast.Attribute): self.visitAttribute(c) + for d in node.contents(): + if isinstance(d, idlast.Enum): + self.visitEnum(d) # # visitOperation # @@ -126,6 +134,18 @@ def visitAttribute(self,atnode): self.atlist.append(atnode) # store attribute node + # + # visitEnum + # + # populates the enum node list "enumlist" + # + # + + def visitEnum(self,enode): + #print "XXX - enum found" , enode + self.enlist.append(enode) # store enum node + + def run(tree, args): @@ -148,7 +168,7 @@ # and generate some C code eg = ethereal_gen_C(ev.st, string.upper(nl), string.lower(nl), string.capitalize(nl) + " Dissector Using GIOP API") - eg.genCode(ev.oplist, ev.atlist) # pass them onto the C generator + eg.genCode(ev.oplist, ev.atlist, ev.enlist) # pass them onto the C generator
--- ../ethereal-2001-10-10/ethereal_gen.py Fri Aug 10 23:37:31 2001 +++ ../ethereal-2001-10-10.updated/ethereal_gen.py Fri Oct 12 08:24:43 2001 @@ -1,6 +1,6 @@ # -*- python -*- # -# $Id: ethereal_gen.py,v 1.11 2001/08/11 04:37:31 guy Exp $ +# $Id: ethereal_gen.py,v 1.12 2001/10/12 13:24:43 frank Exp $ # # ethereal_gen.py (part of idl2eth) # @@ -94,6 +94,8 @@ # 12. Implement IDL "union" code [done] # 13. Implement support for plugins [done] # 14. Dont generate code for empty operations (cf: exceptions without members) +# 15. Generate code to display Enums numerically ans symbolically [done] +# 16. Place structs in subtrees # # Also test, Test, TEST # @@ -102,12 +104,12 @@ # # Strategy: -# -# For return val and all parameters do +# For every operation and attribute do +# For return val and all parameters do # find basic IDL type for each parameter # output get_CDR_xxx -# output exception handling code -# output attribute handling code +# output exception handling code +# output attribute handling code # # @@ -167,7 +169,7 @@ # # - def genCode(self,oplist, atlist): # operation and attribute lists + def genCode(self,oplist, atlist, enlist): # operation and attribute lists self.genHelpers(oplist) # sneaky .. call it now, to populate the fn_hash # so when I come to that operation later, I have the variables to @@ -195,6 +197,7 @@ self.genOpList(oplist) # string constant declares for operation names self.genExList(oplist) # string constant declares for user exceptions self.genAtList(atlist) # string constant declares for Attributes + self.genEnList(enlist) # string constant declares for Enums self.genExceptionHelpers(oplist) # helper function to decode user exceptions that have members @@ -430,6 +433,43 @@ # + # genEnList + # + # in: enlist + # + # out: C code for IDL Enum decalarations using "static const value_string" template + # + + + + def genEnList(self,enlist): + + self.st.out(self.template_comment_enums_start) + + for enum in enlist: + sname = self.namespace(enum, "_") + + self.st.out(self.template_comment_enum_comment, ename=enum.repoId()) + self.st.out(self.template_value_string_start, valstringname=sname) + for enumerator in enum.enumerators(): + self.st.out(self.template_value_string_entry, intval=str(self.valFromEnum(enum,enumerator)), description=enumerator.identifier()) + + + #atname = n.identifier() + self.st.out(self.template_value_string_end, valstringname=sname) + + self.st.out(self.template_comment_enums_end) + + + + + + + + + + + # # genExceptionDelegator # # in: oplist @@ -920,7 +960,9 @@ self.get_CDR_wchar(pn) elif pt == idltype.tk_enum: #print type.decl() - self.get_CDR_enum(pn) + self.get_CDR_enum(pn,type) + #self.get_CDR_enum(pn) + elif pt == idltype.tk_struct: self.get_CDR_struct(type,pn) elif pt == idltype.tk_TypeCode: # will I ever get here ? @@ -1003,8 +1045,12 @@ def get_CDR_any(self,pn): self.st.out(self.template_get_CDR_any, varname=pn) - def get_CDR_enum(self,pn): - self.st.out(self.template_get_CDR_enum, varname=pn) + def get_CDR_enum(self,pn,type): + #self.st.out(self.template_get_CDR_enum, varname=pn) + sname = self.namespace(type, "_") + self.st.out(self.template_get_CDR_enum_symbolic, valstringarray=sname) + + self.addvar(self.c_u_octet4) def get_CDR_string(self,pn): @@ -1821,18 +1867,18 @@ seq = NULL; """ - - - template_get_CDR_enum = """\ -/* TODO - translate Enum val into symbolic value */ + + template_get_CDR_enum_symbolic = """\ u_octet4 = get_CDR_enum(tvb,offset,stream_is_big_endian, boundary); if (tree) { - proto_tree_add_text(tree,tvb,*offset-4,4,"Enum value = %u ",u_octet4); + proto_tree_add_text(tree,tvb,*offset-4,4,"Enum value = %u (%s)",u_octet4,val_to_str(u_octet4,@valstringarray@,"Unknown Enum Value")); } """ + + template_get_CDR_string = """\ u_octet4 = get_CDR_string(tvb, &seq, offset, stream_is_big_endian, boundary); if (tree) { @@ -2262,6 +2308,49 @@ } """ +#-------------------------------------------------------------# +# Value string templates # +#-------------------------------------------------------------# + + template_value_string_start = """\ +static const value_string @valstringname@[] = { +""" + + template_value_string_entry = """\ + { @intval@, \"@description@\" }, """ + + template_value_string_end = """\ + { 0, NULL }, +}; + +""" + + + +#-------------------------------------------------------------# +# Enum handling templates # +#-------------------------------------------------------------# + + template_comment_enums_start = """\ +/* + * IDL Enums Start + */ + + """ + + template_comment_enums_end = """\ +/* + * IDL Enums End + */ + + """ + + template_comment_enum_comment = """\ +/* + * Enum = @ename@ + */ + + """
- Follow-Ups:
- Re: [Ethereal-dev] idl2eth update - 2 patches
- From: Guy Harris
- Re: [Ethereal-dev] idl2eth update - 2 patches
- Prev by Date: [Ethereal-dev] _SYS_TIME_H
- Next by Date: Re: [Ethereal-dev] _SYS_TIME_H
- Previous by thread: Re: [Ethereal-dev] _SYS_TIME_H
- Next by thread: Re: [Ethereal-dev] idl2eth update - 2 patches
- Index(es):