Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
92239daf
Commit
92239daf
authored
Nov 13, 2011
by
Reinhard Tartler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Imported nxcomp-3.2.0-6.tar.gz
Summary: Imported nxcomp-3.2.0-6.tar.gz Keywords: Imported nxcomp-3.2.0-6.tar.gz into Git repository
parent
d7a8d67d
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
355 additions
and
86 deletions
+355
-86
Auth.cpp
nxcomp/Auth.cpp
+8
-0
Auth.h
nxcomp/Auth.h
+7
-0
CHANGELOG
nxcomp/CHANGELOG
+32
-2
Children.cpp
nxcomp/Children.cpp
+69
-0
ClientChannel.cpp
nxcomp/ClientChannel.cpp
+12
-2
Control.cpp
nxcomp/Control.cpp
+40
-21
Control.h
nxcomp/Control.h
+6
-0
Loop.cpp
nxcomp/Loop.cpp
+156
-3
ServerChannel.cpp
nxcomp/ServerChannel.cpp
+12
-2
Statistics.cpp
nxcomp/Statistics.cpp
+2
-2
Timestamp.h
nxcomp/Timestamp.h
+10
-53
VERSION
nxcomp/VERSION
+1
-1
No files found.
nxcomp/Auth.cpp
View file @
92239daf
...
...
@@ -55,6 +55,8 @@ Auth::Auth(char *display, char *cookie)
dataSize_
=
0
;
generatedCookie_
=
0
;
if
(
display
==
NULL
||
*
display
==
'\0'
||
cookie
==
NULL
||
*
cookie
==
'\0'
||
strlen
(
cookie
)
!=
32
)
{
...
...
@@ -316,16 +318,20 @@ int Auth::getCookie()
<<
"auth command.
\n
"
<<
logofs_flush
;
#endif
#ifdef TEST
cerr
<<
"Warning"
<<
": Failed to read data from the X "
<<
"auth command.
\n
"
;
#endif
#ifdef PANIC
*
logofs
<<
"Auth: WARNING! Generating a fake cookie for "
<<
"X authentication.
\n
"
<<
logofs_flush
;
#endif
#ifdef TEST
cerr
<<
"Warning"
<<
": Generating a fake cookie for "
<<
"X authentication.
\n
"
;
#endif
generateCookie
(
realCookie_
);
}
...
...
@@ -621,6 +627,8 @@ void Auth::generateCookie(char *cookie)
data
>>=
8
;
}
generatedCookie_
=
1
;
#ifdef TEST
*
logofs
<<
"Auth: Generated X cookie string '"
<<
cookie
<<
"'.
\n
"
<<
logofs_flush
;
...
...
nxcomp/Auth.h
View file @
92239daf
...
...
@@ -52,6 +52,11 @@ class Auth
realData_
!=
NULL
&&
dataSize_
!=
0
);
}
int
isFake
()
const
{
return
generatedCookie_
;
}
//
// Method called in the channel class to find if the
// provided cookie matches the fake one. If the data
...
...
@@ -107,6 +112,8 @@ class Auth
char
*
realData_
;
int
dataSize_
;
int
generatedCookie_
;
};
#endif
/* Auth_H */
nxcomp/CHANGELOG
View file @
92239daf
ChangeLog
:
nxcomp
-
3.2.0
-
6
-
Changes
considering
that
unsetenv
()
returns
void
on
Mac
OS
X
.
nxcomp
-
3.2.0
-
5
-
Fixed
TR03F02024
.
Assume
the
launchd
unix
socket
as
X
socket
.
-
Changed
the
authorization
cookie
retrieval
when
using
the
launchd
socket
on
MacOSX
,
in
order
to
wait
for
the
X
server
start
.
nxcomp
-
3.2.0
-
4
-
Fixed
TR03F02026
.
Unset
environment
variable
LD_LIBRARY_PATH
before
calling
the
exec
function
running
nxclient
.
nxcomp
-
3.2.0
-
3
-
Fix
addMsTimestamp
()
and
subMsTimestamp
().
Remove
the
check
for
a
valid
input
in
diffTimestamp
()
and
diffUsTimestamp
().
nxcomp
-
3.2.0
-
2
-
Fixed
TR12E01973
.
Now
the
correct
number
of
bits
are
used
for
the
number
of
points
in
a
X_FillPoly
request
.
nxcomp
-
3.2.0
-
1
-
Opened
the
3.2.0
branch
based
on
nxcomp
-
3.1.0
-
6.
nxcomp
-
3.1.0
-
6
-
Always
use
a
timeout
of
50
ms
to
update
the
congestion
counter
.
...
...
@@ -36,7 +66,7 @@ nxcomp-3.1.0-2
nxcomp-3.1.0-1
- Opened the 3.
0.1
branch based on nxcomp-3.0.0-46.
- Opened the 3.
1.0
branch based on nxcomp-3.0.0-46.
nxcomp-3.0.0-46
...
...
@@ -325,7 +355,7 @@ nxcomp-3.0.0-15
- Removed the pending_ flag from the proxy and channel class mem-
bers. If needed, the classes will query the transport buffers
to see whether there is data pending.
B
to see whether there is data pending.
- Removed the additional parameter from NXTransFlush().
...
...
nxcomp/Children.cpp
View file @
92239daf
...
...
@@ -71,6 +71,10 @@ extern char *GetClientPath();
extern
int
CheckParent
(
char
*
name
,
char
*
type
,
int
parent
);
#ifdef __sun
extern
char
**
environ
;
#endif
//
// Close all the unused descriptors and
// install any signal handler that might
...
...
@@ -86,6 +90,12 @@ static void SystemCleanup(char *name);
static
void
MemoryCleanup
(
char
*
name
);
//
// Remove 'name' from the environment.
//
static
int
UnsetEnv
(
char
*
name
);
//
// Start a nxclient process in dialog mode.
//
...
...
@@ -187,6 +197,8 @@ int NXTransDialog(const char *caption, const char *message,
parent
[
DEFAULT_STRING_LIMIT
-
1
]
=
'\0'
;
UnsetEnv
(
"LD_LIBRARY_PATH"
);
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
if
(
local
!=
0
)
...
...
@@ -409,6 +421,8 @@ int NXTransClient(const char* display)
#endif
UnsetEnv
(
"LD_LIBRARY_PATH"
);
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
execlp
(
command
,
command
,
NULL
);
...
...
@@ -962,3 +976,58 @@ void MemoryCleanup(char *name)
EnableSignals
();
}
int
UnsetEnv
(
char
*
name
)
{
int
result
;
#ifdef __sun
char
**
pEnv
=
environ
;
int
nameLen
=
strlen
(
name
)
+
1
;
char
*
varName
=
new
char
[
nameLen
+
1
];
strcpy
(
varName
,
name
);
strcat
(
varName
,
"="
);
pEnv
=
environ
;
while
(
*
pEnv
!=
NULL
)
{
if
(
!
strncmp
(
varName
,
*
pEnv
,
nameLen
))
{
break
;
}
*
pEnv
++
;
}
while
(
*
pEnv
!=
NULL
)
{
*
pEnv
=
*
(
pEnv
+
1
);
pEnv
++
;
}
result
=
0
;
#else
#ifdef __APPLE__
unsetenv
(
name
);
result
=
0
;
#else
result
=
unsetenv
(
name
);
#endif
#endif
return
result
;
}
nxcomp/ClientChannel.cpp
View file @
92239daf
...
...
@@ -1139,8 +1139,18 @@ int ClientChannel::handleRead(EncodeBuffer &encodeBuffer, const unsigned char *m
}
unsigned
int
numPoints
=
((
inputLength
-
16
)
>>
2
);
encodeBuffer
.
encodeCachedValue
(
numPoints
,
14
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
if
(
control
->
isProtoStep10
()
==
1
)
{
encodeBuffer
.
encodeCachedValue
(
numPoints
,
16
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
}
else
{
encodeBuffer
.
encodeCachedValue
(
numPoints
,
14
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
}
encodeBuffer
.
encodeXidValue
(
GetULONG
(
inputMessage
+
4
,
bigEndian_
),
clientCache_
->
drawableCache
);
encodeBuffer
.
encodeXidValue
(
GetULONG
(
inputMessage
+
8
,
bigEndian_
),
...
...
nxcomp/Control.cpp
View file @
92239daf
...
...
@@ -659,10 +659,11 @@ Control::Control()
// time the session is negotiated.
//
protoStep6_
=
0
;
protoStep7_
=
0
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep6_
=
0
;
protoStep7_
=
0
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep10_
=
0
;
}
Control
::~
Control
()
...
...
@@ -734,37 +735,51 @@ void Control::setProtoStep(int step)
{
case
6
:
{
protoStep6_
=
1
;
protoStep7_
=
0
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep6_
=
1
;
protoStep7_
=
0
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep10_
=
0
;
break
;
}
case
7
:
{
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
0
;
protoStep9_
=
0
;
protoStep10_
=
0
;
break
;
}
case
8
:
{
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
1
;
protoStep9_
=
0
;
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
1
;
protoStep9_
=
0
;
protoStep10_
=
0
;
break
;
}
case
9
:
{
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
1
;
protoStep9_
=
1
;
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
1
;
protoStep9_
=
1
;
protoStep10_
=
0
;
break
;
}
case
10
:
{
protoStep6_
=
1
;
protoStep7_
=
1
;
protoStep8_
=
1
;
protoStep9_
=
1
;
protoStep10_
=
1
;
break
;
}
...
...
@@ -783,7 +798,11 @@ void Control::setProtoStep(int step)
int
Control
::
getProtoStep
()
{
if
(
protoStep9_
==
1
)
if
(
protoStep10_
==
1
)
{
return
10
;
}
else
if
(
protoStep9_
==
1
)
{
return
9
;
}
...
...
nxcomp/Control.h
View file @
92239daf
...
...
@@ -719,6 +719,11 @@ class Control
return
protoStep9_
;
}
int
isProtoStep10
()
{
return
protoStep10_
;
}
private
:
//
...
...
@@ -736,6 +741,7 @@ class Control
int
protoStep7_
;
int
protoStep8_
;
int
protoStep9_
;
int
protoStep10_
;
};
#endif
/* Control_H */
nxcomp/Loop.cpp
View file @
92239daf
...
...
@@ -888,6 +888,13 @@ static int useSlaveSocket = 0;
static
int
useAgentSocket
=
0
;
//
// Set if the launchd service is running
// and its socket must be used as X socket.
//
static
int
useLaunchdSocket
=
0
;
//
// Set by user if he/she wants to modify
// the default TCP_NODELAY option as set
// in control.
...
...
@@ -3745,7 +3752,90 @@ int SetupAuthInstance()
{
if
(
authCookie
!=
NULL
&&
*
authCookie
!=
'\0'
)
{
auth
=
new
Auth
(
displayHost
,
authCookie
);
if
(
useLaunchdSocket
==
1
)
{
//
// If we are going to retrieve the X11 autho-
// rization through the launchd service, make
// a connection to its socket to trigger the
// X server starting.
//
sockaddr_un
launchdAddrUnix
;
unsigned
int
launchdAddrLength
=
sizeof
(
sockaddr_un
);
int
launchdAddrFamily
=
AF_UNIX
;
launchdAddrUnix
.
sun_family
=
AF_UNIX
;
const
int
launchdAddrNameLength
=
108
;
int
success
=
-
1
;
strncpy
(
launchdAddrUnix
.
sun_path
,
displayHost
,
launchdAddrNameLength
);
*
(
launchdAddrUnix
.
sun_path
+
launchdAddrNameLength
-
1
)
=
'\0'
;
#ifdef TEST
*
logofs
<<
"Loop: Connecting to launchd service "
<<
"on Unix port '"
<<
displayHost
<<
"'.
\n
"
<<
logofs_flush
;
#endif
int
launchdFd
=
socket
(
launchdAddrFamily
,
SOCK_STREAM
,
PF_UNSPEC
);
if
(
launchdFd
<
0
)
{
#ifdef PANIC
*
logofs
<<
"Loop: PANIC! Call to socket failed. "
<<
"Error is "
<<
EGET
()
<<
" '"
<<
ESTR
()
<<
"'.
\n
"
<<
logofs_flush
;
#endif
}
else
if
((
success
=
connect
(
launchdFd
,
(
sockaddr
*
)
&
launchdAddrUnix
,
launchdAddrLength
))
<
0
)
{
#ifdef WARNING
*
logofs
<<
"Loop: WARNING! Connection to launchd service "
<<
"on Unix port '"
<<
displayHost
<<
"' failed "
<<
"with error "
<<
EGET
()
<<
", '"
<<
ESTR
()
<<
"'.
\n
"
<<
logofs_flush
;
#endif
}
if
(
launchdFd
>=
0
)
{
close
(
launchdFd
);
}
//
// The real cookie will not be available
// until the X server starts. Query for the
// cookie in a loop, unless the connection
// to the launchd service failed.
//
int
attempts
=
(
success
<
0
?
1
:
10
);
for
(
int
i
=
0
;
i
<
attempts
;
i
++
)
{
delete
auth
;
auth
=
new
Auth
(
displayHost
,
authCookie
);
if
(
auth
!=
NULL
&&
auth
->
isFake
()
==
1
)
{
usleep
(
200000
);
continue
;
}
break
;
}
}
else
{
auth
=
new
Auth
(
displayHost
,
authCookie
);
}
if
(
auth
==
NULL
||
auth
->
isValid
()
!=
1
)
{
...
...
@@ -3758,6 +3848,20 @@ int SetupAuthInstance()
HandleCleanup
();
}
else
if
(
auth
->
isFake
()
==
1
)
{
#ifdef WARNING
*
logofs
<<
"Loop: WARNING! Could not retrieve the X server "
<<
"authentication cookie.
\n
"
<<
logofs_flush
;
#endif
cerr
<<
"Warning"
<<
": Failed to read data from the X "
<<
"auth command.
\n
"
;
cerr
<<
"Warning"
<<
": Generated a fake cookie for X "
<<
"authentication.
\n
"
;
}
}
else
{
...
...
@@ -4068,6 +4172,20 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
strcpy
(
display
,
displayHost
);
#ifdef __APPLE__
if
(
strncasecmp
(
display
,
"/tmp/launch"
,
11
)
==
0
)
{
#ifdef TEST
*
logofs
<<
"Loop: Using launchd service on socket '"
<<
display
<<
"'.
\n
"
<<
logofs_flush
;
#endif
useLaunchdSocket
=
1
;
}
#endif
char
*
separator
=
rindex
(
display
,
':'
);
if
((
separator
==
NULL
)
||
!
isdigit
(
*
(
separator
+
1
)))
...
...
@@ -4092,7 +4210,16 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
<<
xPort
<<
"'.
\n
"
<<
logofs_flush
;
#endif
#ifdef __APPLE__
if
(
separator
==
display
||
strcmp
(
display
,
"unix"
)
==
0
||
useLaunchdSocket
==
1
)
#else
if
(
separator
==
display
||
strcmp
(
display
,
"unix"
)
==
0
)
#endif
{
//
// UNIX domain port.
...
...
@@ -4129,6 +4256,15 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
snprintf
(
unixSocketDir
,
DEFAULT_STRING_LENGTH
-
1
,
"%s/.X11-unix"
,
control
->
TempPath
);
#ifdef __APPLE__
if
(
useLaunchdSocket
==
1
)
{
snprintf
(
unixSocketDir
,
DEFAULT_STRING_LENGTH
-
1
,
"%s"
,
display
);
}
#endif
*
(
unixSocketDir
+
DEFAULT_STRING_LENGTH
-
1
)
=
'\0'
;
#ifdef TEST
...
...
@@ -4160,6 +4296,15 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
sprintf
(
unixSocketName
,
"%s/X%d"
,
unixSocketDir
,
xPort
);
#ifdef __APPLE__
if
(
useLaunchdSocket
==
1
)
{
sprintf
(
unixSocketName
,
"%s:%d"
,
unixSocketDir
,
xPort
);
}
#endif
#ifdef TEST
*
logofs
<<
"Loop: Assuming X socket name '"
<<
unixSocketName
<<
"'.
\n
"
<<
logofs_flush
;
...
...
@@ -12345,9 +12490,13 @@ int SetVersion()
{
step
=
7
;
}
else
if
(
major
>
=
3
)
else
if
(
major
=
=
3
)
{
if
(
minor
>
0
||
patch
>
0
)
if
(
minor
>=
2
)
{
step
=
10
;
}
else
if
(
minor
>
0
||
patch
>
0
)
{
step
=
9
;
}
...
...
@@ -12356,6 +12505,10 @@ int SetVersion()
step
=
8
;
}
}
else
if
(
major
>
3
)
{
step
=
10
;
}
if
(
step
==
0
)
{
...
...
nxcomp/ServerChannel.cpp
View file @
92239daf
...
...
@@ -2753,8 +2753,18 @@ int ServerChannel::handleWrite(const unsigned char *message, unsigned int length
}
unsigned
int
numPoints
;
decodeBuffer
.
decodeCachedValue
(
numPoints
,
14
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
if
(
control
->
isProtoStep10
()
==
1
)
{
decodeBuffer
.
decodeCachedValue
(
numPoints
,
16
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
}
else
{
decodeBuffer
.
decodeCachedValue
(
numPoints
,
14
,
clientCache_
->
fillPolyNumPointsCache
,
4
);
}
outputLength
=
16
+
(
numPoints
<<
2
);
outputMessage
=
writeBuffer_
.
addMessage
(
outputLength
);
decodeBuffer
.
decodeXidValue
(
value
,
clientCache_
->
drawableCache
);
...
...
nxcomp/Statistics.cpp
View file @
92239daf
...
...
@@ -410,14 +410,14 @@ void Statistics::updateBitrate(int bytes)
if
(
diffStartInMs
>
control
->
ShortBitrateTimeFrame
)
{
addMsT
oT
imestamp
(
startShortFrameTs_
,
diffStartInMs
);
addMsTimestamp
(
startShortFrameTs_
,
diffStartInMs
);
}
diffStartInMs
=
diffTimestamp
(
thisFrameTs
,
startLongFrameTs_
);
if
(
diffStartInMs
>
control
->
LongBitrateTimeFrame
)
{
addMsT
oT
imestamp
(
startLongFrameTs_
,
diffStartInMs
);
addMsTimestamp
(
startLongFrameTs_
,
diffStartInMs
);
}
startFrameTs_
=
thisFrameTs
;
...
...
nxcomp/Timestamp.h
View file @
92239daf
...
...
@@ -87,20 +87,13 @@ inline T_timestamp getTimestamp(long ms)
inline
long
diffTimestamp
(
const
T_timestamp
&
ts1
,
const
T_timestamp
&
ts2
)
{
if
(
ts1
.
tv_sec
==
0
&&
ts1
.
tv_usec
==
0
)
{
return
-
1
;
}
//
// Add 500 microseconds to round up
// to the nearest millisecond.
//
long
ms
=
((
ts2
.
tv_sec
*
1000
+
(
ts2
.
tv_usec
+
500
)
/
1000
)
-
(
ts1
.
tv_sec
*
1000
+
(
ts1
.
tv_usec
+
500
)
/
1000
));
return
(
ms
<
0
?
-
1
:
ms
);
return
((
ts2
.
tv_sec
*
1000
+
(
ts2
.
tv_usec
+
500
)
/
1000
)
-
(
ts1
.
tv_sec
*
1000
+
(
ts1
.
tv_usec
+
500
)
/
1000
));
}
//
...
...
@@ -110,20 +103,8 @@ inline long diffTimestamp(const T_timestamp &ts1, const T_timestamp &ts2)
inline
long
diffUsTimestamp
(
const
T_timestamp
&
ts1
,
const
T_timestamp
&
ts2
)
{
if
(
ts1
.
tv_sec
==
0
&&
ts1
.
tv_usec
==
0
)
{
return
-
1
;
}
//
// Add 500 microseconds to round up
// to the nearest millisecond.
//
long
ms
=
((
ts2
.
tv_sec
*
1000000
+
ts2
.
tv_usec
)
-
(
ts1
.
tv_sec
*
1000000
+
ts1
.
tv_usec
));
return
(
ms
<
0
?
-
1
:
ms
);
return
((
ts2
.
tv_sec
*
1000000
+
ts2
.
tv_usec
)
-
(
ts1
.
tv_sec
*
1000000
+
ts1
.
tv_usec
));
}
//
...
...
@@ -234,40 +215,16 @@ inline bool isTimestamp(const T_timestamp &ts)
return
1
;
}
inline
void
subMsT
oT
imestamp
(
T_timestamp
&
ts
,
long
ms
)
inline
void
subMsTimestamp
(
T_timestamp
&
ts
,
long
ms
)
{
long
sec
=
ms
/
1000
;
ts
.
tv_sec
-=
sec
;
long
mod
=
ms
%
(
ms
*
1000
);
if
(
ts
.
tv_usec
>=
(
mod
*
1000
))
{
ts
.
tv_sec
-=
mod
*
1000
;
}
else
{
ts
.
tv_sec
--
;
ts
.
tv_usec
=
1000000
-
mod
*
1000
;
}
ts
.
tv_sec
-=
ms
/
1000
;
ts
.
tv_usec
-=
(
ms
%
1000
)
*
1000
;
}
inline
void
addMsT
oT
imestamp
(
T_timestamp
&
ts
,
long
ms
)
inline
void
addMsTimestamp
(
T_timestamp
&
ts
,
long
ms
)
{
long
sec
=
ms
/
1000
;
ts
.
tv_sec
+=
sec
;
long
mod
=
ms
%
(
ms
*
1000
);
ts
.
tv_usec
+=
mod
*
1000
;
if
(
ts
.
tv_usec
>
1000000
)
{
ts
.
tv_sec
+=
1
;
}
ts
.
tv_sec
+=
ms
/
1000
;
ts
.
tv_usec
+=
(
ms
%
1000
)
*
1000
;
}
//
...
...
nxcomp/VERSION
View file @
92239daf
3.
1
.0
3.
2
.0
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment