1# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
2# See LICENSE.txt for complete terms.
3
4import sys
5
6from mixbox.binding_utils import *
7from . import cybox_common
8from . import address_object
9
10
11class AttachmentsType(GeneratedsSuper):
12    """The AttachmenstType captures a list of attachments for an email
13    message."""
14
15    subclass = None
16    superclass = None
17    def __init__(self, File=None):
18        if File is None:
19            self.File = []
20        else:
21            self.File = File
22    def factory(*args_, **kwargs_):
23        if AttachmentsType.subclass:
24            return AttachmentsType.subclass(*args_, **kwargs_)
25        else:
26            return AttachmentsType(*args_, **kwargs_)
27    factory = staticmethod(factory)
28    def get_File(self): return self.File
29    def set_File(self, File): self.File = File
30    def add_File(self, value): self.File.append(value)
31    def insert_File(self, index, value): self.File[index] = value
32    def hasContent_(self):
33        if (
34            self.File
35            ):
36            return True
37        else:
38            return False
39    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='AttachmentsType', namespacedef_='', pretty_print=True):
40        if pretty_print:
41            eol_ = '\n'
42        else:
43            eol_ = ''
44        showIndent(lwrite, level, pretty_print)
45        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
46        already_processed = set()
47        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='AttachmentsType')
48        if self.hasContent_():
49            lwrite('>%s' % (eol_, ))
50            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
51            showIndent(lwrite, level, pretty_print)
52            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
53        else:
54            lwrite('/>%s' % (eol_, ))
55    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='AttachmentsType'):
56        pass
57    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='AttachmentsType', fromsubclass_=False, pretty_print=True):
58        if pretty_print:
59            eol_ = '\n'
60        else:
61            eol_ = ''
62        for File_ in self.File:
63            File_.export(lwrite, level, 'EmailMessageObj:', name_='File', pretty_print=pretty_print)
64    def build(self, node):
65        self.__sourcenode__ = node
66        already_processed = set()
67        self.buildAttributes(node, node.attrib, already_processed)
68        for child in node:
69            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
70            self.buildChildren(child, node, nodeName_)
71    def buildAttributes(self, node, attrs, already_processed):
72        pass
73    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
74        if nodeName_ == 'File':
75            obj_ = AttachmentReferenceType.factory()
76            obj_.build(child_)
77            self.File.append(obj_)
78# end class AttachmentsType
79
80class EmailHeaderType(GeneratedsSuper):
81    """The EmailHeaderType captures a representation of a standard email
82    header."""
83
84    subclass = None
85    superclass = None
86    def __init__(self, Received_Lines=None, To=None, CC=None, BCC=None, From=None, Subject=None, In_Reply_To=None, Date=None, Message_ID=None, Sender=None, Reply_To=None, Errors_To=None, Boundary=None, Content_Type=None, MIME_Version=None, Precedence=None, User_Agent=None, X_Mailer=None, X_Originating_IP=None, X_Priority=None):
87        self.Received_Lines = Received_Lines
88        self.To = To
89        self.CC = CC
90        self.BCC = BCC
91        self.From = From
92        self.Subject = Subject
93        self.In_Reply_To = In_Reply_To
94        self.Date = Date
95        self.Message_ID = Message_ID
96        self.Sender = Sender
97        self.Reply_To = Reply_To
98        self.Errors_To = Errors_To
99        self.Boundary = Boundary
100        self.Content_Type = Content_Type
101        self.MIME_Version = MIME_Version
102        self.Precedence = Precedence
103        self.User_Agent = User_Agent
104        self.X_Mailer = X_Mailer
105        self.X_Originating_IP = X_Originating_IP
106        self.X_Priority = X_Priority
107    def factory(*args_, **kwargs_):
108        if EmailHeaderType.subclass:
109            return EmailHeaderType.subclass(*args_, **kwargs_)
110        else:
111            return EmailHeaderType(*args_, **kwargs_)
112    factory = staticmethod(factory)
113    def get_Received_Lines(self): return self.Received_Lines
114    def set_Received_Lines(self, Received_Lines): self.Received_Lines = Received_Lines
115    def get_To(self): return self.To
116    def set_To(self, To): self.To = To
117    def get_CC(self): return self.CC
118    def set_CC(self, CC): self.CC = CC
119    def get_BCC(self): return self.BCC
120    def set_BCC(self, BCC): self.BCC = BCC
121    def get_From(self): return self.From
122    def set_From(self, From): self.From = From
123    def get_Subject(self): return self.Subject
124    def set_Subject(self, Subject): self.Subject = Subject
125    def validate_StringObjectPropertyType(self, value):
126        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
127        pass
128    def get_In_Reply_To(self): return self.In_Reply_To
129    def set_In_Reply_To(self, In_Reply_To): self.In_Reply_To = In_Reply_To
130    def get_Date(self): return self.Date
131    def set_Date(self, Date): self.Date = Date
132    def validate_DateTimeObjectPropertyType(self, value):
133        # Validate type cybox_common.DateTimeObjectPropertyType, a restriction on None.
134        pass
135    def get_Message_ID(self): return self.Message_ID
136    def set_Message_ID(self, Message_ID): self.Message_ID = Message_ID
137    def get_Sender(self): return self.Sender
138    def set_Sender(self, Sender): self.Sender = Sender
139    def get_Reply_To(self): return self.Reply_To
140    def set_Reply_To(self, Reply_To): self.Reply_To = Reply_To
141    def get_Errors_To(self): return self.Errors_To
142    def set_Errors_To(self, Errors_To): self.Errors_To = Errors_To
143    def get_Boundary(self): return self.Boundary
144    def set_Boundary(self, Boundary): self.Boundary = Boundary
145    def get_Content_Type(self): return self.Content_Type
146    def set_Content_Type(self, Content_Type): self.Content_Type = Content_Type
147    def get_MIME_Version(self): return self.MIME_Version
148    def set_MIME_Version(self, MIME_Version): self.MIME_Version = MIME_Version
149    def get_Precedence(self): return self.Precedence
150    def set_Precedence(self, Precedence): self.Precedence = Precedence
151    def get_User_Agent(self): return self.User_Agent
152    def set_User_Agent(self, User_Agent): self.User_Agent = User_Agent
153    def get_X_Mailer(self): return self.X_Mailer
154    def set_X_Mailer(self, X_Mailer): self.X_Mailer = X_Mailer
155    def get_X_Originating_IP(self): return self.X_Originating_IP
156    def set_X_Originating_IP(self, X_Originating_IP): self.X_Originating_IP = X_Originating_IP
157    def get_X_Priority(self): return self.X_Priority
158    def set_X_Priority(self, X_Priority): self.X_Priority = X_Priority
159    def validate_PositiveIntegerObjectPropertyType(self, value):
160        # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None.
161        pass
162    def hasContent_(self):
163        if (
164            self.Received_Lines is not None or
165            self.To is not None or
166            self.CC is not None or
167            self.BCC is not None or
168            self.From is not None or
169            self.Subject is not None or
170            self.In_Reply_To is not None or
171            self.Date is not None or
172            self.Message_ID is not None or
173            self.Sender is not None or
174            self.Reply_To is not None or
175            self.Errors_To is not None or
176            self.Boundary is not None or
177            self.Content_Type is not None or
178            self.MIME_Version is not None or
179            self.Precedence is not None or
180            self.User_Agent is not None or
181            self.X_Mailer is not None or
182            self.X_Originating_IP is not None or
183            self.X_Priority is not None
184            ):
185            return True
186        else:
187            return False
188    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailHeaderType', namespacedef_='', pretty_print=True):
189        if pretty_print:
190            eol_ = '\n'
191        else:
192            eol_ = ''
193        showIndent(lwrite, level, pretty_print)
194        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
195        already_processed = set()
196        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailHeaderType')
197        if self.hasContent_():
198            lwrite('>%s' % (eol_, ))
199            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
200            showIndent(lwrite, level, pretty_print)
201            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
202        else:
203            lwrite('/>%s' % (eol_, ))
204    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='EmailHeaderType'):
205        pass
206    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailHeaderType', fromsubclass_=False, pretty_print=True):
207        if pretty_print:
208            eol_ = '\n'
209        else:
210            eol_ = ''
211        if self.Received_Lines is not None:
212            self.Received_Lines.export(lwrite, level, 'EmailMessageObj:', name_='Received_Lines', pretty_print=pretty_print)
213        if self.To is not None:
214            self.To.export(lwrite, level, 'EmailMessageObj:', name_='To', pretty_print=pretty_print)
215        if self.CC is not None:
216            self.CC.export(lwrite, level, 'EmailMessageObj:', name_='CC', pretty_print=pretty_print)
217        if self.BCC is not None:
218            self.BCC.export(lwrite, level, 'EmailMessageObj:', name_='BCC', pretty_print=pretty_print)
219        if self.From is not None:
220            self.From.export(lwrite, level, 'EmailMessageObj:', name_='From', pretty_print=pretty_print)
221        if self.Subject is not None:
222            self.Subject.export(lwrite, level, 'EmailMessageObj:', name_='Subject', pretty_print=pretty_print)
223        if self.In_Reply_To is not None:
224            self.In_Reply_To.export(lwrite, level, 'EmailMessageObj:', name_='In_Reply_To', pretty_print=pretty_print)
225        if self.Date is not None:
226            self.Date.export(lwrite, level, 'EmailMessageObj:', name_='Date', pretty_print=pretty_print)
227        if self.Message_ID is not None:
228            self.Message_ID.export(lwrite, level, 'EmailMessageObj:', name_='Message_ID', pretty_print=pretty_print)
229        if self.Sender is not None:
230            self.Sender.export(lwrite, level, 'EmailMessageObj:', name_='Sender', pretty_print=pretty_print)
231        if self.Reply_To is not None:
232            self.Reply_To.export(lwrite, level, 'EmailMessageObj:', name_='Reply_To', pretty_print=pretty_print)
233        if self.Errors_To is not None:
234            self.Errors_To.export(lwrite, level, 'EmailMessageObj:', name_='Errors_To', pretty_print=pretty_print)
235        if self.Boundary is not None:
236            self.Boundary.export(lwrite, level, 'EmailMessageObj:', name_='Boundary', pretty_print=pretty_print)
237        if self.Content_Type is not None:
238            self.Content_Type.export(lwrite, level, 'EmailMessageObj:', name_='Content_Type', pretty_print=pretty_print)
239        if self.MIME_Version is not None:
240            self.MIME_Version.export(lwrite, level, 'EmailMessageObj:', name_='MIME_Version', pretty_print=pretty_print)
241        if self.Precedence is not None:
242            self.Precedence.export(lwrite, level, 'EmailMessageObj:', name_='Precedence', pretty_print=pretty_print)
243        if self.User_Agent is not None:
244            self.User_Agent.export(lwrite, level, 'EmailMessageObj:', name_='User_Agent', pretty_print=pretty_print)
245        if self.X_Mailer is not None:
246            self.X_Mailer.export(lwrite, level, 'EmailMessageObj:', name_='X_Mailer', pretty_print=pretty_print)
247        if self.X_Originating_IP is not None:
248            self.X_Originating_IP.export(lwrite, level, 'EmailMessageObj:', name_='X_Originating_IP', pretty_print=pretty_print)
249        if self.X_Priority is not None:
250            self.X_Priority.export(lwrite, level, 'EmailMessageObj:', name_='X_Priority', pretty_print=pretty_print)
251    def build(self, node):
252        self.__sourcenode__ = node
253        already_processed = set()
254        self.buildAttributes(node, node.attrib, already_processed)
255        for child in node:
256            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
257            self.buildChildren(child, node, nodeName_)
258    def buildAttributes(self, node, attrs, already_processed):
259        pass
260    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
261        if nodeName_ == 'Received_Lines':
262            obj_ = EmailReceivedLineListType.factory()
263            obj_.build(child_)
264            self.set_Received_Lines(obj_)
265        elif nodeName_ == 'To':
266            obj_ = EmailRecipientsType.factory()
267            obj_.build(child_)
268            self.set_To(obj_)
269        elif nodeName_ == 'CC':
270            obj_ = EmailRecipientsType.factory()
271            obj_.build(child_)
272            self.set_CC(obj_)
273        elif nodeName_ == 'BCC':
274            obj_ = EmailRecipientsType.factory()
275            obj_.build(child_)
276            self.set_BCC(obj_)
277        elif nodeName_ == 'From':
278            obj_ = address_object.AddressObjectType.factory()
279            obj_.build(child_)
280            self.set_From(obj_)
281        elif nodeName_ == 'Subject':
282            obj_ = cybox_common.StringObjectPropertyType.factory()
283            obj_.build(child_)
284            self.set_Subject(obj_)
285        elif nodeName_ == 'In_Reply_To':
286            obj_ = cybox_common.StringObjectPropertyType.factory()
287            obj_.build(child_)
288            self.set_In_Reply_To(obj_)
289        elif nodeName_ == 'Date':
290            obj_ = cybox_common.DateTimeObjectPropertyType.factory()
291            obj_.build(child_)
292            self.set_Date(obj_)
293        elif nodeName_ == 'Message_ID':
294            obj_ = cybox_common.StringObjectPropertyType.factory()
295            obj_.build(child_)
296            self.set_Message_ID(obj_)
297        elif nodeName_ == 'Sender':
298            obj_ = address_object.AddressObjectType.factory()
299            obj_.build(child_)
300            self.set_Sender(obj_)
301        elif nodeName_ == 'Reply_To':
302            obj_ = address_object.AddressObjectType.factory()
303            obj_.build(child_)
304            self.set_Reply_To(obj_)
305        elif nodeName_ == 'Errors_To':
306            obj_ = cybox_common.StringObjectPropertyType.factory()
307            obj_.build(child_)
308            self.set_Errors_To(obj_)
309        elif nodeName_ == 'Boundary':
310            obj_ = cybox_common.StringObjectPropertyType.factory()
311            obj_.build(child_)
312            self.set_Boundary(obj_)
313        elif nodeName_ == 'Content_Type':
314            obj_ = cybox_common.StringObjectPropertyType.factory()
315            obj_.build(child_)
316            self.set_Content_Type(obj_)
317        elif nodeName_ == 'MIME_Version':
318            obj_ = cybox_common.StringObjectPropertyType.factory()
319            obj_.build(child_)
320            self.set_MIME_Version(obj_)
321        elif nodeName_ == 'Precedence':
322            obj_ = cybox_common.StringObjectPropertyType.factory()
323            obj_.build(child_)
324            self.set_Precedence(obj_)
325        elif nodeName_ == 'User_Agent':
326            obj_ = cybox_common.StringObjectPropertyType.factory()
327            obj_.build(child_)
328            self.set_User_Agent(obj_)
329        elif nodeName_ == 'X_Mailer':
330            obj_ = cybox_common.StringObjectPropertyType.factory()
331            obj_.build(child_)
332            self.set_X_Mailer(obj_)
333        elif nodeName_ == 'X_Originating_IP':
334            obj_ = address_object.AddressObjectType.factory()
335            obj_.build(child_)
336            self.set_X_Originating_IP(obj_)
337        elif nodeName_ == 'X_Priority':
338            obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory()
339            obj_.build(child_)
340            self.set_X_Priority(obj_)
341# end class EmailHeaderType
342
343class EmailRecipientsType(GeneratedsSuper):
344    """The EmailRecipientsType captures a list of recipients for an email
345    message."""
346
347    subclass = None
348    superclass = None
349    def __init__(self, Recipient=None):
350        if Recipient is None:
351            self.Recipient = []
352        else:
353            self.Recipient = Recipient
354    def factory(*args_, **kwargs_):
355        if EmailRecipientsType.subclass:
356            return EmailRecipientsType.subclass(*args_, **kwargs_)
357        else:
358            return EmailRecipientsType(*args_, **kwargs_)
359    factory = staticmethod(factory)
360    def get_Recipient(self): return self.Recipient
361    def set_Recipient(self, Recipient): self.Recipient = Recipient
362    def add_Recipient(self, value): self.Recipient.append(value)
363    def insert_Recipient(self, index, value): self.Recipient[index] = value
364    def hasContent_(self):
365        if (
366            self.Recipient
367            ):
368            return True
369        else:
370            return False
371    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailRecipientsType', namespacedef_='', pretty_print=True):
372        if pretty_print:
373            eol_ = '\n'
374        else:
375            eol_ = ''
376        showIndent(lwrite, level, pretty_print)
377        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
378        already_processed = set()
379        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailRecipientsType')
380        if self.hasContent_():
381            lwrite('>%s' % (eol_, ))
382            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
383            showIndent(lwrite, level, pretty_print)
384            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
385        else:
386            lwrite('/>%s' % (eol_, ))
387    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='EmailRecipientsType'):
388        pass
389    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailRecipientsType', fromsubclass_=False, pretty_print=True):
390        if pretty_print:
391            eol_ = '\n'
392        else:
393            eol_ = ''
394        for Recipient_ in self.Recipient:
395            Recipient_.export(lwrite, level, 'EmailMessageObj:', name_='Recipient', pretty_print=pretty_print)
396    def build(self, node):
397        self.__sourcenode__ = node
398        already_processed = set()
399        self.buildAttributes(node, node.attrib, already_processed)
400        for child in node:
401            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
402            self.buildChildren(child, node, nodeName_)
403    def buildAttributes(self, node, attrs, already_processed):
404        pass
405    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
406        if nodeName_ == 'Recipient':
407            obj_ = address_object.AddressObjectType.factory()
408            obj_.build(child_)
409            self.Recipient.append(obj_)
410# end class EmailRecipientsType
411
412class LinksType(GeneratedsSuper):
413    """The LinksType captures a list of URIs, representing the links
414    contained in the message."""
415
416    subclass = None
417    superclass = None
418    def __init__(self, Link=None):
419        if Link is None:
420            self.Link = []
421        else:
422            self.Link = Link
423    def factory(*args_, **kwargs_):
424        if LinksType.subclass:
425            return LinksType.subclass(*args_, **kwargs_)
426        else:
427            return LinksType(*args_, **kwargs_)
428    factory = staticmethod(factory)
429    def get_Link(self): return self.Link
430    def set_Link(self, Link): self.Link = Link
431    def add_Link(self, value): self.Link.append(value)
432    def insert_Link(self, index, value): self.Link[index] = value
433    def hasContent_(self):
434        if (
435            self.Link
436            ):
437            return True
438        else:
439            return False
440    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='LinksType', namespacedef_='', pretty_print=True):
441        if pretty_print:
442            eol_ = '\n'
443        else:
444            eol_ = ''
445        showIndent(lwrite, level, pretty_print)
446        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
447        already_processed = set()
448        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='LinksType')
449        if self.hasContent_():
450            lwrite('>%s' % (eol_, ))
451            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
452            showIndent(lwrite, level, pretty_print)
453            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
454        else:
455            lwrite('/>%s' % (eol_, ))
456    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='LinksType'):
457        pass
458    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='LinksType', fromsubclass_=False, pretty_print=True):
459        if pretty_print:
460            eol_ = '\n'
461        else:
462            eol_ = ''
463        for Link_ in self.Link:
464            Link_.export(lwrite, level, 'EmailMessageObj:', name_='Link', pretty_print=pretty_print)
465    def build(self, node):
466        self.__sourcenode__ = node
467        already_processed = set()
468        self.buildAttributes(node, node.attrib, already_processed)
469        for child in node:
470            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
471            self.buildChildren(child, node, nodeName_)
472    def buildAttributes(self, node, attrs, already_processed):
473        pass
474    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
475        if nodeName_ == 'Link':
476            obj_ = LinkReferenceType.factory()
477            obj_.build(child_)
478            self.Link.append(obj_)
479# end class LinksType
480
481class EmailReceivedLineType(GeneratedsSuper):
482    """The EmailReceivedLineType captures a single 'Received' line in an
483    email message header."""
484    subclass = None
485    superclass = None
486    def __init__(self, From=None, By=None, Via=None, With=None, For=None, ID=None, Timestamp=None):
487        self.From = From
488        self.By = By
489        self.Via = Via
490        self.With = With
491        self.For = For
492        self.ID = ID
493        self.Timestamp = Timestamp
494    def factory(*args_, **kwargs_):
495        if EmailReceivedLineType.subclass:
496            return EmailReceivedLineType.subclass(*args_, **kwargs_)
497        else:
498            return EmailReceivedLineType(*args_, **kwargs_)
499    factory = staticmethod(factory)
500    def get_From(self): return self.From
501    def set_From(self, From): self.From = From
502    def validate_StringObjectPropertyType(self, value):
503        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
504        pass
505    def get_By(self): return self.By
506    def set_By(self, By): self.By = By
507    def get_Via(self): return self.Via
508    def set_Via(self, Via): self.Via = Via
509    def get_With(self): return self.With
510    def set_With(self, With): self.With = With
511    def get_For(self): return self.For
512    def set_For(self, For): self.For = For
513    def get_ID(self): return self.ID
514    def set_ID(self, ID): self.ID = ID
515    def get_Timestamp(self): return self.Timestamp
516    def set_Timestamp(self, Timestamp): self.Timestamp = Timestamp
517    def hasContent_(self):
518        if (
519            self.From is not None or
520            self.By is not None or
521            self.Via is not None or
522            self.With is not None or
523            self.For is not None or
524            self.ID is not None or
525            self.Timestamp is not None
526            ):
527            return True
528        else:
529            return False
530    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailReceivedLineType', namespacedef_='', pretty_print=True):
531        if pretty_print:
532            eol_ = '\n'
533        else:
534            eol_ = ''
535        showIndent(lwrite, level, pretty_print)
536        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
537        already_processed = set()
538        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailReceivedLineType')
539        if self.hasContent_():
540            lwrite('>%s' % (eol_, ))
541            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
542            showIndent(lwrite, level, pretty_print)
543            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
544        else:
545            lwrite('/>%s' % (eol_, ))
546    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='EmailReceivedLineType'):
547        pass
548    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailReceivedLineType', fromsubclass_=False, pretty_print=True):
549        if pretty_print:
550            eol_ = '\n'
551        else:
552            eol_ = ''
553        if self.From is not None:
554            self.From.export(lwrite, level, 'EmailMessageObj:', name_='From', pretty_print=pretty_print)
555        if self.By is not None:
556            self.By.export(lwrite, level, 'EmailMessageObj:', name_='By', pretty_print=pretty_print)
557        if self.Via is not None:
558            self.Via.export(lwrite, level, 'EmailMessageObj:', name_='Via', pretty_print=pretty_print)
559        if self.With is not None:
560            self.With.export(lwrite, level, 'EmailMessageObj:', name_='With', pretty_print=pretty_print)
561        if self.For is not None:
562            self.For.export(lwrite, level, 'EmailMessageObj:', name_='For', pretty_print=pretty_print)
563        if self.ID is not None:
564            self.ID.export(lwrite, level, 'EmailMessageObj:', name_='ID', pretty_print=pretty_print)
565        if self.Timestamp is not None:
566            self.Timestamp.export(lwrite, level, 'EmailMessageObj:', name_='Timestamp', pretty_print=pretty_print)
567    def build(self, node):
568        self.__sourcenode__ = node
569        already_processed = set()
570        self.buildAttributes(node, node.attrib, already_processed)
571        for child in node:
572            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
573            self.buildChildren(child, node, nodeName_)
574    def buildAttributes(self, node, attrs, already_processed):
575        pass
576    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
577        if nodeName_ == 'From':
578            obj_ = cybox_common.StringObjectPropertyType.factory()
579            obj_.build(child_)
580            self.set_From(obj_)
581        elif nodeName_ == 'By':
582            obj_ = cybox_common.StringObjectPropertyType.factory()
583            obj_.build(child_)
584            self.set_By(obj_)
585        elif nodeName_ == 'Via':
586            obj_ = cybox_common.StringObjectPropertyType.factory()
587            obj_.build(child_)
588            self.set_Via(obj_)
589        elif nodeName_ == 'With':
590            obj_ = cybox_common.StringObjectPropertyType.factory()
591            obj_.build(child_)
592            self.set_With(obj_)
593        elif nodeName_ == 'For':
594            obj_ = cybox_common.StringObjectPropertyType.factory()
595            obj_.build(child_)
596            self.set_For(obj_)
597        elif nodeName_ == 'ID':
598            obj_ = cybox_common.StringObjectPropertyType.factory()
599            obj_.build(child_)
600            self.set_ID(obj_)
601        elif nodeName_ == 'Timestamp':
602            obj_ = cybox_common.DateTimeObjectPropertyType.factory()
603            obj_.build(child_)
604            self.set_Timestamp(obj_)
605# end class EmailReceivedLineType
606
607class EmailReceivedLineListType(GeneratedsSuper):
608    """The EmailReceivedLineListType captures a list of 'Received' lines in
609    an email message header."""
610
611    subclass = None
612    superclass = None
613    def __init__(self, Received=None):
614        if Received is None:
615            self.Received = []
616        else:
617            self.Received = Received
618    def factory(*args_, **kwargs_):
619        if EmailReceivedLineListType.subclass:
620            return EmailReceivedLineListType.subclass(*args_, **kwargs_)
621        else:
622            return EmailReceivedLineListType(*args_, **kwargs_)
623    factory = staticmethod(factory)
624    def get_Received(self): return self.Received
625    def set_Received(self, Received): self.Received = Received
626    def add_Received(self, value): self.Received.append(value)
627    def insert_Received(self, index, value): self.Received[index] = value
628    def hasContent_(self):
629        if (
630            self.Received
631            ):
632            return True
633        else:
634            return False
635    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailReceivedLineListType', namespacedef_='', pretty_print=True):
636        if pretty_print:
637            eol_ = '\n'
638        else:
639            eol_ = ''
640        showIndent(lwrite, level, pretty_print)
641        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
642        already_processed = set()
643        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailReceivedLineListType')
644        if self.hasContent_():
645            lwrite('>%s' % (eol_, ))
646            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
647            showIndent(lwrite, level, pretty_print)
648            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
649        else:
650            lwrite('/>%s' % (eol_, ))
651    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='EmailReceivedLineListType'):
652        pass
653    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailReceivedLineListType', fromsubclass_=False, pretty_print=True):
654        if pretty_print:
655            eol_ = '\n'
656        else:
657            eol_ = ''
658        for Received_ in self.Received:
659            Received_.export(lwrite, level, 'EmailMessageObj:', name_='Received', pretty_print=pretty_print)
660    def build(self, node):
661        self.__sourcenode__ = node
662        already_processed = set()
663        self.buildAttributes(node, node.attrib, already_processed)
664        for child in node:
665            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
666            self.buildChildren(child, node, nodeName_)
667    def buildAttributes(self, node, attrs, already_processed):
668        pass
669    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
670        if nodeName_ == 'Received':
671            obj_ = EmailReceivedLineType.factory()
672            obj_.build(child_)
673            self.Received.append(obj_)
674# end class EmailReceivedLineListType
675
676class AttachmentReferenceType(GeneratedsSuper):
677    """The AttachmentReferenceType specifies a reference to an Object
678    defined elsewhere in the document which characterizes an
679    attachment included in the email message.The object_reference
680    field specifies a reference to an file-oriented (i.e., the File
681    Object or one its derivations such as the Windows File Object)
682    Object defined elsewhere in the document, via its id."""
683
684    subclass = None
685    superclass = None
686    def __init__(self, object_reference=None):
687        self.object_reference = _cast(None, object_reference)
688        pass
689    def factory(*args_, **kwargs_):
690        if AttachmentReferenceType.subclass:
691            return AttachmentReferenceType.subclass(*args_, **kwargs_)
692        else:
693            return AttachmentReferenceType(*args_, **kwargs_)
694    factory = staticmethod(factory)
695    def get_object_reference(self): return self.object_reference
696    def set_object_reference(self, object_reference): self.object_reference = object_reference
697    def hasContent_(self):
698        if (
699
700            ):
701            return True
702        else:
703            return False
704    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='AttachmentReferenceType', namespacedef_='', pretty_print=True):
705        if pretty_print:
706            eol_ = '\n'
707        else:
708            eol_ = ''
709        showIndent(lwrite, level, pretty_print)
710        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
711        already_processed = set()
712        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='AttachmentReferenceType')
713        if self.hasContent_():
714            lwrite('>%s' % (eol_, ))
715            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
716            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
717        else:
718            lwrite('/>%s' % (eol_, ))
719    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='AttachmentReferenceType'):
720        if self.object_reference is not None:
721
722            lwrite(' object_reference=%s' % (quote_attrib(self.object_reference), ))
723    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='AttachmentReferenceType', fromsubclass_=False, pretty_print=True):
724        pass
725    def build(self, node):
726        self.__sourcenode__ = node
727        already_processed = set()
728        self.buildAttributes(node, node.attrib, already_processed)
729        for child in node:
730            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
731            self.buildChildren(child, node, nodeName_)
732    def buildAttributes(self, node, attrs, already_processed):
733        value = find_attr_value_('object_reference', node)
734        if value is not None:
735
736            self.object_reference = value
737    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
738        pass
739# end class AttachmentReferenceType
740
741class LinkReferenceType(GeneratedsSuper):
742    """The LinkReferenceType specifies a reference to a URI Object defined
743    elsewhere in the document which characterizes a hyperlink
744    embedded in the body of the email message.The object_reference
745    field specifies a reference to a URI Object defined elsewhere in
746    the document, via its id."""
747
748    subclass = None
749    superclass = None
750    def __init__(self, object_reference=None):
751        self.object_reference = _cast(None, object_reference)
752        pass
753    def factory(*args_, **kwargs_):
754        if LinkReferenceType.subclass:
755            return LinkReferenceType.subclass(*args_, **kwargs_)
756        else:
757            return LinkReferenceType(*args_, **kwargs_)
758    factory = staticmethod(factory)
759    def get_object_reference(self): return self.object_reference
760    def set_object_reference(self, object_reference): self.object_reference = object_reference
761    def hasContent_(self):
762        if (
763
764            ):
765            return True
766        else:
767            return False
768    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='LinkReferenceType', namespacedef_='', pretty_print=True):
769        if pretty_print:
770            eol_ = '\n'
771        else:
772            eol_ = ''
773        showIndent(lwrite, level, pretty_print)
774        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
775        already_processed = set()
776        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='LinkReferenceType')
777        if self.hasContent_():
778            lwrite('>%s' % (eol_, ))
779            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
780            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
781        else:
782            lwrite('/>%s' % (eol_, ))
783    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='LinkReferenceType'):
784        if self.object_reference is not None:
785
786            lwrite(' object_reference=%s' % (quote_attrib(self.object_reference), ))
787    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='LinkReferenceType', fromsubclass_=False, pretty_print=True):
788        pass
789    def build(self, node):
790        self.__sourcenode__ = node
791        already_processed = set()
792        self.buildAttributes(node, node.attrib, already_processed)
793        for child in node:
794            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
795            self.buildChildren(child, node, nodeName_)
796    def buildAttributes(self, node, attrs, already_processed):
797        value = find_attr_value_('object_reference', node)
798        if value is not None:
799
800            self.object_reference = value
801    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
802        pass
803# end class LinkReferenceType
804
805class EmailMessageObjectType(cybox_common.ObjectPropertiesType):
806    """The EmailMessageObjectType type is intended to characterize an
807    individual email message."""
808
809    subclass = None
810    superclass = cybox_common.ObjectPropertiesType
811    def __init__(self, object_reference=None, Custom_Properties=None, xsi_type=None, Header=None, Email_Server=None, Raw_Body=None, Raw_Header=None, Attachments=None, Links=None):
812        super(EmailMessageObjectType, self).__init__(object_reference, Custom_Properties, xsi_type )
813        self.Header = Header
814        self.Email_Server = Email_Server
815        self.Raw_Body = Raw_Body
816        self.Raw_Header = Raw_Header
817        self.Attachments = Attachments
818        self.Links = Links
819    def factory(*args_, **kwargs_):
820        if EmailMessageObjectType.subclass:
821            return EmailMessageObjectType.subclass(*args_, **kwargs_)
822        else:
823            return EmailMessageObjectType(*args_, **kwargs_)
824    factory = staticmethod(factory)
825    def get_Header(self): return self.Header
826    def set_Header(self, Header): self.Header = Header
827    def get_Email_Server(self): return self.Email_Server
828    def set_Email_Server(self, Email_Server): self.Email_Server = Email_Server
829    def validate_StringObjectPropertyType(self, value):
830        # Validate type cybox_common.StringObjectPropertyType, a restriction on None.
831        pass
832    def get_Raw_Body(self): return self.Raw_Body
833    def set_Raw_Body(self, Raw_Body): self.Raw_Body = Raw_Body
834    def get_Raw_Header(self): return self.Raw_Header
835    def set_Raw_Header(self, Raw_Header): self.Raw_Header = Raw_Header
836    def get_Attachments(self): return self.Attachments
837    def set_Attachments(self, Attachments): self.Attachments = Attachments
838    def get_Links(self): return self.Links
839    def set_Links(self, Links): self.Links = Links
840    def hasContent_(self):
841        if (
842            self.Header is not None or
843            self.Email_Server is not None or
844            self.Raw_Body is not None or
845            self.Raw_Header is not None or
846            self.Attachments is not None or
847            self.Links is not None or
848            super(EmailMessageObjectType, self).hasContent_()
849            ):
850            return True
851        else:
852            return False
853    def export(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailMessageObjectType', namespacedef_='', pretty_print=True):
854        if pretty_print:
855            eol_ = '\n'
856        else:
857            eol_ = ''
858        showIndent(lwrite, level, pretty_print)
859        lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
860        already_processed = set()
861        self.exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailMessageObjectType')
862        if self.hasContent_():
863            lwrite('>%s' % (eol_, ))
864            self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print)
865            showIndent(lwrite, level, pretty_print)
866            lwrite('</%s%s>%s' % (namespace_, name_, eol_))
867        else:
868            lwrite('/>%s' % (eol_, ))
869    def exportAttributes(self, lwrite, level, already_processed, namespace_='EmailMessageObj:', name_='EmailMessageObjectType'):
870        super(EmailMessageObjectType, self).exportAttributes(lwrite, level, already_processed, namespace_, name_='EmailMessageObjectType')
871    def exportChildren(self, lwrite, level, namespace_='EmailMessageObj:', name_='EmailMessageObjectType', fromsubclass_=False, pretty_print=True):
872        super(EmailMessageObjectType, self).exportChildren(lwrite, level, 'EmailMessageObj:', name_, True, pretty_print=pretty_print)
873        if pretty_print:
874            eol_ = '\n'
875        else:
876            eol_ = ''
877        if self.Header is not None:
878            self.Header.export(lwrite, level, 'EmailMessageObj:', name_='Header', pretty_print=pretty_print)
879        if self.Email_Server is not None:
880            self.Email_Server.export(lwrite, level, 'EmailMessageObj:', name_='Email_Server', pretty_print=pretty_print)
881        if self.Raw_Body is not None:
882            if self.Raw_Body.get_valueOf_() is not None:
883                value = self.Raw_Body.get_valueOf_()
884                if not value.startswith('<![CDATA['):
885                    value = '<![CDATA[' + value + ']]>'
886                    self.Raw_Body.set_valueOf_(value)
887            self.Raw_Body.export(lwrite, level, 'EmailMessageObj:', name_='Raw_Body', pretty_print=pretty_print)
888        if self.Raw_Header is not None:
889            if self.Raw_Header.get_valueOf_() is not None:
890                value = self.Raw_Header.get_valueOf_()
891                if not value.startswith('<![CDATA['):
892                    value = '<![CDATA[' + value + ']]>'
893                    self.Raw_Header.set_valueOf_(value)
894            self.Raw_Header.export(lwrite, level, 'EmailMessageObj:', name_='Raw_Header', pretty_print=pretty_print)
895        if self.Attachments is not None:
896            self.Attachments.export(lwrite, level, 'EmailMessageObj:', name_='Attachments', pretty_print=pretty_print)
897        if self.Links is not None:
898            self.Links.export(lwrite, level, 'EmailMessageObj:', name_='Links', pretty_print=pretty_print)
899    def build(self, node):
900        self.__sourcenode__ = node
901        already_processed = set()
902        self.buildAttributes(node, node.attrib, already_processed)
903        for child in node:
904            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
905            self.buildChildren(child, node, nodeName_)
906    def buildAttributes(self, node, attrs, already_processed):
907        super(EmailMessageObjectType, self).buildAttributes(node, attrs, already_processed)
908    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
909        if nodeName_ == 'Header':
910            obj_ = EmailHeaderType.factory()
911            obj_.build(child_)
912            self.set_Header(obj_)
913        elif nodeName_ == 'Email_Server':
914            obj_ = cybox_common.StringObjectPropertyType.factory()
915            obj_.build(child_)
916            self.set_Email_Server(obj_)
917        elif nodeName_ == 'Raw_Body':
918            obj_ = cybox_common.StringObjectPropertyType.factory()
919            obj_.build(child_)
920            self.set_Raw_Body(obj_)
921        elif nodeName_ == 'Raw_Header':
922            obj_ = cybox_common.StringObjectPropertyType.factory()
923            obj_.build(child_)
924            self.set_Raw_Header(obj_)
925        elif nodeName_ == 'Attachments':
926            obj_ = AttachmentsType.factory()
927            obj_.build(child_)
928            self.set_Attachments(obj_)
929        elif nodeName_ == 'Links':
930            obj_ = LinksType.factory()
931            obj_.build(child_)
932            self.set_Links(obj_)
933        super(EmailMessageObjectType, self).buildChildren(child_, node, nodeName_, True)
934# end class EmailMessageObjectType
935
936GDSClassesMapping = {
937    'Build_Utility': cybox_common.BuildUtilityType,
938    'Errors': cybox_common.ErrorsType,
939    'Search_Distance': cybox_common.IntegerObjectPropertyType,
940    'Time': cybox_common.TimeType,
941    'Certificate_Issuer': cybox_common.StringObjectPropertyType,
942    'Metadata': cybox_common.MetadataType,
943    'Hash': cybox_common.HashType,
944    'User_Agent': cybox_common.StringObjectPropertyType,
945    'Information_Source_Type': cybox_common.ControlledVocabularyStringType,
946    'Dependencies': cybox_common.DependenciesType,
947    'By': cybox_common.StringObjectPropertyType,
948    'Segment_Hash': cybox_common.HashValueType,
949    'Internal_Strings': cybox_common.InternalStringsType,
950    'SubDatum': cybox_common.MetadataType,
951    'Sender': address_object.AddressObjectType,
952    'Digital_Signature': cybox_common.DigitalSignatureInfoType,
953    'Code_Snippets': cybox_common.CodeSnippetsType,
954    'Value': cybox_common.StringObjectPropertyType,
955    'Length': cybox_common.IntegerObjectPropertyType,
956    'Encoding': cybox_common.ControlledVocabularyStringType,
957    'Internationalization_Settings': cybox_common.InternationalizationSettingsType,
958    'Image_Offset': cybox_common.IntegerObjectPropertyType,
959    'File_System_Offset': cybox_common.IntegerObjectPropertyType,
960    'English_Translation': cybox_common.StringObjectPropertyType,
961    'Subject': cybox_common.StringObjectPropertyType,
962    'Functions': cybox_common.FunctionsType,
963    'From': cybox_common.StringObjectPropertyType,
964    'String_Value': cybox_common.StringObjectPropertyType,
965    'For': cybox_common.StringObjectPropertyType,
966    'Build_Utility_Platform_Specification': cybox_common.PlatformSpecificationType,
967    'Compiler_Informal_Description': cybox_common.CompilerInformalDescriptionType,
968    'System': cybox_common.ObjectPropertiesType,
969    'Platform': cybox_common.PlatformSpecificationType,
970    'Usage_Context_Assumptions': cybox_common.UsageContextAssumptionsType,
971    'Import': cybox_common.StringObjectPropertyType,
972    'Raw_Header': cybox_common.StringObjectPropertyType,
973    'Type': cybox_common.ControlledVocabularyStringType,
974    'Compilers': cybox_common.CompilersType,
975    'Tool_Type': cybox_common.ControlledVocabularyStringType,
976    'String': cybox_common.ExtractedStringType,
977    'Raw_Body': cybox_common.StringObjectPropertyType,
978    'Tool': cybox_common.ToolInformationType,
979    'Build_Information': cybox_common.BuildInformationType,
980    'Tool_Hashes': cybox_common.HashListType,
981    'X_Priority': cybox_common.PositiveIntegerObjectPropertyType,
982    'Error_Instances': cybox_common.ErrorInstancesType,
983    'Data_Segment': cybox_common.StringObjectPropertyType,
984    'Certificate_Subject': cybox_common.StringObjectPropertyType,
985    'Property': cybox_common.PropertyType,
986    'Strings': cybox_common.ExtractedStringsType,
987    'Contributors': cybox_common.PersonnelType,
988    'Simple_Hash_Value': cybox_common.SimpleHashValueType,
989    'X_Mailer': cybox_common.StringObjectPropertyType,
990    'Reference_Description': cybox_common.StructuredTextType,
991    'User_Account_Info': cybox_common.ObjectPropertiesType,
992    'Execution_Environment': cybox_common.ExecutionEnvironmentType,
993    'Configuration_Settings': cybox_common.ConfigurationSettingsType,
994    'Compiler_Platform_Specification': cybox_common.PlatformSpecificationType,
995    'In_Reply_To': cybox_common.StringObjectPropertyType,
996    'Byte_String_Value': cybox_common.HexBinaryObjectPropertyType,
997    'Instance': cybox_common.ObjectPropertiesType,
998    'MIME_Version': cybox_common.StringObjectPropertyType,
999    'Boundary': cybox_common.StringObjectPropertyType,
1000    'Segment': cybox_common.HashSegmentType,
1001    'Identifier': cybox_common.PlatformIdentifierType,
1002    'Tool_Specific_Data': cybox_common.ToolSpecificDataType,
1003    'Timestamp': cybox_common.DateTimeObjectPropertyType,
1004    'Message_ID': cybox_common.StringObjectPropertyType,
1005    'Segment_Count': cybox_common.IntegerObjectPropertyType,
1006    'Offset': cybox_common.IntegerObjectPropertyType,
1007    'Date': cybox_common.DateRangeType,
1008    'Hashes': cybox_common.HashListType,
1009    'Recipient': address_object.AddressObjectType,
1010    'Segments': cybox_common.HashSegmentsType,
1011    'Language': cybox_common.StringObjectPropertyType,
1012    'Errors_To': cybox_common.StringObjectPropertyType,
1013    'Usage_Context_Assumption': cybox_common.StructuredTextType,
1014    'Block_Hash': cybox_common.FuzzyHashBlockType,
1015    'Dependency': cybox_common.DependencyType,
1016    'Error': cybox_common.ErrorType,
1017    'Trigger_Point': cybox_common.HexBinaryObjectPropertyType,
1018    'Environment_Variable': cybox_common.EnvironmentVariableType,
1019    'Byte_Run': cybox_common.ByteRunType,
1020    'Precedence': cybox_common.StringObjectPropertyType,
1021    'Tool_Configuration': cybox_common.ToolConfigurationType,
1022    'Imports': cybox_common.ImportsType,
1023    'Library': cybox_common.LibraryType,
1024    'References': cybox_common.ToolReferencesType,
1025    'Block_Hash_Value': cybox_common.HashValueType,
1026    'Fuzzy_Hash_Structure': cybox_common.FuzzyHashStructureType,
1027    'Configuration_Setting': cybox_common.ConfigurationSettingType,
1028    'Libraries': cybox_common.LibrariesType,
1029    'X_Originating_IP': address_object.AddressObjectType,
1030    'Email_Server': cybox_common.StringObjectPropertyType,
1031    'Function': cybox_common.StringObjectPropertyType,
1032    'Description': cybox_common.StructuredTextType,
1033    'Code_Snippet': cybox_common.ObjectPropertiesType,
1034    'Build_Configuration': cybox_common.BuildConfigurationType,
1035    'VLAN_Name': cybox_common.StringObjectPropertyType,
1036    'Address': address_object.AddressObjectType,
1037    'Reply_To': address_object.AddressObjectType,
1038    'Search_Within': cybox_common.IntegerObjectPropertyType,
1039    'With': cybox_common.StringObjectPropertyType,
1040    'Compiler': cybox_common.CompilerType,
1041    'Name': cybox_common.StringObjectPropertyType,
1042    'Address_Value': cybox_common.StringObjectPropertyType,
1043    'VLAN_Num': cybox_common.IntegerObjectPropertyType,
1044    'Content_Type': cybox_common.StringObjectPropertyType,
1045    'Signature_Description': cybox_common.StringObjectPropertyType,
1046    'Block_Size': cybox_common.IntegerObjectPropertyType,
1047    'ID': cybox_common.StringObjectPropertyType,
1048    'Fuzzy_Hash_Value': cybox_common.FuzzyHashValueType,
1049    'Data_Size': cybox_common.DataSizeType,
1050    'Dependency_Description': cybox_common.StructuredTextType,
1051    'Contributor': cybox_common.ContributorType,
1052    'Tools': cybox_common.ToolsInformationType,
1053    'Custom_Properties': cybox_common.CustomPropertiesType,
1054}
1055
1056USAGE_TEXT = """
1057Usage: python <Parser>.py [ -s ] <in_xml_file>
1058"""
1059
1060def usage():
1061    print(USAGE_TEXT)
1062    sys.exit(1)
1063
1064def get_root_tag(node):
1065    tag = Tag_pattern_.match(node.tag).groups()[-1]
1066    rootClass = GDSClassesMapping.get(tag)
1067    if rootClass is None:
1068        rootClass = globals().get(tag)
1069    return tag, rootClass
1070
1071def parse(inFileName):
1072    doc = parsexml_(inFileName)
1073    rootNode = doc.getroot()
1074    rootTag, rootClass = get_root_tag(rootNode)
1075    if rootClass is None:
1076        rootTag = 'Email_Message'
1077        rootClass = EmailMessageObjectType
1078    rootObj = rootClass.factory()
1079    rootObj.build(rootNode)
1080    # Enable Python to collect the space used by the DOM.
1081    doc = None
1082#    sys.stdout.write('<?xml version="1.0" ?>\n')
1083#    rootObj.export(sys.stdout.write, 0, name_=rootTag,
1084#        namespacedef_='',
1085#        pretty_print=True)
1086    return rootObj
1087
1088def parseEtree(inFileName):
1089    doc = parsexml_(inFileName)
1090    rootNode = doc.getroot()
1091    rootTag, rootClass = get_root_tag(rootNode)
1092    if rootClass is None:
1093        rootTag = 'Email_Message'
1094        rootClass = EmailMessageObjectType
1095    rootObj = rootClass.factory()
1096    rootObj.build(rootNode)
1097    # Enable Python to collect the space used by the DOM.
1098    doc = None
1099    rootElement = rootObj.to_etree(None, name_=rootTag)
1100    content = etree_.tostring(rootElement, pretty_print=True,
1101        xml_declaration=True, encoding="utf-8")
1102    sys.stdout.write(content)
1103    sys.stdout.write('\n')
1104    return rootObj, rootElement
1105
1106def parseString(inString):
1107    from mixbox.vendor.six import StringIO
1108    doc = parsexml_(StringIO(inString))
1109    rootNode = doc.getroot()
1110    rootTag, rootClass = get_root_tag(rootNode)
1111    if rootClass is None:
1112        rootTag = 'Email_Message'
1113        rootClass = EmailMessageObjectType
1114    rootObj = rootClass.factory()
1115    rootObj.build(rootNode)
1116    # Enable Python to collect the space used by the DOM.
1117    doc = None
1118#    sys.stdout.write('<?xml version="1.0" ?>\n')
1119#    rootObj.export(sys.stdout.write, 0, name_="Email_Message",
1120#        namespacedef_='')
1121    return rootObj
1122
1123def main():
1124    args = sys.argv[1:]
1125    if len(args) == 1:
1126        parse(args[0])
1127    else:
1128        usage()
1129
1130if __name__ == '__main__':
1131    #import pdb; pdb.set_trace()
1132    main()
1133
1134__all__ = [
1135    "EmailMessageObjectType",
1136    "AttachmentsType",
1137    "EmailHeaderType",
1138    "EmailRecipientsType",
1139    "LinksType",
1140    "EmailReceivedLineType",
1141    "EmailReceivedLineListType",
1142    "AttachmentReferenceType",
1143    "LinkReferenceType"
1144    ]
1145