provide a list of the pseudo encodings understood by the extension

pull/1/head
dscho 19 years ago
parent 354d3c9a92
commit 60f1770e10

@ -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);
}
}
}
}

@ -485,6 +485,7 @@ rfbProtocolExtension tightVncFileTransferExtension = {
NULL,
rfbTightExtensionInit,
NULL,
NULL,
rfbTightExtensionMsgHandler,
rfbTightExtensionClientClose,
rfbTightUsage,

@ -165,7 +165,11 @@ typedef struct _rfbProtocolExtension {
/* returns FALSE if extension should be deactivated for client.
if init == NULL, it stays activated. */
rfbBool (*init)(struct _rfbClientRec* client, void* data);
/* returns TRUE if that pseudo encoding is handled by the extension */
/* if pseudoEncodings is not NULL, it contains a 0 terminated
list of the pseudo encodings handled by this extension. */
int *pseudoEncodings;
/* returns TRUE if that pseudo encoding is handled by the extension.
encodingNumber==0 means "reset encodings". */
rfbBool (*enablePseudoEncoding)(struct _rfbClientRec* client,
void* data, int encodingNumber);
/* returns TRUE if message was handled */

Loading…
Cancel
Save