[libvirt] Using callback under Windows compiling of libvirt library

Hi, I have compiled LibVirt 0.7.4 under mingw, and I want to use it with domain callback. Here is a a code sample of my situation (I'm using visual studio) : static int domain_event(virConnectPtr conn, virDomainPtr dom, int evt, int detail, void *opaque) { bool test = true; return 0; } int _tmain(int argc, _TCHAR* argv[]) { virConnectPtr conn = virConnectOpen("qemu+tcp://192.168.220.198/session"); // Set Callback int cbresult = virConnectDomainEventRegister(conn, domain_event, NULL, NULL); // Lookup Domain virDomainPtr dom = virDomainLookupByName(conn, "Test1"); if (virDomainIsActive(dom) == 1) { // Start Domain int startDom = virDomainCreate(dom); if (startDom != 0) { virErrorPtr e = virGetLastError(); bool test = true; } } else { // Stop Domain int StopDom = virDomainDestroy(dom); if (StopDom != 0) { virErrorPtr e = virGetLastError(); bool test = true; } } return 0; } This code works well when I did'nt use callbacks, but when I use it, it throw an error at the virDomainCreate or virDomainDestroy call. In the application windows (console) I have an "unmarshaling msg", I have study the case it comme from the call of "xdr_string" method in the "xdr_remote_nonull_string" method (remote_protocol.c). I think, the xdr_string method is unable to marshall strings from the XDR* object to a char**. I've tried with dynamic linking or static linking of libvirt lib. Have you any clue to have work callbacks ? Best Regards, Arnaud Champion

2010/3/18 Dev.Atom <arnaud.champion@devatom.fr>:
Hi,
I have compiled LibVirt 0.7.4 under mingw, and I want to use it with domain callback. Here is a a code sample of my situation (I'm using visual studio)
Did you compile it on Windows, or cross-compile it from Linux?
static
int domain_event(virConnectPtr conn,
virDomainPtr dom,
int evt,
int detail,
void *opaque)
{
bool test = true;
return 0;
}
int
_tmain(int argc, _TCHAR* argv[])
{
virConnectPtr conn = virConnectOpen(
"qemu+tcp://192.168.220.198/session");
// Set Callback
int cbresult = virConnectDomainEventRegister(conn, domain_event, NULL, NULL);
// Lookup Domain
virDomainPtr dom = virDomainLookupByName(conn,
"Test1");
if (virDomainIsActive(dom) == 1)
{
// Start Domain
int startDom = virDomainCreate(dom);
if (startDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
else
{
// Stop Domain
int StopDom = virDomainDestroy(dom);
if (StopDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
return 0;
}
This code is incomplete, you're missing the event-handling, see the virEventRegisterImpl function. Have you tried the domain-event example yet? See examples/domain-events/events-c/event-test.c in the libvirt codebase.
This code works well when I did'nt use callbacks, but when I use it, it throw an error at the virDomainCreate or virDomainDestroy call. In the application windows (console) I have an "unmarshaling msg", I have study the case it comme from the call of "xdr_string" method in the "xdr_remote_nonull_string" method (remote_protocol.c).
I think, the xdr_string method is unable to marshall strings from the XDR* object to a char**.
Where did you get your XDR lib from? I'm using libportablexdr [1] version 4.9.1 on Windows, but had to patch it to get it compile correctly with MinGW. This may be a bug in your XDR lib, or may be a problem in the way libvirt uses XDR, or it's just a symptom of that fact that you try to use domain events without registering event-handling first. [1] http://people.redhat.com/~rjones/portablexdr/ Matthias

I use libportablexdr 4.9.1 from the web site you indicate. I have compile it without any problem using the mingwin fedora environment (I have compile all under this environment), I haven't modified anything in the source, a simple configure like this : ./configure --host=i686-pc-mingw32 --prefix=/usr/i686-pc-mingw32/sys-root/mingw/ then, make and make install, nothing else. Can explain me or point me on an explaination for registering event-handling please ? -------------------------------------------------- From: "Matthias Bolte" <matthias.bolte@googlemail.com> Sent: Thursday, March 18, 2010 11:39 AM To: "Dev.Atom" <arnaud.champion@devatom.fr> Cc: <libvir-list@redhat.com> Subject: Re: [libvirt] Using callback under Windows compiling of libvirt library
2010/3/18 Dev.Atom <arnaud.champion@devatom.fr>:
Hi,
I have compiled LibVirt 0.7.4 under mingw, and I want to use it with domain callback. Here is a a code sample of my situation (I'm using visual studio)
Did you compile it on Windows, or cross-compile it from Linux?
static
int domain_event(virConnectPtr conn,
virDomainPtr dom,
int evt,
int detail,
void *opaque)
{
bool test = true;
return 0;
}
int
_tmain(int argc, _TCHAR* argv[])
{
virConnectPtr conn = virConnectOpen(
"qemu+tcp://192.168.220.198/session");
// Set Callback
int cbresult = virConnectDomainEventRegister(conn, domain_event, NULL, NULL);
// Lookup Domain
virDomainPtr dom = virDomainLookupByName(conn,
"Test1");
if (virDomainIsActive(dom) == 1)
{
// Start Domain
int startDom = virDomainCreate(dom);
if (startDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
else
{
// Stop Domain
int StopDom = virDomainDestroy(dom);
if (StopDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
return 0;
}
This code is incomplete, you're missing the event-handling, see the virEventRegisterImpl function.
Have you tried the domain-event example yet? See examples/domain-events/events-c/event-test.c in the libvirt codebase.
This code works well when I did'nt use callbacks, but when I use it, it throw an error at the virDomainCreate or virDomainDestroy call. In the application windows (console) I have an "unmarshaling msg", I have study the case it comme from the call of "xdr_string" method in the "xdr_remote_nonull_string" method (remote_protocol.c).
I think, the xdr_string method is unable to marshall strings from the XDR* object to a char**.
Where did you get your XDR lib from? I'm using libportablexdr [1] version 4.9.1 on Windows, but had to patch it to get it compile correctly with MinGW.
This may be a bug in your XDR lib, or may be a problem in the way libvirt uses XDR, or it's just a symptom of that fact that you try to use domain events without registering event-handling first.
[1] http://people.redhat.com/~rjones/portablexdr/
Matthias

I have implemented the virEventRegisterImpl as in domain-event.c, I have the unmarshalled msg and another info : libvir: QEMU error : remoteDomainProcessEvent: unmarshalling msg libvir: Remote error : unknown program (received 54657374, expected 20008086) Any clue ? Best regards, Arnaud -------------------------------------------------- From: "Dev.Atom" <arnaud.champion@devatom.fr> Sent: Thursday, March 18, 2010 12:20 PM To: "Matthias Bolte" <matthias.bolte@googlemail.com> Cc: <libvir-list@redhat.com> Subject: Re: [libvirt] Using callback under Windows compiling of libvirtlibrary
I use libportablexdr 4.9.1 from the web site you indicate. I have compile it without any problem using the mingwin fedora environment (I have compile all under this environment), I haven't modified anything in the source, a simple configure like this :
./configure --host=i686-pc-mingw32 --prefix=/usr/i686-pc-mingw32/sys-root/mingw/
then, make and make install, nothing else.
Can explain me or point me on an explaination for registering event-handling please ?
-------------------------------------------------- From: "Matthias Bolte" <matthias.bolte@googlemail.com> Sent: Thursday, March 18, 2010 11:39 AM To: "Dev.Atom" <arnaud.champion@devatom.fr> Cc: <libvir-list@redhat.com> Subject: Re: [libvirt] Using callback under Windows compiling of libvirt library
2010/3/18 Dev.Atom <arnaud.champion@devatom.fr>:
Hi,
I have compiled LibVirt 0.7.4 under mingw, and I want to use it with domain callback. Here is a a code sample of my situation (I'm using visual studio)
Did you compile it on Windows, or cross-compile it from Linux?
static
int domain_event(virConnectPtr conn,
virDomainPtr dom,
int evt,
int detail,
void *opaque)
{
bool test = true;
return 0;
}
int
_tmain(int argc, _TCHAR* argv[])
{
virConnectPtr conn = virConnectOpen(
"qemu+tcp://192.168.220.198/session");
// Set Callback
int cbresult = virConnectDomainEventRegister(conn, domain_event, NULL, NULL);
// Lookup Domain
virDomainPtr dom = virDomainLookupByName(conn,
"Test1");
if (virDomainIsActive(dom) == 1)
{
// Start Domain
int startDom = virDomainCreate(dom);
if (startDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
else
{
// Stop Domain
int StopDom = virDomainDestroy(dom);
if (StopDom != 0)
{
virErrorPtr e = virGetLastError();
bool test = true;
}
}
return 0;
}
This code is incomplete, you're missing the event-handling, see the virEventRegisterImpl function.
Have you tried the domain-event example yet? See examples/domain-events/events-c/event-test.c in the libvirt codebase.
This code works well when I did'nt use callbacks, but when I use it, it throw an error at the virDomainCreate or virDomainDestroy call. In the application windows (console) I have an "unmarshaling msg", I have study the case it comme from the call of "xdr_string" method in the "xdr_remote_nonull_string" method (remote_protocol.c).
I think, the xdr_string method is unable to marshall strings from the XDR* object to a char**.
Where did you get your XDR lib from? I'm using libportablexdr [1] version 4.9.1 on Windows, but had to patch it to get it compile correctly with MinGW.
This may be a bug in your XDR lib, or may be a problem in the way libvirt uses XDR, or it's just a symptom of that fact that you try to use domain events without registering event-handling first.
[1] http://people.redhat.com/~rjones/portablexdr/
Matthias
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
participants (2)
-
Dev.Atom
-
Matthias Bolte