author | zecke <zecke> | 2003-02-05 08:54:58 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-02-05 08:54:58 (UTC) |
commit | bbb3690f12191763a407e6a0edd521113b3c25ac (patch) (side-by-side diff) | |
tree | 39f90d71c7f085f5722382db4a5577bbda2e1618 /x11/ipc/server/ocopserver.cpp | |
parent | 97b96e141fca844317e59ca5b99c1bf5fa52b1f0 (diff) | |
download | opie-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/server/ocopserver.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | x11/ipc/server/ocopserver.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
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 @@ -158,25 +158,25 @@ void OCopServer::newOnClient( int fd ) { * if chcked read till EOF if magic does not match * otherwise do read * channel * func * data into mem * and then send the OCOPPacket * */ if (head.magic == 47 ) { // qWarning("magic match"); QCString channel( head.chlen+1 ); QCString func( head.funclen+1 ); - QByteArray data ( head.datalen ); + QByteArray data ( head.datalen+1 ); /* * we do not check for errors */ // qWarning("read "); int s = read(fd, channel.data(), head.chlen ); s = read(fd, func.data(), head.funclen ); s = read(fd, data.data(), head.datalen ); // qWarning("read"); /* debug output */ // qWarning("channel %s %d", channel.data(), head.chlen ); @@ -291,25 +291,25 @@ void OCopServer::dispatch( const OCOPPacket& packet, int sourceFD ) { addChannel( packet.channel() , sourceFD ); break; case OCOPPacket::UnregisterChannel: delChannel( packet.channel(), sourceFD ); break; /* not implemented */ case OCOPPacket::Return: break; /* not implemented :( */ case OCOPPacket::Signal: break; case OCOPPacket::IsRegistered: - qWarning("IsRegistered"); + qWarning("Server:IsRegistered %s", packet.channel().data() ); isRegistered( packet.channel(), sourceFD ); break; }; } void OCopServer::errorOnServer() { /* * something is wrong on the server socket? * what should we do? * FIXME */ } QStringList OCopServer::channels() { @@ -356,55 +356,58 @@ void OCopServer::delChannel( const QCString& channel, m_channels.remove( channel ); else{ QValueList<int> ints = it.data(); QValueList<int>::Iterator rem = ints.find( fd ); rem = ints.remove( rem ); QCString str = it.key().copy(); m_channels.replace( str, ints ); } qWarning(" channel count is now %d", ints.count() ); } } void OCopServer::isRegistered( const QCString& channel, int fd) { -// qWarning("isRegistered"); + qWarning("Server:isRegistered %s", channel.data() ); OCOPHead head; QCString func(2); memset(&head, 0, sizeof(head ) ); head.magic = 47; head.type = OCOPPacket::IsRegistered; head.chlen = channel.size(); head.funclen = func.size(); head.datalen = 0; if ( isChannelRegistered( channel ) ) { //is registered func[0] = 1; + qWarning("Server:Channel is Registered %d", head.chlen); }else{ func[0] = 0; + qWarning("Server:Channel is NotRegistered"); } /** * write the head * and then channel * success/failure inside func */ write(fd, &head, sizeof(head) ); write(fd, channel.data(), channel.size() ); write(fd, func.data(), func.size() ); } QValueList<int> OCopServer::clients( const QCString& channel ) { return m_channels[channel]; } void OCopServer::call( const OCOPPacket& p, int ) { QValueList<int> cli = clients( p.channel() ); QValueList<int>::Iterator it; OCOPHead head = p.head(); for (it = cli.begin(); it != cli.end(); ++it ) { + qWarning("Server:calling %d %s %s", (*it), p.channel().data(), p.header().data() ); write( (*it), &head, sizeof(head ) ); /* expl. shared! */ write( (*it), p.channel().data(), p.channel().size() ); write( (*it), p.header().data(), p.header().size() ); write( (*it), p.content().data(), p.content().size() ); }; } |