git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@499 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v0.0.90
@@ -48,6 +48,9 @@ | |||
#ifndef INADDR_NONE | |||
#define INADDR_NONE ((unsigned long)-1) | |||
#endif | |||
#ifndef INADDR_LOOPBACK | |||
#define INADDR_LOOPBACK ((unsigned long)0x7F000001) | |||
#endif | |||
using namespace network; | |||
using namespace rdr; | |||
@@ -118,12 +121,12 @@ TcpSocket::TcpSocket(const char *host, int port) | |||
struct sockaddr_in addr; | |||
memset(&addr, 0, sizeof(addr)); | |||
addr.sin_family = AF_INET; | |||
addr.sin_addr.s_addr = inet_addr(host); | |||
addr.sin_addr.s_addr = inet_addr((char *)host); | |||
addr.sin_port = htons(port); | |||
if ((int)addr.sin_addr.s_addr == -1) { | |||
// Host was not an IP address - try resolving as DNS name | |||
struct hostent *hostinfo; | |||
hostinfo = gethostbyname(host); | |||
hostinfo = gethostbyname((char *)host); | |||
if (hostinfo && hostinfo->h_addr) { | |||
addr.sin_addr.s_addr = ((struct in_addr *)hostinfo->h_addr)->s_addr; | |||
} else { | |||
@@ -285,7 +288,7 @@ TcpListener::TcpListener(int port, bool localhostOnly, int sock, bool close_) | |||
int one = 1; | |||
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, | |||
(const char *)&one, sizeof(one)) < 0) { | |||
(char *)&one, sizeof(one)) < 0) { | |||
int e = errorNumber; | |||
closesocket(fd); | |||
throw SocketException("unable to create listening socket", e); | |||
@@ -396,7 +399,7 @@ TcpFilter::~TcpFilter() { | |||
static bool | |||
patternMatchIP(const TcpFilter::Pattern& pattern, const char* value) { | |||
unsigned long address = inet_addr(value); | |||
unsigned long address = inet_addr((char *)value); | |||
if (address == INADDR_NONE) return false; | |||
return ((pattern.address & pattern.mask) == (address & pattern.mask)); | |||
} |
@@ -48,6 +48,11 @@ | |||
#include <sys/select.h> | |||
#endif | |||
// XXX Lynx/OS 2.3: protos for gettimeofday(), select(), bzero() | |||
#ifdef Lynx | |||
#include <sys/proto.h> | |||
#endif | |||
#include <rdr/FdInStream.h> | |||
#include <rdr/Exception.h> | |||
@@ -33,6 +33,11 @@ | |||
#include <sys/time.h> | |||
#endif | |||
// XXX Lynx/OS 2.3: protos for select(), bzero() | |||
#ifdef Lynx | |||
#include <sys/proto.h> | |||
#endif | |||
#include <rdr/FdOutStream.h> | |||
#include <rdr/Exception.h> | |||
@@ -20,6 +20,7 @@ | |||
*/ | |||
#include <rfb/FileInfo.h> | |||
#include <rfb/util.h> | |||
#ifdef _WIN32 | |||
#define strcasecmp _stricmp |
@@ -70,4 +70,4 @@ bool | |||
FileManager::isCreated() | |||
{ | |||
if (m_pFile != NULL) return true; else return false; | |||
} | |||
} |
@@ -20,6 +20,7 @@ | |||
#include <rdr/InStream.h> | |||
#include <rdr/OutStream.h> | |||
#include <rfb/PixelFormat.h> | |||
#include <rfb/util.h> | |||
#ifdef _WIN32 | |||
#define strcasecmp _stricmp |
@@ -20,6 +20,7 @@ | |||
#define strcasecmp _stricmp | |||
#endif | |||
#include <rfb/encodings.h> | |||
#include <rfb/util.h> | |||
int rfb::encodingNum(const char* name) | |||
{ |
@@ -15,8 +15,114 @@ | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
* USA. | |||
*/ | |||
/* | |||
* The following applies to stcasecmp and strncasecmp implementations: | |||
* | |||
* Copyright (c) 1987 Regents of the University of California. | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms are permitted | |||
* provided that this notice is preserved and that due credit is given | |||
* to the University of California at Berkeley. The name of the University | |||
* may not be used to endorse or promote products derived from this | |||
* software without specific written prior permission. This software | |||
* is provided ``as is'' without express or implied warranty. | |||
*/ | |||
#include <rfb/util.h> | |||
// Provide strcasecmp() and/or strncasecmp() if absent on this system. | |||
#ifndef WIN32 | |||
#if !defined(HAVE_STRCASECMP) || !defined(HAVE_STRNCASECMP) | |||
extern "C" { | |||
/* | |||
* This array is designed for mapping upper and lower case letter | |||
* together for a case independent comparison. The mappings are | |||
* based upon ascii character sequences. | |||
*/ | |||
static unsigned char s_charmap[] = { | |||
'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', | |||
'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', | |||
'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', | |||
'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', | |||
'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', | |||
'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', | |||
'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', | |||
'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', | |||
'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', | |||
'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', | |||
'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', | |||
'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', | |||
'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', | |||
'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', | |||
'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', | |||
'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', | |||
'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', | |||
'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', | |||
'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', | |||
'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', | |||
'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', | |||
'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', | |||
'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', | |||
'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', | |||
'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', | |||
'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', | |||
'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', | |||
'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337', | |||
'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', | |||
'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', | |||
'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', | |||
'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', | |||
}; | |||
#ifndef HAVE_STRCASECMP | |||
int | |||
strcasecmp(const char *s1, const char *s2) | |||
{ | |||
unsigned char u1, u2; | |||
for (;;) { | |||
u1 = (unsigned char) *s1++; | |||
u2 = (unsigned char) *s2++; | |||
if (s_charmap[u1] != s_charmap[u2]) { | |||
return s_charmap[u1] - s_charmap[u2]; | |||
} | |||
if (u1 == '\0') { | |||
return 0; | |||
} | |||
} | |||
} | |||
#endif // !defined(HAVE_STRCASECMP) | |||
#ifndef HAVE_STRNCASECMP | |||
int | |||
strncasecmp(const char *s1, const char *s2, size_t n) | |||
{ | |||
unsigned char u1, u2; | |||
for (; n != 0; --n) { | |||
u1 = (unsigned char) *s1++; | |||
u2 = (unsigned char) *s2++; | |||
if (s_charmap[u1] != s_charmap[u2]) { | |||
return s_charmap[u1] - s_charmap[u2]; | |||
} | |||
if (u1 == '\0') { | |||
return 0; | |||
} | |||
} | |||
return 0; | |||
} | |||
#endif // !defined(HAVE_STRNCASECMP) | |||
} // extern "C" | |||
#endif // !defined(HAVE_STRCASECMP) || !defined(HAVE_STRNCASECMP) | |||
#endif // defined(WIN32) | |||
namespace rfb { | |||
char* strDup(const char* s) { |
@@ -72,8 +72,21 @@ namespace rfb { | |||
// Copies src to dest, up to specified length-1, and guarantees termination | |||
void strCopy(char* dest, const char* src, int destlen); | |||
} | |||
// Declare strcasecmp() and/or strncasecmp() if absent on this system. | |||
#if !defined(WIN32) && !defined(HAVE_STRCASECMP) | |||
extern "C" { | |||
int strcasecmp(const char *s1, const char *s2); | |||
} | |||
#endif | |||
#if !defined(WIN32) && !defined(HAVE_STRNCASECMP) | |||
extern "C" { | |||
int strncasecmp(const char *s1, const char *s2, size_t n); | |||
} | |||
#endif | |||
#endif // __RFB_UTIL_H__ | |||
// -=- PLATFORM SPECIFIC UTILITY FUNCTIONS/IMPLEMENTATIONS | |||
#ifdef WIN32 |
@@ -39,8 +39,11 @@ using namespace rfb; | |||
static rfb::LogWriter vlog("TXImage"); | |||
TXImage::TXImage(Display* d, int width, int height, Visual* vis_, int depth_) | |||
: xim(0), dpy(d), vis(vis_), depth(depth_), shminfo(0), tig(0), cube(0) | |||
: xim(0), dpy(d), vis(vis_), depth(depth_), tig(0), cube(0) | |||
{ | |||
#ifdef HAVE_MITSHM | |||
shminfo = 0; | |||
#endif | |||
width_ = width; | |||
height_ = height; | |||
for (int i = 0; i < 256; i++) | |||
@@ -140,11 +143,13 @@ void TXImage::put(Window win, GC gc, const rfb::Rect& r) | |||
tig->getImage(ximDataStart, r, | |||
xim->bytes_per_line / (xim->bits_per_pixel / 8)); | |||
} | |||
#ifdef HAVE_MITSHM | |||
if (usingShm()) { | |||
XShmPutImage(dpy, win, gc, xim, x, y, x, y, w, h, False); | |||
} else { | |||
XPutImage(dpy, win, gc, xim, x, y, x, y, w, h); | |||
return; | |||
} | |||
#endif | |||
XPutImage(dpy, win, gc, xim, x, y, x, y, w, h); | |||
} | |||
void TXImage::setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs) | |||
@@ -168,7 +173,7 @@ void TXImage::lookup(int index, int* r, int* g, int* b) | |||
*b = colourMap[index].b; | |||
} | |||
#ifdef HAVE_MITSHM | |||
static bool caughtError = false; | |||
static int XShmAttachErrorHandler(Display *dpy, XErrorEvent *error) | |||
@@ -187,10 +192,15 @@ public: | |||
}; | |||
static TXImageCleanup imageCleanup; | |||
#endif | |||
void TXImage::createXImage() | |||
{ | |||
if (XShmQueryExtension(dpy)) { | |||
#ifdef HAVE_MITSHM | |||
int major, minor; | |||
Bool pixmaps; | |||
if (XShmQueryVersion(dpy, &major, &minor, &pixmaps)) { | |||
shminfo = new XShmSegmentInfo; | |||
xim = XShmCreateImage(dpy, vis, depth, ZPixmap, | |||
@@ -240,6 +250,7 @@ void TXImage::createXImage() | |||
delete shminfo; | |||
shminfo = 0; | |||
} | |||
#endif | |||
xim = XCreateImage(dpy, vis, depth, ZPixmap, | |||
0, 0, width(), height(), BitmapPad(dpy), 0); | |||
@@ -253,6 +264,7 @@ void TXImage::createXImage() | |||
void TXImage::destroyXImage() | |||
{ | |||
#ifdef HAVE_MITSHM | |||
if (shminfo) { | |||
vlog.debug("Freeing shared memory XImage"); | |||
shmdt(shminfo->shmaddr); | |||
@@ -261,6 +273,7 @@ void TXImage::destroyXImage() | |||
shminfo = 0; | |||
imageCleanup.images.remove(this); | |||
} | |||
#endif | |||
// XDestroyImage() will free(xim->data) if appropriate | |||
if (xim) XDestroyImage(xim); | |||
xim = 0; |
@@ -37,7 +37,9 @@ | |||
#include <rfb/PixelBuffer.h> | |||
#include <rfb/ColourMap.h> | |||
#include <rfb/ColourCube.h> | |||
#ifdef HAVE_MITSHM | |||
#include <X11/extensions/XShm.h> | |||
#endif | |||
namespace rfb { class TransImageGetter; } | |||
@@ -59,7 +61,11 @@ public: | |||
void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs); | |||
void updateColourMap(); | |||
#ifdef HAVE_MITSHM | |||
bool usingShm() { return shminfo; } | |||
#else | |||
bool usingShm() { return 0; } | |||
#endif | |||
// PixelBuffer methods | |||
// width(), height(), getPF() etc are inherited from PixelBuffer | |||
@@ -79,7 +85,9 @@ private: | |||
Display* dpy; | |||
Visual* vis; | |||
int depth; | |||
#ifdef HAVE_MITSHM | |||
XShmSegmentInfo* shminfo; | |||
#endif | |||
rfb::TransImageGetter* tig; | |||
rfb::Colour colourMap[256]; | |||
rfb::PixelFormat nativePF; |
@@ -19,6 +19,11 @@ | |||
// Timer.cxx | |||
// | |||
// XXX Lynx/OS 2.3: get proto for gettimeofday() | |||
#ifdef Lynx | |||
#include <sys/proto.h> | |||
#endif | |||
#include "Timer.h" | |||
static Timer* timers; |
@@ -22,6 +22,11 @@ | |||
#include <x0vncserver/TimeMillis.h> | |||
// XXX Lynx/OS 2.3: get proto for gettimeofday() | |||
#ifdef Lynx | |||
#include <sys/proto.h> | |||
#endif | |||
TimeMillis::TimeMillis() | |||
{ | |||
update(); |
@@ -45,6 +45,11 @@ | |||
#include <x0vncserver/PollingManager.h> | |||
#include <x0vncserver/PollingScheduler.h> | |||
// XXX Lynx/OS 2.3: protos for select(), bzero() | |||
#ifdef Lynx | |||
#include <sys/proto.h> | |||
#endif | |||
using namespace rfb; | |||
using namespace network; | |||