Browse Source

Merged the rdr library with VNC 4.1.1.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@333 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v0.0.90
Constantin Kaplinsky 18 years ago
parent
commit
b0f89f834a

+ 16
- 7
rdr/Exception.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -17,7 +17,7 @@
*/
#include <rdr/Exception.h>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <tchar.h>
#include <windows.h>
#include <winsock2.h>
#endif
@@ -25,7 +25,7 @@
using namespace rdr;

SystemException::SystemException(const char* s, int err_)
: Exception(s, "rdr::SystemException"), err(err_)
: Exception(s), err(err_)
{
strncat(str_, ": ", len-1-strlen(str_));
#ifdef _WIN32
@@ -48,17 +48,26 @@ SystemException::SystemException(const char* s, int err_)
str_+strlen(str_), len-strlen(str_), 0, 0);
delete [] tmsg;
#else
char* currStr = str_+strlen(str_);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
0, err, 0, str_+strlen(str_), len-1-strlen(str_), 0);
0, err, 0, currStr, len-1-strlen(str_), 0);
#endif
int l = strlen(str_);
if ((l >= 2) && (str_[l-2] == '\r') && (str_[l-1] == '\n'))
str_[l-2] = 0;
}
#else
strncat(str_, strerror(err), len-1-strlen(str_));
#endif
strncat(str_, " (", len-1-strlen(str_));
char buf[20];
sprintf(buf,"%d",err);
#ifdef WIN32
if (err < 0)
sprintf(buf, "%x", err);
else
#endif
sprintf(buf,"%d",err);
strncat(str_, buf, len-1-strlen(str_));
strncat(str_, ")", len-1-strlen(str_));
}

+ 9
- 10
rdr/Exception.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -27,18 +27,14 @@ namespace rdr {
struct Exception {
enum { len = 256 };
char str_[len];
char type_[len];
Exception(const char* s=0, const char* e="rdr::Exception") {
Exception(const char* s=0) {
str_[0] = 0;
if (s)
strncat(str_, s, len-1);
else
strcat(str_, "Exception");
type_[0] = 0;
strncat(type_, e, len-1);
}
virtual const char* str() const { return str_; }
virtual const char* type() const { return type_; }
};

struct SystemException : public Exception {
@@ -47,12 +43,15 @@ namespace rdr {
};

struct TimedOut : public Exception {
TimedOut(const char* s="Timed out") : Exception(s,"rdr::TimedOut") {}
TimedOut(const char* s="Timed out") : Exception(s) {}
};
struct EndOfStream : public Exception {
EndOfStream(const char* s="End of stream")
: Exception(s,"rdr::EndOfStream") {}
EndOfStream(const char* s="End of stream") : Exception(s) {}
};

struct FrameException : public Exception {
FrameException(const char* s="Frame exception") : Exception(s) {}
};
}


+ 2
- 2
rdr/FdInStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/FdInStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/FdOutStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/FdOutStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/FixedMemOutStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/HexInStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/HexInStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/HexOutStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/HexOutStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/InStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/InStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 1
- 1
rdr/Makefile.in View File

@@ -1,6 +1,6 @@

SRCS = Exception.cxx FdInStream.cxx FdOutStream.cxx InStream.cxx \
NullOutStream.cxx RandomStream.cxx ZlibInStream.cxx ZlibOutStream.cxx \
RandomStream.cxx ZlibInStream.cxx ZlibOutStream.cxx \
HexInStream.cxx HexOutStream.cxx

OBJS = $(SRCS:.cxx=.o)

+ 2
- 2
rdr/MemInStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 3
- 2
rdr/MemOutStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -48,6 +48,7 @@ namespace rdr {

int length() { return ptr - start; }
void clear() { ptr = start; };
void clearAndZero() { memset(start, 0, ptr-start); clear(); }
void reposition(int pos) { ptr = start + pos; }

// data() returns a pointer to the buffer.

+ 0
- 60
rdr/NullOutStream.cxx View File

@@ -1,60 +0,0 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/

#include <rdr/NullOutStream.h>
#include <rdr/Exception.h>

using namespace rdr;

static const int bufferSize = 1024;

NullOutStream::NullOutStream()
: offset(0)
{
start = ptr = new U8[bufferSize];
end = start + bufferSize;
}

NullOutStream::~NullOutStream()
{
delete [] start;
}

int NullOutStream::length()
{
return offset + ptr - start;
}

void NullOutStream::writeBytes(const void* data, int length)
{
offset += length;
}

int NullOutStream::overrun(int itemSize, int nItems)
{
if (itemSize > bufferSize)
throw Exception("NullOutStream overrun: max itemSize exceeded");

offset += ptr - start;
ptr = start;

if (itemSize * nItems > end - ptr)
nItems = (end - ptr) / itemSize;

return nItems;
}

+ 0
- 42
rdr/NullOutStream.h View File

@@ -1,42 +0,0 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/

#ifndef __RDR_NULLOUTSTREAM_H__
#define __RDR_NULLOUTSTREAM_H__

#include <rdr/OutStream.h>

namespace rdr {

class NullOutStream : public OutStream {

public:
NullOutStream();
virtual ~NullOutStream();
int length();
void writeBytes(const void* data, int length);

private:
int overrun(int itemSize, int nItems);
int offset;
U8* start;
};

}

#endif

+ 21
- 9
rdr/RandomStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -25,6 +25,9 @@
#include <errno.h>
#else
#define getpid() GetCurrentProcessId()
#ifndef RFB_HAVE_WINCRYPT
#pragma message(" NOTE: Not building WinCrypt-based RandomStream")
#endif
#endif

using namespace rdr;
@@ -38,7 +41,7 @@ RandomStream::RandomStream()
{
ptr = end = start = new U8[DEFAULT_BUF_LEN];

#ifdef WIN32
#ifdef RFB_HAVE_WINCRYPT
provider = 0;
if (!CryptAcquireContext(&provider, 0, 0, PROV_RSA_FULL, 0)) {
if (GetLastError() == NTE_BAD_KEYSET) {
@@ -53,10 +56,14 @@ RandomStream::RandomStream()
}
if (!provider) {
#else
#ifndef WIN32
fp = fopen("/dev/urandom", "r");
if (!fp)
fp = fopen("/dev/random", "r");
if (!fp) {
#else
{
#endif
#endif
fprintf(stderr,"RandomStream: warning: no OS supplied random source - using rand()\n");
seed += (unsigned int) time(0) + getpid() + getpid() * 987654 + rand();
@@ -67,11 +74,11 @@ RandomStream::RandomStream()
RandomStream::~RandomStream() {
delete [] start;

#ifdef WIN32
if (provider) {
#ifdef RFB_HAVE_WINCRYPT
if (provider)
CryptReleaseContext(provider, 0);
}
#else
#endif
#ifndef WIN32
if (fp) fclose(fp);
#endif
}
@@ -93,20 +100,25 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {

int length = start + DEFAULT_BUF_LEN - end;

#ifdef WIN32
#ifdef RFB_HAVE_WINCRYPT
if (provider) {
if (!CryptGenRandom(provider, length, (U8*)end))
throw rdr::SystemException("unable to CryptGenRandom", GetLastError());
end += length;
} else {
#else
#ifndef WIN32
if (fp) {
int n = fread((U8*)end, length, 1, fp);
if (n != 1)
throw rdr::SystemException("reading /dev/urandom or /dev/random failed",
errno);
end += length;
#endif
} else {
#else
{
#endif
#endif
for (int i=0; i<length; i++)
*(U8*)end++ = (int) (256.0*rand()/(RAND_MAX+1.0));
}

+ 8
- 8
rdr/RandomStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -23,12 +23,11 @@
#include <rdr/InStream.h>

#ifdef WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wincrypt.h>
#ifdef WINCRYPT32API
#define RFB_HAVE_WINCRYPT
#endif
#endif

namespace rdr {
@@ -50,9 +49,10 @@ namespace rdr {
int offset;

static unsigned int seed;
#ifdef WIN32
#ifdef RFB_HAVE_WINCRYPT
HCRYPTPROV provider;
#else
#endif
#ifndef WIN32
FILE* fp;
#endif


+ 2
- 2
rdr/SubstitutingInStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/ZlibInStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/ZlibInStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/ZlibOutStream.cxx View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 2
- 2
rdr/ZlibOutStream.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or

+ 12
- 2
rdr/types.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -51,6 +51,16 @@ namespace rdr {
U16* buf;
};

class U32Array {
public:
U32Array() : buf(0) {}
U32Array(U32* a) : buf(a) {} // note: assumes ownership
U32Array(int len) : buf(new U32[len]) {}
~U32Array() { delete [] buf; }
U32* takeBuf() { U32* tmp = buf; buf = 0; return tmp; }
U32* buf;
};

} // end of namespace rdr

#endif

+ 9
- 9
rfb/Exception.h View File

@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.
*
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -21,17 +21,17 @@
#include <rdr/Exception.h>

namespace rfb {
struct Exception : public rdr::Exception {
Exception(const char* s=0, const char* e="rfb::Exception")
: rdr::Exception(s,e) {}
};
typedef rdr::Exception Exception;
struct AuthFailureException : public Exception {
AuthFailureException(const char* s="Authentication failure")
: Exception(s,"rfb::AuthFailureException") {}
: Exception(s) {}
};
struct AuthCancelledException : public rfb::Exception {
AuthCancelledException(const char* s="Authentication cancelled")
: Exception(s) {}
};
struct ConnFailedException : public Exception {
ConnFailedException(const char* s="Connection failed")
: Exception(s,"rfb::ConnFailedException") {}
ConnFailedException(const char* s="Connection failed") : Exception(s) {}
};
}
#endif

Loading…
Cancel
Save