4 #include <lib/base/eerror.h>
6 eHotplug
*eHotplug::instance
= 0;
14 eWarning("MORE THAN ONE INSTANCES OF eHotplug created!!");
15 memset(&servaddr
, 0, sizeof(struct sockaddr_un
));
16 servaddr
.sun_family
= AF_UNIX
;
17 unlink("/tmp/hotplug.socket");
18 strcpy(servaddr
.sun_path
, "/tmp/hotplug.socket");
19 clilen
= sizeof(servaddr
.sun_family
) + strlen(servaddr
.sun_path
);
20 if ((listenfd
= socket(AF_UNIX
, SOCK_STREAM
, 0)) < 0)
22 perror("[hotplug] socket");
25 if (bind(listenfd
, (struct sockaddr
*) &servaddr
, clilen
) < 0)
27 perror("[hotplug] bind");
30 if (listen(listenfd
, 5) < 0)
32 perror("[hotplug] listen");
35 sn
= new eSocketNotifier( eApp
, listenfd
, 17 ); // POLLIN/POLLPRI/POLLHUP
37 CONNECT( sn
->activated
, eHotplug::dataAvail
);
38 eDebug("[eHotplug] created successfully");
41 void eHotplug::dataAvail(int what
)
48 unsigned char msgbuffer
[1024];
50 accept(listenfd
, (struct sockaddr
*) &servaddr
, (socklen_t
*) &clilen
);
51 ssize_t length
= read(connfd
, msgbuffer
, sizeof(msgbuffer
));
54 eString
tmp((char*)msgbuffer
, length
);
55 if ( tmp
.find("LENGTH = ") != eString::npos
)
62 unsigned int pos
= tmp
.find("=");
63 if ( pos
== eString::npos
)
65 params
[tmp
.left(pos
)]=tmp
.mid(pos
+1, tmp
.length()-pos
+1);
71 for (std::map
<eString
,eString
>::iterator
it( params
.begin() ); it
!= params
.end(); it
++ )
72 eDebug("%s = %s", it
->first
.c_str(), it
->second
.c_str() );
84 unlink("/tmp/hotplug.socket");