<html dir="ltr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style title="owaParaStyle"><!--P {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
--></style>
</head>
<body ocsi="x">
<div dir="ltr"><font color="#000000" size="2" face="Tahoma">
<p style="PAGE-BREAK-BEFORE: always; MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Hello Ross,
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">because I am new here let me first express my thankfulness for that great library which will probably save a huge amount
of development time for the project I am about to evaluate currently. <o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">I read your FAQ and the mailing lists multiple times to not bother you with trivial questions. Nevertheless I came now
to a vulnerability in the design in the event trigger approach where I would like to ask you for your opinion.<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">The general statement for triggering the Live555 event loop from external devices is:<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">“TriggerEvent is the only Live555 function that you’re permitted to call from a non LIVE555 thread”<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">In my opinion the event trigger approach is not thread safe and causes thread racing effects of different severity depending
on the usage scenario. To illustrate that a rough description of my destination.<o:p></o:p></font></font></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst">
<span style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri" lang="EN-US"><span style="mso-list: Ignore"><font size="3" face="Calibri">-</font><span style="FONT: 7pt 'Times New Roman'">
</span></span></span><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Multiple sources (based on the DeviceSource sample) with different codecs (MJPEG, H264, MPEG-2) are to create triggers for Live555 based on the triggerEvent
procedure. The source streams are live video from different hardware grabbers. The source implementations work already quite well.
<o:p></o:p></font></font></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle">
<span style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri" lang="EN-US"><span style="mso-list: Ignore"><font size="3" face="Calibri">-</font><span style="FONT: 7pt 'Times New Roman'">
</span></span></span><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Each source has registered its individual event trigger.<o:p></o:p></font></font></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle">
<span style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri" lang="EN-US"><span style="mso-list: Ignore"><font size="3" face="Calibri">-</font><span style="FONT: 7pt 'Times New Roman'">
</span></span></span><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Each source runs in its own thread which produces a trigger when a frame is available<o:p></o:p></font></font></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle">
<span style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri" lang="EN-US"><span style="mso-list: Ignore"><font size="3" face="Calibri">-</font><span style="FONT: 7pt 'Times New Roman'">
</span></span></span><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">The result is that multiple producer threads have simultaneous write access to the 4 following global live555 variables and one consumer thread (live555)
has read access. The critical shared variables are:<span style="mso-spacerun: yes">
</span>fTriggeredEventClientDatas, fLastUsedTriggerMask, fLastUsedTriggerNum and fTriggersAwaitHandling.<o:p></o:p></font></font></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpLast">
<span style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri" lang="EN-US"><span style="mso-list: Ignore"><font size="3" face="Calibri">-</font><span style="FONT: 7pt 'Times New Roman'">
</span></span></span><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Because the access to the shared variables is not protected with locks one gets racing conditions which may even lead to a crash of the application
because of access violations (what happened in my tests). <o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3" face="Calibri">For example let’s assume we have an JPEG source class and an H264 source class – for simpliciy just
</font><a name="_GoBack"></a><font size="3"><font face="Calibri">one instance of each. They call the trigger Event function simultaneously:<o:p></o:p></font></font></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">void</span><span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"> CGscTaskScheduler::triggerEvent(EventTriggerId
eventTriggerId, <span style="COLOR: blue">void</span> * clientData)<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">{<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span><span style="COLOR: blue">if</span> (eventTriggerId == fLastUsedTriggerMask)
<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span>{<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">>> Thread 1: JPEG source runs that code<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">=======================================<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span><span style="mso-tab-count: 1"> </span>fTriggeredEventClientDatas[fLastUsedTriggerNum] = clientData;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span>} <o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span><span style="COLOR: blue">else</span> <o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span>{<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 2">
</span>EventTriggerId mask = 0x80000000;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 2">
</span><span style="COLOR: blue">for</span> (<span style="COLOR: blue">unsigned</span> i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i)
<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 2">
</span>{<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 3">
</span><span style="COLOR: blue">if</span> ((eventTriggerId&mask) != 0) <o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 3">
</span>{<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 4">
</span>fTriggeredEventClientDatas[i] = clientData;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 4">
</span>fLastUsedTriggerMask = mask;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">>> Thread 2: H264 source runs that code<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">=======================================<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 4">
</span>fLastUsedTriggerNum = i;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 3">
</span>}<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 3">
</span>mask >>= 1;<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 2">
</span>}<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span>}<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-tab-count: 1">
</span>fTriggersAwaitingHandling |= eventTriggerId; <span style="mso-tab-count: 1">
</span><o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US">}<o:p></o:p></span></p>
<p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; TEXT-AUTOSPACE: ; mso-layout-grid-align: none" class="MsoNormal">
<span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"><o:p> </o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">If thread 2 changes the value of the fLastUsedTriggerNum shared variable before thread 1 wrote its clientData then the
source pointer is written to the wrong index in the ClientDatas array. One result could be that the callback deliverFrame0 of the JPEG source gets a pointer to a H264 source instance (and vice versa). That produces undefined behaviour and will normally cause
an access violation. There are other racing effects imaginable (lost frames, frames are written to a wrong RTP channel). Such effects may happen in all code parts which have access to the shared variables (for example the live555 SingleStep procedure modifies
these values as well which could lead to race effects with the source threads).<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">My only solution without modifying the live555 sources to solve that problem was to implement my own TaskScheduler which
is derived from BasicTaskScheduler and which overwrites the 4 virtual functions triggerEvent, createEventTrigger, deleteEventTrigger, SingleStep. The only change in the reimplemented virtual functions of the base classes was the introduction of a mutex which
synchronizes the simultaneous accesses for the critical code parts. With that I got rid of the different racing effects I had before.<o:p></o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri">Do I see anything wrong or did I misunderstand the design basics of the Event trigger mechanism? I appreciate the general
intention to have platform independent code. But in favor of the plagued Windows users which want to stream live sources could you please consider to introduce some conditional define based thread Windows synchronization in the task scheduler event trigger
mechanism to avoid the described problems? Without that I do not see a way to use the event trigger mechanism in a reliable way.</font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri"><font face="calibri"></font></font></font></span> </p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3"><font face="Calibri"><o:p>Best regards</o:p></font></font></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"><span style="mso-ansi-language: EN-US" lang="EN-US"><font size="3" face="calibri"><o:p>Matthias</o:p></font></span></p>
</font></div>
<br>
<TABLE style="BORDER-COLLAPSE: collapse" id=table1 border=0 width="100%">
<TBODY>
<TR>
<TD width=272><FONT size=2 face=Arial>GEUTEBRÜCK GmbH </FONT></TD>
<TD width=45><FONT color=#808080 size=1 face=Arial>Tel: </FONT></TD>
<TD><FONT size=2 face=Arial>+49 2645 137-680 </FONT></TD></TR>
<TR>
<TD width=272><FONT size=2 face=Arial>Im Nassen 7-9</FONT></TD>
<TD width=45><FONT color=#808080 size=1 face=Arial>Mobil: </FONT></TD>
<TD><FONT size=2 face=Arial> </FONT></TD></TR>
<TR>
<TD width=272><FONT size=2 face=Arial>53578 Windhagen</FONT></TD>
<TD width=45><FONT color=#808080 size=1 face=Arial>Fax: </FONT></TD>
<TD><FONT size=2 face=Arial>+49 2645 137-999 </FONT></TD></TR>
<TR>
<TD width=272><FONT size=2 face=Arial><a href='http://www.geutebrueck.de' title='http://www.geutebrueck.de'>http://www.geutebrueck.de</a></FONT></TD>
<TD width=45><FONT color=#808080 size=1 face=Arial>E-Mail: </FONT></TD>
<TD><FONT size=2 face=Arial><a href='mailto:matthias.doering@geutebrueck.com' title='mailto:matthias.doering@geutebrueck.com'>matthias.doering@geutebrueck.com</a> </FONT></TD></TR>
<TR>
<TD colSpan=3><FONT color=#808080 size=1 face=Arial>Geschäftsführer: Katharina Geutebrück, Christoph Hoffmann; UST-Ident-Nr.: DE813443473; Handelsregister: HRB 14475 Montabaur </FONT></TD></TR>
<TR>
<TD><A href="http://www.geutebrueck.com/"><IMG border=0 hspace=0 alt=TopLine_Geu_Logo src="cid:topline_geu_logo.jpg" width=541 height=76></A> </TD>
<TR>
<TD style="BORDER-BOTTOM: 3px double" width=45> </TD>
<TD style="BORDER-BOTTOM: 3px double"> </TD></TR></TBODY></TABLE>
<P align=justify><FONT color=#808080 size=1 face=Arial>Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht gestattet. <BR><BR>This e-mail contains confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. <BR><BR>Weder die GEUTEBRÜCK GmbH noch der Absender (Matthias Döring) übernehmen die Haftung für Viren; es obliegt Ihrer Verantwortung, die E-Mail und deren Anhänge auf Viren zu prüfen. <BR> Anhänge: <BR> <BR>Versand am 14.06.2012 18:28 von Döring Matthias <BR><BR></FONT></P><br></body>
</html>