Commit 67094d7c authored by dscho's avatar dscho

replaced xalloc with malloc functions, udp input support (untested), fixed http

parent 519a8e0e
......@@ -30,10 +30,6 @@
#include <stdlib.h>
#include "rfb.h"
char *rfbAuthPasswdFile = NULL;
/*
* rfbAuthNewClient is called when we reach the point of authenticating
* a new client. If authentication isn't being used then we simply send
......@@ -49,15 +45,12 @@ rfbAuthNewClient(cl)
cl->state = RFB_AUTHENTICATION;
if (rfbAuthPasswdFile && !cl->reverseConnection) {
if (cl->screen->rfbAuthPasswdData && !cl->reverseConnection) {
*(CARD32 *)buf = Swap32IfLE(rfbVncAuth);
vncRandomBytes(cl->authChallenge);
memcpy(&buf[4], (char *)cl->authChallenge, CHALLENGESIZE);
len = 4 + CHALLENGESIZE;
} else {
*(CARD32 *)buf = Swap32IfLE(rfbNoAuth);
len = 4;
cl->state = RFB_INITIALISATION;
......@@ -80,7 +73,7 @@ void
rfbAuthProcessClientMessage(cl)
rfbClientPtr cl;
{
char *passwd;
char passwd[1024];
int i, n;
CARD8 response[CHALLENGESIZE];
CARD32 authResult;
......@@ -92,14 +85,9 @@ rfbAuthProcessClientMessage(cl)
return;
}
passwd = vncDecryptPasswdFromFile(rfbAuthPasswdFile);
if (passwd == NULL) {
rfbLog("rfbAuthProcessClientMessage: could not get password from %s\n",
rfbAuthPasswdFile);
if(!cl->screen->getPassword(cl,passwd,MAXPWLEN)) {
rfbLog("rfbAuthProcessClientMessage: could not get password\n");
authResult = Swap32IfLE(rfbVncAuthFailed);
if (WriteExact(cl, (char *)&authResult, 4) < 0) {
rfbLogPerror("rfbAuthProcessClientMessage: write");
}
......
......@@ -105,17 +105,17 @@ rfbSendSmallRectEncodingCoRRE(cl, x, y, w, h)
if (rreBeforeBufSize < maxRawSize) {
rreBeforeBufSize = maxRawSize;
if (rreBeforeBuf == NULL)
rreBeforeBuf = (char *)xalloc(rreBeforeBufSize);
rreBeforeBuf = (char *)malloc(rreBeforeBufSize);
else
rreBeforeBuf = (char *)xrealloc(rreBeforeBuf, rreBeforeBufSize);
rreBeforeBuf = (char *)realloc(rreBeforeBuf, rreBeforeBufSize);
}
if (rreAfterBufSize < maxRawSize) {
rreAfterBufSize = maxRawSize;
if (rreAfterBuf == NULL)
rreAfterBuf = (char *)xalloc(rreAfterBufSize);
rreAfterBuf = (char *)malloc(rreAfterBufSize);
else
rreAfterBuf = (char *)xrealloc(rreAfterBuf, rreAfterBufSize);
rreAfterBuf = (char *)realloc(rreAfterBuf, rreAfterBufSize);
}
(*cl->translateFn)(cl->translateLookupTable,&(cl->screen->rfbServerFormat),
......
......@@ -45,7 +45,7 @@
"<HEAD><TITLE>File Not Found</TITLE></HEAD>\n" \
"<BODY><H1>File Not Found</H1></BODY>\n"
#define OK_STR "HTTP/1.0 200 OK\n\n"
#define OK_STR "HTTP/1.0 200 OK\nContent-Type: text/html\n\n"
static void httpProcessInput();
static Bool compareAndSkip(char **ptr, const char *str);
......@@ -273,7 +273,7 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
/* Open the file */
if ((fd = fopen(fullFname, O_RDONLY)) < 0) {
if ((fd = fopen(fullFname, "r")) <= 0) {
rfbLogPerror("httpProcessInput: open");
WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR));
httpCloseSock(rfbScreen);
......@@ -283,7 +283,7 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen)
WriteExact(&cl, OK_STR, strlen(OK_STR));
while (1) {
int n = fread(buf, BUF_SIZE-1, 1, fd);
int n = fread(buf, 1, BUF_SIZE-1, fd);
if (n < 0) {
rfbLogPerror("httpProcessInput: read");
fclose(fd);
......
......@@ -326,7 +326,7 @@ processArguments(rfbScreenInfoPtr rfbScreen,int argc, char *argv[])
rfbScreen->rfbMaxClientWait = atoi(argv[++i]);
} else if (strcmp(argv[i], "-rfbauth") == 0) { /* -rfbauth passwd-file */
if (i + 1 >= argc) usage();
rfbScreen->rfbAuthPasswdFile = argv[++i];
rfbScreen->rfbAuthPasswdData = argv[++i];
} else if (strcmp(argv[i], "-desktop") == 0) { /* -desktop desktop-name */
if (i + 1 >= argc) usage();
rfbScreen->desktopName = argv[++i];
......@@ -400,6 +400,15 @@ rfbCursorPtr defaultGetCursorPtr(rfbClientPtr cl)
return(cl->screen->cursor);
}
Bool defaultGetPassword(rfbClientPtr cl,char* passwd,int len)
{
char *pwd=vncDecryptPasswdFromFile(cl->screen->rfbAuthPasswdData);
if(!pwd)
return(FALSE);
strncpy(passwd,pwd,MAXPWLEN);
return(TRUE);
}
void doNothingWithClient(rfbClientPtr cl)
{
}
......@@ -511,6 +520,7 @@ rfbScreenInfoPtr rfbGetScreen(int argc,char** argv,
rfbScreen->setXCutText = defaultSetXCutText;
rfbScreen->getCursorPtr = defaultGetCursorPtr;
rfbScreen->setTranslateFunction = rfbSetTranslateFunction;
rfbScreen->getPassword = defaultGetPassword;
rfbScreen->newClientHook = doNothingWithClient;
rfbScreen->displayHook = 0;
......
This diff is collapsed.
......@@ -173,32 +173,38 @@ rfbReverseConnection(rfbScreen,host, port)
*/
rfbClientPtr
rfbNewClient(rfbScreen,sock)
rfbNewTCPOrUDPClient(rfbScreen,sock,isUDP)
rfbScreenInfoPtr rfbScreen;
int sock;
Bool isUDP;
{
rfbProtocolVersionMsg pv;
rfbClientIteratorPtr iterator;
rfbClientPtr cl;
rfbClientPtr cl,cl_;
struct sockaddr_in addr;
int addrlen = sizeof(struct sockaddr_in);
int i;
rfbLog(" other clients:\n");
iterator = rfbGetClientIterator(rfbScreen);
while ((cl = rfbClientIteratorNext(iterator)) != NULL) {
rfbLog(" %s\n",cl->host);
}
rfbReleaseClientIterator(iterator);
cl = (rfbClientPtr)xalloc(sizeof(rfbClientRec));
cl = (rfbClientPtr)malloc(sizeof(rfbClientRec));
FD_SET(sock,&(rfbScreen->allFds));
cl->screen = rfbScreen;
cl->sock = sock;
rfbResetStats(cl);
if(isUDP) {
rfbLog(" accepted UDP client\n");
} else {
getpeername(sock, (struct sockaddr *)&addr, &addrlen);
cl->host = strdup(inet_ntoa(addr.sin_addr));
rfbLog(" other clients:\n");
iterator = rfbGetClientIterator(rfbScreen);
while ((cl_ = rfbClientIteratorNext(iterator)) != NULL) {
rfbLog(" %s\n",cl_->host);
}
rfbReleaseClientIterator(iterator);
FD_SET(sock,&(rfbScreen->allFds));
INIT_MUTEX(cl->outputMutex);
INIT_MUTEX(cl->refCountMutex);
INIT_COND(cl->deleteCond);
......@@ -248,8 +254,6 @@ rfbNewClient(rfbScreen,sock)
cl->useRichCursorEncoding = FALSE;
cl->enableLastRectEncoding = FALSE;
rfbResetStats(cl);
cl->compStreamInited = FALSE;
cl->compStream.total_in = 0;
cl->compStream.total_out = 0;
......@@ -262,19 +266,35 @@ rfbNewClient(rfbScreen,sock)
sprintf(pv,rfbProtocolVersionFormat,rfbProtocolMajorVersion,
rfbProtocolMinorVersion);
cl->clientData = NULL;
cl->clientGoneHook = doNothingWithClient;
cl->screen->newClientHook(cl);
if (WriteExact(cl, pv, sz_rfbProtocolVersionMsg) < 0) {
rfbLogPerror("rfbNewClient: write");
rfbCloseClient(cl);
return NULL;
}
}
cl->clientData = NULL;
cl->clientGoneHook = doNothingWithClient;
cl->screen->newClientHook(cl);
return cl;
}
rfbClientPtr
rfbNewClient(rfbScreen,sock)
rfbScreenInfoPtr rfbScreen;
int sock;
{
return(rfbNewTCPOrUDPClient(rfbScreen,sock,FALSE));
}
rfbClientPtr
rfbNewUDPClient(rfbScreen)
rfbScreenInfoPtr rfbScreen;
{
return((rfbScreen->udpClient=
rfbNewTCPOrUDPClient(rfbScreen,rfbScreen->udpSock,TRUE)));
}
/*
* rfbClientConnectionGone is called from sockets.c just after a connection
......@@ -342,7 +362,7 @@ rfbClientConnectionGone(cl)
rfbPrintStats(cl);
xfree(cl);
free(cl);
}
......@@ -434,14 +454,14 @@ rfbClientConnFailed(cl, reason)
char *buf;
int len = strlen(reason);
buf = (char *)xalloc(8 + len);
buf = (char *)malloc(8 + len);
((CARD32 *)buf)[0] = Swap32IfLE(rfbConnFailed);
((CARD32 *)buf)[1] = Swap32IfLE(len);
memcpy(buf + 8, reason, len);
if (WriteExact(cl, buf, 8 + len) < 0)
rfbLogPerror("rfbClientConnFailed: write");
xfree(buf);
free(buf);
rfbCloseClient(cl);
}
......@@ -808,19 +828,19 @@ rfbProcessClientNormalMessage(cl)
msg.cct.length = Swap32IfLE(msg.cct.length);
str = (char *)xalloc(msg.cct.length);
str = (char *)malloc(msg.cct.length);
if ((n = ReadExact(cl, str, msg.cct.length)) <= 0) {
if (n != 0)
rfbLogPerror("rfbProcessClientNormalMessage: read");
xfree(str);
free(str);
rfbCloseClient(cl);
return;
}
cl->screen->setXCutText(str, msg.cct.length, cl);
xfree(str);
free(str);
return;
......@@ -1388,18 +1408,21 @@ rfbNewUDPConnection(rfbScreen,sock)
* number of bytes we can possibly get.
*/
#if 0
void
rfbProcessUDPInput(rfbClientPtr cl)
rfbProcessUDPInput(rfbScreenInfoPtr rfbScreen)
{
int n;
rfbClientPtr cl=rfbScreen->udpClient;
rfbClientToServerMsg msg;
if ((n = read(cl->udpSock, (char *)&msg, sizeof(msg))) <= 0) {
if(!cl)
return;
if ((n = read(rfbScreen->udpSock, (char *)&msg, sizeof(msg))) <= 0) {
if (n < 0) {
rfbLogPerror("rfbProcessUDPInput: read");
}
rfbDisconnectUDPSock(cl);
rfbDisconnectUDPSock(rfbScreen);
return;
}
......@@ -1408,7 +1431,7 @@ rfbProcessUDPInput(rfbClientPtr cl)
case rfbKeyEvent:
if (n != sz_rfbKeyEventMsg) {
rfbLog("rfbProcessUDPInput: key event incorrect length\n");
rfbDisconnectUDPSock(cl);
rfbDisconnectUDPSock(rfbScreen);
return;
}
cl->screen->kbdAddEvent(msg.ke.down, (KeySym)Swap32IfLE(msg.ke.key), cl);
......@@ -1417,7 +1440,7 @@ rfbProcessUDPInput(rfbClientPtr cl)
case rfbPointerEvent:
if (n != sz_rfbPointerEventMsg) {
rfbLog("rfbProcessUDPInput: ptr event incorrect length\n");
rfbDisconnectUDPSock(cl);
rfbDisconnectUDPSock(rfbScreen);
return;
}
cl->screen->ptrAddEvent(msg.pe.buttonMask,
......@@ -1427,7 +1450,6 @@ rfbProcessUDPInput(rfbClientPtr cl)
default:
rfbLog("rfbProcessUDPInput: unknown message type %d\n",
msg.type);
rfbDisconnectUDPSock(cl);
rfbDisconnectUDPSock(rfbScreen);
}
}
#endif
......@@ -71,17 +71,17 @@ rfbSendRectEncodingRRE(cl, x, y, w, h)
if (rreBeforeBufSize < maxRawSize) {
rreBeforeBufSize = maxRawSize;
if (rreBeforeBuf == NULL)
rreBeforeBuf = (char *)xalloc(rreBeforeBufSize);
rreBeforeBuf = (char *)malloc(rreBeforeBufSize);
else
rreBeforeBuf = (char *)xrealloc(rreBeforeBuf, rreBeforeBufSize);
rreBeforeBuf = (char *)realloc(rreBeforeBuf, rreBeforeBufSize);
}
if (rreAfterBufSize < maxRawSize) {
rreAfterBufSize = maxRawSize;
if (rreAfterBuf == NULL)
rreAfterBuf = (char *)xalloc(rreAfterBufSize);
rreAfterBuf = (char *)malloc(rreAfterBufSize);
else
rreAfterBuf = (char *)xrealloc(rreAfterBuf, rreAfterBufSize);
rreAfterBuf = (char *)realloc(rreAfterBuf, rreAfterBufSize);
}
(*cl->translateFn)(cl->translateLookupTable,
......
......@@ -214,15 +214,14 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
}
if ((rfbScreen->udpSock != -1) && FD_ISSET(rfbScreen->udpSock, &fds)) {
if(!rfbScreen->udpClient)
rfbNewUDPClient(rfbScreen);
if (recvfrom(rfbScreen->udpSock, buf, 1, MSG_PEEK,
(struct sockaddr *)&addr, &addrlen) < 0) {
rfbLogPerror("rfbCheckFds: UDP: recvfrom");
rfbDisconnectUDPSock(rfbScreen);
rfbScreen->udpSockConnected = FALSE;
} else {
if (!rfbScreen->udpSockConnected ||
(memcmp(&addr, &rfbScreen->udpRemoteAddr, addrlen) != 0))
{
......@@ -242,8 +241,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
rfbNewUDPConnection(rfbScreen,rfbScreen->udpSock);
}
/* TODO: UDP also needs a client
rfbProcessUDPInput(rfbScreen,rfbScreen->udpSock); */
rfbProcessUDPInput(rfbScreen);
}
FD_CLR(rfbScreen->udpSock, &fds);
......
......@@ -76,7 +76,7 @@ sraSpanRemove(sraSpan *span) {
void
sraSpanDestroy(sraSpan *span) {
if (span->subspan) sraSpanListDestroy(span->subspan);
xfree(span);
free(span);
}
void
......@@ -153,7 +153,7 @@ sraSpanListDestroy(sraSpanList *list) {
sraSpanDestroy(curr);
curr = next;
}
xfree(list);
free(list);
}
void
......
......@@ -82,7 +82,7 @@ rfbInitTrueColourSingleTable24 (char **table, rfbPixelFormat *in,
int nEntries = 1 << in->bitsPerPixel;
if (*table) free(*table);
*table = (char *)xalloc(nEntries * 3 + 1);
*table = (char *)malloc(nEntries * 3 + 1);
t = (CARD8 *)*table;
for (i = 0; i < nEntries; i++) {
......@@ -121,7 +121,7 @@ rfbInitTrueColourRGBTables24 (char **table, rfbPixelFormat *in,
CARD8 *blueTable;
if (*table) free(*table);
*table = (char *)xalloc((in->redMax + in->greenMax + in->blueMax + 3)
*table = (char *)malloc((in->redMax + in->greenMax + in->blueMax + 3)
* 3 + 1);
redTable = (CARD8 *)*table;
greenTable = redTable + 3*(in->redMax + 1);
......
......@@ -66,7 +66,7 @@ rfbInitTrueColourSingleTableOUT (char **table, rfbPixelFormat *in,
int nEntries = 1 << in->bitsPerPixel;
if (*table) free(*table);
*table = (char *)xalloc(nEntries * sizeof(OUT_T));
*table = (char *)malloc(nEntries * sizeof(OUT_T));
t = (OUT_T *)*table;
for (i = 0; i < nEntries; i++) {
......@@ -104,7 +104,7 @@ rfbInitTrueColourRGBTablesOUT (char **table, rfbPixelFormat *in,
OUT_T *blueTable;
if (*table) free(*table);
*table = (char *)xalloc((in->redMax + in->greenMax + in->blueMax + 3)
*table = (char *)malloc((in->redMax + in->greenMax + in->blueMax + 3)
* sizeof(OUT_T));
redTable = (OUT_T *)*table;
greenTable = redTable + in->redMax + 1;
......
......@@ -241,9 +241,9 @@ rfbSendRectEncodingTight(cl, x, y, w, h)
if (tightBeforeBufSize < 4) {
tightBeforeBufSize = 4;
if (tightBeforeBuf == NULL)
tightBeforeBuf = (char *)xalloc(tightBeforeBufSize);
tightBeforeBuf = (char *)malloc(tightBeforeBufSize);
else
tightBeforeBuf = (char *)xrealloc(tightBeforeBuf,
tightBeforeBuf = (char *)realloc(tightBeforeBuf,
tightBeforeBufSize);
}
......@@ -503,18 +503,18 @@ SendRectSimple(cl, x, y, w, h)
if (tightBeforeBufSize < maxBeforeSize) {
tightBeforeBufSize = maxBeforeSize;
if (tightBeforeBuf == NULL)
tightBeforeBuf = (char *)xalloc(tightBeforeBufSize);
tightBeforeBuf = (char *)malloc(tightBeforeBufSize);
else
tightBeforeBuf = (char *)xrealloc(tightBeforeBuf,
tightBeforeBuf = (char *)realloc(tightBeforeBuf,
tightBeforeBufSize);
}
if (tightAfterBufSize < maxAfterSize) {
tightAfterBufSize = maxAfterSize;
if (tightAfterBuf == NULL)
tightAfterBuf = (char *)xalloc(tightAfterBufSize);
tightAfterBuf = (char *)malloc(tightAfterBufSize);
else
tightAfterBuf = (char *)xrealloc(tightAfterBuf,
tightAfterBuf = (char *)realloc(tightAfterBuf,
tightAfterBufSize);
}
......@@ -844,7 +844,7 @@ SendGradientRect(cl, w, h)
}
if (prevRowBuf == NULL)
prevRowBuf = (int *)xalloc(2048 * 3 * sizeof(int));
prevRowBuf = (int *)malloc(2048 * 3 * sizeof(int));
cl->updateBuf[cl->ublen++] = (streamId | rfbTightExplicitFilter) << 4;
cl->updateBuf[cl->ublen++] = rfbTightFilterGradient;
......@@ -1645,7 +1645,7 @@ SendJpegRect(cl, x, y, w, h, quality)
if (cl->screen->rfbServerFormat.bitsPerPixel == 8)
return SendFullColorRect(cl, w, h);
srcBuf = (CARD8 *)xalloc(w * 3);
srcBuf = (CARD8 *)malloc(w * 3);
if (srcBuf == NULL) {
return SendFullColorRect(cl, w, h);
}
......
......@@ -75,9 +75,9 @@ rfbSendOneRectEncodingZlib(cl, x, y, w, h)
if (zlibBeforeBufSize < maxRawSize) {
zlibBeforeBufSize = maxRawSize;
if (zlibBeforeBuf == NULL)
zlibBeforeBuf = (char *)xalloc(zlibBeforeBufSize);
zlibBeforeBuf = (char *)malloc(zlibBeforeBufSize);
else
zlibBeforeBuf = (char *)xrealloc(zlibBeforeBuf, zlibBeforeBufSize);
zlibBeforeBuf = (char *)realloc(zlibBeforeBuf, zlibBeforeBufSize);
}
/* zlib compression is not useful for very small data sets.
......@@ -115,9 +115,9 @@ rfbSendOneRectEncodingZlib(cl, x, y, w, h)
if (zlibAfterBufSize < maxCompSize) {
zlibAfterBufSize = maxCompSize;
if (zlibAfterBuf == NULL)
zlibAfterBuf = (char *)xalloc(zlibAfterBufSize);
zlibAfterBuf = (char *)malloc(zlibAfterBufSize);
else
zlibAfterBuf = (char *)xrealloc(zlibAfterBuf, zlibAfterBufSize);
zlibAfterBuf = (char *)realloc(zlibAfterBuf, zlibAfterBufSize);
}
/*
......
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