1
0
mirror of https://github.com/KDE/krfb synced 2026-07-01 07:41:17 -07:00

sync before Connection rewrite

svn path=/trunk/kdenetwork/krfb/; revision=134281
This commit is contained in:
Tim Jansen
2002-01-27 22:31:02 +00:00
parent 894bff75ef
commit c3e8870923
5 changed files with 30 additions and 43 deletions

View File

@@ -1,3 +1,9 @@
2002-01-21 Tim Jansen <tim@tjansen.de>
* moved read/write from RFBController to Connection
* added some "flushing points" to remove latencies
2002-01-20 Tim Jansen <tim@tjansen.de> 2002-01-20 Tim Jansen <tim@tjansen.de>
* removed RRE encoding * removed RRE encoding
@@ -32,7 +38,7 @@
2002-01-10 Tim Jansen <tim@tjansen.de> 2002-01-10 Tim Jansen <tim@tjansen.de>
* krfb/XUpdateScanner.cc: improved finding of hints (join adjacent * krfb/XUpdateScanner.cc: improved hints searching (join adjacent
hint regions, get rid of unneccessary comparisons) hint regions, get rid of unneccessary comparisons)
2002-01-09 Tim Jansen <tim@tjansen.de> 2002-01-09 Tim Jansen <tim@tjansen.de>

3
NOTES
View File

@@ -28,8 +28,7 @@ Some comments on various aspects of KRfb:
use. use.
- the original x0rfbserver has a features for selecting the port number - the original x0rfbserver has a features for selecting the port number
automatically. I skipped that because it is too complicated on the client automatically. I skipped that because it is too complicated on the client
side, but I may change my opinion when KDE supports SLP or a similar side, but I this will change when there are mechanisms for inviting people.
auto-discovery mechanism.
- the command line args are intended for starting KRfb from a system like - the command line args are intended for starting KRfb from a system like
Jabber, thats the reason why there is no preferences dialog when Jabber, thats the reason why there is no preferences dialog when
command line args have been used and it's also the reason command line args have been used and it's also the reason

12
README
View File

@@ -7,11 +7,13 @@ to share your X11 session instead of creating a new X11 session.
It is based on x0rfbserver, available from It is based on x0rfbserver, available from
http://www.hexonet.de/software/x0rfbserver/. http://www.hexonet.de/software/x0rfbserver/.
For the latest information about KRfb visit http://www.tjansen.de/krfb
For more information about KRfb visit http://www.tjansen.de/krfb
Read the NOTES file for various notes on KRfb.
Guide to documentation:
README_KDE3 - docs for using it under KDE3
ROADMAP - KRfb roadmap, progress and future features
TODO - unscheduled things to be done
NOTES - reasons for various decisions
ChangeLog - more detailed changes with dates

22
TODO
View File

@@ -1,16 +1,8 @@
Todo: Todo:
- add codec-test option (0.6) - big endian support (testers needed)
- let Connection write/read directly, add Tight::flush (0.6) - write screen recording app using the lib
- rewrite Connection to use linked buffers (0.6) - SLP support (or UPnP, or whatever KDE will use)
- clip framebuffer updates to requested region (0.6) - look into adding extension to xfree to improve speed (get noticed of
- knotify (0.6) screen updates)
- i18n (0.7)
- encrypted connections: http://web.mit.edu/thouis/vnc/ (0.7) see ROADMAP for planned features!
- kcontrol module? (0.8)
- kded module? (0.8)
- docs (0.8)
- big endian support (need tester)
- do something against potential denial-of-service attacks by repeatedly
trying to connect to users until they agree. Maybe a message box
after the third attempt offering the user to stop KRfb, block the IP or
something like this

View File

@@ -153,13 +153,14 @@ void RFBController::idleSlot() {
if (connection) { if (connection) {
connection->scanUpdates(); connection->scanUpdates();
connection->sendIncrementalFramebufferUpdate(); connection->sendIncrementalFramebufferUpdate();
connection->connection->write();
checkWriteBuffer(); checkWriteBuffer();
} }
} }
void RFBController::checkWriteBuffer() { void RFBController::checkWriteBuffer() {
BufferedConnection *bc = connection->connection; BufferedConnection *bc = connection->connection;
bool bufferEmpty = (bc->senderBuffer.end - bc->senderBuffer.pos) == 0; bool bufferEmpty = !bc->hasSenderBufferData();
socket->enableWrite(!bufferEmpty); socket->enableWrite(!bufferEmpty);
if (bufferEmpty && !idleUpdateScheduled && connection) { if (bufferEmpty && !idleUpdateScheduled && connection) {
QTimer::singleShot(0, this, SLOT(idleSlot())); QTimer::singleShot(0, this, SLOT(idleSlot()));
@@ -170,15 +171,10 @@ void RFBController::checkWriteBuffer() {
void RFBController::socketReadable() { void RFBController::socketReadable() {
if ((!socket) || (!connection)) if ((!socket) || (!connection))
return; return;
int fd = socket->socket();
BufferedConnection *bc = connection->connection;
int count = read(fd, BufferedConnection *bc = connection->connection;
bc->receiverBuffer.data, int count = bc->read();
bc->receiverBuffer.size); if (count < 0) {
if (count >= 0)
bc->receiverBuffer.end += count;
else {
closeSession(); closeSession();
return; return;
} }
@@ -186,8 +182,6 @@ void RFBController::socketReadable() {
connection->update(); connection->update();
checkWriteBuffer(); checkWriteBuffer();
} }
bc->receiverBuffer.pos = 0;
bc->receiverBuffer.end = 0;
if (!connection->currentState) { if (!connection->currentState) {
closeSession(); closeSession();
@@ -197,19 +191,13 @@ void RFBController::socketReadable() {
void RFBController::socketWritable() { void RFBController::socketWritable() {
if ((!socket) || (!connection)) if ((!socket) || (!connection))
return; return;
int fd = socket->socket();
BufferedConnection *bc = connection->connection; BufferedConnection *bc = connection->connection;
ASSERT((bc->senderBuffer.end - bc->senderBuffer.pos) > 0); int count = bc->write();
int count = write(fd, if (count >= 0)
bc->senderBuffer.data + bc->senderBuffer.pos,
bc->senderBuffer.end - bc->senderBuffer.pos);
if (count >= 0) {
bc->senderBuffer.pos += count;
checkWriteBuffer(); checkWriteBuffer();
} else { else
closeSession(); closeSession();
}
} }
void RFBController::closeSession() { void RFBController::closeSession() {