From 60f1770e1081e81502dc2ba000c27f730f5c1e7c Mon Sep 17 00:00:00 2001 From: dscho Date: Thu, 6 Oct 2005 18:51:56 +0000 Subject: provide a list of the pseudo encodings understood by the extension --- libvncserver/rfbserver.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'libvncserver/rfbserver.c') diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c index 4b67aa1..53ec4f8 100644 --- a/libvncserver/rfbserver.c +++ b/libvncserver/rfbserver.c @@ -935,10 +935,43 @@ rfbProcessClientNormalMessage(rfbClientPtr cl) break; e = next; } - if(e == NULL) - rfbLog("rfbProcessClientNormalMessage: ignoring" - "unknown encoding type %d\n", - (int)enc); + if(e == NULL) { + rfbBool handled = FALSE; + /* if the pseudo encoding is not handled by the + enabled extensions, search through all + extensions. */ + rfbProtocolExtension* e; + + for(e = rfbGetExtensionIterator(); e;) { + int* encs = e->pseudoEncodings; + while(encs && *encs!=0) { + if(*encs==(int)enc) { + void* data = NULL; + if(e->newClient) + e->newClient(cl, &data); + if(!e->enablePseudoEncoding(cl, data, (int)enc)) { + rfbLog("Installed extension pretends to handle pseudo encoding 0x%x, but does not!\n",(int)enc); + } else { + rfbEnableExtension(cl, e, data); + handled = TRUE; + e = NULL; + break; + } + } + encs++; + } + rfbReleaseExtensionIterator(); + + + if(e) + e = e->next; + } + + if(!handled) + rfbLog("rfbProcessClientNormalMessage: ignoring" + " unknown encoding type %d\n", + (int)enc); + } } } } -- cgit v1.2.3