Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion include/rfb/rfb.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@ typedef struct {
} data; /**< there have to be count*3 entries */
} rfbColourMap;

enum rfbSecurityTag {
RFB_SECURITY_TAG_NONE = 0,
RFB_SECURITY_TAG_CHANNEL = 1 << 0
};

/**
* Security handling (RFB protocol version 3.7)
*/
Expand All @@ -155,6 +160,7 @@ typedef struct _rfbSecurity {
uint8_t type;
void (*handler)(struct _rfbClientRec* cl);
struct _rfbSecurity* next;
enum rfbSecurityTag securityTags;
} rfbSecurityHandler;

/**
Expand Down Expand Up @@ -402,6 +408,14 @@ typedef struct sraRegion* sraRegionPtr;
typedef void (*ClientGoneHookPtr)(struct _rfbClientRec* cl);
typedef void (*ClientFramebufferUpdateRequestHookPtr)(struct _rfbClientRec* cl, rfbFramebufferUpdateRequestMsg* furMsg);

typedef int (*ClientReadFromSocket)(struct _rfbClientRec* cl,
char *buf, int len);
typedef int (*ClientPeekAtSocket)(struct _rfbClientRec* cl,
char *buf, int len);
typedef rfbBool (*ClientHasPendingOnSocket)(struct _rfbClientRec* cl);
typedef int (*ClientWriteToSocket)(struct _rfbClientRec* cl,
const char *buf, int len);

typedef struct _rfbFileTransferData {
int fd;
int compressionEnabled;
Expand Down Expand Up @@ -496,7 +510,9 @@ typedef struct _rfbClientRec {
* using LibVNCServer to provide services: */

RFB_INITIALISATION_SHARED, /**< sending initialisation messages with implicit shared-flag already true */
RFB_SHUTDOWN /**< Client is shutting down */
RFB_SHUTDOWN, /**< Client is shutting down */

RFB_CHANNEL_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
} state;

rfbBool reverseConnection;
Expand Down Expand Up @@ -715,6 +731,11 @@ typedef struct _rfbClientRec {
int destPort;
/** ID on repeater in case of an UltraVNC mode 2 repeater connection */
char *repeaterId;

ClientReadFromSocket readFromSocket; /* Read data from socket */
ClientPeekAtSocket peekAtSocket; /* Peek at data from socket */
ClientHasPendingOnSocket hasPendingOnSocket; /* Has pending data on socket */
ClientWriteToSocket writeToSocket; /* Write data to socket */
} rfbClientRec, *rfbClientPtr;

/**
Expand Down Expand Up @@ -767,8 +788,12 @@ extern void rfbDisconnectUDPSock(rfbScreenInfoPtr rfbScreen);
extern void rfbCloseClient(rfbClientPtr cl);
extern int rfbReadExact(rfbClientPtr cl, char *buf, int len);
extern int rfbReadExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
extern int rfbDefaultReadFromSocket(rfbClientPtr cl, char *buf, int len);
extern int rfbPeekExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
extern int rfbDefaultPeekAtSocket(rfbClientPtr cl, char *buf, int len);
extern rfbBool rfbDefaultHasPendingOnSocket(rfbClientPtr cl);
extern int rfbWriteExact(rfbClientPtr cl, const char *buf, int len);
extern int rfbDefaultWriteToSocket(rfbClientPtr cl, const char *buf, int len);
extern int rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec);
extern rfbSocket rfbConnect(rfbScreenInfoPtr rfbScreen, char* host, int port);
extern rfbSocket rfbConnectToTcpAddr(char* host, int port);
Expand Down Expand Up @@ -874,6 +899,9 @@ extern void rfbProcessClientSecurityType(rfbClientPtr cl);
extern void rfbAuthProcessClientMessage(rfbClientPtr cl);
extern void rfbRegisterSecurityHandler(rfbSecurityHandler* handler);
extern void rfbUnregisterSecurityHandler(rfbSecurityHandler* handler);
extern void rfbRegisterChannelSecurityHandler(rfbSecurityHandler* handler);
extern void rfbUnregisterChannelSecurityHandler(rfbSecurityHandler* handler);
extern void rfbSendSecurityTypeList(rfbClientPtr cl, enum rfbSecurityTag exclude);

/* rre.c */

Expand Down
2 changes: 2 additions & 0 deletions src/common/crypto.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
int hash_md5(void *out, const void *in, const size_t in_len);

/* Generates an SHA1 hash of 'in' and writes it to 'out', which must be 20 bytes in size. */
#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
int hash_sha1(void *out, const void *in, const size_t in_len);
#endif

/* Fill 'out' with 'len' random bytes. */
void random_bytes(void *out, size_t len);
Expand Down
2 changes: 2 additions & 0 deletions src/common/crypto_included.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ int hash_md5(void *out, const void *in, const size_t in_len)
return 0;
}

#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
int hash_sha1(void *out, const void *in, const size_t in_len)
{
SHA1Context sha1;
Expand All @@ -45,6 +46,7 @@ int hash_sha1(void *out, const void *in, const size_t in_len)

return 1;
}
#endif /* LIBVNCSERVER_WITH_WEBSOCKETS */

void random_bytes(void *out, size_t len)
{
Expand Down
2 changes: 2 additions & 0 deletions src/common/crypto_libgcrypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ int hash_md5(void *out, const void *in, const size_t in_len)
return result;
}

#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
int hash_sha1(void *out, const void *in, const size_t in_len)
{
int result = 0;
Expand All @@ -98,6 +99,7 @@ int hash_sha1(void *out, const void *in, const size_t in_len)
gcry_md_close(sha1);
return result;
}
#endif /* LIBVNCSERVER_WITH_WEBSOCKETS */

void random_bytes(void *out, size_t len)
{
Expand Down
2 changes: 2 additions & 0 deletions src/common/crypto_openssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ int hash_md5(void *out, const void *in, const size_t in_len)
return 1;
}

#ifdef LIBVNCSERVER_WITH_WEBSOCKETS
int hash_sha1(void *out, const void *in, const size_t in_len)
{
SHA_CTX sha1;
Expand All @@ -63,6 +64,7 @@ int hash_sha1(void *out, const void *in, const size_t in_len)
return 0;
return 1;
}
#endif /* LIBVNCSERVER_WITH_WEBSOCKETS */

void random_bytes(void *out, size_t len)
{
Expand Down
Loading
Loading