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
@@ -96,43 +96,51 @@ OCOPPacket OCOPClient::packet() const{
96 QCString func; 96 QCString func;
97 QByteArray ar; 97 QByteArray ar;
98 OCOPHead head; 98 OCOPHead head;
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;
108} 113}
109/* 114/*
110 * we've blocking IO here on these sockets 115 * we've blocking IO here on these sockets
111 * so we send and go on read 116 * so we send and go on read
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();
118 write(m_socket, &head, sizeof(head) ); 124 write(m_socket, &head, sizeof(head) );
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 ) {
125 QCString func = pack.header(); 132 QCString func = pack.header();
126 if (func[0] == 1 ) 133 if (func[0] == 1 )
127 return true; 134 return true;
128 } 135 }
129 136
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}
136void OCOPClient::addChannel(const QCString& channel) { 144void OCOPClient::addChannel(const QCString& channel) {
137 OCOPPacket pack(OCOPPacket::RegisterChannel, channel ); 145 OCOPPacket pack(OCOPPacket::RegisterChannel, channel );
138 call( pack ); 146 call( pack );
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
@@ -164,13 +164,13 @@ void OCopServer::newOnClient( int fd ) {
164 * 164 *
165 */ 165 */
166 if (head.magic == 47 ) { 166 if (head.magic == 47 ) {
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
174 */ 174 */
175// qWarning("read "); 175// qWarning("read ");
176 int s = read(fd, channel.data(), head.chlen ); 176 int s = read(fd, channel.data(), head.chlen );
@@ -297,13 +297,13 @@ void OCopServer::dispatch( const OCOPPacket& packet, int sourceFD ) {
297 case OCOPPacket::Return: 297 case OCOPPacket::Return:
298 break; 298 break;
299 /* not implemented :( */ 299 /* not implemented :( */
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 };
307} 307}
308void OCopServer::errorOnServer() { 308void OCopServer::errorOnServer() {
309 /* 309 /*
@@ -362,13 +362,13 @@ void OCopServer::delChannel( const QCString& channel,
362 m_channels.replace( str, ints ); 362 m_channels.replace( str, ints );
363 } 363 }
364 qWarning(" channel count is now %d", ints.count() ); 364 qWarning(" channel count is now %d", ints.count() );
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
372 memset(&head, 0, sizeof(head ) ); 372 memset(&head, 0, sizeof(head ) );
373 head.magic = 47; 373 head.magic = 47;
374 head.type = OCOPPacket::IsRegistered; 374 head.type = OCOPPacket::IsRegistered;
@@ -376,14 +376,16 @@ void OCopServer::isRegistered( const QCString& channel, int fd) {
376 head.funclen = func.size(); 376 head.funclen = func.size();
377 head.datalen = 0; 377 head.datalen = 0;
378 378
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 /**
387 * write the head 389 * write the head
388 * and then channel 390 * and then channel
389 * success/failure inside func 391 * success/failure inside func
@@ -398,12 +400,13 @@ QValueList<int> OCopServer::clients( const QCString& channel ) {
398void OCopServer::call( const OCOPPacket& p, int ) { 400void OCopServer::call( const OCOPPacket& p, int ) {
399 QValueList<int> cli = clients( p.channel() ); 401 QValueList<int> cli = clients( p.channel() );
400 QValueList<int>::Iterator it; 402 QValueList<int>::Iterator it;
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() );
407 write( (*it), p.header().data(), p.header().size() ); 410 write( (*it), p.header().data(), p.header().size() );
408 write( (*it), p.content().data(), p.content().size() ); 411 write( (*it), p.content().data(), p.content().size() );
409 }; 412 };