summaryrefslogtreecommitdiff
path: root/x11/ipc
authorzecke <zecke>2003-02-05 08:54:58 (UTC)
committer zecke <zecke>2003-02-05 08:54:58 (UTC)
commitbbb3690f12191763a407e6a0edd521113b3c25ac (patch) (unidiff)
tree39f90d71c7f085f5722382db4a5577bbda2e1618 /x11/ipc
parent97b96e141fca844317e59ca5b99c1bf5fa52b1f0 (diff)
downloadopie-bbb3690f12191763a407e6a0edd521113b3c25ac.zip
opie-bbb3690f12191763a407e6a0edd521113b3c25ac.tar.gz
opie-bbb3690f12191763a407e6a0edd521113b3c25ac.tar.bz2
Fix the IPC server and client
registering channel is done locally with refcounts if the channel is already registered globally Fix some sizes to allow proper communication..
Diffstat (limited to 'x11/ipc') (more/less context) (ignore whitespace changes)
-rw-r--r--x11/ipc/client/ocopclient.cpp8
-rw-r--r--x11/ipc/server/ocopserver.cpp9
2 files changed, 14 insertions, 3 deletions
diff --git a/x11/ipc/client/ocopclient.cpp b/x11/ipc/client/ocopclient.cpp
index 6085481..91827e7 100644
--- a/x11/ipc/client/ocopclient.cpp
+++ b/x11/ipc/client/ocopclient.cpp
@@ -99,9 +99,14 @@ OCOPPacket OCOPClient::packet() const{
99 memset(&head, 0, sizeof(head) ); 99 memset(&head, 0, sizeof(head) );
100 read(m_socket, &head, sizeof(head) ); 100 read(m_socket, &head, sizeof(head) );
101 if ( head.magic == 47 ) { 101 if ( head.magic == 47 ) {
102 qWarning("Client:Magic Match");
103 chan = QCString( head.chlen+1);
104 func = QCString( head.funclen+1 );
105 ar = QByteArray( head.datalen);
102 read(m_socket, chan.data(), head.chlen ); 106 read(m_socket, chan.data(), head.chlen );
103 read(m_socket, func.data(), head.funclen ); 107 read(m_socket, func.data(), head.funclen );
104 read(m_socket, ar.data(), head.datalen ); 108 read(m_socket, ar.data(), head.datalen );
109 qWarning("Client:%d %s",head.chlen,chan.data() );
105 } 110 }
106 OCOPPacket pack(head.type, chan, func, ar ); 111 OCOPPacket pack(head.type, chan, func, ar );
107 return pack; 112 return pack;
@@ -112,6 +117,7 @@ OCOPPacket OCOPClient::packet() const{
112 * this will be blocked 117 * this will be blocked
113 */ 118 */
114bool OCOPClient::isRegistered( const QCString& chan ) const{ 119bool OCOPClient::isRegistered( const QCString& chan ) const{
120 qWarning("OCopClient::isRegistered %s", chan.data() );
115 /* should I disconnect the socket notfier? */ 121 /* should I disconnect the socket notfier? */
116 OCOPPacket packe(OCOPPacket::IsRegistered, chan ); 122 OCOPPacket packe(OCOPPacket::IsRegistered, chan );
117 OCOPHead head = packe.head(); 123 OCOPHead head = packe.head();
@@ -119,6 +125,7 @@ bool OCOPClient::isRegistered( const QCString& chan ) const{
119 write(m_socket, chan.data(), chan.size() ); 125 write(m_socket, chan.data(), chan.size() );
120 /* block */ 126 /* block */
121 OCOPPacket pack = packet(); 127 OCOPPacket pack = packet();
128 qWarning("unblock %s %s", pack.channel().data(), chan.data() );
122 129
123 /* connect here again */ 130 /* connect here again */
124 if ( pack.channel() == chan ) { 131 if ( pack.channel() == chan ) {
@@ -130,6 +137,7 @@ bool OCOPClient::isRegistered( const QCString& chan ) const{
130 return false; 137 return false;
131}; 138};
132void OCOPClient::send( const QCString& chan, const QCString& fu, const QByteArray& arr ) { 139void OCOPClient::send( const QCString& chan, const QCString& fu, const QByteArray& arr ) {
140 qWarning("ClientSending %s %s", chan.data(), fu.data() );
133 OCOPPacket pack(OCOPPacket::Call, chan, fu, arr ); 141 OCOPPacket pack(OCOPPacket::Call, chan, fu, arr );
134 call( pack ); 142 call( pack );
135} 143}
diff --git a/x11/ipc/server/ocopserver.cpp b/x11/ipc/server/ocopserver.cpp
index 0f818b7..ee5ea18 100644
--- a/x11/ipc/server/ocopserver.cpp
+++ b/x11/ipc/server/ocopserver.cpp
@@ -167,7 +167,7 @@ void OCopServer::newOnClient( int fd ) {
167// qWarning("magic match"); 167// qWarning("magic match");
168 QCString channel( head.chlen+1 ); 168 QCString channel( head.chlen+1 );
169 QCString func( head.funclen+1 ); 169 QCString func( head.funclen+1 );
170 QByteArray data ( head.datalen ); 170 QByteArray data ( head.datalen+1 );
171 171
172 /* 172 /*
173 * we do not check for errors 173 * we do not check for errors
@@ -300,7 +300,7 @@ void OCopServer::dispatch( const OCOPPacket& packet, int sourceFD ) {
300 case OCOPPacket::Signal: 300 case OCOPPacket::Signal:
301 break; 301 break;
302 case OCOPPacket::IsRegistered: 302 case OCOPPacket::IsRegistered:
303 qWarning("IsRegistered"); 303 qWarning("Server:IsRegistered %s", packet.channel().data() );
304 isRegistered( packet.channel(), sourceFD ); 304 isRegistered( packet.channel(), sourceFD );
305 break; 305 break;
306 }; 306 };
@@ -365,7 +365,7 @@ void OCopServer::delChannel( const QCString& channel,
365 } 365 }
366} 366}
367void OCopServer::isRegistered( const QCString& channel, int fd) { 367void OCopServer::isRegistered( const QCString& channel, int fd) {
368// qWarning("isRegistered"); 368 qWarning("Server:isRegistered %s", channel.data() );
369 OCOPHead head; 369 OCOPHead head;
370 QCString func(2); 370 QCString func(2);
371 371
@@ -379,8 +379,10 @@ void OCopServer::isRegistered( const QCString& channel, int fd) {
379 if ( isChannelRegistered( channel ) ) { 379 if ( isChannelRegistered( channel ) ) {
380 //is registered 380 //is registered
381 func[0] = 1; 381 func[0] = 1;
382 qWarning("Server:Channel is Registered %d", head.chlen);
382 }else{ 383 }else{
383 func[0] = 0; 384 func[0] = 0;
385 qWarning("Server:Channel is NotRegistered");
384 } 386 }
385 387
386 /** 388 /**
@@ -401,6 +403,7 @@ void OCopServer::call( const OCOPPacket& p, int ) {
401 403
402 OCOPHead head = p.head(); 404 OCOPHead head = p.head();
403 for (it = cli.begin(); it != cli.end(); ++it ) { 405 for (it = cli.begin(); it != cli.end(); ++it ) {
406 qWarning("Server:calling %d %s %s", (*it), p.channel().data(), p.header().data() );
404 write( (*it), &head, sizeof(head ) ); 407 write( (*it), &head, sizeof(head ) );
405 /* expl. shared! */ 408 /* expl. shared! */
406 write( (*it), p.channel().data(), p.channel().size() ); 409 write( (*it), p.channel().data(), p.channel().size() );