Commit e78a41c6 authored by dscho's avatar dscho

add hook to allow for custom client messages

parent 4b89306d
...@@ -498,6 +498,11 @@ enum rfbNewClientAction rfbDefaultNewClientHook(rfbClientPtr cl) ...@@ -498,6 +498,11 @@ enum rfbNewClientAction rfbDefaultNewClientHook(rfbClientPtr cl)
return RFB_CLIENT_ACCEPT; return RFB_CLIENT_ACCEPT;
} }
rfbBool rfbDefaultProcessCustomClientMessage(rfbClientPtr cl,uint8_t type)
{
return FALSE;
}
/* /*
* Update server's pixel format in screenInfo structure. This * Update server's pixel format in screenInfo structure. This
* function is called from rfbGetScreen() and rfbNewFramebuffer(). * function is called from rfbGetScreen() and rfbNewFramebuffer().
...@@ -641,6 +646,7 @@ rfbScreenInfoPtr rfbGetScreen(int* argc,char** argv, ...@@ -641,6 +646,7 @@ rfbScreenInfoPtr rfbGetScreen(int* argc,char** argv,
screen->setTranslateFunction = rfbSetTranslateFunction; screen->setTranslateFunction = rfbSetTranslateFunction;
screen->newClientHook = rfbDefaultNewClientHook; screen->newClientHook = rfbDefaultNewClientHook;
screen->displayHook = 0; screen->displayHook = 0;
screen->processCustomClientMessage = rfbDefaultProcessCustomClientMessage;
/* initialize client list and iterator mutex */ /* initialize client list and iterator mutex */
rfbClientListInit(screen); rfbClientListInit(screen);
......
...@@ -1039,6 +1039,9 @@ rfbProcessClientNormalMessage(cl) ...@@ -1039,6 +1039,9 @@ rfbProcessClientNormalMessage(cl)
default: default:
if(cl->screen->processCustomClientMessage(cl,msg.type))
return;
rfbLog("rfbProcessClientNormalMessage: unknown message type %d\n", rfbLog("rfbProcessClientNormalMessage: unknown message type %d\n",
msg.type); msg.type);
rfbLog(" ... closing connection\n"); rfbLog(" ... closing connection\n");
......
...@@ -125,6 +125,7 @@ typedef rfbBool (*rfbSetTranslateFunctionProcPtr)(struct _rfbClientRec* cl); ...@@ -125,6 +125,7 @@ typedef rfbBool (*rfbSetTranslateFunctionProcPtr)(struct _rfbClientRec* cl);
typedef rfbBool (*rfbPasswordCheckProcPtr)(struct _rfbClientRec* cl,const char* encryptedPassWord,int len); typedef rfbBool (*rfbPasswordCheckProcPtr)(struct _rfbClientRec* cl,const char* encryptedPassWord,int len);
typedef enum rfbNewClientAction (*rfbNewClientHookPtr)(struct _rfbClientRec* cl); typedef enum rfbNewClientAction (*rfbNewClientHookPtr)(struct _rfbClientRec* cl);
typedef void (*rfbDisplayHookPtr)(struct _rfbClientRec* cl); typedef void (*rfbDisplayHookPtr)(struct _rfbClientRec* cl);
typedef rfbBool (*rfbProcessCustomClientMessageProcPtr)(struct _rfbClientRec* cl,uint8_t type);
typedef struct { typedef struct {
uint32_t count; uint32_t count;
...@@ -291,6 +292,10 @@ typedef struct _rfbScreenInfo ...@@ -291,6 +292,10 @@ typedef struct _rfbScreenInfo
* an update should be sent. This should make working on a slow * an update should be sent. This should make working on a slow
* link more interactive. */ * link more interactive. */
int progressiveSliceHeight; int progressiveSliceHeight;
/* if LibVNCServer doesn't know the normal message, it calls this
* hook. If the hook handles the message, it returns TRUE. */
rfbProcessCustomClientMessageProcPtr processCustomClientMessage;
} rfbScreenInfo, *rfbScreenInfoPtr; } rfbScreenInfo, *rfbScreenInfoPtr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment