From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: From: "Stahl, Michael" Date: Mon, 2 Aug 2021 14:29:18 +0000 Message-ID: References: , , , In-Reply-To: Content-Language: de-DE MIME-Version: 1.0 Subject: Re: [RAUC] Antwort: Re: Antwort: D-Bus control Qt List-Id: RAUC Project - Discussion List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1750164537==" Errors-To: rauc-bounces@pengutronix.de Sender: "RAUC" To: "Eugen.Wiens@JUMO.net" Cc: RAUC , "RAUC@pengutronix.de" --===============1750164537== Content-Language: de-DE Content-Type: multipart/alternative; boundary="_000_AM9PR09MB47565A139DBA7695DFA7C3A7DBEF9AM9PR09MB4756eurp_" --_000_AM9PR09MB47565A139DBA7695DFA7C3A7DBEF9AM9PR09MB4756eurp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Okay, thanks a lot. A last question. Is it correct that I have to poll the "Progress" property = or is there any signal system where I can subcribe to get a notification at= every change of progress status? ________________________________ Von: Eugen.Wiens@JUMO.net Gesendet: Montag, 2. August 2021 15:36 An: Stahl, Michael Cc: RAUC@pengutronix.de ; RAUC Betreff: Antwort: Re: [RAUC] Antwort: D-Bus control Qt Hi Michael, "RAUC" schrieb am 02.08.2021 15:20:25: > Von: "Stahl, Michael" > An: "Eugen.Wiens@JUMO.net" > Kopie: "RAUC@pengutronix.de" > Datum: 02.08.2021 15:20 > Betreff: Re: [RAUC] Antwort: D-Bus control Qt > Gesendet von: "RAUC" > > Hi Eugen, > > I think I got it. > > MyProgress.cpp: > Q_DECLARE_METATYPE(MyProgress) > > QDBusArgument &operator<<(QDBusArgument &argument, const MyProgress& > parameterProgress) > { > argument.beginStructure(); > argument << parameterProgress.m_Progress; > argument << parameterProgress.m_Message; > argument << parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > > const QDBusArgument &operator>>(const QDBusArgument &argument, MyProgress= & > parameterProgress) > { > argument.beginStructure(); > argument >> parameterProgress.m_Progress; > argument >> parameterProgress.m_Message; > argument >> parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > > MyProgress ::MyProgress(){ > qRegisterMetaType(); > qDBusRegisterMetaType(); > } > > MyProgress.h: > #ifndef MYPROGRESS_H > #define MYPROGRESS_H > > #include > #include > #include > #include > > class MyProgress > { > public: > MyProgress(); > ~MyProgress(); > int m_Progress; > QString m_Message; > int m_Additional; > public slots: > friend QDBusArgument &operator<<(QDBusArgument &argument, const > RaucProgress ¶meterProgress); > friend const QDBusArgument &operator>>(const QDBusArgument &argument, > RaucProgress ¶meterProgress); > }; > #endif // MYPROGRESS_H > > update.cpp: > ... > QDBusInterface interface( "de.pengutronix.rauc", > "/", > "de.pengutronix.rauc.Installer", > QDBusConnection::systemBus() ); > > if (interface.isValid() =3D=3D true) > { > qDebug() << "interface is valid"; > qDebug() << "Read property (Progress)"; > QVariant property =3D interface.property("Progress"); > property.value() >> parameterProgress; > qDebug() << parameterProgress.m_Progress; > qDebug() << parameterProgress.m_Message; > } > ... > > parameterProgress is delcared in the update.h > > I have a last question. Maybe you can answer it. Why have I add the > keyword "friend" in front of the QDBusArguments? I wount compile without = it. If you add the operators as a member, you Qt has problem to find them. We i= mplement the operators outside of the class. As "normal" functions not as M= ember Methods. Qt is searching "operator >> ( Type, Type)" and not as Membe= r of a class. > > Many thanks. > > Kind regards > Michael > > Von: RAUC im Auftrag von Stahl, > Michael > Gesendet: Montag, 2. August 2021 14:45 > An: Eugen.Wiens@JUMO.net > Cc: RAUC@pengutronix.de > Betreff: Re: [RAUC] Antwort: D-Bus control Qt > > Hi Eugen, > > thanks for the informations. They were very useful. Some lines are > familiar to me because I tested a lot. > But I still need some support. > > This is the way I request the property: > > MyProgress parameterProgress; > QDBusInterface interface( "de.pengutronix.rauc", > "/", > "de.pengutronix.rauc.Installer", > QDBusConnection::systemBus() ); > QVariant property =3D interface.property("Progress"); > property.value() >> parameterProgress; > > No I get a compiler error: > no match for operator>>'(opernad types are 'QDBusArgument' and 'MyProgres= s') > > I think I do the registration an the installing of the oparators wrong. > > The registration is done in the constructor of MyProgress: > MyProgress ::MyProgress(){ > qRegisterMetaType(); > qDBusRegisterMetaType(); > } > > The magic statement I place in top of my MyProcess.cpp > // this is one of the magic statements > Q_DECLARE_METATYPE(MyProgress) > > But where exactly do you place the operators? Also in the MyProcess.cpp? > QDBusArgument &operator<<(QDBusArgument &argument, const MyProgress& > parameterProgress); > const QDBusArgument &operator>>(const QDBusArgument &argument, > MyProgress& parameterProgress); > QDBusArgument &operator<<(QDBusArgument &argument, const MyProgress& > parameterProgress) > { > argument.beginStructure(); > argument << parameterProgress.m_Progress; > argument << parameterProgress.m_Message; > argument << parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > const QDBusArgument &operator>>(const QDBusArgument &argument, > MyProgress& parameterProgress) > { > argument.beginStructure(); > argument >> parameterProgress.m_Progress; > argument >> parameterProgress.m_Message; > argument >> parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > > It seems like I am only a few millimeters away from my goal. > > Thanks > > Von: Eugen.Wiens@JUMO.net > Gesendet: Montag, 2. August 2021 13:41 > An: Stahl, Michael > Cc: RAUC@pengutronix.de > Betreff: Antwort: [RAUC] D-Bus control Qt > > Hi Michael, > > "RAUC" schrieb am 02.08.2021 08:15:26: > > > Von: "Stahl, Michael" > > An: "RAUC@pengutronix.de" > > Datum: 02.08.2021 08:15 > > Betreff: [RAUC] D-Bus control Qt > > Gesendet von: "RAUC" > > > > Is there someone who implemented the DBus Property "Progress" into a > > Qt-Application? The problem seems the return value isi (Integer, > > String, Integer). > > For all other properties with a single return value like "Operation" > > or "LastError" the Qt DBus API works fine. > > I found an email from 28.Oct 2019 in the mailing list where Bastian > > Krause had the same issue. The answer was only that he had to > > cunsult the Qt DBus documentation on how a tuple is mapped to Qt types. > > > > Thats a good hint but after hours of searching the web I didn't find > > a solution. The return value for a property is QVariant in Qt. > > > > Trial 1 -> Read value by iface.property("Progress"): > > This is the error message I got when I try to read the progress propert= y: > > Cannot construct placeholder type QDBusRawType > > > > Trial 2 -> Read value by iface.call("Get",...): > > Not able to get any information. The arguments of the returned > > QDBusMessages are always empty! > That is the way we implemented it: > > On Qt there are some pitfalls and you has to marshaling the data. > > 1. Create a Data Class > > #include > #include > #include > > class MyProgress > { > public: > [...] > int m_Progress; > QString m_Message; > int m_Additional; > }; > > // this is one of the magic statements > Q_DECLARE_METATYPE(MyProgress) > QDBusArgument &operator<<(QDBusArgument &argument, const MyProgress& > parameterProgress); > const QDBusArgument &operator>>(const QDBusArgument &argument, > MyProgress& parameterProgress); > }; > > You has to register the metatype and implement the operators. In the > Constructor you has to add two register Methods > > qRegisterMetaType(); > qDBusRegisterMetaType(); > > After this tree registrations your Class MyProgress is known by Qt > Metatype System. Now you has to implement operators > > QDBusArgument &operator<<(QDBusArgument &argument, const MyProgress& > parameterProgress) > { > argument.beginStructure(); > argument << parameterProgress.m_Progress; > argument << parameterProgress.m_Message; > argument << parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > const QDBusArgument &operator>>(const QDBusArgument &argument, > MyProgress& parameterProgress) > { > argument.beginStructure(); > argument >> parameterProgress.m_Progress; > argument >> parameterProgress.m_Message; > argument >> parameterProgress.m_Additional; > argument.endStructure(); > return argument; > } > > Now you are finished with preparing how to use it. In the Qt Slot of > the D-Bus call your can pipe it in your class > > MyProgress parameterProgress; > property.value() >> parameterProgress; > > > This URL help you to map our code to the Qt example https:// > doc.qt.io/qt-5/qdbusargument.html > > I hope it helps > > > > > > _______________________________________________ > > RAUC mailing list > Diese E-Mail kann vertrauliche und/oder rechtlich gesch?tzte > Informationen beinhalten und ist ausschlie?lich f?r die im Verteiler > genannten Personen bestimmt. Das unerlaubte Kopieren sowie die > unbefugte Weitergabe dieser Mail sind nicht gestattet. Bitte > benachrichtigen Sie uns gegebenenfalls telefonisch oder mit Antwort- > Mail, falls Sie nicht der richtige Adressat dieser E-Mail sind. > Bitte l?schen Sie diese Nachricht und alle Anh?nge dazu unverz? > glich. Falls nicht ausdr?cklich vermerkt, ist diese E-Mail keine > rechtlich bindende Vereinbarung. > > Kommanditgesellschaft: JUMO GmbH & Co. KG, Sitz: 36039 Fulda, > Amtsgericht Fulda HRA 302, Pers?nlich haftende Gesellschafterin: M. > K. JUCHHEIM GmbH, Sitz: 36039 Fulda, Amtsgericht Fulda HRB 17, > Gesch?ftsf?hrer: Dipl.-Ing. Bernhard Juchheim, Dipl.-Kfm. Michael > Juchheim, Dipl.-Ing. Dimitrios Charisiadis > Ust.-Id.-Nr.: DE 112411234_______________________________________________ > RAUC mailing list Diese E-Mail kann vertrauliche und/oder rechtlich gesch?tzte Informationen = beinhalten und ist ausschlie?lich f?r die im Verteiler genannten Personen b= estimmt. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail= sind nicht gestattet. Bitte benachrichtigen Sie uns gegebenenfalls telefon= isch oder mit Antwort-Mail, falls Sie nicht der richtige Adressat dieser E-= Mail sind. Bitte l?schen Sie diese Nachricht und alle Anh?nge dazu unverz?g= lich. Falls nicht ausdr?cklich vermerkt, ist diese E-Mail keine rechtlich b= indende Vereinbarung. Kommanditgesellschaft: JUMO GmbH & Co. KG, Sitz: 36039 Fulda, Amtsgericht F= ulda HRA 302, Pers?nlich haftende Gesellschafterin: M. K. JUCHHEIM GmbH, Si= tz: 36039 Fulda, Amtsgericht Fulda HRB 17, Gesch?ftsf?hrer: Dipl.-Ing. Bern= hard Juchheim, Dipl.-Kfm. Michael Juchheim, Dipl.-Ing. Dimitrios Charisiadi= s Ust.-Id.-Nr.: DE 112411234 --_000_AM9PR09MB47565A139DBA7695DFA7C3A7DBEF9AM9PR09MB4756eurp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Okay, thanks a lot.

A last question. Is it correct that I have to poll the "Progress"= property or is there any signal system where I can subcribe to get a notif= ication at every change of progress status?




Von: Eugen.Wiens@JUMO.net &= lt;Eugen.Wiens@JUMO.net>
Gesendet: Montag, 2. August 2021 15:36
An: Stahl, Michael <mstahl@moba.de>
Cc: RAUC@pengutronix.de <RAUC@pengutronix.de>; RAUC <rauc-b= ounces@pengutronix.de>
Betreff: Antwort: Re: [RAUC] Antwort: D-Bus control Qt
 
Hi Michael,

"RAUC" <rauc-bounces@pengutronix.d= e> schrieb am 02.08.2021 15:20:25:

> Von: "Stahl, Michael" <mstahl@moba.de>

> An: "Eugen.Wiens@JUMO.net" <Eugen.Wi= ens@JUMO.net>
> Kopie: "RAUC@pengutronix.de" <RAUC@p= engutronix.de>
> Datum: 02.08.2021 15:20
> Betreff: Re: [RAUC] Antwort:  D-Bus control = Qt
> Gesendet von: "RAUC" <rauc-bounces@p= engutronix.de>
>
> Hi Eugen,

>
> I think I got it.

>
> MyProgress.cpp:

> Q_DECLARE_METATYPE(MyProgress)
>
> QDBusArgument &operator<<(QDBusArgument &argument, const= MyProgress&
> parameterProgress)

> {
>     argument.beginStructure();
>     argument << parameterProgress= .m_Progress;
>     argument << parameterProgress= .m_Message;
>     argument << parameterProgress= .m_Additional;
>     argument.endStructure();
>     return argument;
> }
>
> const QDBusArgument &operator>>(const QDBusArgument &arg= ument, MyProgress&
> parameterProgress)

> {
>     argument.beginStructure();
>     argument >> parameterProgress= .m_Progress;
>     argument >> parameterProgress= .m_Message;
>     argument >> parameterProgress= .m_Additional;
>     argument.endStructure();
>     return argument;
> }
>
> MyProgress ::MyProgress(){

>     qRegisterMetaType<MyProgress>= ();
>     qDBusRegisterMetaType<MyProgress= >();
> }
>
> MyProgress.h:

> #ifndef MYPROGRESS_H

> #define MYPROGRESS_H
>

> #include <QObject>
> #include <QDBusArgument>
> #include <QMetaType>
> #include <QDBusMetaType>
>
> class MyProgress

> {
> public:
>     MyProgress();
>     ~MyProgress();
>     int m_Progress;
>     QString m_Message;
>     int m_Additional;
> public slots:
>     friend QDBusArgument &operator&= lt;<(QDBusArgument &argument, const
> RaucProgress &parameterProgress);

>     friend const QDBusArgument &ope= rator>>(const QDBusArgument &argument,
> RaucProgress &parameterProgress);

> };
> #endif // MYPROGRESS_H
>
> update.cpp:

> ...
>     QDBusInterface interface( "de.= pengutronix.rauc",

>               =                 "/",
>               =                 "de.pengutroni= x.rauc.Installer",
>               =                 QDBusConnection::sy= stemBus() );
>
>     if (interface.isValid() =3D=3D true)

>     {
>         qDebug() << &qu= ot;interface is valid";
>               =     qDebug() << "Read property (Progress)";
>        QVariant property =3D = interface.property("Progress");
>       property.value<QDBusArgum= ent>() >> parameterProgress;
>        qDebug() << para= meterProgress.m_Progress;
>        qDebug() << para= meterProgress.m_Message;
>      }
> ...
>
> parameterProgress is delcared in the update.h

>
> I have a last question. Maybe you can answer it. Why have I add the > keyword "friend" in front of the QDBusArguments? I wount com= pile without it.

If you add the operators as a member, you Qt has probl= em to find them. We implement the operators outside of the class. As "= normal" functions not as Member Methods. Qt is searching "operato= r >> ( Type, Type)" and not as Member of a class.
>
> Many thanks.

>
> Kind regards

> Michael
>
> Von: RAUC <rauc-bounces@pengutronix.de> im Auftrag von Stahl, > Michael <mstahl@moba.de>
> Gesendet: Montag, 2. August 2021 14:45
> An: Eugen.Wiens@JUMO.net <Eugen.Wiens@JUMO.net>
> Cc: RAUC@pengutronix.de <RAUC@pengutronix.de>
> Betreff: Re: [RAUC] Antwort: D-Bus control Qt

>  
> Hi Eugen,
>
> thanks for the informations. They were very useful. Some lines are > familiar to me because I tested a lot.

> But I still need some support.
>
> This is the way I request the property:

>
> MyProgress parameterProgress;

> QDBusInterface interface( "de.pengutronix.ra= uc",
>               =       "/",
>               =       "de.pengutronix.rauc.Installer",=
>               =       QDBusConnection::systemBus() );
> QVariant property =3D interface.property("Pr= ogress");
> property.value<QDBusArgument>() >> pa= rameterProgress;
>
> No I get a compiler error:

> no match for operator>>'(opernad types are = 'QDBusArgument' and 'MyProgress')
>
> I think I do the registration an the installing of the oparators wrong= .

>
> The registration is done in the constructor of MyProgress:
=
> MyProgress ::MyProgress(){
>     qRegisterMetaType<MyProgress>= ();
>     qDBusRegisterMetaType<MyProgress= >();
> }
>
> The magic statement I place in top of my MyProcess.cpp

> // this is one of the magic statements
> Q_DECLARE_METATYPE(MyProgress)

>
> But where exactly do you place the operators? Also in the MyProcess.cp= p?

> QDBusArgument &operator<<(QDBusArgument= &argument, const MyProgress&
> parameterProgress);
> const QDBusArgument &operator>>(const QDBusArgument &arg= ument,
> MyProgress& parameterProgress);

> QDBusArgument &operator<<(QDBusArgument= &argument, const MyProgress&
> parameterProgress)
> {
>     argument.beginStructure();
>     argument << parameterProgress.m_Progress;
>     argument << parameterProgress.m_Message;
>     argument << parameterProgress.m_Additional;
>     argument.endStructure();
>     return argument;
> }
> const QDBusArgument &operator>>(const QDBusArgument &arg= ument,
> MyProgress& parameterProgress)
> {
>     argument.beginStructure();
>     argument >> parameterProgress.m_Progress;
>     argument >> parameterProgress.m_Message;
>     argument >> parameterProgress.m_Additional;
>     argument.endStructure();
>     return argument;
> }

>
> It seems like I am only a few millimeters away from my goal.

>
> Thanks

>
> Von: Eugen.Wiens@JUMO.net <Eugen.Wiens@JUMO.net>
> Gesendet: Montag, 2. August 2021 13:41
> An: Stahl, Michael <mstahl@moba.de>
> Cc: RAUC@pengutronix.de <RAUC@pengutronix.de>
> Betreff: Antwort: [RAUC] D-Bus control Qt

>  
> Hi Michael,
>
> "RAUC" <rauc-bounces@pengutronix.de> schrieb am 02.08.= 2021 08:15:26:
>
> > Von: "Stahl, Michael" <mstahl@moba.de>
> > An: "RAUC@pengutronix.de" <RAUC@pengutronix.de> > > Datum: 02.08.2021 08:15
> > Betreff: [RAUC] D-Bus control Qt
> > Gesendet von: "RAUC" <rauc-bounces@pengutronix.de>= ;
> >
> > Is there someone who implemented the DBus Property "Progress= " into a
> > Qt-Application? The problem seems the return value isi (Integer, =
> > String, Integer).
> > For all other properties with a single return value like "Op= eration"
> > or "LastError" the Qt DBus API works fine.
> > I found an email from 28.Oct 2019 in the mailing list where Basti= an
> > Krause had the same issue. The answer was only that he had to > > cunsult the Qt DBus documentation on how a tuple is mapped to Qt = types.
> >
> > Thats a good hint but after hours of searching the web I didn't f= ind
> > a solution. The return value for a property is QVariant in Qt. > >
> > Trial 1 -> Read value by iface.property("Progress"):=
> > This is the error message I got when I try to read the progress p= roperty:
> > Cannot construct placeholder type QDBusRawType
> >
> > Trial 2 -> Read value by iface.call("Get",...):
> > Not able to get any information. The arguments of the returned > > QDBusMessages are always empty!
> That is the way we implemented it:
>
> On Qt there are some pitfalls and you has to marshaling the data.
>
> 1. Create a Data Class
>
> #include <QObject>
> #include <QDBusArgument>
> #include <QString>
>
> class MyProgress
> {
> public:
> [...]
>     int m_Progress;
>     QString m_Message;
>     int m_Additional;
> };
>
> // this is one of the magic statements
> Q_DECLARE_METATYPE(MyProgress)
> QDBusArgument &operator<<(QDBusArgument &argument, const= MyProgress&
> parameterProgress);
> const QDBusArgument &operator>>(const QDBusArgument &arg= ument,
> MyProgress& parameterProgress);
> };
>
> You has to register the metatype and implement the operators. In the > Constructor you has to add two register Methods
>
> qRegisterMetaType<MyProgress>();
> qDBusRegisterMetaType<MyProgress>();
>
> After this tree registrations your Class MyProgress is known by Qt > Metatype System. Now you has to implement operators
>
> QDBusArgument &operator<<(QDBusArgument &argument, const= MyProgress&
> parameterProgress)
> {
>     argument.beginStructure();
>     argument << parameterProgress.m_Progress;
>     argument << parameterProgress.m_Message;
>     argument << parameterProgress.m_Additional;
>     argument.endStructure();
>     return argument;
> }
> const QDBusArgument &operator>>(const QDBusArgument &arg= ument,
> MyProgress& parameterProgress)
> {
>     argument.beginStructure();
>     argument >> parameterProgress.m_Progress;
>     argument >> parameterProgress.m_Message;
>     argument >> parameterProgress.m_Additional;
>     argument.endStructure();
>     return argument;
> }
>
> Now you are finished with preparing how to use it. In the Qt Slot of > the D-Bus call your can pipe it in your class
>
> MyProgress parameterProgress;
> property.value<QDBusArgument>() >> parameterProgress;
>
>
> This URL help you to map our code to the Qt example https://
> doc.qt.io/qt-5/qdbusargument.html
>
> I hope it helps
>
>
> >
> > _______________________________________________
> > RAUC mailing list

> Diese E-Mail kann vertrauliche und/oder rechtlich= gesch?tzte
> Informationen beinhalten und ist ausschlie?lich f?r die im Verteiler > genannten Personen bestimmt. Das unerlaubte Kopieren sowie die
> unbefugte Weitergabe dieser Mail sind nicht gestattet. Bitte
> benachrichtigen Sie uns gegebenenfalls telefonisch oder mit Antwort- > Mail, falls Sie nicht der richtige Adressat dieser E-Mail sind.
> Bitte l?schen Sie diese Nachricht und alle Anh?nge dazu unverz?
> glich. Falls nicht ausdr?cklich vermerkt, ist diese E-Mail keine
> rechtlich bindende Vereinbarung.
>
> Kommanditgesellschaft: JUMO GmbH & Co. KG, Sitz: 36039 Fulda,
> Amtsgericht Fulda HRA 302, Pers?nlich haftende Gesellschafterin: M. > K. JUCHHEIM GmbH, Sitz: 36039 Fulda, Amtsgericht Fulda HRB 17,
> Gesch?ftsf?hrer: Dipl.-Ing. Bernhard Juchheim, Dipl.-Kfm. Michael
> Juchheim, Dipl.-Ing. Dimitrios Charisiadis
> Ust.-Id.-Nr.: DE 112411234____________________________________________= ___
> RAUC mailing list

Diese E-Mail kann vertrauliche und/= oder rechtlich gesch?tzte Informationen beinhalten und ist ausschlie?lich f= ?r die im Verteiler genannten Personen bestimmt. Das unerlaubte Kopieren so= wie die unbefugte Weitergabe dieser Mail sind nicht gestattet. Bitte benachrichtigen Sie uns gegebenenfalls te= lefonisch oder mit Antwort-Mail, falls Sie nicht der richtige Adressat dies= er E-Mail sind. Bitte l?schen Sie diese Nachricht und alle Anh?nge dazu unv= erz?glich. Falls nicht ausdr?cklich vermerkt, ist diese E-Mail keine rechtlich bindende Vereinbarung.

Kommanditgesellschaft: JUMO GmbH & Co. KG, Sitz: 36039 Fulda, Amtsgeric= ht Fulda HRA 302, Pers?nlich haftende Gesellschafterin: M. K. JUCHHEIM GmbH= , Sitz: 36039 Fulda, Amtsgericht Fulda HRB 17, Gesch?ftsf?hrer: Dipl.-Ing. = Bernhard Juchheim, Dipl.-Kfm. Michael Juchheim, Dipl.-Ing. Dimitrios Charisiadis
Ust.-Id.-Nr.: DE 112411234

--_000_AM9PR09MB47565A139DBA7695DFA7C3A7DBEF9AM9PR09MB4756eurp_-- --===============1750164537== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ RAUC mailing list --===============1750164537==--