Skip to content
GitLab
Explore
Sign in
Register
Commits on Source (5)
New upstream version 1.10.1+dfsg
· 4718aea1
Joachim Falk
authored
Dec 21, 2019
4718aea1
Merge branch 'upstream'
· 60659887
Joachim Falk
authored
Dec 21, 2019
60659887
Bumped version of debian provided man pages to version 1.10.1.
· 36402736
Joachim Falk
authored
Dec 21, 2019
36402736
Bumped version of debian package to 1.10.1+dfsg-1~RC1
· 30ff39b2
Joachim Falk
authored
Dec 21, 2019
30ff39b2
Refreshed patches for Tigervnc 1.10.1
· e1e94fc4
Joachim Falk
authored
Dec 21, 2019
e1e94fc4
Show whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
e1e94fc4
...
...
@@ -21,10 +21,10 @@ include(CheckCSourceRuns)
include
(
CMakeMacroLibtoolFile
)
project
(
tigervnc
)
set
(
VERSION 1.10.
0
)
set
(
VERSION 1.10.
1
)
# The RC version must always be four comma-separated numbers
set
(
RCVERSION 1,10,
0
,0
)
set
(
RCVERSION 1,10,
1
,0
)
# Installation paths
set
(
BIN_DIR
"
${
CMAKE_INSTALL_PREFIX
}
/bin"
)
...
...
cmake/StaticBuild.cmake
View file @
e1e94fc4
...
...
@@ -41,7 +41,7 @@ if(BUILD_STATIC)
set
(
GNUTLS_LIBRARIES
"
${
GNUTLS_LIBRARIES
}
-ltasn1"
)
endif
()
if
(
NETTLE_LIBRARY
)
set
(
GNUTLS_LIBRARIES
"
${
GNUTLS_LIBRARIES
}
-l
nettle -lhogweed
-lgmp"
)
set
(
GNUTLS_LIBRARIES
"
${
GNUTLS_LIBRARIES
}
-l
hogweed -lnettle
-lgmp"
)
endif
()
if
(
GCRYPT_LIBRARY
)
set
(
GNUTLS_LIBRARIES
"
${
GNUTLS_LIBRARIES
}
-lgcrypt -lgpg-error"
)
...
...
common/rdr/FdInStream.cxx
View file @
e1e94fc4
...
...
@@ -56,7 +56,7 @@ using namespace rdr;
enum
{
DEFAULT_BUF_SIZE
=
8192
,
MIN_BULK_SIZE
=
1024
};
FdInStream
::
FdInStream
(
int
fd_
,
int
timeoutms_
,
in
t
bufSize_
,
FdInStream
::
FdInStream
(
int
fd_
,
int
timeoutms_
,
size_
t
bufSize_
,
bool
closeWhenDone_
)
:
fd
(
fd_
),
closeWhenDone
(
closeWhenDone_
),
timeoutms
(
timeoutms_
),
blockCallback
(
0
),
...
...
@@ -67,7 +67,7 @@ FdInStream::FdInStream(int fd_, int timeoutms_, int bufSize_,
}
FdInStream
::
FdInStream
(
int
fd_
,
FdInStreamBlockCallback
*
blockCallback_
,
in
t
bufSize_
)
size_
t
bufSize_
)
:
fd
(
fd_
),
timeoutms
(
0
),
blockCallback
(
blockCallback_
),
timing
(
false
),
timeWaitedIn100us
(
5
),
timedKbits
(
0
),
bufSize
(
bufSize_
?
bufSize_
:
DEFAULT_BUF_SIZE
),
offset
(
0
)
...
...
@@ -92,12 +92,12 @@ void FdInStream::setBlockCallback(FdInStreamBlockCallback* blockCallback_)
timeoutms
=
0
;
}
in
t
FdInStream
::
pos
()
size_
t
FdInStream
::
pos
()
{
return
offset
+
ptr
-
start
;
}
void
FdInStream
::
readBytes
(
void
*
data
,
in
t
length
)
void
FdInStream
::
readBytes
(
void
*
data
,
size_
t
length
)
{
if
(
length
<
MIN_BULK_SIZE
)
{
InStream
::
readBytes
(
data
,
length
);
...
...
@@ -106,7 +106,7 @@ void FdInStream::readBytes(void* data, int length)
U8
*
dataPtr
=
(
U8
*
)
data
;
in
t
n
=
end
-
ptr
;
size_
t
n
=
end
-
ptr
;
if
(
n
>
length
)
n
=
length
;
memcpy
(
dataPtr
,
ptr
,
n
);
...
...
@@ -123,7 +123,7 @@ void FdInStream::readBytes(void* data, int length)
}
in
t
FdInStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
size_
t
FdInStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
if
(
itemSize
>
bufSize
)
throw
Exception
(
"FdInStream overrun: max itemSize exceeded"
);
...
...
@@ -135,8 +135,8 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
end
-=
ptr
-
start
;
ptr
=
start
;
in
t
bytes_to_read
;
while
(
end
<
start
+
itemSize
)
{
size_
t
bytes_to_read
;
while
((
size_t
)
(
end
-
start
)
<
itemSize
)
{
bytes_to_read
=
start
+
bufSize
-
end
;
if
(
!
timing
)
{
// When not timing, we must be careful not to read too much
...
...
@@ -147,13 +147,15 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
// bytes is ineffecient.
bytes_to_read
=
vncmin
(
bytes_to_read
,
vncmax
(
itemSize
*
nItems
,
8
));
}
in
t
n
=
readWithTimeoutOrCallback
((
U8
*
)
end
,
bytes_to_read
,
wait
);
size_
t
n
=
readWithTimeoutOrCallback
((
U8
*
)
end
,
bytes_to_read
,
wait
);
if
(
n
==
0
)
return
0
;
end
+=
n
;
}
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
...
...
@@ -171,7 +173,7 @@ int FdInStream::overrun(int itemSize, int nItems, bool wait)
// returning EINTR.
//
in
t
FdInStream
::
readWithTimeoutOrCallback
(
void
*
buf
,
in
t
len
,
bool
wait
)
size_
t
FdInStream
::
readWithTimeoutOrCallback
(
void
*
buf
,
size_
t
len
,
bool
wait
)
{
struct
timeval
before
,
after
;
if
(
timing
)
...
...
common/rdr/FdInStream.h
View file @
e1e94fc4
...
...
@@ -37,16 +37,17 @@ namespace rdr {
public:
FdInStream
(
int
fd
,
int
timeoutms
=-
1
,
in
t
bufSize
=
0
,
FdInStream
(
int
fd
,
int
timeoutms
=-
1
,
size_
t
bufSize
=
0
,
bool
closeWhenDone_
=
false
);
FdInStream
(
int
fd
,
FdInStreamBlockCallback
*
blockCallback
,
int
bufSize
=
0
);
FdInStream
(
int
fd
,
FdInStreamBlockCallback
*
blockCallback
,
size_t
bufSize
=
0
);
virtual
~
FdInStream
();
void
setTimeout
(
int
timeoutms
);
void
setBlockCallback
(
FdInStreamBlockCallback
*
blockCallback
);
int
getFd
()
{
return
fd
;
}
in
t
pos
();
void
readBytes
(
void
*
data
,
in
t
length
);
size_
t
pos
();
void
readBytes
(
void
*
data
,
size_
t
length
);
void
startTiming
();
void
stopTiming
();
...
...
@@ -54,10 +55,10 @@ namespace rdr {
unsigned
int
timeWaited
()
{
return
timeWaitedIn100us
;
}
protected
:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
);
private
:
in
t
readWithTimeoutOrCallback
(
void
*
buf
,
in
t
len
,
bool
wait
=
true
);
size_
t
readWithTimeoutOrCallback
(
void
*
buf
,
size_
t
len
,
bool
wait
=
true
);
int
fd
;
bool
closeWhenDone
;
...
...
@@ -68,8 +69,8 @@ namespace rdr {
unsigned
int
timeWaitedIn100us
;
unsigned
int
timedKbits
;
in
t
bufSize
;
in
t
offset
;
size_
t
bufSize
;
size_
t
offset
;
U8
*
start
;
};
...
...
common/rdr/FdOutStream.cxx
View file @
e1e94fc4
...
...
@@ -51,7 +51,7 @@ using namespace rdr;
enum
{
DEFAULT_BUF_SIZE
=
16384
};
FdOutStream
::
FdOutStream
(
int
fd_
,
bool
blocking_
,
int
timeoutms_
,
in
t
bufSize_
)
FdOutStream
::
FdOutStream
(
int
fd_
,
bool
blocking_
,
int
timeoutms_
,
size_
t
bufSize_
)
:
fd
(
fd_
),
blocking
(
blocking_
),
timeoutms
(
timeoutms_
),
bufSize
(
bufSize_
?
bufSize_
:
DEFAULT_BUF_SIZE
),
offset
(
0
)
{
...
...
@@ -79,7 +79,7 @@ void FdOutStream::setBlocking(bool blocking_) {
blocking
=
blocking_
;
}
in
t
FdOutStream
::
length
()
size_
t
FdOutStream
::
length
()
{
return
offset
+
ptr
-
sentUpTo
;
}
...
...
@@ -97,7 +97,7 @@ unsigned FdOutStream::getIdleTime()
void
FdOutStream
::
flush
()
{
while
(
sentUpTo
<
ptr
)
{
in
t
n
=
writeWithTimeout
((
const
void
*
)
sentUpTo
,
size_
t
n
=
writeWithTimeout
((
const
void
*
)
sentUpTo
,
ptr
-
sentUpTo
,
blocking
?
timeoutms
:
0
);
...
...
@@ -120,7 +120,7 @@ void FdOutStream::flush()
}
in
t
FdOutStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
)
size_
t
FdOutStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
)
{
if
(
itemSize
>
bufSize
)
throw
Exception
(
"FdOutStream overrun: max itemSize exceeded"
);
...
...
@@ -129,10 +129,10 @@ int FdOutStream::overrun(int itemSize, int nItems)
flush
();
// Still not enough space?
if
(
itemSize
>
end
-
ptr
)
{
if
(
itemSize
>
(
size_t
)(
end
-
ptr
)
)
{
// Can we shuffle things around?
// (don't do this if it gains us less than 25%)
if
((
sentUpTo
-
start
>
bufSize
/
4
)
&&
if
((
(
size_t
)(
sentUpTo
-
start
)
>
bufSize
/
4
)
&&
(
itemSize
<
bufSize
-
(
ptr
-
sentUpTo
)))
{
memmove
(
start
,
sentUpTo
,
ptr
-
sentUpTo
);
ptr
=
start
+
(
ptr
-
sentUpTo
);
...
...
@@ -149,9 +149,10 @@ int FdOutStream::overrun(int itemSize, int nItems)
}
}
// Can we fit all the items asked for?
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
...
...
@@ -166,7 +167,7 @@ int FdOutStream::overrun(int itemSize, int nItems)
// select() and send() returning EINTR.
//
in
t
FdOutStream
::
writeWithTimeout
(
const
void
*
data
,
in
t
length
,
int
timeoutms
)
size_
t
FdOutStream
::
writeWithTimeout
(
const
void
*
data
,
size_
t
length
,
int
timeoutms
)
{
int
n
;
...
...
common/rdr/FdOutStream.h
View file @
e1e94fc4
...
...
@@ -34,7 +34,7 @@ namespace rdr {
public:
FdOutStream
(
int
fd
,
bool
blocking
=
true
,
int
timeoutms
=-
1
,
in
t
bufSize
=
0
);
FdOutStream
(
int
fd
,
bool
blocking
=
true
,
int
timeoutms
=-
1
,
size_
t
bufSize
=
0
);
virtual
~
FdOutStream
();
void
setTimeout
(
int
timeoutms
);
...
...
@@ -42,20 +42,20 @@ namespace rdr {
int
getFd
()
{
return
fd
;
}
void
flush
();
in
t
length
();
size_
t
length
();
int
bufferUsage
();
unsigned
getIdleTime
();
private
:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
);
in
t
writeWithTimeout
(
const
void
*
data
,
in
t
length
,
int
timeoutms
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
);
size_
t
writeWithTimeout
(
const
void
*
data
,
size_
t
length
,
int
timeoutms
);
int
fd
;
bool
blocking
;
int
timeoutms
;
in
t
bufSize
;
in
t
offset
;
size_
t
bufSize
;
size_
t
offset
;
U8
*
start
;
U8
*
sentUpTo
;
struct
timeval
lastWrite
;
...
...
common/rdr/FileInStream.cxx
View file @
e1e94fc4
...
...
@@ -48,7 +48,7 @@ void FileInStream::reset(void) {
ptr
=
end
=
b
;
}
in
t
FileInStream
::
pos
()
size_
t
FileInStream
::
pos
()
{
if
(
!
file
)
throw
Exception
(
"File is not open"
);
...
...
@@ -56,9 +56,9 @@ int FileInStream::pos()
return
ftell
(
file
)
+
ptr
-
b
;
}
in
t
FileInStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
size_
t
FileInStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
if
(
itemSize
>
(
int
)
sizeof
(
b
))
if
(
itemSize
>
sizeof
(
b
))
throw
Exception
(
"FileInStream overrun: max itemSize exceeded"
);
if
(
end
-
ptr
!=
0
)
...
...
@@ -68,7 +68,7 @@ int FileInStream::overrun(int itemSize, int nItems, bool wait)
ptr
=
b
;
while
(
end
<
b
+
itemSize
)
{
while
((
size_t
)
(
end
-
b
)
<
itemSize
)
{
size_t
n
=
fread
((
U8
*
)
end
,
b
+
sizeof
(
b
)
-
end
,
1
,
file
);
if
(
n
==
0
)
{
if
(
ferror
(
file
))
...
...
@@ -80,8 +80,10 @@ int FileInStream::overrun(int itemSize, int nItems, bool wait)
end
+=
b
+
sizeof
(
b
)
-
end
;
}
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
common/rdr/FileInStream.h
View file @
e1e94fc4
...
...
@@ -35,10 +35,10 @@ namespace rdr {
void
reset
(
void
);
in
t
pos
();
size_
t
pos
();
protected:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
=
true
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
=
true
);
private:
U8
b
[
131072
];
...
...
common/rdr/FixedMemOutStream.h
deleted
100644 → 0
View file @
ede6d217
/* 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
* (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.
*/
//
// A FixedMemOutStream writes to a buffer of a fixed length.
//
#ifndef __RDR_FIXEDMEMOUTSTREAM_H__
#define __RDR_FIXEDMEMOUTSTREAM_H__
#include
<rdr/OutStream.h>
#include
<rdr/Exception.h>
namespace
rdr
{
class
FixedMemOutStream
:
public
OutStream
{
public:
FixedMemOutStream
(
void
*
buf
,
int
len
)
{
ptr
=
start
=
(
U8
*
)
buf
;
end
=
start
+
len
;
}
int
length
()
{
return
ptr
-
start
;
}
void
reposition
(
int
pos
)
{
ptr
=
start
+
pos
;
}
const
void
*
data
()
{
return
(
const
void
*
)
start
;
}
private
:
int
overrun
(
int
itemSize
,
int
nItems
)
{
throw
EndOfStream
();
}
U8
*
start
;
};
}
#endif
common/rdr/HexInStream.cxx
View file @
e1e94fc4
...
...
@@ -28,7 +28,7 @@ const int DEFAULT_BUF_LEN = 16384;
static
inline
int
min
(
int
a
,
int
b
)
{
return
a
<
b
?
a
:
b
;}
HexInStream
::
HexInStream
(
InStream
&
is
,
in
t
bufSize_
)
HexInStream
::
HexInStream
(
InStream
&
is
,
size_
t
bufSize_
)
:
bufSize
(
bufSize_
?
bufSize_
:
DEFAULT_BUF_LEN
),
offset
(
0
),
in_stream
(
is
)
{
ptr
=
end
=
start
=
new
U8
[
bufSize
];
...
...
@@ -50,8 +50,8 @@ bool HexInStream::readHexAndShift(char c, int* v) {
return
true
;
}
bool
HexInStream
::
hexStrToBin
(
const
char
*
s
,
char
**
data
,
in
t
*
length
)
{
in
t
l
=
strlen
(
s
);
bool
HexInStream
::
hexStrToBin
(
const
char
*
s
,
char
**
data
,
size_
t
*
length
)
{
size_
t
l
=
strlen
(
s
);
if
((
l
%
2
)
==
0
)
{
delete
[]
*
data
;
*
data
=
0
;
*
length
=
0
;
...
...
@@ -59,7 +59,7 @@ bool HexInStream::hexStrToBin(const char* s, char** data, int* length) {
return
true
;
*
data
=
new
char
[
l
/
2
];
*
length
=
l
/
2
;
for
(
in
t
i
=
0
;
i
<
l
;
i
+=
2
)
{
for
(
size_
t
i
=
0
;
i
<
l
;
i
+=
2
)
{
int
byte
=
0
;
if
(
!
readHexAndShift
(
s
[
i
],
&
byte
)
||
!
readHexAndShift
(
s
[
i
+
1
],
&
byte
))
...
...
@@ -76,11 +76,11 @@ decodeError:
}
in
t
HexInStream
::
pos
()
{
size_
t
HexInStream
::
pos
()
{
return
offset
+
ptr
-
start
;
}
in
t
HexInStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
{
size_
t
HexInStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
if
(
itemSize
>
bufSize
)
throw
Exception
(
"HexInStream overrun: max itemSize exceeded"
);
...
...
@@ -91,15 +91,15 @@ int HexInStream::overrun(int itemSize, int nItems, bool wait) {
offset
+=
ptr
-
start
;
ptr
=
start
;
while
(
end
<
ptr
+
itemSize
)
{
in
t
n
=
in_stream
.
check
(
2
,
1
,
wait
);
while
((
size_t
)
(
end
-
ptr
)
<
itemSize
)
{
size_
t
n
=
in_stream
.
check
(
2
,
1
,
wait
);
if
(
n
==
0
)
return
0
;
const
U8
*
iptr
=
in_stream
.
getptr
();
const
U8
*
eptr
=
in_stream
.
getend
();
in
t
length
=
min
((
eptr
-
iptr
)
/
2
,
start
+
bufSize
-
end
);
size_
t
length
=
min
((
eptr
-
iptr
)
/
2
,
start
+
bufSize
-
end
);
U8
*
optr
=
(
U8
*
)
end
;
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
{
int
v
=
0
;
readHexAndShift
(
iptr
[
i
*
2
],
&
v
);
readHexAndShift
(
iptr
[
i
*
2
+
1
],
&
v
);
...
...
@@ -110,8 +110,10 @@ int HexInStream::overrun(int itemSize, int nItems, bool wait) {
end
+=
length
;
}
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
common/rdr/HexInStream.h
View file @
e1e94fc4
...
...
@@ -26,21 +26,21 @@ namespace rdr {
class
HexInStream
:
public
InStream
{
public:
HexInStream
(
InStream
&
is
,
in
t
bufSize
=
0
);
HexInStream
(
InStream
&
is
,
size_
t
bufSize
=
0
);
virtual
~
HexInStream
();
in
t
pos
();
size_
t
pos
();
static
bool
readHexAndShift
(
char
c
,
int
*
v
);
static
bool
hexStrToBin
(
const
char
*
s
,
char
**
data
,
in
t
*
length
);
static
bool
hexStrToBin
(
const
char
*
s
,
char
**
data
,
size_
t
*
length
);
protected:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
);
private:
in
t
bufSize
;
size_
t
bufSize
;
U8
*
start
;
in
t
offset
;
size_
t
offset
;
InStream
&
in_stream
;
};
...
...
common/rdr/HexOutStream.cxx
View file @
e1e94fc4
...
...
@@ -23,9 +23,9 @@ using namespace rdr;
const
int
DEFAULT_BUF_LEN
=
16384
;
static
inline
in
t
min
(
int
a
,
in
t
b
)
{
return
a
<
b
?
a
:
b
;}
static
inline
size_
t
min
(
size_t
a
,
size_
t
b
)
{
return
a
<
b
?
a
:
b
;}
HexOutStream
::
HexOutStream
(
OutStream
&
os
,
in
t
buflen
)
HexOutStream
::
HexOutStream
(
OutStream
&
os
,
size_
t
buflen
)
:
out_stream
(
os
),
offset
(
0
),
bufSize
(
buflen
?
buflen
:
DEFAULT_BUF_LEN
)
{
if
(
bufSize
%
2
)
...
...
@@ -48,9 +48,9 @@ char HexOutStream::intToHex(int i) {
throw
rdr
::
Exception
(
"intToHex failed"
);
}
char
*
HexOutStream
::
binToHexStr
(
const
char
*
data
,
in
t
length
)
{
char
*
HexOutStream
::
binToHexStr
(
const
char
*
data
,
size_
t
length
)
{
char
*
buffer
=
new
char
[
length
*
2
+
1
];
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
{
buffer
[
i
*
2
]
=
intToHex
((
data
[
i
]
>>
4
)
&
15
);
buffer
[
i
*
2
+
1
]
=
intToHex
((
data
[
i
]
&
15
));
if
(
!
buffer
[
i
*
2
]
||
!
buffer
[
i
*
2
+
1
])
{
...
...
@@ -70,9 +70,9 @@ HexOutStream::writeBuffer() {
out_stream
.
check
(
2
);
U8
*
optr
=
out_stream
.
getptr
();
U8
*
oend
=
out_stream
.
getend
();
in
t
length
=
min
(
ptr
-
pos
,
(
oend
-
optr
)
/
2
);
size_
t
length
=
min
(
ptr
-
pos
,
(
oend
-
optr
)
/
2
);
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
{
optr
[
i
*
2
]
=
intToHex
((
pos
[
i
]
>>
4
)
&
0xf
);
optr
[
i
*
2
+
1
]
=
intToHex
(
pos
[
i
]
&
0xf
);
}
...
...
@@ -84,7 +84,7 @@ HexOutStream::writeBuffer() {
ptr
=
start
;
}
in
t
HexOutStream
::
length
()
size_
t
HexOutStream
::
length
()
{
return
offset
+
ptr
-
start
;
}
...
...
@@ -95,15 +95,17 @@ HexOutStream::flush() {
out_stream
.
flush
();
}
in
t
HexOutStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
)
{
size_
t
HexOutStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
)
{
if
(
itemSize
>
bufSize
)
throw
Exception
(
"HexOutStream overrun: max itemSize exceeded"
);
writeBuffer
();
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
...
...
common/rdr/HexOutStream.h
View file @
e1e94fc4
...
...
@@ -26,24 +26,24 @@ namespace rdr {
class
HexOutStream
:
public
OutStream
{
public:
HexOutStream
(
OutStream
&
os
,
in
t
buflen
=
0
);
HexOutStream
(
OutStream
&
os
,
size_
t
buflen
=
0
);
virtual
~
HexOutStream
();
void
flush
();
in
t
length
();
size_
t
length
();
static
char
intToHex
(
int
i
);
static
char
*
binToHexStr
(
const
char
*
data
,
in
t
length
);
static
char
*
binToHexStr
(
const
char
*
data
,
size_
t
length
);
private:
void
writeBuffer
();
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
);
OutStream
&
out_stream
;
U8
*
start
;
in
t
offset
;
in
t
bufSize
;
size_
t
offset
;
size_
t
bufSize
;
};
}
...
...
common/rdr/InStream.h
View file @
e1e94fc4
...
...
@@ -41,14 +41,17 @@ namespace rdr {
// for the bytes, zero is returned if the bytes are not immediately
// available.
inline
in
t
check
(
in
t
itemSize
,
in
t
nItems
=
1
,
bool
wait
=
true
)
inline
size_
t
check
(
size_
t
itemSize
,
size_
t
nItems
=
1
,
bool
wait
=
true
)
{
if
(
ptr
+
itemSize
*
nItems
>
end
)
{
if
(
ptr
+
itemSize
>
end
)
size_t
nAvail
;
if
(
itemSize
>
(
size_t
)(
end
-
ptr
))
return
overrun
(
itemSize
,
nItems
,
wait
);
nItems
=
(
end
-
ptr
)
/
itemSize
;
}
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
...
...
@@ -56,7 +59,7 @@ namespace rdr {
// be read without blocking. It returns true if this is the case, false
// otherwise. The length must be "small" (less than the buffer size).
inline
bool
checkNoWait
(
in
t
length
)
{
return
check
(
length
,
1
,
false
)
!=
0
;
}
inline
bool
checkNoWait
(
size_
t
length
)
{
return
check
(
length
,
1
,
false
)
!=
0
;
}
// readU/SN() methods read unsigned and signed N-bit integers.
...
...
@@ -82,9 +85,9 @@ namespace rdr {
static
U32
maxStringLength
;
inline
void
skip
(
in
t
bytes
)
{
inline
void
skip
(
size_
t
bytes
)
{
while
(
bytes
>
0
)
{
in
t
n
=
check
(
1
,
bytes
);
size_
t
n
=
check
(
1
,
bytes
);
ptr
+=
n
;
bytes
-=
n
;
}
...
...
@@ -92,14 +95,13 @@ namespace rdr {
// readBytes() reads an exact number of bytes.
void
readBytes
(
void
*
data
,
int
length
)
{
U8
*
dataPtr
=
(
U8
*
)
data
;
U8
*
dataEnd
=
dataPtr
+
length
;
while
(
dataPtr
<
dataEnd
)
{
int
n
=
check
(
1
,
dataEnd
-
dataPtr
);
memcpy
(
dataPtr
,
ptr
,
n
);
void
readBytes
(
void
*
data
,
size_t
length
)
{
while
(
length
>
0
)
{
size_t
n
=
check
(
1
,
length
);
memcpy
(
data
,
ptr
,
n
);
ptr
+=
n
;
dataPtr
+=
n
;
data
=
(
U8
*
)
data
+
n
;
length
-=
n
;
}
}
...
...
@@ -114,7 +116,7 @@ namespace rdr {
// pos() returns the position in the stream.
virtual
in
t
pos
()
=
0
;
virtual
size_
t
pos
()
=
0
;
// getptr(), getend() and setptr() are "dirty" methods which allow you to
// manipulate the buffer directly. This is useful for a stream which is a
...
...
@@ -133,7 +135,7 @@ namespace rdr {
// instead of blocking to wait for the bytes, zero is returned if the bytes
// are not immediately available.
virtual
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
=
true
)
=
0
;
virtual
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
=
true
)
=
0
;
protected
:
...
...
common/rdr/MemInStream.h
View file @
e1e94fc4
...
...
@@ -36,7 +36,7 @@ namespace rdr {
public:
MemInStream
(
const
void
*
data
,
in
t
len
,
bool
deleteWhenDone_
=
false
)
MemInStream
(
const
void
*
data
,
size_
t
len
,
bool
deleteWhenDone_
=
false
)
:
start
((
const
U8
*
)
data
),
deleteWhenDone
(
deleteWhenDone_
)
{
ptr
=
start
;
...
...
@@ -48,12 +48,12 @@ namespace rdr {
delete
[]
start
;
}
in
t
pos
()
{
return
ptr
-
start
;
}
void
reposition
(
in
t
pos
)
{
ptr
=
start
+
pos
;
}
size_
t
pos
()
{
return
ptr
-
start
;
}
void
reposition
(
size_
t
pos
)
{
ptr
=
start
+
pos
;
}
private
:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
{
throw
EndOfStream
();
}
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
throw
EndOfStream
();
}
const
U8
*
start
;
bool
deleteWhenDone
;
};
...
...
common/rdr/MemOutStream.h
View file @
e1e94fc4
...
...
@@ -23,6 +23,7 @@
#ifndef __RDR_MEMOUTSTREAM_H__
#define __RDR_MEMOUTSTREAM_H__
#include
<rdr/Exception.h>
#include
<rdr/OutStream.h>
namespace
rdr
{
...
...
@@ -40,16 +41,16 @@ namespace rdr {
delete
[]
start
;
}
void
writeBytes
(
const
void
*
data
,
in
t
length
)
{
void
writeBytes
(
const
void
*
data
,
size_
t
length
)
{
check
(
length
);
memcpy
(
ptr
,
data
,
length
);
ptr
+=
length
;
}
in
t
length
()
{
return
ptr
-
start
;
}
size_
t
length
()
{
return
ptr
-
start
;
}
void
clear
()
{
ptr
=
start
;
};
void
clearAndZero
()
{
memset
(
start
,
0
,
ptr
-
start
);
clear
();
}
void
reposition
(
in
t
pos
)
{
ptr
=
start
+
pos
;
}
void
reposition
(
size_
t
pos
)
{
ptr
=
start
+
pos
;
}
// data() returns a pointer to the buffer.
...
...
@@ -60,11 +61,14 @@ namespace rdr {
// overrun() either doubles the buffer or adds enough space for nItems of
// size itemSize bytes.
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
)
{
in
t
len
=
ptr
-
start
+
itemSize
*
nItems
;
if
(
len
<
(
end
-
start
)
*
2
)
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
)
{
size_
t
len
=
ptr
-
start
+
itemSize
*
nItems
;
if
(
len
<
(
size_t
)
(
end
-
start
)
*
2
)
len
=
(
end
-
start
)
*
2
;
if
(
len
<
(
size_t
)(
end
-
start
))
throw
Exception
(
"Overflow in MemOutStream::overrun()"
);
U8
*
newStart
=
new
U8
[
len
];
memcpy
(
newStart
,
start
,
ptr
-
start
);
ptr
=
newStart
+
(
ptr
-
start
);
...
...
common/rdr/OutStream.h
View file @
e1e94fc4
...
...
@@ -44,14 +44,17 @@ namespace rdr {
// itemSize bytes. Returns the number of items which fit (up to a maximum
// of nItems).
inline
in
t
check
(
in
t
itemSize
,
in
t
nItems
=
1
)
inline
size_
t
check
(
size_
t
itemSize
,
size_
t
nItems
=
1
)
{
if
(
ptr
+
itemSize
*
nItems
>
end
)
{
if
(
ptr
+
itemSize
>
end
)
size_t
nAvail
;
if
(
itemSize
>
(
size_t
)(
end
-
ptr
))
return
overrun
(
itemSize
,
nItems
);
nItems
=
(
end
-
ptr
)
/
itemSize
;
}
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
...
...
@@ -76,13 +79,13 @@ namespace rdr {
writeBytes
(
str
,
len
);
}
inline
void
pad
(
in
t
bytes
)
{
inline
void
pad
(
size_
t
bytes
)
{
while
(
bytes
--
>
0
)
writeU8
(
0
);
}
inline
void
skip
(
in
t
bytes
)
{
inline
void
skip
(
size_
t
bytes
)
{
while
(
bytes
>
0
)
{
in
t
n
=
check
(
1
,
bytes
);
size_
t
n
=
check
(
1
,
bytes
);
ptr
+=
n
;
bytes
-=
n
;
}
...
...
@@ -90,22 +93,21 @@ namespace rdr {
// writeBytes() writes an exact number of bytes.
void
writeBytes
(
const
void
*
data
,
int
length
)
{
const
U8
*
dataPtr
=
(
const
U8
*
)
data
;
const
U8
*
dataEnd
=
dataPtr
+
length
;
while
(
dataPtr
<
dataEnd
)
{
int
n
=
check
(
1
,
dataEnd
-
dataPtr
);
memcpy
(
ptr
,
dataPtr
,
n
);
void
writeBytes
(
const
void
*
data
,
size_t
length
)
{
while
(
length
>
0
)
{
size_t
n
=
check
(
1
,
length
);
memcpy
(
ptr
,
data
,
n
);
ptr
+=
n
;
dataPtr
+=
n
;
data
=
(
U8
*
)
data
+
n
;
length
-=
n
;
}
}
// copyBytes() efficiently transfers data between streams
void
copyBytes
(
InStream
*
is
,
in
t
length
)
{
void
copyBytes
(
InStream
*
is
,
size_
t
length
)
{
while
(
length
>
0
)
{
in
t
n
=
check
(
1
,
length
);
size_
t
n
=
check
(
1
,
length
);
is
->
readBytes
(
ptr
,
n
);
ptr
+=
n
;
length
-=
n
;
...
...
@@ -124,7 +126,7 @@ namespace rdr {
// length() returns the length of the stream.
virtual
in
t
length
()
=
0
;
virtual
size_
t
length
()
=
0
;
// flush() requests that the stream be flushed.
...
...
@@ -145,7 +147,7 @@ namespace rdr {
// the number of items which fit (up to a maximum of nItems). itemSize is
// supposed to be "small" (a few bytes).
virtual
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
)
=
0
;
virtual
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
)
=
0
;
protected
:
...
...
common/rdr/RandomStream.cxx
View file @
e1e94fc4
...
...
@@ -35,7 +35,7 @@ static rfb::LogWriter vlog("RandomStream");
using
namespace
rdr
;
const
in
t
DEFAULT_BUF_LEN
=
256
;
const
size_
t
DEFAULT_BUF_LEN
=
256
;
unsigned
int
RandomStream
::
seed
;
...
...
@@ -86,11 +86,11 @@ RandomStream::~RandomStream() {
#endif
}
in
t
RandomStream
::
pos
()
{
size_
t
RandomStream
::
pos
()
{
return
offset
+
ptr
-
start
;
}
in
t
RandomStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
{
size_
t
RandomStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
if
(
itemSize
>
DEFAULT_BUF_LEN
)
throw
Exception
(
"RandomStream overrun: max itemSize exceeded"
);
...
...
@@ -101,7 +101,7 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
offset
+=
ptr
-
start
;
ptr
=
start
;
in
t
length
=
start
+
DEFAULT_BUF_LEN
-
end
;
size_
t
length
=
start
+
DEFAULT_BUF_LEN
-
end
;
#ifdef RFB_HAVE_WINCRYPT
if
(
provider
)
{
...
...
@@ -112,7 +112,7 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
#else
#ifndef WIN32
if
(
fp
)
{
in
t
n
=
fread
((
U8
*
)
end
,
length
,
1
,
fp
);
size_
t
n
=
fread
((
U8
*
)
end
,
length
,
1
,
fp
);
if
(
n
!=
1
)
throw
rdr
::
SystemException
(
"reading /dev/urandom or /dev/random failed"
,
errno
);
...
...
@@ -122,12 +122,14 @@ int RandomStream::overrun(int itemSize, int nItems, bool wait) {
{
#endif
#endif
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
*
(
U8
*
)
end
++
=
(
int
)
(
256.0
*
rand
()
/
(
RAND_MAX
+
1.0
));
}
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
common/rdr/RandomStream.h
View file @
e1e94fc4
...
...
@@ -39,14 +39,14 @@ namespace rdr {
RandomStream
();
virtual
~
RandomStream
();
in
t
pos
();
size_
t
pos
();
protected:
in
t
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
);
size_
t
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
);
private:
U8
*
start
;
in
t
offset
;
size_
t
offset
;
static
unsigned
int
seed
;
#ifdef RFB_HAVE_WINCRYPT
...
...
common/rdr/TLSInStream.cxx
View file @
e1e94fc4
...
...
@@ -43,7 +43,7 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr_t str, void* data, size_t size)
return
-
1
;
}
if
(
in
->
getend
()
-
in
->
getptr
()
<
(
ptrdiff_t
)
size
)
if
((
size_t
)
(
in
->
getend
()
-
in
->
getptr
()
)
<
size
)
size
=
in
->
getend
()
-
in
->
getptr
();
in
->
readBytes
(
data
,
size
);
...
...
@@ -75,12 +75,12 @@ TLSInStream::~TLSInStream()
delete
[]
start
;
}
in
t
TLSInStream
::
pos
()
size_
t
TLSInStream
::
pos
()
{
return
offset
+
ptr
-
start
;
}
in
t
TLSInStream
::
overrun
(
in
t
itemSize
,
in
t
nItems
,
bool
wait
)
size_
t
TLSInStream
::
overrun
(
size_
t
itemSize
,
size_
t
nItems
,
bool
wait
)
{
if
(
itemSize
>
bufSize
)
throw
Exception
(
"TLSInStream overrun: max itemSize exceeded"
);
...
...
@@ -92,20 +92,22 @@ int TLSInStream::overrun(int itemSize, int nItems, bool wait)
end
-=
ptr
-
start
;
ptr
=
start
;
while
(
end
<
start
+
itemSize
)
{
in
t
n
=
readTLS
((
U8
*
)
end
,
start
+
bufSize
-
end
,
wait
);
while
((
size_t
)
(
end
-
start
)
<
itemSize
)
{
size_
t
n
=
readTLS
((
U8
*
)
end
,
start
+
bufSize
-
end
,
wait
);
if
(
!
wait
&&
n
==
0
)
return
0
;
end
+=
n
;
}
if
(
itemSize
*
nItems
>
end
-
ptr
)
nItems
=
(
end
-
ptr
)
/
itemSize
;
size_t
nAvail
;
nAvail
=
(
end
-
ptr
)
/
itemSize
;
if
(
nAvail
<
nItems
)
return
nAvail
;
return
nItems
;
}
in
t
TLSInStream
::
readTLS
(
U8
*
buf
,
in
t
len
,
bool
wait
)
size_
t
TLSInStream
::
readTLS
(
U8
*
buf
,
size_
t
len
,
bool
wait
)
{
int
n
;
...
...
Prev
1
2
3
Next