Repository: stweil/OSXvnc
Branch: main
Commit: 4c8eb1d11967
Files: 280
Total size: 2.2 MB
Directory structure:
gitextract_7q6g2gu1/
├── .github/
│ └── workflows/
│ └── dco.yml
├── .gitignore
├── .gitmodules
├── .travis.yml
├── Base.lproj/
│ └── MainMenu.xib
├── Bundles/
│ ├── Echoware/
│ │ ├── ACConnection.cpp
│ │ ├── ACConnection.h
│ │ ├── AES.cpp
│ │ ├── AES.h
│ │ ├── APISocket/
│ │ │ ├── APISocket.h
│ │ │ ├── ClientSocket.cpp
│ │ │ ├── ServerSocket.cpp
│ │ │ └── Socket.cpp
│ │ ├── CritSection.cpp
│ │ ├── CritSection.h
│ │ ├── DataChannel.cpp
│ │ ├── DataChannel.h
│ │ ├── DataChannelSocket.cpp
│ │ ├── DataChannelSocket.h
│ │ ├── DataChannel_timer.cpp
│ │ ├── DataChannels.cpp
│ │ ├── DataChannels.h
│ │ ├── DirService.cpp
│ │ ├── DirService.h
│ │ ├── DllProxyInfo.cpp
│ │ ├── DllProxyInfo.h
│ │ ├── EchoController.h
│ │ ├── EchoController.m
│ │ ├── EchoSrvDataChannel.cpp
│ │ ├── EchoSrvDataChannel.h
│ │ ├── EchoToOSX.cpp
│ │ ├── EchoToOSX.h
│ │ ├── Echoware.cpp
│ │ ├── Echoware.dsp
│ │ ├── Echoware.dsw
│ │ ├── Echoware.h
│ │ ├── Echoware.sln
│ │ ├── Echoware.suo
│ │ ├── Echoware.vcproj
│ │ ├── Echoware.xcodeproj/
│ │ │ ├── admin.mode1
│ │ │ ├── admin.pbxuser
│ │ │ └── project.pbxproj
│ │ ├── Echoware_Prefix.pch
│ │ ├── English.lproj/
│ │ │ ├── EchoServers.nib/
│ │ │ │ ├── classes.nib
│ │ │ │ ├── info.nib
│ │ │ │ └── keyedobjects.nib
│ │ │ └── InfoPlist.strings
│ │ ├── Globals.cpp
│ │ ├── Globals.h
│ │ ├── Info.plist
│ │ ├── InterfaceDllProxyInfo.h
│ │ ├── LICENSE.txt
│ │ ├── LocalDataChannel.cpp
│ │ ├── LocalDataChannel.h
│ │ ├── LocalListener.cpp
│ │ ├── LocalListener.h
│ │ ├── LocalProxyConnection.cpp
│ │ ├── LocalProxyConnection.h
│ │ ├── Logger.cpp
│ │ ├── Logger.h
│ │ ├── MyDllProxyInfo.cpp
│ │ ├── MyDllProxyInfo.h
│ │ ├── NetPacket.h
│ │ ├── OpenSSL/
│ │ │ ├── LibeaySt.dsp
│ │ │ ├── LibeaySt.vcproj
│ │ │ ├── aes.h
│ │ │ ├── aes_core.c
│ │ │ ├── aes_locl.h
│ │ │ ├── e_os2.h
│ │ │ └── opensslconf.h
│ │ ├── ProxiesManager.cpp
│ │ ├── ProxiesManager.h
│ │ ├── ProxyConnect/
│ │ │ ├── ProxyConnect.cpp
│ │ │ ├── ProxyConnect.dsp
│ │ │ ├── ProxyConnect.h
│ │ │ ├── ProxyConnect.vcproj
│ │ │ ├── global.h
│ │ │ ├── md4.cpp
│ │ │ ├── md4.h
│ │ │ ├── md5.cpp
│ │ │ ├── md5.h
│ │ │ ├── ntlm.h
│ │ │ ├── ntlmv2.cpp
│ │ │ ├── stdafx.cpp
│ │ │ └── stdafx.h
│ │ ├── ProxyConnection.cpp
│ │ ├── ProxyConnection.h
│ │ ├── README.txt
│ │ ├── RFBBundleWrapper.cpp
│ │ ├── RFBBundleWrapper.h
│ │ ├── RSA/
│ │ │ ├── Code.cpp
│ │ │ ├── Commonf.cpp
│ │ │ ├── Commonf.h
│ │ │ ├── Function.h
│ │ │ ├── Gsimply.cpp
│ │ │ ├── Gsimply.h
│ │ │ ├── HNumber.h
│ │ │ ├── Hnfunct.cpp
│ │ │ ├── Hnfunct.h
│ │ │ ├── Hnumber.cpp
│ │ │ ├── Keys.cpp
│ │ │ ├── Keys_main.cpp
│ │ │ ├── MyNum.h
│ │ │ ├── MyTypes.h
│ │ │ ├── Mynum.cpp
│ │ │ ├── Myprint.cpp
│ │ │ ├── Myprint.h
│ │ │ ├── Operator.cpp
│ │ │ ├── Operator.h
│ │ │ ├── PrimeGen.cpp
│ │ │ ├── Profiler.h
│ │ │ ├── RSA.dsp
│ │ │ ├── RSA.vcproj
│ │ │ ├── StdAfx.h
│ │ │ ├── TMSG.H
│ │ │ └── stdafx.cpp
│ │ ├── RSAKeys.cpp
│ │ ├── RSAKeys.h
│ │ ├── ServerListSynchronize.cpp
│ │ ├── ServerListSynchronize.h
│ │ ├── User.cpp
│ │ ├── User.h
│ │ ├── blowfish.cpp
│ │ ├── blowfish.h
│ │ ├── blowfish.h2
│ │ ├── rfbserver.cpp
│ │ ├── rfbserver.h
│ │ ├── stdafx.cpp
│ │ ├── stdafx.h
│ │ └── version.plist
│ ├── Jaguar/
│ │ ├── JaguarBundle-Info.plist
│ │ ├── JaguarExtensions.h
│ │ └── JaguarExtensions.m
│ ├── RFBBundleProtocol.h
│ ├── Tiger/
│ │ ├── TigerBundle-Info.plist
│ │ ├── TigerExtensions.h
│ │ └── TigerExtensions.m
│ ├── VNCBundle.h
│ └── VNCBundle.m
├── English.lproj/
│ └── MainMenu.nib/
│ ├── classes.nib
│ ├── info.nib
│ └── keyedobjects.nib
├── French.lproj/
│ ├── Credits.rtf
│ └── MainMenu.nib/
│ ├── classes.nib
│ ├── info.nib
│ └── objects.nib
├── German.lproj/
│ ├── Credits.rtf
│ └── MainMenu.nib/
│ ├── classes.nib
│ ├── info.nib
│ └── objects.nib
├── Italian.lproj/
│ ├── Copying.rtf
│ ├── Credits.rtf
│ └── MainMenu.nib/
│ ├── classes.nib
│ ├── info.nib
│ └── objects.nib
├── Japanese.lproj/
│ ├── Credits.rtf
│ └── MainMenu.nib/
│ ├── classes.nib
│ ├── info.nib
│ └── objects.nib
├── LICENSE
├── NSAuthorization.h
├── NSAuthorization.m
├── OSXvnc/
│ ├── OSXvnc
│ ├── OSXvnc-keepalive
│ ├── Resources/
│ │ └── English.lproj/
│ │ └── Localizable.strings
│ └── StartupParameters.plist
├── OSXvnc-server/
│ ├── CGS.h
│ ├── COPYING
│ ├── Makefile
│ ├── VNCServer.h
│ ├── VNCServer.m
│ ├── auth.c
│ ├── corre.c
│ ├── cutpaste.c
│ ├── d3des.c
│ ├── d3des.h
│ ├── dimming.c
│ ├── getMACAddress.c
│ ├── getMACAddress.h
│ ├── hextile.c
│ ├── include/
│ │ ├── X11/
│ │ │ ├── X.h
│ │ │ ├── Xalloca.h
│ │ │ ├── Xfuncproto.h
│ │ │ ├── Xfuncs.h
│ │ │ ├── Xmd.h
│ │ │ ├── Xos.h
│ │ │ ├── Xosdefs.h
│ │ │ ├── Xproto.h
│ │ │ ├── Xprotostr.h
│ │ │ ├── keysym.h
│ │ │ └── keysymdef.h
│ │ └── Xserver/
│ │ ├── colormap.h
│ │ ├── cursor.h
│ │ ├── dix.h
│ │ ├── gc.h
│ │ ├── input.h
│ │ ├── misc.h
│ │ ├── miscstruct.h
│ │ ├── opaque.h
│ │ ├── os.h
│ │ ├── pixmap.h
│ │ ├── region.h
│ │ ├── regionstr.h
│ │ ├── screenint.h
│ │ ├── scrnintstr.h
│ │ ├── validate.h
│ │ └── window.h
│ ├── kbdptr.c
│ ├── kbdptr.h
│ ├── libvncauth/
│ │ └── Makefile
│ ├── main.c
│ ├── miregion.c
│ ├── mousecursor.c
│ ├── rdr/
│ │ ├── Exception.h
│ │ ├── FdInStream.cxx
│ │ ├── FdInStream.h
│ │ ├── FdOutStream.cxx
│ │ ├── FdOutStream.h
│ │ ├── FixedMemOutStream.h
│ │ ├── InStream.cxx
│ │ ├── InStream.h
│ │ ├── Makefile
│ │ ├── Makefile.in
│ │ ├── MemInStream.h
│ │ ├── MemOutStream.h
│ │ ├── NullOutStream.cxx
│ │ ├── NullOutStream.h
│ │ ├── OutStream.h
│ │ ├── ZlibInStream.cxx
│ │ ├── ZlibInStream.h
│ │ ├── ZlibOutStream.cxx
│ │ ├── ZlibOutStream.h
│ │ └── types.h
│ ├── rfb.h
│ ├── rfbproto.h
│ ├── rfbserver.c
│ ├── rfbserver.h
│ ├── rre.c
│ ├── screencapture.c
│ ├── screencapture.h
│ ├── sockets.c
│ ├── stats.c
│ ├── storepasswd.c
│ ├── tableinitcmtemplate.c
│ ├── tableinittctemplate.c
│ ├── tabletranstemplate.c
│ ├── tight.c
│ ├── tight.h
│ ├── translate.c
│ ├── vncauth.c
│ ├── vncauth.h
│ ├── xalloc.c
│ ├── zlib.c
│ ├── zlibhex.c
│ ├── zrle.cc
│ └── zrleEncode.h
├── OSXvnc.html
├── OSXvnc.icns
├── OSXvnc.tiff
├── OSXvnc.xcodeproj/
│ └── project.pbxproj
├── OSXvnc_small.tiff
├── README.md
├── VNCController.h
├── VNCController.m
├── Version.txt
├── VineServer-Info.plist
├── VineServer.icns
├── build-libjpeg-turbo.sh
├── de.lproj/
│ ├── Copying.rtf
│ └── Localizable.strings
├── en.lproj/
│ ├── Copying.rtf
│ ├── Credits.rtf
│ ├── Localizable.strings
│ └── Vine Server Release Notes.rtf
├── fr.lproj/
│ ├── Copying.rtf
│ └── Localizable.strings
├── it.lproj/
│ └── Localizable.strings
├── ja.lproj/
│ ├── Copying.rtf
│ └── Localizable.strings
└── main.m
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/dco.yml
================================================
# .github/workflows/dco.yml
name: DCO
on:
pull_request:
push:
branches:
- main
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Check DCO
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
pip3 install -U dco-check
dco-check
================================================
FILE: .gitignore
================================================
/OSXvnc.xcodeproj/project.xcworkspace
/OSXvnc.xcodeproj/xcuserdata/
# xcodebuild -configuration Deployment
/build
================================================
FILE: .gitmodules
================================================
[submodule "libjpeg-turbo"]
path = libjpeg-turbo
url = https://github.com/libjpeg-turbo/libjpeg-turbo.git
================================================
FILE: .travis.yml
================================================
# Travis CI for OSXvnc.
os: osx
osx_image: xcode12.2
addons:
before_deploy:
before_install:
branches:
compiler:
deploy:
dist:
matrix:
notification:
sudo:
# TODO
install:
# libjpeg is already installed.
# - brew install libjpeg
# Patch project configuration to use installed libjpeg.
- ruby -pi -e 'gsub("libturbojpeg", "libjpeg")' OSXvnc.xcodeproj/project.pbxproj
- ruby -pi -e 'gsub("/opt/libjpeg-turbo", "/usr/local")' OSXvnc.xcodeproj/project.pbxproj
script:
- ./build-libjpeg-turbo.sh
- xcodebuild
================================================
FILE: Base.lproj/MainMenu.xib
================================================
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Port Number that VNC will use to communicate.
Note: Same as Display Number+5900
Note: Same as Display Number+5900
Password required to connect with VNC Clients
Note: Password length is not preserved
Checking this box swaps the middle and right mouse buttons. By convention the buttons sent by VNC client is in the opposite order as Mac OS X buttons.
Host Name1
Host Name2
Host Name3
Display Number for VNC Server
Note: This number+5900 is the port that will be used
The System Server will start when the machine boots and display the console screen independent of users' desktop servers. Specify connection preferences for the system server above. Other preferences are shared with desktop servers.
Clipboard sharing is unavailable prior to Mac OS X 10.5
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Port Number that VNC will use to communicate.
Note: Same as Display Number+5900
Note: Same as Display Number+5900
Password required to connect with VNC Client.
Note: Size is not preserved
Display Number for VNC Server
Note: This number+5900 is the port that will be used
Password required to connect with VNC Client.
Note: Password length is not preserved
================================================
FILE: Bundles/Echoware/ACConnection.cpp
================================================
#include "StdAfx.h"
#include "acconnection.h"
#include "ProxyConnection.h"
#include "DllProxyInfo.h"
#include "NetPacket.h"
#include
#include
#include
//#include
using namespace APISocket;
//time for send live message
#define SEND_LIVE_MESSAGE 10000
CACConnection::CACConnection(CProxyConnection* pProxyConnection) : CClientSocket()
{
m_pProxyConnection = pProxyConnection;
m_nEncryptionLevel = 1;
m_bConnected = false;
m_bStopConnecting = false;
m_dwConnectingStatus=0;
m_pReadBuffer = new CBuffer();
m_pSendBuffer = new CBuffer();
m_dwLastIsAliveMsg = GetTickCount();
}
CACConnection::~CACConnection(void)
{
StopSend(THREAD_STOP_TIMEOUT);
Close();
delete m_pReadBuffer;
delete m_pSendBuffer;
}
void CACConnection::StopConnect()
{
m_bStopConnecting = true;
}
//connect the socket to szIP on port nPort
//first, try directly and if failed then try use proxy settings
bool CACConnection::Connect(const char* szIP, unsigned int nPort)
{
bool res = false;
if (CClientSocket::Connect(szIP, nPort) == 0)
res = true;
if (!res)
res = g_globals.m_proxiesManager.ConnectViaProxy(this, szIP, nPort);
return res;
}
//try connect to echoServer
int CACConnection::Connect()
{
int nRet=CONNECTION_SUCCESSFUL;
if (m_bConnected)
{
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTING, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATING, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATION_FAILED, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTED, true);
return PROXY_ALREADY_CONNECTED;
}
//create the socket
Create();
g_globals.m_logger.Write("CACConnection: Enter connect");
m_critSection.Lock();
CDllProxyInfo* pProxyInfo = m_pProxyConnection->GetProxyInfo();
if (pProxyInfo->GetConnectTimeout()!=-1)
{
g_globals.m_logger.WriteFormated("CACConnection: Timeout=%d", pProxyInfo->GetConnectTimeout());
//set the connection timeout
CClientSocket::SetTimeouts(pProxyInfo->GetConnectTimeout()*1000);
SetBlockMode(false);
}
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
g_globals.m_logger.WriteFormated("\tCACConnection: Try connect %s:%s %s", pProxyInfo->GetIP(), pProxyInfo->GetPort(), pProxyInfo->GetMyID());
//connect
bool a = Connect(pProxyInfo->GetIP(), atoi(pProxyInfo->GetPort()));
if (a)
{
CClientSocket::SetTimeouts(pProxyInfo->GetConnectTimeout()*1000, pProxyInfo->GetSendTimeout()*1000, pProxyInfo->GetReceiveTimeout()*1000);
unsigned int conn_timeout = (unsigned int)pProxyInfo->GetConnectTimeout() * 1000;
m_pReadBuffer->Empty();
m_pSendBuffer->Empty();
m_dwConnectingStatus = STATUS_CONNECTING;
m_bConnected = true;
StartRoutine();
SendMessage(MSG_PROXY_CONNECTED, 0, 0);
if (errored)
m_bStopConnecting = true;
g_globals.m_logger.Write("\t\tCACConnection: connected");
DWORD dwStartTime = GetTickCount();
while (m_dwConnectingStatus != STATUS_CONNECTED && m_dwConnectingStatus != STATUS_AUTHENTICATION_FAILED)
{
if (m_bStopConnecting)
break;
Sleep(5000);
if (GetTickCount() - dwStartTime > conn_timeout)
break;
}
g_globals.m_logger.Write("\t\tCACConnection: connected2");
switch(m_dwConnectingStatus)
{
case STATUS_CONNECTED:
m_bConnected = true;
nRet=CONNECTION_SUCCESSFUL;
pProxyInfo->SetStatus(STATUS_CONNECTING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATION_FAILED, false);
pProxyInfo->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
pProxyInfo->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
pProxyInfo->SetStatus(STATUS_CONNECTED, true);
pProxyInfo->SetReconnectProxy(true);
break;
case STATUS_AUTHENTICATION_FAILED:
m_bConnected = true;
nRet=AUTHENTICATION_FAILED;
pProxyInfo->SetStatus(STATUS_CONNECTING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATION_FAILED, true);
pProxyInfo->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
pProxyInfo->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
pProxyInfo->SetReconnectProxy(false);
break;
case STATUS_AUTHENTICATING:
m_bConnected = false;
nRet=CONNECTION_TIMED_OUT;
pProxyInfo->SetStatus(STATUS_CONNECTING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATION_FAILED, false);
pProxyInfo->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
pProxyInfo->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, true);
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
break;
case STATUS_CONNECTING:
m_bConnected = false;
nRet=CONNECTION_TIMED_OUT;
pProxyInfo->SetStatus(STATUS_CONNECTING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATION_FAILED, false);
pProxyInfo->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
pProxyInfo->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, true);
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
break;
case STATUS_DISCONNECTED_FROM_PROXY:
m_bConnected = false;
nRet=ERROR_CONNECTING_TO_PROXY;
pProxyInfo->SetStatus(STATUS_CONNECTING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATING, false);
pProxyInfo->SetStatus(STATUS_AUTHENTICATION_FAILED, false);
pProxyInfo->SetStatus(STATUS_ESTABLISHING_DATA_CHANNEL, false);
pProxyInfo->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, true);
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
break;
}
}
else
{
m_bConnected = false;
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
nRet = NO_PROXY_SERVER_FOUND_TO_CONNECT;
g_globals.m_logger.WriteFormated("\t\tCACConnection: not connected error: %d", CClientSocket::GetLastError());
}
g_globals.m_logger.Write("\tCACConnection: End Try connect");
m_critSection.Unlock();
g_globals.m_logger.Write("CACConnection: Exit connect");
m_bStopConnecting = false;
return nRet;
}
//disconnect from echoServer
bool CACConnection::Disconnect()
{
bool bRet = true;
m_bStopConnecting = true;
m_critSection.Lock();
StopSend(THREAD_STOP_TIMEOUT);
if (m_bConnected)
{
bRet = CClientSocket::Close();
m_bConnected = !m_bConnected;
}
m_bStopConnecting = false;
m_critSection.Unlock();
return bRet;
}
//sets the encryption level
void CACConnection::SetEncryptionLevel(int level)
{
m_critSection.Lock();
m_nEncryptionLevel = level;
m_critSection.Unlock();
}
//process messages received from echoserver
//there are received some data and try to process it
//it is a notify message from CClientSocket
void CACConnection::OnReceive(char* buff, int len)
{
m_pReadBuffer->Write(buff, len);
char szProxyEcho[sizeof(PROXY_ECHO)];
if (m_pReadBuffer->Peak(szProxyEcho, sizeof(PROXY_ECHO))!=sizeof(PROXY_ECHO))
{
if (!strcmp(szProxyEcho, PROXY_ECHO))
{
m_pReadBuffer->Read(szProxyEcho, sizeof(PROXY_ECHO));
return;
}
}
DWORD lenMsg=0;
if (m_pReadBuffer->Peak(&lenMsg, sizeof(DWORD))!=sizeof(DWORD))
return;
lenMsg=OSSwapLittleToHostInt32(lenMsg);
char* msg=new char[lenMsg];
if (m_pReadBuffer->Peak(msg, lenMsg)!=lenMsg)
{
delete []msg;
return;
}
m_pReadBuffer->Drop(lenMsg);
NetPacketHeader netPacketHeader;
memcpy(&netPacketHeader, msg+sizeof(DWORD), sizeof(NetPacketHeader));
netPacketHeader.len = OSSwapLittleToHostInt32(netPacketHeader.len);
CProxyMsg* pProxyMsg=(CProxyMsg*)(msg+sizeof(DWORD)+sizeof(NetPacketHeader));
pProxyMsg->messageid = OSSwapLittleToHostInt32(pProxyMsg->messageid);
pProxyMsg->datalength = OSSwapLittleToHostInt32(pProxyMsg->datalength);
char* pData=0;
if (pProxyMsg->datalength)
pData=((char*)pProxyMsg)+sizeof(CProxyMsg);
if (pProxyMsg->messageid==MSG_PROXY_CONNECTED)
{
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_CONNECTED");
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
m_rsaKeys.Generate();
SendMessage(MSG_PROXY_PUBLICKEY, (char*)m_rsaKeys.m_pPublicKeyLE, m_rsaKeys.GetPublicKeyLength());
}
else if (pProxyMsg->messageid==MSG_PROXY_PUBLICKEY)
{
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_PUBLICKEY");
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATING, true);
m_dwConnectingStatus=STATUS_AUTHENTICATING;
SendEncryptedPass(pData, pProxyMsg->datalength);
}
else if (pProxyMsg->messageid==MSG_PROXY_HANDSHAKEFAILED)
{
CClientSocket::Close();
m_bConnected=false;
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATION_FAILED, true);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATING, false);
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_HANDSHAKEFAILED");
m_dwConnectingStatus=STATUS_AUTHENTICATION_FAILED;
}
else if (pProxyMsg->messageid==MSG_PROXY_HANDSHAKECONFIRM)
{
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, false);
char szServerName[ID_STRING_SIZE];
strcpy(szServerName, pData);
if (strlen(szServerName))
m_pProxyConnection->GetProxyInfo()->SetName(szServerName);
else
m_pProxyConnection->GetProxyInfo()->SetName((char*)m_pProxyConnection->GetProxyInfo()->GetIP());
//1.926
char szPublicIP[ID_STRING_SIZE];
char szUserID[ID_STRING_SIZE];
memset(szPublicIP, 0, ID_STRING_SIZE);
memset(szUserID, 0, ID_STRING_SIZE);
int nReceivedData = strlen(szServerName) + 1;
if (nReceivedData < pProxyMsg->datalength)
{
strcpy(szPublicIP, pData + nReceivedData);
nReceivedData += strlen(szPublicIP) + 1;
}
if (nReceivedData < pProxyMsg->datalength)
{
memcpy(szUserID, pData + nReceivedData, 255);
}
if (strlen(szUserID))
{
//2007.08.09
char szEmail[ID_STRING_SIZE];
g_globals.ParseFormattedID(szUserID, ID_STRING_SIZE, szEmail);
g_globals.m_logger.WriteFormated("CACConnection: Receive Client %s, Form %s", szUserID, szEmail);
m_pProxyConnection->GetProxyInfo()->SetMyID(szEmail);
}
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTED, true);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_AUTHENTICATING, false);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTING, false);
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_HANDSHAKECONFIRM");
m_dwConnectingStatus=STATUS_CONNECTED;
}
else if (pProxyMsg->messageid==MSG_PROXY_DISCONNECTED)
{
CClientSocket::Close();
m_bConnected=false;
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, true);
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTED, false);
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_DISCONNECTED");
}
else if (pProxyMsg->messageid==MSG_PROXY_DUPLICATE_LOGIN)
{
CClientSocket::Close();
m_bConnected=false;
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_CONNECTED, false);
m_dwConnectingStatus=STATUS_DISCONNECTED_FROM_PROXY;
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_DUPLICATE_LOGIN");
}
else if (pProxyMsg->messageid==MSG_PROXY_PARTNERFOUND)
{
m_dwConnectingStatus=MSG_PROXY_PARTNERFOUND;
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_PARTNERFOUND");
}
else if (pProxyMsg->messageid==MSG_PROXY_PARTNERNOTFOUND)
{
m_dwConnectingStatus=MSG_PROXY_PARTNERNOTFOUND;
g_globals.m_logger.Write("CACConnection: Receive MSG_PROXY_PARTNERNOTFOUND");
}
else if (pProxyMsg->messageid==MSG_CHANNEL_CODE)
{
/* initiator receives from echoserver */
m_dwConnectingStatus=MSG_CHANNEL_CODE;
g_globals.m_logger.WriteFormated("CACConnection: Receive MSG_CHANNEL_CODE %s", pData);
}
else if (pProxyMsg->messageid==MSG_PEER_KEY)
{
/* initiator receives from echoserver (initiatorchannelcode/dhpart2) */
m_dwConnectingStatus=MSG_PEER_KEY;
memcpy(m_szChannelCode, pData, CHANNEL_CODE_SIZE);
m_szChannelCode[CHANNEL_CODE_SIZE]=0;
#warning the RSA key? is that char or int data?
memcpy(m_szPeerPublicKey, pData+CHANNEL_CODE_SIZE, RSA_PUBLIC_KEY*sizeof(unsigned int));
m_szPeerPublicKey[RSA_PUBLIC_KEY*sizeof(unsigned int)]=0;
g_globals.m_logger.WriteFormated("CACConnection: Receive MSG_PEER_KEY, chanel code=%s", m_szChannelCode);
}
else if (pProxyMsg->messageid==MSG_CONNECT_TO_PEER)
{
/* responder receives from echoserver (respchannelcode/respID/dhPart1) */
g_globals.m_logger.Write("CACConnection: Receive MSG_CONNECT_TO_PEER 1");
m_dwConnectingStatus=MSG_CONNECT_TO_PEER;
memcpy(m_szChannelCode, pData, CHANNEL_CODE_SIZE);
m_szChannelCode[CHANNEL_CODE_SIZE]=0;
memcpy(m_szPeerID, pData+CHANNEL_CODE_SIZE, ID_STRING_SIZE);
m_szPeerID[ID_STRING_SIZE]=0;
#warning the RSA key? is that char or int data?
memcpy(m_szPeerPublicKey, pData+ID_STRING_SIZE+CHANNEL_CODE_SIZE, RSA_PUBLIC_KEY*sizeof(unsigned int));
m_szPeerPublicKey[RSA_PUBLIC_KEY*sizeof(unsigned int)]=0;
char *pBuff = NULL;
DWORD dwTotalLength = 0;
DWORD dwTemp = 0;
/* responder sends MSG_PEER_KEY to echoserver
(initiatorId,dhpart2,respchannelcode) */
dwTotalLength += CHANNEL_CODE_SIZE;//sizeof(m_szChannelCode);
dwTotalLength += ID_STRING_SIZE;//sizeof(m_szPeerID);
dwTotalLength += m_rsaKeys.GetPublicKeyLength();
pBuff = new char[dwTotalLength];
memset(pBuff,0,dwTotalLength);// Total Buffer size
memcpy(pBuff,m_szPeerID,sizeof(m_szPeerID));
dwTemp = ID_STRING_SIZE;//sizeof(m_szPeerID);
memcpy(pBuff + dwTemp,m_szChannelCode, sizeof(m_szChannelCode));
dwTemp += CHANNEL_CODE_SIZE;//sizeof(m_szChannelCode);
/* set DHpart2 to all zero if no encryption */
if (m_nEncryptionLevel==1)
memcpy(pBuff+dwTemp, (char*)m_rsaKeys.m_pPublicKeyLE, m_rsaKeys.GetPublicKeyLength());
else
memset(pBuff+dwTemp, 0, m_rsaKeys.GetPublicKeyLength());
g_globals.m_logger.WriteFormated("CACConnection: Receive MSG_CONNECT_TO_PEER 2, channel code=%s", m_szChannelCode);
SendMessage(MSG_PEER_KEY,pBuff,dwTotalLength);
g_globals.m_logger.WriteFormated("CACConnection: Receive MSG_CONNECT_TO_PEER 3, channel code=%s", m_szChannelCode);
delete []pBuff;
m_pProxyConnection->OnRemotePartnerConnect(m_szChannelCode, m_szPeerID, m_szPeerPublicKey);
g_globals.m_logger.WriteFormated("CACConnection: Receive MSG_CONNECT_TO_PEER end, channel code=%s", m_szChannelCode);
}
else if (pProxyMsg->messageid==MSG_ISALIVE)
{
g_globals.m_logger.Write("CACConnection: Receive MSG_ISALIVE");
}
delete []msg;
}
//send data to echoServer
//if the send buffer contain data, then this data is read it for send to echoServer
//if there are no data to send, then send IsAliveMessage if is time to do it
//it is a notify message from CClientSocket
void CACConnection::OnSend(char* buff, int& len)
{
if (!m_bConnected)
{
len=0;
return;
}
len=m_pSendBuffer->Read(buff, len);
}
void CACConnection::OnTimer()
{
APISocket::CClientSocket::OnTimer();
if (!m_pSendBuffer->Size() && m_bConnected &&
GetTickCount() - m_dwLastIsAliveMsg >= SEND_LIVE_MESSAGE)
{
m_dwLastIsAliveMsg = GetTickCount();
SendMessage(MSG_ISALIVE, 0, 0);
}
}
//compose message packet to send to echoServer
//message : the message type
//data : the message data
//datalen : the message data length
void CACConnection::SendMessage(DWORD message, char *data, unsigned int datalen)
{
char* lpBuf = NULL;
DWORD nBytesSent = 0;
CProxyMsg msg(message);
NetPacketHeader header;
header.len = msg.MakeMessage(&header, lpBuf, data, datalen);//create the message
DWORD dwToSend=OSSwapHostToLittleInt32(header.len+sizeof(DWORD));
m_pSendBuffer->Write(&dwToSend, sizeof(DWORD));
m_pSendBuffer->Write(lpBuf, header.len);
Send();
if (lpBuf)
delete lpBuf;
}
//compose MSG_PROXY_PASSWORD message packet
void CACConnection::SendEncryptedPass(char * pData,DWORD dwDataLength)
{
char pEncPass[1024];
m_rsaKeys.EncryptPassword(pData, dwDataLength, m_pProxyConnection->GetProxyInfo()->GetPassword(), pEncPass);
char szEmail[ID_STRING_SIZE];
if (g_globals.GetFormattedID(szEmail, ID_STRING_SIZE, m_pProxyConnection->GetProxyInfo()->GetMyID()) == -1)
return;
const int nTotalPkgSize = 1024 + ID_STRING_SIZE+ sizeof(DWORD);
char szTotalData[nTotalPkgSize];
memset(szTotalData, 0, nTotalPkgSize);
memcpy(szTotalData, pEncPass,1024);
memcpy(szTotalData + 1024, szEmail, ID_STRING_SIZE);
SendMessage(MSG_PROXY_PASSWORD, szTotalData, nTotalPkgSize);
}
//calback function, notify that there was an error on read or send data to echoserver on this channel
//it is a notify message from CClientSocket
void CACConnection::OnError(int error)
{
CClientSocket::OnError(error);
m_bStopConnecting = true;
m_pProxyConnection->OnError(error);
CDllProxyInfo* pProxyInfo=m_pProxyConnection->GetProxyInfo();
pProxyInfo->SetStatus(STATUS_CONNECTED, false);
pProxyInfo->SetStatus(STATUS_DISCONNECTED_FROM_PROXY, true);
m_bConnected = false;
}
//find partner on echoServer
//sends MSG_PROXY_FIND_PARTNER message and wait for echoServer answer
bool CACConnection::FindPartner(const char* szPartener)
{
g_globals.m_logger.WriteFormated("CACConnection: FindPartner %s", szPartener);
if (!m_bConnected)
{
g_globals.m_logger.WriteFormated("CACConnection: FindPartner %s end, not connected", szPartener);
return false;
}
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_SEARCHING_FOR_PARTNER, true);
char sz[ID_STRING_SIZE];
if (g_globals.GetFormattedID(sz, ID_STRING_SIZE, szPartener) == -1)
return false;
m_dwConnectingStatus=0;
SendMessage(MSG_PROXY_FIND_PARTNER, (char*)sz, (unsigned int)ID_STRING_SIZE);
g_globals.m_logger.WriteFormated("CACConnection: FindPartner wait %d seconds", m_pProxyConnection->GetProxyInfo()->GetConnectTimeout());
DWORD dwStartTime=GetTickCount();
while (!m_dwConnectingStatus)
{
Sleep(10000);
if (GetTickCount()-dwStartTime>(unsigned int)m_pProxyConnection->GetProxyInfo()->GetConnectTimeout()*1000)
break;
}
g_globals.m_logger.Write("CACConnection: FindPartner wait end");
m_pProxyConnection->GetProxyInfo()->SetStatus(STATUS_SEARCHING_FOR_PARTNER, false);
g_globals.m_logger.WriteFormated("CACConnection: FindPartner status=%d", m_dwConnectingStatus);
return (bool)(m_dwConnectingStatus==MSG_PROXY_PARTNERFOUND);
}
//try to connect to szPartner on echoServer
//sends MSG_CONNECT_TO_PEER message and wait for echoServer answer
bool CACConnection::ConnectToPeer(const char* szPartener, char* szChannelCode, char* szPeerPublicKey)
{
g_globals.m_logger.WriteFormated("CACConnection: Try connect to peer %s, channel code ", szPartener, szChannelCode);
char *pBuff = NULL;
DWORD dwTotalLength = 0;
DWORD dwTemp = 0;
dwTotalLength += ID_STRING_SIZE;//(DWORD)strlen(szPartener)+1;
dwTotalLength += m_rsaKeys.GetPublicKeyLength();
pBuff = new char[dwTotalLength];
memset(pBuff, 0, dwTotalLength);
g_globals.GetFormattedID(pBuff, ID_STRING_SIZE, szPartener);
dwTemp = ID_STRING_SIZE;//(DWORD)strlen(szPartener)+1;
/* set DHpart1 to all zero if no encryption */
if (m_nEncryptionLevel==1)
memcpy(pBuff+dwTemp, m_rsaKeys.GetPublicKey(), m_rsaKeys.GetPublicKeyLength());
else
memset(pBuff+dwTemp, 0, m_rsaKeys.GetPublicKeyLength());
m_dwConnectingStatus=0;
m_szPeerPublicKey[0]=m_szChannelCode[0]=0;
SendMessage(MSG_CONNECT_TO_PEER, pBuff, dwTotalLength);
delete [] pBuff;
DWORD dwStartTime=GetTickCount();
while (m_dwConnectingStatus!=MSG_PEER_KEY && m_dwConnectingStatus!=MSG_PROXY_PARTNERNOTFOUND)
{
Sleep(10000);
if (GetTickCount()-dwStartTime>(unsigned int)m_pProxyConnection->GetProxyInfo()->GetConnectTimeout()*1000)
break;
}
if (m_dwConnectingStatus==MSG_PEER_KEY)
{
strcpy(szChannelCode, m_szChannelCode);
memcpy(szPeerPublicKey, m_szPeerPublicKey, RSA_PUBLIC_KEY*sizeof(unsigned int));
}
if (m_dwConnectingStatus==MSG_PEER_KEY)
g_globals.m_logger.WriteFormated("CACConnection: Success connect to peer %s, channel code ", szPartener, szChannelCode);
else
g_globals.m_logger.WriteFormated("CACConnection: Fail connect to peer %s, channel code ", szPartener, szChannelCode);
return m_dwConnectingStatus==MSG_PEER_KEY;
}
================================================
FILE: Bundles/Echoware/ACConnection.h
================================================
#ifndef _ACCONNECTION_H
#define _ACCONNECTION_H
#if _MSC_VER > 1000
#pragma once
#endif
#include "APISocket.h"
#include "CritSection.h"
#include "RSAKeys.h"
class CProxyConnection;
class CBuffer;
/*
Authentication channel class
It is used for client authentication and identification on the echoServer
*/
class CACConnection :
public APISocket::CClientSocket
{
public:
CACConnection(CProxyConnection* pProxyConnection);
virtual ~CACConnection(void);
//connect to echoServer
int Connect();
//disconnect from echoServer
bool Disconnect();
void StopConnect();
//sets the encryption level
void SetEncryptionLevel(int level);
//find partner on echoServer
bool FindPartner(const char* szPartener);
//connect to peer on echoServer
bool ConnectToPeer(const char* szPartener);
bool ConnectToPeer(const char* szPartener, char* szChannelCode, char* szPeerPublicKey);
//generate a session key from a public key
char* GenerateSessionKey(char* szSessionKey, char* szPeerPublicKey)
{
m_rsaKeys.GenerateSessionKey(szPeerPublicKey, szSessionKey);
return szSessionKey;
}
protected:
//overwrited notification functions
void OnReceive(char* buff, int len);
void OnSend(char* buff, int& len);
virtual void OnError(int error);
virtual void OnTimer();
//construct message to send to echoServer
void SendMessage(DWORD message, char *data, unsigned int datalen);
//construct mesage MSG_PROXY_PASSWORD
void SendEncryptedPass(char * pData,DWORD dwDataLength);
//connect to szIP:nPort
bool Connect(const char* szIP, unsigned int nPort);
protected:
CCritSection m_critSection;
int m_nEncryptionLevel;
//parent proxy connection
CProxyConnection* m_pProxyConnection;
bool m_bStopConnecting;
bool m_bConnected;
int m_dwConnectingStatus;
//buffers for recv/send on socket
CBuffer* m_pReadBuffer;
CBuffer* m_pSendBuffer;
CRSAKeys m_rsaKeys;
char m_pRemotePublicKey[RSA_PUBLIC_KEY];
private:
char m_szChannelCode[12];
char m_szPeerID[256];
char m_szPeerPublicKey[RSA_PUBLIC_KEY*sizeof(unsigned int)+1];
DWORD m_dwLastIsAliveMsg;
};
#endif
================================================
FILE: Bundles/Echoware/AES.cpp
================================================
#include "StdAfx.h"
#include "aes.h"
CAES::CAES(void)
{
}
CAES::~CAES(void)
{
}
void CAES::Decrypt(const unsigned char *in, int length, unsigned char *out)
{
CryptData(in, out, length, AES_DECRYPT);
}
void CAES::Encrypt(const unsigned char *in, int length, unsigned char *out)
{
CryptData(in, out, length, AES_ENCRYPT);
}
int CAES::SetDecryptKey(const unsigned char *userKey, const int bits)
{
//return AES_set_decrypt_key(userKey, bits, &m_aesDecKey);
memcpy(m_userDecKey, userKey, bits);
return 0;
}
int CAES::SetEncryptKey(const unsigned char *userKey, const int bits)
{
//return AES_set_encrypt_key(userKey, bits, &m_aesEncKey);
memcpy(m_userEncKey, userKey, bits);
return 0;
}
void CAES::CryptData(const unsigned char *in, unsigned char *out, int length, const int enc)
{
AES_KEY aesKey;
if (AES_ENCRYPT == enc)
AES_set_encrypt_key(m_userEncKey, 128, &aesKey);
else
AES_set_decrypt_key(m_userDecKey, 128, &aesKey);
unsigned long len = length;
unsigned char tmp[AES_BLOCK_SIZE];
while (len >= AES_BLOCK_SIZE)
{
memset(tmp,0,AES_BLOCK_SIZE);
memcpy(tmp,in,AES_BLOCK_SIZE);
if (AES_ENCRYPT == enc)
{
AES_encrypt(tmp, out, &aesKey);
}
else
{
AES_decrypt(tmp, out, &aesKey);
}
len -= AES_BLOCK_SIZE;
in += AES_BLOCK_SIZE;
out += AES_BLOCK_SIZE;
}
if (len)
{
memset(tmp,0,AES_BLOCK_SIZE);
memcpy(tmp,in,AES_BLOCK_SIZE);
if (AES_ENCRYPT == enc)
{
AES_encrypt(tmp, tmp, &aesKey);
}
else
{
AES_decrypt(tmp, tmp, &aesKey);
}
memcpy(out, tmp, AES_BLOCK_SIZE);
}
}
================================================
FILE: Bundles/Echoware/AES.h
================================================
#pragma once
#include "OpenSSL/aes.h"
//wrapper class for AES encryption
class CAES
{
public:
CAES(void);
~CAES(void);
void Decrypt(const unsigned char *in, int length, unsigned char *out);
void Encrypt(const unsigned char *in, int length, unsigned char *out);
int SetDecryptKey(const unsigned char *userKey, const int bits);
int SetEncryptKey(const unsigned char *userKey, const int bits);
protected:
void CryptData(const unsigned char *in, unsigned char *out, int length, const int enc);
protected:
AES_KEY m_aesEncKey;
AES_KEY m_aesDecKey;
public:
unsigned char m_userDecKey[128];
unsigned char m_userEncKey[128];
};
================================================
FILE: Bundles/Echoware/APISocket/APISocket.h
================================================
#ifndef __APISOCKET__
#define __APISOCKET__
#if _MSC_VER > 1000
#pragma once
#endif
#undef FD_SETSIZE
#define FD_SETSIZE 1024
#define __stdcall
#define MAX_BUFFER (64*1024)
#import
#include "CritSection.h"
namespace APISocket
{
//generic socket class
class CSocket
{
public:
CSocket(int sock=0);
CSocket(const CSocket& other);
virtual ~CSocket();
//[in]Timeouts in milliseconds
void SetTimeouts(int nConnectTimeout=-1, int nSendTimeout=-1, int nRecvTimeout=-1, int nAcceptTimeOut=-1);
//[in]bBlock : true for bloking socket, false for non-blocking socket
void SetBlockMode(bool bBlock);
int GetConnectTimeout();
int GetSendTimeout();
int GetRecvTimeout();
int GetAcceptTimeout();
bool GetBlockMode();
//[in] nPort : port to bind
//return : true or false
virtual bool Create(unsigned int nPort=0);
//return : 0 fail, port bindit for ok
unsigned int Bind(unsigned int nPort=0, bool bLocal=true);
//[in] backlog
//return : true or false
bool Listen(int backlog=10);
//return : -1 for error, 0 for success, 1 for timeout
int Accept(int& sock);
//[in] szServerIP
//[in] nPort
//connect socket to szServer (ip xxx.xxx.xxx.xxx or host name) on port nPort
//return -1 for error, 0 for OK, 1 for timeout
int Connect(const char* szServer, unsigned int nPort);
//shutdown socket
//[in] how : SD_RECEIVE, SD_SEND, SD_BOTH
//return : true or false
bool Shutdown(int how);
//send
//[in] buff : buff to send
//[in] nLen : buff length
//return -1 for error, 0 for OK, 1 for timeout
int Send(const char* buff, int& nLen, int nFlag=0);
//receive
//[in] buff
//[in, out] nLength : size of buff
//[in] flag : 0, MSG_PEEK or MSG_OOB
//return -1 for error, 0 for OK, 1 for timeout
int Receive(char* buff, int& nLength, int nFlag=0);
bool Close();
virtual void OnClose();
virtual void OnError(int error);
virtual void OnReceive(char* buff, int len);
virtual void OnSend(char* buff, int &len);
//gets the TCP_NODELAY socket option
//return true for success and false for error to get the TCP_NODELAY socket option
bool GetSockOption(bool& bTcpNodelay);
//sets the TCP_NODELAY socket option
//return true for success and false for error to set the TCP_NODELAY socket option
bool SetSockOption(bool bTcpNodelay);
//gets the socket last error
int GetLastError();
bool GetLocalPort(unsigned int& nPort);
bool GetRemotePort(unsigned int& nPort);
bool GetRemoteIP(char* szRemoteIP);
//unsigned int GetSock(){return m_sock;};
//atach a sock to this class
int Attach(int sock);
//detach the sock from this class
int Detach();
void OnWrite();
void OnRead();
int Send();
int ReadableByteCount();
int getSocket();
bool StartAsync();
bool StopAsync();
protected:
//Set the socket to either blocking or non-blocking mode
//[in] bNonBlock : true for non-blocking mode, false for blocking mode
//return true or false
bool NonBlock(bool bNonBlock);
//[in] nTimeout in milliseconds
//[in] nType 0 for read, 1 for write
//return -1 for error, 0 for OK, 1 for timeout
int WaitNonBlockCompletion(int nTimeout, int nType);
protected:
int m_sock;
int m_nConnectTimeout, m_nSendTimeout, m_nRecvTimeout, m_nAcceptTimeout;
bool m_bBlockMode;
void* m_hAsyncThread;
unsigned long m_dwAsyncThread;
bool shouldAsyncQuit;
bool hasAsyncQuit;
bool inAsyncNotificationLoop;
bool errored;
CCritSection m_csAsync;
static unsigned long AsyncThreadProc(void* lpParameter);
void AsyncNotifications();
void AsyncNotificationLoop();
};
//a base class for client socket
class CClientSocket : public CSocket
{
public:
CClientSocket(int sock=0);
virtual ~CClientSocket(void);
//start send data
virtual bool StartSend();
//stop send data
//[in] dwTimeout : milliseconds for waitting to stop
bool StopSend(unsigned long dwWaitTimeout);
virtual void OnTimer();
protected:
bool StartRoutine();
bool StopRoutine(unsigned long dwWaitTimeout);
//routine thread handle
void* m_hRoutineThread;
//routine thread id
unsigned long m_dwRoutineThread;
//some routine thread proc
static unsigned long __stdcall RoutineThreadProc(void* lpParameter);
bool routineShouldQuit;
bool routineHasQuit;
};
//a base class for server socket
class CServerSocket : public CSocket
{
public:
CServerSocket(unsigned int nPort=0);
virtual ~CServerSocket(void);
//return : true or false
virtual bool Create();
//[in] backlog
//return : true or false
bool Listen(int backlog=10);
//start waitting for clients
bool StartAccept();
//stop waitting for clients
//[in] dwTimeout : milliseconds for waitting to stop
bool StopAccept(unsigned long dwWaitTimeout);
//notification : new client connected
virtual void OnNewClient(int sock);
virtual void OnLeaveClient(CSocket* pClient);
unsigned int GetListenPort();
protected:
//listen port
unsigned int m_nPort;
//accept thread handle
void* m_hAcceptThread;
//accept thread id
unsigned long m_dwAcceptThread;
//accept thread proc
static unsigned long __stdcall AcceptThreadProc(void* lpParameter);
bool shouldQuit;
bool hasQuit;
};
}
#endif
================================================
FILE: Bundles/Echoware/APISocket/ClientSocket.cpp
================================================
#include "stdafx.h"
#include "APISocket.h"
#include "EchoToOSX.h"
APISocket::CClientSocket::CClientSocket(int sock /*=0*/)
:APISocket::CSocket(sock)
{
m_hRoutineThread=0;
m_dwRoutineThread=0;
}
APISocket::CClientSocket::~CClientSocket(void)
{
}
bool APISocket::CClientSocket::StartSend()
{
bool res = StartRoutine();
int ret = Send();
return res && (ret == 0);
}
bool APISocket::CClientSocket::StopSend(unsigned long dwWaitTimeout)
{
return StopRoutine(dwWaitTimeout);
}
bool APISocket::CClientSocket::StartRoutine()
{
if (m_hRoutineThread)
return true;
routineShouldQuit=0;
routineHasQuit=0;
if (!(m_hRoutineThread=CreateThread(0, 0, RoutineThreadProc, this, 0, &m_dwRoutineThread)))
return false;
return true;
}
bool APISocket::CClientSocket::StopRoutine(unsigned long dwWaitTimeout)
{
if (!m_hRoutineThread)
return true;
bool termResult = ShutdownThread(m_hRoutineThread, dwWaitTimeout, &routineShouldQuit, &routineHasQuit);
m_hRoutineThread=0;
m_dwRoutineThread=0;
return termResult;
}
void APISocket::CClientSocket::OnTimer()
{
}
unsigned long __stdcall APISocket::CClientSocket::RoutineThreadProc(void* lpParameter)
{
APISocket::CClientSocket* pClient = (APISocket::CClientSocket*) lpParameter;
while (true)
{
if (pClient->routineShouldQuit)
break;
pClient->OnTimer();
Sleep(500000);
}
pClient->routineHasQuit = 1;
return 0;
}
================================================
FILE: Bundles/Echoware/APISocket/ServerSocket.cpp
================================================
#include "stdafx.h"
#include "APISocket.h"
APISocket::CServerSocket::CServerSocket(unsigned int nPort/*=0*/)
:APISocket::CSocket()
{
m_nPort=nPort;
m_hAcceptThread=0;
m_dwAcceptThread=0;
}
APISocket::CServerSocket::~CServerSocket(void)
{
}
bool APISocket::CServerSocket::Create()
{
if (!CSocket::Create(m_nPort))
return false;
if (!(m_nPort=Bind(m_nPort)))
return false;
return true;
}
bool APISocket::CServerSocket::Listen(int backlog)
{
return CSocket::Listen();
}
unsigned int APISocket::CServerSocket::GetListenPort()
{
return m_nPort;
}
bool APISocket::CServerSocket::StartAccept()
{
if (m_hAcceptThread)
return true;
shouldQuit = 0;
hasQuit = 0;
if (!(m_hAcceptThread=CreateThread(0, 0, AcceptThreadProc, this, 0, &m_dwAcceptThread)))
return false;
return true;
}
bool APISocket::CServerSocket::StopAccept(unsigned long dwWaitTimeout)
{
bool termResult = ShutdownThread(m_hAcceptThread, dwWaitTimeout, &shouldQuit, &hasQuit);
m_hAcceptThread = 0;
m_dwAcceptThread = 0;
return termResult;
}
void APISocket::CServerSocket::OnNewClient(int sock)
{
}
void APISocket::CServerSocket::OnLeaveClient(CSocket* pClient)
{
}
unsigned long __stdcall APISocket::CServerSocket::AcceptThreadProc(void* lpParameter)
{
CServerSocket* pServerSock= (CServerSocket*) lpParameter;
int sock;
while (true)
{
if (pServerSock->shouldQuit)
break;
int rc=pServerSock->Accept(sock);
if (rc==0)
pServerSock->OnNewClient(sock);
else if (rc==-1)
{
if (pServerSock->shouldQuit)
break;
pServerSock->OnError(pServerSock->GetLastError());
Sleep(10000);
}
else if (rc==1)
Sleep(1000);
}
pServerSock->hasQuit=1;
return 0;
}
================================================
FILE: Bundles/Echoware/APISocket/Socket.cpp
================================================
#include "apisocket.h"
#include
#include "errno.h"
#include
#include
#include "sys/fcntl.h"
#include
#include
#include
#include
#include "../EchoToOSX.h"
#include
#include
#include
#include "globals.h"
APISocket::CSocket::CSocket(int sock/*=0*/)
{
m_sock = sock;
errored = false;
m_nConnectTimeout = m_nSendTimeout = m_nRecvTimeout = m_nAcceptTimeout = -1;
m_bBlockMode = false;
m_hAsyncThread = 0;
m_dwAsyncThread = 0;
inAsyncNotificationLoop = false;
StartAsync();
}
APISocket::CSocket::CSocket(const CSocket& other)
{
m_sock = other.m_sock;
errored = false;
m_nConnectTimeout = other.m_nConnectTimeout;
m_nSendTimeout = other.m_nSendTimeout;
m_nRecvTimeout = other.m_nRecvTimeout;
m_nAcceptTimeout = other.m_nAcceptTimeout;
m_bBlockMode = other.m_bBlockMode;
m_hAsyncThread = 0;
m_dwAsyncThread = 0;
inAsyncNotificationLoop = false;
StartAsync();
}
APISocket::CSocket::~CSocket()
{
StopAsync();
Close();
m_sock = 0;
}
void APISocket::CSocket::SetTimeouts(int nConnectTimeout/*=-1*/, int nSendTimeout/*=-1*/, int nRecvTimeout/*=-1*/, int nAcceptTimeout/*=-1*/)
{
m_nConnectTimeout = nConnectTimeout;
m_nSendTimeout = nSendTimeout;
m_nRecvTimeout = nRecvTimeout;
m_nAcceptTimeout = nAcceptTimeout;
}
void APISocket::CSocket::SetBlockMode(bool bBlock)
{
m_bBlockMode = bBlock;
NonBlock(!bBlock);
}
int APISocket::CSocket::GetConnectTimeout()
{
return m_nConnectTimeout;
}
int APISocket::CSocket::GetSendTimeout()
{
return m_nSendTimeout;
}
int APISocket::CSocket::GetRecvTimeout()
{
return m_nRecvTimeout;
}
int APISocket::CSocket::GetAcceptTimeout()
{
return m_nAcceptTimeout;
}
bool APISocket::CSocket::GetBlockMode()
{
return m_bBlockMode;
}
bool APISocket::CSocket::Create(unsigned int nPort /*=0*/)
{
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (!sock)
sock = socket(AF_INET, SOCK_STREAM, 0);
if (!(sock < 0))
{
m_sock = sock;
SetSockOption(true);
return true;
}
return false;
}
unsigned int APISocket::CSocket::Bind(unsigned int nPort/*=0*/, bool bLocal/*=true*/)
{
struct sockaddr_in self;
memset(&self, 0, sizeof(self));
self.sin_family = AF_INET;
self.sin_port = htons(nPort);
if (!bLocal)
self.sin_addr.s_addr = htonl(INADDR_ANY);
else
self.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
if (bind(m_sock, (struct sockaddr *)&self, sizeof(self)) != 0)
return 0;
if (!nPort)
GetLocalPort(nPort);
return nPort;
}
bool APISocket::CSocket::Listen(int backlog)
{
return !listen(m_sock, backlog);
}
int APISocket::CSocket::Accept(int& sock)
{
struct sockaddr_in client_addr;
int addrlen=sizeof(client_addr);
sock = 0;
if (!m_bBlockMode)
{
int rc = 0;
if ((rc = WaitNonBlockCompletion(m_nAcceptTimeout, 0)) != 0)
return rc;
}
sock = accept(m_sock,(struct sockaddr *)&client_addr,(socklen_t *) &addrlen);
if (sock == INVALID_SOCKET)
return -1;
return 0;
}
int APISocket::CSocket::Connect(const char* szServer, unsigned int nPort)
{
if (!m_sock)
return -1;
errored = false;
StartAsync();
struct sockaddr_in sockAddr;
ZeroMemory(&sockAddr, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(nPort);
sockAddr.sin_addr.s_addr = inet_addr(szServer);
if (sockAddr.sin_addr.s_addr == INADDR_NONE)
{
LPHOSTENT lphost;
lphost = gethostbyname(szServer);
if (lphost != NULL)
sockAddr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
}
if (connect(m_sock, (struct sockaddr*)&sockAddr, sizeof(sockAddr)) != 0)
{
if (!m_bBlockMode)
{
while (!inAsyncNotificationLoop) Sleep(10000);
return WaitNonBlockCompletion(m_nConnectTimeout, 1);
}
}
while (!inAsyncNotificationLoop) Sleep(10000);
return 0;
}
bool APISocket::CSocket::Close()
{
bool ret = false;
Shutdown(SD_BOTH);
if (m_sock)
ret = !closesocket(m_sock);
m_sock = 0;
return ret;
}
bool APISocket::CSocket::Shutdown(int how)
{
if (m_sock)
return !shutdown(m_sock, how);
else
return false;
}
int APISocket::CSocket::Send(const char* buff, int& nLen, int nFlag/*=0*/)
{
nLen=send(m_sock, buff, nLen, nFlag);
if (nLen<=0)
{
if (nLen==SOCKET_ERROR)
{
nLen=0;
int err;
uint errlen = sizeof(err);
getsockopt(m_sock, SOL_SOCKET, SO_ERROR, (char*)&err, &errlen);
return (err == WSAEWOULDBLOCK)?(0):(-1);
}
return -1;
}
return 0;
}
int APISocket::CSocket::Receive(char* buff, int& nLength, int nFlag/*=0*/)
{
nLength=recv(m_sock, buff, nLength, nFlag);
if (nLength<=0)
{
if (nLength==SOCKET_ERROR)
{
nLength=0;
int err;
uint errlen = sizeof(err);
getsockopt(m_sock, SOL_SOCKET, SO_ERROR, (char*)&err, &errlen);
return (err == WSAEWOULDBLOCK)?(0):(-1);
}
return -1;
}
return 0;
}
//gets the TCP_NODELAY socket option
//return true for success and false for error to get the TCP_NODELAY socket option
bool APISocket::CSocket::GetSockOption(bool& bTcpNodelay)
{
int on;
uint len=sizeof(on);
bool ret=!getsockopt(m_sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, &len);
bTcpNodelay=(on!=0);
return ret;
}
//sets the TCP_NODELAY socket option
//return true for success and false for error to set the TCP_NODELAY socket option
bool APISocket::CSocket::SetSockOption(bool bTcpNodelay)
{
int on=(int)bTcpNodelay;
return !setsockopt(m_sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on));
}
int APISocket::CSocket::GetLastError()
{
return WSAGetLastError();
}
bool APISocket::CSocket::NonBlock(bool bNonBlock)
{
if (bNonBlock)
return (fcntl(m_sock, F_SETFL, O_NONBLOCK) != -1);
else
return (fcntl(m_sock, F_SETFL, fcntl(m_sock, F_GETFL, 0) & ~O_NONBLOCK) != -1);
}
int APISocket::CSocket::WaitNonBlockCompletion(int nTimeout, int nType)
{
fd_set fd;
struct timeval time;
time.tv_sec = nTimeout/1000;
time.tv_usec = (nTimeout-time.tv_sec*1000)*1000;
FD_ZERO(&fd);
FD_SET(m_sock, &fd);
int rc=0;
if (nType==0)
rc = select(m_sock+1, &fd, NULL, NULL, &time);
else if (nType==1)
rc = select(m_sock+1, NULL, &fd, NULL, &time);
if (rc==-1)
return -1;// error
else if (rc==0)
return 1;//timeout
if (FD_ISSET(m_sock, &fd))
return 0;
else
return -1;
}
bool APISocket::CSocket::GetLocalPort(unsigned int& nPort)
{
struct sockaddr_in self;
memset(&self, 0, sizeof(self));
uint len=sizeof(self);
if (getsockname( m_sock, (struct sockaddr*)&self, &len ))
return false;
nPort=ntohs(self.sin_port);
return true;
}
bool APISocket::CSocket::GetRemotePort(unsigned int& nPort)
{
struct sockaddr_in self;
memset(&self, 0, sizeof(self));
int len=sizeof(self);
if (getpeername( m_sock, (struct sockaddr*)&self, (socklen_t *) &len ))
return false;
nPort=ntohs(self.sin_port);
return true;
}
bool APISocket::CSocket::GetRemoteIP(char* szRemoteIP)
{
struct sockaddr_in self;
memset(&self, 0, sizeof(self));
uint len=sizeof(self);
if (getpeername( m_sock, (struct sockaddr*)&self, &len ))
return false;
sprintf(szRemoteIP, "%s", inet_ntoa(self.sin_addr));
return true;
}
int APISocket::CSocket::Attach(int sock)
{
int old=m_sock;
m_sock=sock;
return old;
}
int APISocket::CSocket::Detach()
{
int old=m_sock;
m_sock=0;
return old;
}
void APISocket::CSocket::OnClose()
{
}
void APISocket::CSocket::OnError(int error)
{
errored = true;
g_globals.m_logger.WriteFormated("CSocket::OnError sock = %d err = %d", m_sock, error);
}
void APISocket::CSocket::OnReceive(char* buff, int len)
{
}
void APISocket::CSocket::OnSend(char* buff, int &len)
{
len = 0;
}
void APISocket::CSocket::OnWrite()
{
errored = false;
int r = Send();
}
void APISocket::CSocket::OnRead()
{
errored = false;
int len_to_read = ReadableByteCount();
if (len_to_read <= 0) return;
if (len_to_read > 65000) /////////////
len_to_read = 65000; ////////////
char *buff = new char[len_to_read];
int len_readed = len_to_read;
int r = Receive(buff, len_readed);
if (len_readed <= 0)
{
delete [] buff;
return;
}
OnReceive(buff, len_readed);
delete[] buff;
}
int APISocket::CSocket::ReadableByteCount()
{
if (!m_sock)
return 0;
int bytesAvailable = 0;
if (ioctl(m_sock, FIONREAD, &bytesAvailable) == -1)
{
if (errno == EINVAL)
bytesAvailable = -1;
else
bytesAvailable = 0;
}
return bytesAvailable;
}
int APISocket::CSocket::Send()
{
if (!m_sock || errored)
return 1;
char *buff = new char[MAX_BUFFER];
int len = MAX_BUFFER;
OnSend(buff, len);
int ret = 0;
if (len > 0)
ret = Send(buff, len);
delete [] buff;
return ret;
}
int APISocket::CSocket::getSocket()
{
return m_sock;
}
bool APISocket::CSocket::StartAsync()
{
if (m_hAsyncThread)
return true;
inAsyncNotificationLoop = false;
shouldAsyncQuit = 0;
hasAsyncQuit = 0;
if (!(m_hAsyncThread = CreateThread(0, 0, AsyncThreadProc, this, 0, &m_dwAsyncThread)))
return false;
return true;
}
bool APISocket::CSocket::StopAsync()
{
if (!m_hAsyncThread)
return true;
shouldAsyncQuit = true;
m_csAsync.Lock();
m_csAsync.Unlock();
bool stopResult = ShutdownThread(m_hAsyncThread, THREAD_STOP_TIMEOUT, &shouldAsyncQuit, &hasAsyncQuit);
m_hAsyncThread = 0;
m_dwAsyncThread = 0;
return stopResult;
}
void APISocket::CSocket::AsyncNotifications()
{
if (!m_sock) return;
fd_set read_fds, write_fds;
FD_ZERO(&read_fds);
FD_ZERO(&write_fds);
FD_SET(m_sock, &read_fds);
FD_SET(m_sock, &write_fds);
int res = select(m_sock + 1, &read_fds, &write_fds, NULL, NULL);
if (res > 0)
{
if (FD_ISSET(m_sock, &read_fds))
{
if (ReadableByteCount())
{
inAsyncNotificationLoop = true;
OnRead();
}
else
{
inAsyncNotificationLoop = true;
OnError(GetLastError());
shouldAsyncQuit = true;
return;
}
}
if (FD_ISSET(m_sock, &write_fds))
{
inAsyncNotificationLoop = true;
OnWrite();
}
}
inAsyncNotificationLoop = true;
}
void APISocket::CSocket::AsyncNotificationLoop()
{
while (!shouldAsyncQuit)
{
AsyncNotifications();
Sleep(10000);
}
inAsyncNotificationLoop = false;
m_hAsyncThread = 0;
m_dwAsyncThread = 0;
hasAsyncQuit = 1;
}
unsigned long APISocket::CSocket::AsyncThreadProc(void* lpParameter)
{
APISocket::CSocket *socket = (APISocket::CSocket*)lpParameter;
socket->m_csAsync.Lock();
socket->AsyncNotificationLoop();
socket->m_csAsync.Unlock();
Sleep(50000);
return 0;
}
================================================
FILE: Bundles/Echoware/CritSection.cpp
================================================
#include "StdAfx.h"
#include "critsection.h"
#include "errno.h"
CCritSection::CCritSection(void)
{
pthread_mutex_init(&m_critSection, NULL);
}
CCritSection::~CCritSection(void)
{
if (pthread_mutex_destroy(&m_critSection) == EBUSY)
{
Unlock();
pthread_mutex_destroy(&m_critSection);
}
}
void CCritSection::Lock()
{
pthread_testcancel();
pthread_mutex_lock(&m_critSection);
}
void CCritSection::Unlock()
{
pthread_mutex_unlock(&m_critSection);
pthread_testcancel();
}
================================================
FILE: Bundles/Echoware/CritSection.h
================================================
#ifndef _CRITSECTION_H
#define _CRITSECTION_H
#if _MSC_VER > 1000
#pragma once
#endif
#include "EchoToOSX.h"
//critical section class
class CCritSection
{
public:
CCritSection(void);
virtual ~CCritSection(void);
void Lock();
void Unlock();
protected:
pthread_mutex_t m_critSection;
//CRITICAL_SECTION m_critSection;
};
#endif
================================================
FILE: Bundles/Echoware/DataChannel.cpp
================================================
#include "StdAfx.h"
#include "DataChannel.h"
#include "DataChannels.h"
#include "LocalDataChannel.h"
#include "EchoSrvDataChannel.h"
#include "DllProxyInfo.h"
#define RSA_PUBLIC_KEY 80
#pragma warning(disable : 4355)
CDataChannel::CDataChannel(CDataChannels* pDataChannels, const char* szChannelCode,
const char* szSessionKey, bool bEncryptDecrypt) :
m_localListener(this), m_bEncryptDecrypt(bEncryptDecrypt)
{
m_bLocalDC=false;
m_pDataChannels=pDataChannels;
m_pLocalDataChannel=new CLocalDataChannel(this);
m_pEchoServerDataChannel=new CEchoSrvDataChannel(this);
const CDllProxyInfo* pProxyInfo=pDataChannels->GetProxyInfo();
m_pLocalDataChannel->SetTimeouts(pProxyInfo->GetConnectTimeout()*1000,
pProxyInfo->GetSendTimeout()*1000,
pProxyInfo->GetReceiveTimeout()*1000);
m_pEchoServerDataChannel->SetTimeouts(pProxyInfo->GetConnectTimeout()*1000,
pProxyInfo->GetSendTimeout()*1000,
pProxyInfo->GetReceiveTimeout()*1000);
m_szChannelCode=new char[12];
strcpy(m_szChannelCode, szChannelCode);
m_szSessionKey=new char[1024];
strcpy(m_szSessionKey, szSessionKey);
m_aes.SetEncryptKey((const unsigned char*)m_szSessionKey, 128);
m_aes.SetDecryptKey((const unsigned char*)m_szSessionKey, 128);
g_globals.m_logger.WriteFormated("CDataChannel: New data channel: code=%s , encrypt=%c", szChannelCode, (m_bEncryptDecrypt)?('Y'):('N'));
}
#pragma warning(default : 4355)
CDataChannel::~CDataChannel(void)
{
StopListen();
if (m_pEchoServerDataChannel)
{
// m_pEchoServerDataChannel->Shutdown(SD_BOTH);
m_pEchoServerDataChannel->Close();
m_pEchoServerDataChannel->StopSend(THREAD_STOP_TIMEOUT);
}
if (m_pLocalDataChannel)
{
// m_pLocalDataChannel->Shutdown(SD_BOTH);
m_pLocalDataChannel->Close();
m_pLocalDataChannel->StopSend(THREAD_STOP_TIMEOUT);
}
if (m_pEchoServerDataChannel)
{
delete m_pEchoServerDataChannel;
m_pEchoServerDataChannel=0;
}
if (m_pLocalDataChannel)
{
delete m_pLocalDataChannel;
m_pLocalDataChannel=0;
}
delete []m_szChannelCode;
delete []m_szSessionKey;
}
bool CDataChannel::ConnectEchoServer()
{
g_globals.m_logger.Write("=>ConnectEchoServer");
if (!m_pEchoServerDataChannel->Create() ||
m_pEchoServerDataChannel->Connect(m_pDataChannels->GetProxyInfo()->GetIP(),
atoi(m_pDataChannels->GetProxyInfo()->GetPort()),
m_szChannelCode,
m_pDataChannels->GetProxyInfo()->GetMyID())!=0)
{
OnError(m_pEchoServerDataChannel, 1);
g_globals.m_logger.WriteFormated("CDataChannel: Error connect data channel %p to channel code %s", this, m_szChannelCode);
return false;
}
m_pLocalDataChannel->SetPairChannel(m_pEchoServerDataChannel);
m_pEchoServerDataChannel->SetPairChannel(m_pLocalDataChannel);
m_pEchoServerDataChannel->SetOffLoadingDataChannel(true);
m_pEchoServerDataChannel->StartSend();
g_globals.m_logger.Write("<=ConnectEchoServer");
return true;
}
bool CDataChannel::ConnectLocalServer()
{
m_pDataChannels->LocalConnectDataChannel(this);
return true;
}
//try to connect to the local server on the port nPort
bool CDataChannel::ConnectLocalServer(unsigned int nPort)
{
//g_globals.m_logger.Write("=>CDataChannel::ConnectLocalServer");
m_crtLocalDCSection.Lock();
if (m_bLocalDC)
{
m_crtLocalDCSection.Unlock();
return true;
}
g_globals.m_logger.WriteFormated("=>Try connect local server port: %d", nPort);
APISocket::CClientSocket client;
if (!client.Create())
{
m_crtLocalDCSection.Unlock();
g_globals.m_logger.Write("<=Try connect local server - error create");
return false;
}
client.SetBlockMode(false);
const CDllProxyInfo* pProxyInfo=m_pDataChannels->GetProxyInfo();
client.SetTimeouts(pProxyInfo->GetConnectTimeout(), pProxyInfo->GetSendTimeout(), pProxyInfo->GetReceiveTimeout());
int connectRes = client.Connect("127.0.0.1", nPort);
if (connectRes != 0)
{
m_crtLocalDCSection.Unlock();
g_globals.m_logger.WriteFormated("<=Try connect local server - error connect err code: %d", connectRes);
return false;
}
m_bLocalDC=true;
OnLocalDataChannel(client.Detach(), true);
g_globals.m_logger.Write("<=Try connect local server - success");
m_crtLocalDCSection.Unlock();
return true;
}
//start to listen for local connections
bool CDataChannel::Listen(unsigned int& nPort)
{
g_globals.m_logger.Write("CDataChannel: Enter Listen for local client");
if (!m_localListener.Create())
return false;
if (!m_localListener.Listen())
return false;
nPort=m_localListener.GetListenPort();
if (!m_localListener.StartAccept())
return false;
g_globals.m_logger.Write("CDataChannel: Listen for local client started");
return true;
}
//stop listen for local connections
void CDataChannel::StopListen()
{
m_localListener.Close();
m_localListener.StopAccept(5000);
}
//notify that there was an error on sockets operations
void CDataChannel::OnError(APISocket::CSocket* pSocket, unsigned int err)
{
if (m_pEchoServerDataChannel == pSocket)
{
g_globals.m_logger.WriteFormated("CDataChannel: Start Remove data channel %p due to error on echochannel %d", this, err);
if (m_pDataChannels)
m_pDataChannels->RemoveDataChannel(this);
g_globals.m_logger.WriteFormated("CDataChannel: End Remove data channel %p", this);
}
else
{
if (m_pEchoServerDataChannel->m_bOffLoadingDataChannel && (m_pEchoServerDataChannel->m_nRetryCounter < RECONNECTION_COUNT))
{
g_globals.m_logger.WriteFormated("CDataChannel: Start trying reuse datachannel %p due to error on localchannel %d", this, err);
((APISocket::CClientSocket*)pSocket)->StopSend(THREAD_STOP_TIMEOUT);
((APISocket::CClientSocket*)pSocket)->StopAsync();
m_pEchoServerDataChannel->ResetRetryTimer();
m_pEchoServerDataChannel->m_fStartRetry = true;
g_globals.m_logger.WriteFormated("CDataChannel: End trying reuse datachannel %p due to error on localchannel %d", this, err);
return;
}
g_globals.m_logger.WriteFormated("CDataChannel: Start Remove data channel %p due to error on localchannel %d", this, err);
if (m_pDataChannels)
m_pDataChannels->RemoveDataChannel(this);
g_globals.m_logger.WriteFormated("CDataChannel: End Remove data channel %p", this);
}
}
//sets the encryption level
void CDataChannel::SetEncriptionLevel(int nLevel)
{
m_pEchoServerDataChannel->SetEncriptionLevel(nLevel);
}
//gets the encryption level
int CDataChannel::GetEncriptionLevel()
{
return m_pEchoServerDataChannel->GetEncriptionLevel();
}
//notify that we have a local connection
//there are 2 types of local connections : OffLoadingDataChannel or not
//try to create the data channel to echoServer
void CDataChannel::OnLocalDataChannel(unsigned int sock, bool bOffLoadingDataChannel/*=false*/)
{
m_pLocalDataChannel->Attach(sock);
//m_pLocalDataChannel->SetOffLoadingDataChannel(bOffLoadingDataChannel);
if (!bOffLoadingDataChannel)
{
g_globals.m_logger.WriteFormated("CDataChannel: Try connect data channel %p to channel code %s", this, m_szChannelCode);
if (!m_pEchoServerDataChannel->Create() ||
m_pEchoServerDataChannel->Connect(m_pDataChannels->GetProxyInfo()->GetIP(),
atoi(m_pDataChannels->GetProxyInfo()->GetPort()),
m_szChannelCode,
m_pDataChannels->GetProxyInfo()->GetMyID())!=0)
{
OnError(m_pEchoServerDataChannel, 1);
g_globals.m_logger.WriteFormated("CDataChannel: Error connect data channel %p to channel code %s", this, m_szChannelCode);
return;
}
g_globals.m_logger.WriteFormated("CDataChannel: Success connect data channel %p to channel code %s", this, m_szChannelCode);
m_pLocalDataChannel->SetPairChannel(m_pEchoServerDataChannel);
m_pEchoServerDataChannel->SetPairChannel(m_pLocalDataChannel);
m_pEchoServerDataChannel->StartSend();
}
m_pLocalDataChannel->StartSend();
}
================================================
FILE: Bundles/Echoware/DataChannel.h
================================================
#ifndef _DATACHANNEL_H
#define _DATACHANNEL_H
#if _MSC_VER > 1000
#pragma once
#endif
class CDataChannels;
class CLocalDataChannel;
class CEchoSrvDataChannel;
class CLocalDCTimer;
#include "LocalListener.h"
#include "AES.h"
//class for pair Local connection<->echoServer connection
class CDataChannel
{
public:
CDataChannel(CDataChannels* pDataChannels, const char* szChannelCode,
const char* szSessionKey, bool bEncryptDecrypt);
virtual ~CDataChannel(void);
//connect to echoServer
bool ConnectEchoServer();
//connect to local server
bool ConnectLocalServer();
//connect to local server
bool ConnectLocalServer(unsigned int nPort);
//listen for local client
bool Listen(unsigned int& nPort);
void StopListen();
void OnError(APISocket::CSocket* pSocket, unsigned int err);
//sets the encryption level for this data channel
void SetEncriptionLevel(int nLevel);
//gets the encryption level for this data channel
int GetEncriptionLevel();
//a local connection
void OnLocalDataChannel(unsigned int sock, bool bOffLoadingDataChannel=false);
const char* GetSessionKey(){return m_szSessionKey;}
CLocalDataChannel* m_pLocalDataChannel;
protected:
//the data channels manager
CDataChannels* m_pDataChannels;
CLocalListener m_localListener;
CEchoSrvDataChannel* m_pEchoServerDataChannel;
char* m_szChannelCode;
char* m_szSessionKey;
public:
CAES m_aes;
bool m_bEncryptDecrypt;
CCritSection m_crtLocalDCSection;
bool m_bLocalDC;
};
#endif
================================================
FILE: Bundles/Echoware/DataChannelSocket.cpp
================================================
#include "StdAfx.h"
#include "datachannelsocket.h"
#include "DataChannel.h"
CDataChannelSocket::CDataChannelSocket(CDataChannel* pDataChannel)
{
m_pDataChannel=pDataChannel;
m_pRecvBuffer=new CBuffer();
m_pSendBuffer=new CBuffer();
m_nEncriptionLevel=1;
m_pPairChannel=0;
}
CDataChannelSocket::~CDataChannelSocket(void)
{
StopSend(THREAD_STOP_TIMEOUT);
Close();
delete m_pRecvBuffer;
m_pRecvBuffer=0;
delete m_pSendBuffer;
m_pSendBuffer=0;
}
void CDataChannelSocket::OnReceive(char* buff, int len)
{
m_pPairChannel->WriteData(buff, len);
}
void CDataChannelSocket::OnSend(char* buff, int& len)
{
len = m_pSendBuffer->Read(buff, len);
}
void CDataChannelSocket::OnError(int error)
{
CClientSocket::OnError(error);
m_pDataChannel->OnError(this, error);
}
//sets the pair data channel for this data channel
void CDataChannelSocket::SetPairChannel(CDataChannelSocket* pPairChannel)
{
m_pPairChannel=pPairChannel;
}
//gets the pair data channel for this data channel
CDataChannelSocket* CDataChannelSocket::GetPairChannel()
{
return m_pPairChannel;
}
void CDataChannelSocket::ReadData(char* buff, unsigned int& read_size)
{
read_size = m_pRecvBuffer->Read(buff, read_size);
}
void CDataChannelSocket::WriteData(char* buff, unsigned int write_size)
{
m_pSendBuffer->Write(buff, write_size);
}
//sets the encryption level for this data channel
void CDataChannelSocket::SetEncriptionLevel(int nLevel)
{
m_nEncriptionLevel=nLevel;
}
//gets the encryption level for this data channel
int CDataChannelSocket::GetEncriptionLevel()
{
return m_nEncriptionLevel;
}
================================================
FILE: Bundles/Echoware/DataChannelSocket.h
================================================
#ifndef _DATACHANNELSOCKET_H
#define _DATACHANNELSOCKET_H
#if _MSC_VER > 1000
#pragma once
#endif
#include "apisocket.h"
class CDataChannel;
class CBuffer;
//data channel socket class
//a base class for CLocalDataChannel class and CEchoSrvDataChannel class
class CDataChannelSocket :
public APISocket::CClientSocket
{
public:
CDataChannelSocket(CDataChannel* pDataChannel);
virtual ~CDataChannelSocket(void);
//notification : there are data to read
//[in] len : length of data
//[in] buff: data
virtual void OnReceive(char* buff, int len);
//notification : can send data
//[in] len : length of data
//[in] buff: data
virtual void OnSend(char* buff, int& len);
//notification : receive error
//[out] error
virtual void OnError(int error);
//sets the pair data channel for this data channel
void SetPairChannel(CDataChannelSocket* pPairChannel);
//gets the pair data channel for this data channel
CDataChannelSocket* GetPairChannel();
void ReadData(char* buff, unsigned int& read_size);
void WriteData(char* buff, unsigned int write_size);
//sets the encryption level for this data channel
void SetEncriptionLevel(int nLevel);
//gets the encryption level for this data channel
int GetEncriptionLevel();
protected:
//the parent data channel
CDataChannel* m_pDataChannel;
//buffers for recv/send on socket
CBuffer* m_pRecvBuffer;
CBuffer* m_pSendBuffer;
//the pair data channel for this data channel
CDataChannelSocket* m_pPairChannel;
int m_nEncriptionLevel;
};
#endif
================================================
FILE: Bundles/Echoware/DataChannel_timer.cpp
================================================
#include "StdAfx.h"
#include "DataChannel.h"
#include "DataChannels.h"
#include "LocalDataChannel.h"
#include "EchoSrvDataChannel.h"
#include "DllProxyInfo.h"
#define RSA_PUBLIC_KEY 80
#pragma warning(disable : 4355)
CDataChannel::CDataChannel(CDataChannels* pDataChannels, const char* szChannelCode,
const char* szSessionKey, bool bEncryptDecrypt) :
m_localListener(this), m_bEncryptDecrypt(bEncryptDecrypt)
{
m_pLocalDCTimer=new CLocalDCTimer(this);
m_bLocalDC=false;
m_pDataChannels=pDataChannels;
m_pLocalDataChannel=new CLocalDataChannel(this);
m_pEchoServerDataChannel=new CEchoSrvDataChannel(this);
const CDllProxyInfo* pProxyInfo=pDataChannels->GetProxyInfo();
m_pLocalDataChannel->SetTimeouts(pProxyInfo->GetConnectTimeout()*1000,
pProxyInfo->GetSendTimeout()*1000,
pProxyInfo->GetReceiveTimeout()*1000);
m_pEchoServerDataChannel->SetTimeouts(pProxyInfo->GetConnectTimeout()*1000,
pProxyInfo->GetSendTimeout()*1000,
pProxyInfo->GetReceiveTimeout()*1000);
m_szChannelCode=new char[12];
strcpy(m_szChannelCode, szChannelCode);
m_szSessionKey=new char[1024];
strcpy(m_szSessionKey, szSessionKey);
m_aes.SetEncryptKey((const unsigned char*)m_szSessionKey, 128);
m_aes.SetDecryptKey((const unsigned char*)m_szSessionKey, 128);
g_globals.m_logger.WriteFormated("CDataChannel: New data channel: code=%s , encrypt=%c", szChannelCode, (m_bEncryptDecrypt)?('Y'):('N'));
}
#pragma warning(default : 4355)
CDataChannel::~CDataChannel(void)
{
if (m_pLocalDCTimer)
{
delete m_pLocalDCTimer;
m_pLocalDCTimer=0;
}
StopListen();
if (m_pEchoServerDataChannel)
{
m_pEchoServerDataChannel->Shutdown(SD_BOTH);
m_pEchoServerDataChannel->Close();
m_pEchoServerDataChannel->StopReceive(THREAD_STOP_TIMEOUT);
m_pEchoServerDataChannel->StopSend(THREAD_STOP_TIMEOUT);
}
if (m_pLocalDataChannel)
{
m_pLocalDataChannel->Shutdown(SD_BOTH);
m_pLocalDataChannel->Close();
m_pLocalDataChannel->StopReceive(THREAD_STOP_TIMEOUT);
m_pLocalDataChannel->StopSend(THREAD_STOP_TIMEOUT);
}
if (m_pEchoServerDataChannel)
{
delete m_pEchoServerDataChannel;
m_pEchoServerDataChannel=0;
}
if (m_pLocalDataChannel)
{
delete m_pLocalDataChannel;
m_pLocalDataChannel=0;
}
delete []m_szChannelCode;
delete []m_szSessionKey;
}
bool CDataChannel::ConnectEchoServer()
{
g_globals.m_logger.Write("=>ConnectEchoServer");
if (!m_pEchoServerDataChannel->Create() ||
m_pEchoServerDataChannel->Connect(m_pDataChannels->GetProxyInfo()->GetIP(),
atoi(m_pDataChannels->GetProxyInfo()->GetPort()),
m_szChannelCode,
m_pDataChannels->GetProxyInfo()->GetMyID())!=0)
{
OnError(m_pEchoServerDataChannel, 1);
g_globals.m_logger.WriteFormated("CDataChannel: Error connect data channel %p to channel code %s", this, m_szChannelCode);
return false;
}
m_pLocalDataChannel->SetPairChannel(m_pEchoServerDataChannel);
m_pEchoServerDataChannel->SetPairChannel(m_pLocalDataChannel);
m_pEchoServerDataChannel->SetOffLoadingDataChannel();
m_pEchoServerDataChannel->StartReceive();
m_pEchoServerDataChannel->StartSend();
//ConnectLocalServer();
m_pLocalDCTimer->SetTimer(CONNECTION_TO_OFFLOAD_TIMER_VALUE);
g_globals.m_logger.Write("<=ConnectEchoServer");
return true;
}
bool CDataChannel::ConnectLocalServer()
{
m_pDataChannels->LocalConnectDataChannel(this);
return true;
}
//try to connect to the local server on the port nPort
bool CDataChannel::ConnectLocalServer(unsigned int nPort)
{
g_globals.m_logger.Write("=>CDataChannel::ConnectLocalServer");
m_crtLocalDCSection.Lock();
if (m_bLocalDC)
{
m_crtLocalDCSection.Unlock();
return true;
}
if (m_pLocalDCTimer)
{
delete m_pLocalDCTimer;
m_pLocalDCTimer=0;
}
g_globals.m_logger.Write("=>Try connect local server");
APISocket::CClientSocket client;
if (!client.Create())
{
m_crtLocalDCSection.Unlock();
g_globals.m_logger.Write("<=Try connect local server - error create");
return false;
}
client.SetBlockMode(false);
const CDllProxyInfo* pProxyInfo=m_pDataChannels->GetProxyInfo();
client.SetTimeouts(pProxyInfo->GetConnectTimeout(), pProxyInfo->GetSendTimeout(), pProxyInfo->GetReceiveTimeout());
if (client.Connect("127.0.0.1", nPort)!=0)
{
m_crtLocalDCSection.Unlock();
g_globals.m_logger.Write("<=Try connect local server - error connect");
return false;
}
m_bLocalDC=true;
OnLocalDataChannel(client.Detach(), true);
g_globals.m_logger.Write("<=Try connect local server - success");
m_crtLocalDCSection.Unlock();
return true;
}
//start to listen for local connections
bool CDataChannel::Listen(unsigned int& nPort)
{
g_globals.m_logger.Write("CDataChannel: Enter Listen for local client");
if (!m_localListener.Create())
return false;
if (!m_localListener.Listen())
return false;
nPort=m_localListener.GetListenPort();
if (!m_localListener.StartAccept())
return false;
g_globals.m_logger.Write("CDataChannel: Listen for local client started");
return true;
}
//stop listen for local connections
void CDataChannel::StopListen()
{
m_localListener.Close();
m_localListener.StopAccept(5000);
}
//notify that there was an error on sockets operations
void CDataChannel::OnError(APISocket::CSocket* pSocket, unsigned int err)
{
g_globals.m_logger.WriteFormated("CDataChannel: Start Remove data channel %p", this);
if (m_pDataChannels)
m_pDataChannels->RemoveDataChannel(this);
g_globals.m_logger.WriteFormated("CDataChannel: End Remove data channel %p", this);
}
//sets the encryption level
void CDataChannel::SetEncriptionLevel(int nLevel)
{
m_pEchoServerDataChannel->SetEncriptionLevel(nLevel);
}
//gets the encryption level
int CDataChannel::GetEncriptionLevel()
{
return m_pEchoServerDataChannel->GetEncriptionLevel();
}
//notify that we have a local connection
//there are 2 types of local connections : OffLoadingDataChannel or not
//try to create the data channel to echoServer
void CDataChannel::OnLocalDataChannel(unsigned int sock, bool bOffLoadingDataChannel/*=false*/)
{
m_pLocalDataChannel->Attach(sock);
m_pLocalDataChannel->m_bOffLoadingDataChannel=bOffLoadingDataChannel;
if (!bOffLoadingDataChannel)
{
g_globals.m_logger.WriteFormated("CDataChannel: Try connect data channel %p to channel code %s", this, m_szChannelCode);
if (!m_pEchoServerDataChannel->Create() ||
m_pEchoServerDataChannel->Connect(m_pDataChannels->GetProxyInfo()->GetIP(),
atoi(m_pDataChannels->GetProxyInfo()->GetPort()),
m_szChannelCode,
m_pDataChannels->GetProxyInfo()->GetMyID())!=0)
{
OnError(m_pEchoServerDataChannel, 1);
g_globals.m_logger.WriteFormated("CDataChannel: Error connect data channel %p to channel code %s", this, m_szChannelCode);
return;
}
g_globals.m_logger.WriteFormated("CDataChannel: Success connect data channel %p to channel code %s", this, m_szChannelCode);
m_pLocalDataChannel->SetPairChannel(m_pEchoServerDataChannel);
m_pEchoServerDataChannel->SetPairChannel(m_pLocalDataChannel);
m_pEchoServerDataChannel->StartReceive();
m_pEchoServerDataChannel->StartSend();
}
m_pLocalDataChannel->StartReceive();
m_pLocalDataChannel->StartSend();
}
================================================
FILE: Bundles/Echoware/DataChannels.cpp
================================================
#include "StdAfx.h"
#include "DataChannels.h"
#include "DataChannel.h"
#include "pthread.h"
#define WM_REMOVE_CHANNEL (WM_USER+1)
#define WM_REMOVE_ALLCHANNEL (WM_USER+2)
#define WM_LOCAL_CONNECT_DC (WM_USER+3)
CDataChannels::CDataChannels(CDllProxyInfo* pProxyInfo)
{
pthread_mutex_init(&m_ManageThreadMutex, NULL);
pthread_cond_init(&m_ManageThreadCond, NULL);
m_nEncriptionLevel=1;
m_pProxyInfo=pProxyInfo;
removeChannel = 0;
localConnectDC = 0;
removeAllChannels = false;
shouldQuit = 0;
hasQuit = 0;
m_hManageThread=CreateThread(0, 0, ManageThreadProc, this, 0, &m_dwManageThread);
}
CDataChannels::~CDataChannels(void)
{
shouldQuit=1;
pthread_cond_signal(&m_ManageThreadCond);
ShutdownThread(m_hManageThread, THREAD_STOP_TIMEOUT, &shouldQuit, &hasQuit);
m_hManageThread=0;
m_dwManageThread=0;
}
//adds a data channel to the list
void CDataChannels::AddDataChannel(CDataChannel* pDataChannel)
{
g_globals.m_logger.WriteFormated("CDataChannels: Enter Add data channel %p", pDataChannel);
m_critSection.Lock();
m_lstDataChannels.push_back(pDataChannel);
pDataChannel->SetEncriptionLevel(m_nEncriptionLevel);
m_critSection.Unlock();
g_globals.m_logger.WriteFormated("CDataChannels: Exit Add data channel %p, count=%d", pDataChannel, m_lstDataChannels.size());
}
void CDataChannels::InternalRemoveDataChannel(CDataChannel* pDataChannel)
{
g_globals.m_logger.WriteFormated("CDataChannels: Enter Remove data channel %p", pDataChannel);
m_critSection.Lock();
size_t size=m_lstDataChannels.size();
m_lstDataChannels.remove(pDataChannel);
if (m_lstDataChannels.size()::iterator it=m_lstDataChannels.begin(); it!=m_lstDataChannels.end(); it++)
{
i++;
CDataChannel* pDataChannel=(CDataChannel*)(*it);
g_globals.m_logger.WriteFormated("Remove channel %d %d", i, pDataChannel);
delete pDataChannel;
*it=0;
}
m_lstDataChannels.clear();
g_globals.m_logger.Write("CDataChannels: Remove all data channel");
m_critSection.Unlock();
}
//removes a data channel from the list
void CDataChannels::RemoveDataChannel(CDataChannel* pDataChannel)
{
if (m_hManageThread)
{
pthread_mutex_lock(&m_ManageThreadMutex);
removeChannel = pDataChannel;
pthread_mutex_unlock(&m_ManageThreadMutex);
pthread_cond_signal(&m_ManageThreadCond);
}
}
//removes all the data channels from the list
void CDataChannels::RemoveAllDataChannels()
{
if (m_hManageThread)
{
pthread_mutex_lock(&m_ManageThreadMutex);
removeAllChannels = true;
pthread_mutex_unlock(&m_ManageThreadMutex);
pthread_cond_signal(&m_ManageThreadCond);
}
}
//sets the encryption level for this proxy connection
void CDataChannels::SetEncriptionLevel(int nLevel)
{
m_critSection.Lock();
m_nEncriptionLevel=nLevel;
for(std::list::iterator it=m_lstDataChannels.begin(); it!=m_lstDataChannels.end(); it++)
((CDataChannel*)*it)->SetEncriptionLevel(nLevel);
m_critSection.Unlock();
}
//gets the encryption level for this proxy connection
int CDataChannels::GetEncriptionLevel()
{
return m_nEncriptionLevel;
}
void CDataChannels::LocalConnectDataChannel(CDataChannel* pDataChannel)
{
if (m_hManageThread)
{
pthread_mutex_lock(&m_ManageThreadMutex);
localConnectDC = pDataChannel;
pthread_mutex_unlock(&m_ManageThreadMutex);
pthread_cond_signal(&m_ManageThreadCond);
}
}
void CDataChannels::InternalLocalConnectDataChannel(CDataChannel* pDataChannel)
{
//g_globals.m_logger.WriteFormated("CDataChannels: Enter InternalLocalConnectDataChannel data channel %p", pDataChannel);
m_critSection.Lock();
for (std::list::iterator it=m_lstDataChannels.begin(); it!=m_lstDataChannels.end(); it++)
{
if (*it==pDataChannel)
{
if (!pDataChannel->ConnectLocalServer(g_globals.GetPortForOffLoadingData()))
{
RemoveDataChannel(pDataChannel);
}
break;
}
}
m_critSection.Unlock();
//g_globals.m_logger.WriteFormated("CDataChannels: Exit InternalLocalConnectDataChannel data channel %p", pDataChannel);
}
#include "InterfaceDllProxyInfo.h"
#include "DllProxyInfo.h"
unsigned long __stdcall CDataChannels::ManageThreadProc(void* lpParameter)
{
CDataChannels* pDataChannels=(CDataChannels*)lpParameter;
while (true)
{
pthread_cond_wait(&pDataChannels->m_ManageThreadCond, &pDataChannels->m_ManageThreadMutex);
if (pDataChannels->shouldQuit)
{
pthread_mutex_unlock(&pDataChannels->m_ManageThreadMutex);
break;
}
if (pDataChannels->removeChannel)
{
pDataChannels->InternalRemoveDataChannel(pDataChannels->removeChannel);
pDataChannels->removeChannel=0;
}
if (pDataChannels->removeAllChannels)
{
pDataChannels->removeAllChannels=FALSE;
pDataChannels->InternalRemoveAllDataChannels();
}
if (pDataChannels->localConnectDC)
{
pDataChannels->InternalLocalConnectDataChannel(pDataChannels->localConnectDC);
pDataChannels->localConnectDC=0;
}
pthread_mutex_unlock(&pDataChannels->m_ManageThreadMutex);
}
pDataChannels->hasQuit=true;
pthread_cond_destroy(&pDataChannels->m_ManageThreadCond);
pthread_mutex_destroy(&pDataChannels->m_ManageThreadMutex);
return 0;
}
================================================
FILE: Bundles/Echoware/DataChannels.h
================================================
#ifndef _DATACHANNELS_H
#define _DATACHANNELS_H
#if _MSC_VER > 1000
#pragma once
#endif
class CDataChannel;
class CDllProxyInfo;
#include "CritSection.h"
#include
#include "pthread.h"
//data channels manager
//manages all data channels for a proxy connection
class CDataChannels
{
public:
CDataChannels(CDllProxyInfo* pProxyInfo);
virtual ~CDataChannels(void);
//adds a data channel to the list
void AddDataChannel(CDataChannel* pDataChannel);
//removes a data channel from the list
void RemoveDataChannel(CDataChannel* pDataChannel);
//removes all the data channels from the list
void RemoveAllDataChannels();
//make a local data channel connection
void LocalConnectDataChannel(CDataChannel* pDataChannel);
//sets the encryption level for this proxy connection
void SetEncriptionLevel(int nLevel);
//gets the encryption level for this proxy connection
int GetEncriptionLevel();
const CDllProxyInfo* GetProxyInfo() const {return m_pProxyInfo;}
// Thread communication flags
bool shouldQuit;
bool hasQuit;
bool removeAllChannels;
CDataChannel *removeChannel;
CDataChannel *localConnectDC;
pthread_cond_t m_ManageThreadCond;
pthread_mutex_t m_ManageThreadMutex;
protected:
void InternalRemoveDataChannel(CDataChannel* pDataChannel);
void InternalRemoveAllDataChannels();
void InternalLocalConnectDataChannel(CDataChannel* pDataChannel);
protected:
CCritSection m_critSection;
std::list m_lstDataChannels;
int m_nEncriptionLevel;
CDllProxyInfo* m_pProxyInfo;
protected:
void* m_hManageThread;
unsigned long m_dwManageThread;
//thread proc for manage data channel notifications
static unsigned long __stdcall ManageThreadProc(void* lpParameter);
};
#endif
================================================
FILE: Bundles/Echoware/DirService.cpp
================================================
/*
* DirService.cpp
* Echoware
*
* Created by admin on 4/11/07.
* Copyright 2007 __MyCompanyName__. All rights reserved.
*
*/
#include "DirService.h"
CDirService::CDirService()
{
tDirStatus dsStatus;
dsRef = 0;
dsSearchNodeRef = 0;
dsStatus = dsOpenDirService(&dsRef);
if (dsStatus != eDSNoErr)
{
cleanup();
return;
}
dsStatus = OpenSearchNode(dsRef, &dsSearchNodeRef);
if (dsStatus != eDSNoErr)
{
cleanup();
return;
}
}
CDirService::~CDirService()
{
cleanup();
}
void CDirService::cleanup()
{
if (dsSearchNodeRef)
dsCloseDirNode(dsSearchNodeRef);
dsSearchNodeRef = 0;
if (dsRef)
dsCloseDirService(dsRef);
dsRef = 0;
}
NSDictionary* CDirService::attributeDataForNodeOfType(const char* type,
const char* value,
const char* attr1,
const char* attr2,
const char* attr3,
const char* attr4,
const char* attr5,
const char* attr6)
{
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
tDirStatus dsStatus = eDSRecordNotFound;
tDataListPtr pAttribsToGet = NULL;
tDataListPtr pRecTypeList = NULL;
tDataListPtr pRecNameList = NULL;
tDataBufferPtr pSearchBuffer = NULL;
unsigned long ulRecCount = 0; // do not limit the number of records we are expecting
unsigned long ulBufferSize = 2048; // start with a 2k buffer for any data
// we will want the actual record name and the name of the node where the user resides
pAttribsToGet = dsBuildListFromStrings( dsRef, attr1, attr2, attr3, attr4, attr5, attr6 );
if( pAttribsToGet == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// build a list to search for user record
pRecNameList = dsBuildListFromStrings( dsRef, value, NULL );
if( pRecNameList == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// build a list of record types to search, in this case users
pRecTypeList = dsBuildListFromStrings( dsRef, type, NULL);
if( pRecTypeList == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// allocate a working buffer, this may be grown if we receive a eDSBufferTooSmall error
pSearchBuffer = dsDataBufferAllocate( dsRef, ulBufferSize );
if( pSearchBuffer == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// now search for the record using dsGetRecordList
dsStatus = dsGetRecordList( dsSearchNodeRef, pSearchBuffer, pRecNameList, eDSExact, pRecTypeList,
pAttribsToGet, 0, &ulRecCount, NULL );
// if there was not an error and we found only 1 record for this user
if( dsStatus == eDSNoErr && ulRecCount == 1 ) {
tAttributeListRef dsAttributeListRef = 0;
tRecordEntryPtr dsRecordEntryPtr = 0;
int ii;
// Get the 1st record entry from the buffer since we only expect 1 result
dsStatus = dsGetRecordEntry( dsSearchNodeRef, pSearchBuffer, 1, &dsAttributeListRef, &dsRecordEntryPtr );
if (dsStatus == eDSNoErr)
{
// loop through the attributes in the record to get the data we requested
// all indexes with Open Directory APIs start with 1 not 0
for (ii = 1 ; ii <= dsRecordEntryPtr->fRecordAttributeCount; ii++)
{
tAttributeEntryPtr dsAttributeEntryPtr = NULL;
tAttributeValueEntryPtr dsAttributeValueEntryPtr = NULL;
tAttributeValueListRef dsAttributeValueListRef = 0;
// get the attribute entry from the record
dsStatus = dsGetAttributeEntry( dsSearchNodeRef, pSearchBuffer, dsAttributeListRef, ii,
&dsAttributeValueListRef, &dsAttributeEntryPtr );
// get the value from the attribute if we were successful at getting an entry
if( dsStatus == eDSNoErr ) {
int valueIndex=1;
NSMutableArray* values = [NSMutableArray array];
while( (dsStatus = dsGetAttributeValue( dsSearchNodeRef, pSearchBuffer, valueIndex, dsAttributeValueListRef, &dsAttributeValueEntryPtr )) == eDSNoErr ) {
NSString* key = [NSString stringWithCString: dsAttributeEntryPtr->fAttributeSignature.fBufferData encoding: NSUTF8StringEncoding];
NSString* value = [NSString stringWithCString: dsAttributeValueEntryPtr->fAttributeValueData.fBufferData encoding: NSUTF8StringEncoding];
[values addObject:value];
if ([dict objectForKey:key]==nil) {
[dict setObject:values forKey:key];
}
valueIndex++;
}
}
// close any value list references that may have been opened
if( dsAttributeValueListRef != 0 ) {
dsCloseAttributeValueList( dsAttributeValueListRef );
dsAttributeValueListRef = 0;
}
// free the attribute value entry if we got an entry
if( dsAttributeValueEntryPtr != NULL ) {
dsDeallocAttributeValueEntry( dsRef, dsAttributeValueEntryPtr );
dsAttributeValueEntryPtr = NULL;
}
// free the attribute entry itself as well
if( dsAttributeEntryPtr != NULL ) {
dsDeallocAttributeEntry( dsRef, dsAttributeEntryPtr );
dsAttributeEntryPtr = NULL;
}
}
// close any reference to attribute list
if( dsAttributeListRef != 0 ) {
dsCloseAttributeList( dsAttributeListRef );
dsAttributeListRef = 0;
}
// deallocate the record entry
if( dsRecordEntryPtr != NULL ) {
dsDeallocRecordEntry( dsRef, dsRecordEntryPtr );
dsRecordEntryPtr = NULL;
}
}
} else if( dsStatus == eDSNoErr && ulRecCount > 1 ) {
// if we have more than 1 user, then we shouldn't attempt to authenticate
// we chose to return eDSAuthInvalidUserName as an error since we can't distinguish
// the specific user to return
dsStatus = eDSAuthInvalidUserName;
}
cleanup:
// if we allocated pAttribsToGet, we need to clean up
if( pAttribsToGet != NULL ) {
dsDataListDeallocate( dsRef, pAttribsToGet );
// need to free pointer as dsDataListDeallocate does not free it, just the list items
free( pAttribsToGet );
pAttribsToGet = NULL;
}
// if we allocated pRecTypeList, we need to clean up
if( pRecTypeList != NULL ) {
dsDataListDeallocate( dsRef, pRecTypeList );
// need to free pointer as dsDataListDeallocate does not free it, just the list items
free( pRecTypeList );
pRecTypeList = NULL;
}
// if we allocated pRecNameList, we need to clean up
if( pRecNameList != NULL ) {
dsDataListDeallocate( dsRef, pRecNameList );
// need to free pointer as dsDataListDeallocate does not free it, just the list items
free( pRecNameList );
pRecNameList = NULL;
}
// if we allocated pSearchBuffer, we need to clean up
if( pSearchBuffer != NULL ) {
dsDataBufferDeAllocate( dsRef, pSearchBuffer );
pSearchBuffer = NULL;
}
return dict;
}
bool CDirService::authenticateUser(const char* username, const char* password)
{
NSDictionary* userInfo = attributeDataForNodeOfType(kDSStdRecordTypeUsers, username, kDSNAttrRecordName, kDSNAttrMetaNodeLocation,
NULL, NULL, NULL, NULL);
NSString* recordName = [[userInfo objectForKey:[NSString stringWithCString:kDSNAttrRecordName encoding:NSUTF8StringEncoding]] objectAtIndex:0];
NSString* nodeLocation = [[userInfo objectForKey:[NSString stringWithCString:kDSNAttrMetaNodeLocation encoding:NSUTF8StringEncoding]] objectAtIndex:0];
bool rc = false;
if ([recordName length] > 0 && [nodeLocation length] > 0)
{
tDirNodeReference dsUserNodeRef = 0;
tDirStatus dsStatus;
tDataListPtr dsUserNodePath = dsBuildFromPath( dsRef, [nodeLocation cStringUsingEncoding:NSUTF8StringEncoding], "/" );
dsStatus = dsOpenDirNode( dsRef, dsUserNodePath, &dsUserNodeRef );
if ( dsStatus == eDSNoErr )
{
// Use our Utility routine to do the authentication
dsStatus = DoPasswordAuth( dsRef, dsUserNodeRef, kDSStdAuthNodeNativeClearTextOK,
[recordName cStringUsingEncoding:NSUTF8StringEncoding], password );
// Determine if successful. There are cases where you may receive other errors
// such as eDSAuthPasswordExpired.
if ( dsStatus == eDSNoErr )
{
rc = true;
}
}
// free the data list as it is no longer needed
dsDataListDeallocate( dsRef, dsUserNodePath );
free( dsUserNodePath );
dsUserNodePath = NULL;
}
return rc;
}
tDirStatus CDirService::OpenSearchNode(tDirReference inDSRef, tDirNodeReference *outNodeRef)
{
tDataBufferPtr pWorkingBuffer = NULL;
tDataListPtr pSearchNode = NULL;
tDirStatus dsStatus;
tContextData dsContext = NULL;
unsigned long ulReturnCount = 0;
// verify none of the parameters are NULL, if so return an eDSNullParameter
if( outNodeRef == NULL || inDSRef == 0 ) {
return eDSNullParameter;
}
// allocate a buffer to hold return information, defaulting to 4k
pWorkingBuffer = dsDataBufferAllocate( inDSRef, 4096 );
if( pWorkingBuffer == NULL ) {
return eMemoryAllocError;
}
// locate the name of the search node
dsStatus = dsFindDirNodes( inDSRef, pWorkingBuffer, NULL, eDSSearchNodeName, &ulReturnCount, &dsContext );
if( dsStatus == eDSNoErr ) {
// pass 1 for node index since there should only be one value
dsStatus = dsGetDirNodeName( inDSRef, pWorkingBuffer, 1, &pSearchNode );
}
// if we ended up with a context, we should release it
if( dsContext != NULL ) {
dsReleaseContinueData( inDSRef, dsContext );
dsContext = NULL;
}
// release the current working buffer
if( pWorkingBuffer != NULL ) {
dsDataBufferDeAllocate( inDSRef, pWorkingBuffer );
pWorkingBuffer = NULL;
}
// open search node
if( dsStatus == eDSNoErr && pSearchNode != NULL ) {
dsStatus = dsOpenDirNode( inDSRef, pSearchNode, outNodeRef );
}
// deallocate the tDataListPtr item used to locate the Search node
if( pSearchNode != NULL ) {
dsDataListDeallocate( inDSRef, pSearchNode );
// need to free pointer as dsDataListDeallocate does not free it, just the list items
free( pSearchNode );
pSearchNode = NULL;
}
return dsStatus;
} // OpenSearchNode
tDirStatus CDirService::DoPasswordAuth(tDirReference inDSRef, tDirNodeReference inNodeRef, const char *inAuthMethod,
const char *inRecordName, const char *inPassword)
{
tDirStatus dsStatus = eDSAuthFailed;
tDataNodePtr pAuthMethod = NULL;
tDataBufferPtr pAuthStepData = NULL;
tDataBufferPtr pAuthRespData = NULL;
tContextData pContextData = NULL;
// if any of our parameters are NULL, return a NULL parameter
// if a password is not set for a user, an empty string should be sent for the password
if( inDSRef == 0 || inNodeRef == 0 || inRecordName == NULL || inPassword == NULL ) {
return eDSNullParameter;
}
// since this is password based, we can only support password-based methods
if( strcmp(inAuthMethod, kDSStdAuthNodeNativeNoClearText) == 0 ||
strcmp(inAuthMethod, kDSStdAuthNodeNativeClearTextOK) == 0 ||
strcmp(inAuthMethod, kDSStdAuthClearText) == 0 ||
strcmp(inAuthMethod, kDSStdAuthCrypt) == 0 ) {
// turn the specified method into a tDataNode
pAuthMethod = dsDataNodeAllocateString( inDSRef, inAuthMethod );
if( pAuthMethod == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// allocate a buffer large enough to hold all the username and password plus length bytes
pAuthStepData = dsDataBufferAllocate( inDSRef, 4 + strlen(inRecordName) + 4 + strlen(inPassword) );
if( pAuthStepData == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// allocate a buffer for the out step data even though we don't expect anything,
// it is a required parameter
pAuthRespData = dsDataBufferAllocate( inDSRef, 128 );
if( pAuthRespData == NULL ) {
dsStatus = eMemoryAllocError;
goto cleanup;
}
// now place the username and password into the buffer
AppendStringToBuffer( pAuthStepData, inRecordName, strlen(inRecordName) );
AppendStringToBuffer( pAuthStepData, inPassword, strlen(inPassword) );
// attempt the authentication
dsStatus = dsDoDirNodeAuth( inNodeRef, pAuthMethod, 1, pAuthStepData, pAuthRespData, &pContextData );
} else {
// otherwise, return a parameter error
dsStatus = eDSAuthParameterError;
}
cleanup:
// release pContextData if we had continue data
if( pContextData != NULL ) {
dsReleaseContinueData( inDSRef, pContextData );
pContextData = NULL;
}
// deallocate memory for pAuthRespData if it was allocated
if( pAuthRespData != NULL ) {
dsDataNodeDeAllocate( inDSRef, pAuthRespData );
pAuthRespData = NULL;
}
// deallocate memory for pAuthStepData if it was allocated
if( pAuthStepData != NULL ) {
dsDataBufferDeAllocate( inDSRef, pAuthStepData );
pAuthStepData = NULL;
}
// deallocate memory for pAuthMethod if it was allocated
if( pAuthMethod != NULL ) {
dsDataNodeDeAllocate( inDSRef, pAuthMethod );
pAuthMethod = NULL;
}
return dsStatus;
} // DoPasswordAuth
#pragma mark Support Functions
tDirStatus CDirService::AppendStringToBuffer(tDataBufferPtr inBuffer, const char *inString, long inLength)
{
tDirStatus dsStatus = eDSBufferTooSmall;
// ensure neither of our parameters are NULL
if( inString == NULL || inBuffer == NULL ) {
return eDSNullParameter;
}
// check to see if we have enough room in the buffer for the string and the 4 byte length
if( inBuffer->fBufferSize >= (inBuffer->fBufferLength + 4 + inLength) ) {
char *pBufferEnd = inBuffer->fBufferData + inBuffer->fBufferLength;
// prepend the data with the length of the string
bcopy( &inLength, pBufferEnd, sizeof(long) );
pBufferEnd += sizeof( long );
// now add the string to the buffer
bcopy( inString, pBufferEnd, inLength );
// increase the buffer accordingly
inBuffer->fBufferLength += 4 + inLength;
// set successful error status
dsStatus = eDSNoErr;
}
return dsStatus;
} // AppendStringToBuffer
================================================
FILE: Bundles/Echoware/DirService.h
================================================
/*
* DirService.h
* Echoware
*
* Created by admin on 4/11/07.
* Copyright 2007 __MyCompanyName__. All rights reserved.
*
*/
#import
#import
class CDirService
{
private:
tDirReference dsRef;
tDirNodeReference dsSearchNodeRef;
tDirStatus OpenSearchNode(tDirReference inDSRef, tDirNodeReference *outNodeRef);
tDirStatus DoPasswordAuth(tDirReference inDSRef, tDirNodeReference inNodeRef, const char *inAuthMethod,
const char *inRecordName, const char *inPassword);
tDirStatus AppendStringToBuffer(tDataBufferPtr inBuffer, const char *inString, long inLength);
public:
CDirService();
virtual ~CDirService();
NSDictionary* attributeDataForNodeOfType(const char* type,
const char* value,
const char* attr1,
const char* attr2,
const char* attr3,
const char* attr4,
const char* attr5,
const char* attr6);
bool authenticateUser(const char* username, const char* password);
void cleanup();
};
================================================
FILE: Bundles/Echoware/DllProxyInfo.cpp
================================================
#include "stdafx.h"
#include "DllProxyInfo.h"
#include "globals.h"
CDllProxyInfo::CDllProxyInfo()
: m_strName("")
,m_strIP("")
,m_strPort("")
,m_strPass("")
,m_strMyID("")
,m_dwStatus(0)
,m_strIPPort("")
,m_bReconnectProxy(false)
{
m_nConnectTimeOut=m_nReceiveTimeOut=m_nSendTimeOut=30;
}
CDllProxyInfo::~CDllProxyInfo()
{
}
//Sets the Proxy Name for the proxy Info object
void CDllProxyInfo::SetName(char* name)
{
m_strName=name;
}
//Sets the IP Address of the proxy along with a specified Port
void CDllProxyInfo::SetIPPort(char* ipport)
{
char* p;
if ((p=strchr(ipport, ':')))
{
m_strIP.assign(ipport, p-ipport);
m_strPort.assign(p);
}
else
m_strIP=ipport;
m_strIPPort=ipport;
}
//Sets the IP Address of the proxy info Object
void CDllProxyInfo::SetIP(const char* ip)
{
m_strIP=ip;
m_strIPPort=m_strIP;
if (!m_strPort.empty())
m_strIPPort+=":"+m_strPort;
}
//Sets the port of the proxy info object
void CDllProxyInfo::SetPort(const char* port)
{
m_strPort=port;
m_strIPPort=m_strIP+":"+m_strPort;
}
//Sets the authentication channel password for the Proxy
void CDllProxyInfo::SetPassword(const char* pass)
{
m_strPass=pass;
}
//Sets the status of the proxy whether connected or not
void CDllProxyInfo::SetStatus(int Status, bool bStatus)
{
if (bStatus)
m_dwStatus |=Status;
else
m_dwStatus &=~Status;
}
//Set ID for authentication and/or identification with a proxy server
//Each proxyInfo object may have a different MyID value.
bool CDllProxyInfo::SetMyID(const char* MyID)
{
m_strMyID=MyID;
return true;
}
//Set timeouts for Connect, Receive, Send
bool CDllProxyInfo::SetSocketTimeout(int connectTimeout, int ReceiveTimeout, int SendTimeout)
{
m_nConnectTimeOut=connectTimeout;
m_nReceiveTimeOut=ReceiveTimeout;
m_nSendTimeOut=SendTimeout;
g_globals.m_logger.WriteFormated("CDllProxyInfo: connectTimeout=%d ReceiveTimeout=%d SendTimeout=%d", m_nConnectTimeOut, m_nReceiveTimeOut, m_nSendTimeOut);
return true;
}
//Retrieves the name of the Proxy
const char* CDllProxyInfo::GetName() const
{
return m_strName.c_str();
}
//Retrieves the IP and Port of the Proxy info together
const char* CDllProxyInfo::GetIpPort() const
{
if (m_strPort.empty())
return m_strIP.c_str();
return m_strIPPort.c_str();
}
//Retrieves the IP address for the Proxy Info
const char* CDllProxyInfo::GetIP() const
{
return m_strIP.c_str();
}
//Retrieves the Port for the Proxy
const char* CDllProxyInfo::GetPort() const
{
return m_strPort.c_str();
}
//Retrieves the authentication channel password of the Proxy
const char* CDllProxyInfo::GetPassword() const
{
return m_strPass.c_str();
}
//Retrieves the status of the Proxy, connected or not, the status of any "in-process"
//connection attempts, and all active data connections with those proxies.
int CDllProxyInfo::GetStatus() const
{
return m_dwStatus;
}
//Obtain the MyID value associated with a proxyInfo object
const char* CDllProxyInfo::GetMyID() const
{
return m_strMyID.c_str();
}
int CDllProxyInfo::GetConnectTimeout() const
{
return m_nConnectTimeOut;
}
int CDllProxyInfo::GetReceiveTimeout() const
{
return m_nReceiveTimeOut;
}
int CDllProxyInfo::GetSendTimeout() const
{
return m_nSendTimeOut;
}
bool CDllProxyInfo::GetReconnectProxy() const
{
return m_bReconnectProxy;
}
void CDllProxyInfo::SetReconnectProxy(bool bReconnectProxy)
{
m_bReconnectProxy=bReconnectProxy;
}
================================================
FILE: Bundles/Echoware/DllProxyInfo.h
================================================
#ifndef _PROXYINFO_H
#define _PROXYINFO_H
#if _MSC_VER > 1000
#pragma once
#endif
#include
#include "InterfaceDllProxyInfo.h"
//#define ID_STRING_SIZE 255
//IDllProxyInfo implementation
class CDllProxyInfo : public IDllProxyInfo
{
protected:
std::string m_strName;
std::string m_strIP;
std::string m_strPort;
std::string m_strPass;
std::string m_strMyID;
DWORD m_dwStatus;
int m_nConnectTimeOut, m_nReceiveTimeOut, m_nSendTimeOut;
std::string m_strIPPort;
bool m_bReconnectProxy;
public:
CDllProxyInfo();
virtual ~CDllProxyInfo();
virtual void SetName(char* name);
virtual void SetIPPort(char* ipport);
virtual void SetIP(const char* ip);
virtual void SetPort(const char* port);
virtual void SetPassword(const char* pass);
virtual void SetStatus(int Status, bool bStatus);
virtual bool SetMyID(const char* MyID);
virtual bool SetSocketTimeout(int connectTimeout, int ReceiveTimeout, int SendTimeout);
virtual void SetReconnectProxy(bool bReconnectProxy);
virtual const char* GetName() const;
virtual const char* GetIpPort() const;
virtual const char* GetIP() const;
virtual const char* GetPort() const;
virtual const char* GetPassword() const;
virtual int GetStatus() const;
virtual const char* GetMyID() const;
virtual bool GetReconnectProxy()const;
virtual int GetConnectTimeout() const;
virtual int GetReceiveTimeout() const;
virtual int GetSendTimeout() const;
};
#endif
================================================
FILE: Bundles/Echoware/EchoController.h
================================================
/* EchoController */
#import
class CServerListSynchronize;
class CCritSection;
class CMyDllProxyInfo;
@interface EchoController : NSObject
{
NSTabView *mainTabView;
IBOutlet NSView *echoServersView;
@public IBOutlet NSTableView *echoTableView;
IBOutlet NSButton *addButton;
IBOutlet NSButton *editButton;
IBOutlet NSButton *removeButton;
IBOutlet NSWindow *addServerWindow;
IBOutlet NSWindow *editServerWindow;
IBOutlet NSTextFieldCell *echoServerField;
IBOutlet NSTextFieldCell *usernameField;
IBOutlet NSTextFieldCell *passwordField;
IBOutlet NSTextFieldCell *echoServerField_edit;
IBOutlet NSTextFieldCell *usernameField_edit;
IBOutlet NSTextFieldCell *passwordField_edit;
IBOutlet NSButton *advancedSettingsButton;
IBOutlet NSWindow *advancedSettingsWindow;
IBOutlet NSButton *proxyAuthenticationCheckbox;
IBOutlet NSTextField *proxyAddress;
IBOutlet NSTextField *proxyPort;
IBOutlet NSTextField *proxyUsername;
IBOutlet NSTextField *proxyUsernameLabel;
IBOutlet NSTextField *proxyPassword;
IBOutlet NSTextField *proxyPasswordLabel;
IBOutlet NSButton *disableEchoCheckbox;
IBOutlet NSButton *enableLoggingCheckbox;
//IBOutlet NSButton *useAESCheckbox; YS: 21.12.2006 due to remove "128 bit encryption" button
IBOutlet NSTextField *versionTextField;
@public NSMutableArray *echoServers;
@public NSMutableArray *echoInfoProxys;
@public NSMutableArray *echoInfoProxysToRemove;
int m_nEditIndex;
CServerListSynchronize *m_ServerList;
CCritSection *m_critSection;
}
- (void) loadGUI: sender;
- (void) setOffloadingPort: (id)sender;
- (void) loadServerList;
- (void) loadProxyFields;
- (void) reloadData;
- (void) selectRow: (int)row;
- (void) removeRow: (int)row removeProxy: (bool)rmProxy removeServer: (bool)rmServer;
- (CMyDllProxyInfo*) getDllProxyInfo: (int)row;
- (void) addInfo: (CMyDllProxyInfo*)info;
- (void) saveData;
- (NSString*) GetColumnValue: (int)row column: (NSString*)col;
- (void)windowWillClose: (NSNotification*)aNotification;
- (IBAction)addServer:(id)sender;
- (IBAction)advancedSettings:(id)sender;
- (IBAction)cancelAddServer:(id)sender;
- (IBAction)cancelAdvancedSettings:(id)sender;
- (IBAction)completeAddServer:(id)sender;
- (IBAction)completeAdvancedSettings:(id)sender;
- (IBAction)disableEcho:(id)sender;
- (IBAction)enableLogging:(id)sender;
- (IBAction)removeServer:(id)sender;
- (IBAction)requireProxyAuthentication:(id)sender;
- (IBAction)useEncryption:(id)sender;
- (IBAction)editServer:(id)sender;
- (IBAction)cancelEditServer:(id)sender;
- (IBAction)completeEditServer:(id)sender;
@end
================================================
FILE: Bundles/Echoware/EchoController.m
================================================
#import "EchoController.h"
#import "Echoware.h"
#import "InterfaceDLLProxyInfo.h"
#import "unistd.h"
#include
#include
#include "User.h"
#include "ProxiesManager.h"
#include "MyDllProxyInfo.h"
#include "globals.h"
#include "ServerListSynchronize.h"
#include "CritSection.h"
static EchoController *sharedEchoController;
@interface NSString (EchoExtenstions)
- (NSData *) nullTerminatedData;
@end
@implementation NSString (EchoExtenstions)
- (NSData *) nullTerminatedData
{
return [NSData dataWithBytes:[self lossyCString] length:[self cStringLength]+1];
}
@end
@implementation EchoController (RFBBundle)
+ (void) loadGUI
{
sharedEchoController = [[self alloc] init];
}
+ (void) rfbUsage
{
}
#include "rfbserver.h"
#include "RFBBundleWrapper.h"
+ (void) rfbStartup: theServer
{
CRFBBundleWrapper::GetInstance()->rfb_port = ((rfbserver*)theServer)->rfbPort;
CRFBBundleWrapper::GetInstance()->is_rfb = true;
CRFBBundleWrapper::GetInstance()->UserDefaultsChecking();
CRFBBundleWrapper::GetInstance()->startRunLoop();
}
+ (void) rfbRunning
{
}
+ (void) rfbPoll
{
}
+ (void) rfbReceivedClientMessage
{
}
+ (void) rfbShutdown
{
CRFBBundleWrapper::FreeInstance();
}
@end
@implementation EchoController
- init
{
self = [super init];
if (self)
{
echoInfoProxys = [[NSMutableArray alloc] init];
echoInfoProxysToRemove = [[NSMutableArray alloc] init];
m_nEditIndex = -1;
m_critSection = new CCritSection();
m_ServerList = new CServerListSynchronize();
[self loadGUI: self];
NSLog(@"Starting Threads...");
m_ServerList->Init();
m_ServerList->Start(self);
NSLog(@"Starting Threads done...");
}
}
- (void)windowWillClose: (NSNotification*)aNotification;
{
NSLog(@"Terminating Threads...");
if (m_ServerList)
m_ServerList->Terminate();
NSLog(@"Terminating Threads done...");
NSLog(@"Disconnecting All Connections...");
bool disconnected = DisconnectAllProxies();
NSLog(@"Disconnecting All Connections done... %d", disconnected);
if (m_ServerList)
delete m_ServerList;
m_ServerList = NULL;
if (m_critSection)
delete m_critSection;
m_critSection = NULL;
[echoInfoProxys removeAllObjects];
[echoInfoProxysToRemove removeAllObjects];
[echoInfoProxys release];
[echoInfoProxysToRemove release];
[echoServers removeAllObjects];
[echoServers release];
m_nEditIndex = -1;
}
- (void) loadGUI: sender
{
NSEnumerator *viewEnum = [[[[[NSApp delegate] window] contentView] subviews] objectEnumerator];
while (mainTabView = [viewEnum nextObject])
if ([mainTabView isKindOfClass:[NSTabView class]])
break;
if (mainTabView)
{
if ([NSBundle loadNibNamed:@"EchoServers" owner:self])
NSLog(@"EchoServer Gui loaded");
else
NSLog(@"EchoServer Gui loading Error %d", errno);
NSRect rect = [[mainTabView window] frame];
rect.size.width += 80;
[[mainTabView window] setFrame: rect display: YES];
}
else
{ // Sometimes we aren't able to get the main window, let's try again
[self performSelector:@selector(loadGUI:) withObject:self afterDelay:1.0];
}
}
- (BOOL) canWriteToFile: (NSString *) path
{
if ([[NSFileManager defaultManager] fileExistsAtPath:path])
return [[NSFileManager defaultManager] isWritableFileAtPath:path];
else
return [[NSFileManager defaultManager] isWritableFileAtPath:[path stringByDeletingLastPathComponent]];
}
- (void) setOffloadingPort: (id)sender
{
SetPortForOffLoadingData((int) [[NSApp delegate] runningPortNum]);
}
- (void) awakeFromNib
{
if (InitializeProxyDll())
{
NSTabViewItem *newTab = [[NSTabViewItem alloc] initWithIdentifier:@"Echo"];
//SetLoggingOptions(TRUE, "/tmp/EchoServer.log");
//YS: choose log file, where we can write
NSArray *logFiles = [NSArray arrayWithObjects:
[[NSUserDefaults standardUserDefaults] stringForKey:@"LogFile"],
@"/var/log/OSXvnc-server.log",
@"~/Library/Logs/OSXvnc-server.log",
[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"OSXvnc-server.log"],
@"/tmp/OSXvnc-server.log",
nil];
NSEnumerator *logEnumerators = [logFiles objectEnumerator];
// Find first writable location for the log file
NSString *logFile = nil;
while (logFile = [logEnumerators nextObject])
{
logFile = [logFile stringByStandardizingPath];
if ([logFile length] && [self canWriteToFile:logFile])
{
[logFile retain];
break;
}
}
//
//converto from NSString to char*
int len_logFile = [logFile length];
char pLogFile[len_logFile + 1];
strncpy(pLogFile, [logFile cString], len_logFile);
pLogFile[len_logFile] = '\0';
//
bool enableLog = [[NSUserDefaults standardUserDefaults] boolForKey:@"EnableLogging"];
[enableLoggingCheckbox setState: enableLog];
SetLoggingOptions(enableLog, pLogFile);
SetPortForOffLoadingData((int) [[NSApp delegate] runningPortNum]);
[disableEchoCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"EchoDisabled"]];
[self disableEcho:self];
//YS: 21.12.2006 due to remove "128 bit encryption" button
//[useAESCheckbox setState: [[NSUserDefaults standardUserDefaults] boolForKey:@"EchoAESEncryption"]];
[self loadProxyFields];
[newTab setLabel:@"echoServer"];
[mainTabView addTabViewItem:newTab];
[newTab setView:echoServersView];
NSString *first = [NSString stringWithCString: GetDllVersion()];
NSString *second = [NSString stringWithFormat: @"EchoWare version %@", first];
[versionTextField setStringValue: second];
NSLog(second);
[self loadServerList];
[self saveData];
[echoTableView setTarget:self];
[echoTableView setDoubleAction:@selector(editServer:)];
}
}
- (void) loadProxyFields
{
// The EchoDLL expects us to manage memory on these strings that are passed in so we'll make some NSData objects
static id proxyStringsDictionary = nil;
NSString *proxyAddrString = [[NSUserDefaults standardUserDefaults] stringForKey:@"EchoProxyAddr"];
NSString *proxyPortString = [[NSUserDefaults standardUserDefaults] stringForKey:@"EchoProxyPort"];
NSString *proxyUserString = [[NSUserDefaults standardUserDefaults] stringForKey:@"EchoProxyUser"];
NSString *proxyPassString = [[NSUserDefaults standardUserDefaults] stringForKey:@"EchoProxyPass"];
/* Load To GUI */
if (proxyAddrString)
[proxyAddress setStringValue: proxyAddrString];
if ([proxyPortString intValue])
[proxyPort setIntValue: [proxyPortString intValue]];
if (proxyUserString)
{
[proxyUsername setStringValue: proxyUserString];
if (proxyPassString)
[proxyPassword setStringValue: proxyPassString];
else
proxyPassString = @"";
[proxyAuthenticationCheckbox setState: TRUE];
}
else
{
proxyUserString = @"";
proxyPassString = @"";
}
[self requireProxyAuthentication:self];
// Load to EchoWare
if ([proxyAddrString length] && [proxyPortString intValue])
{
[proxyStringsDictionary release];
proxyStringsDictionary = [[NSMutableDictionary alloc] init];
[proxyStringsDictionary setObject:[proxyAddrString nullTerminatedData] forKey:@"EchoProxyAddr"];
[proxyStringsDictionary setObject:[proxyPortString nullTerminatedData] forKey:@"EchoProxyPort"];
if (proxyUserString)
[proxyStringsDictionary setObject:[proxyUserString nullTerminatedData] forKey:@"EchoProxyUser"];
else
[proxyStringsDictionary setObject:[@"" nullTerminatedData] forKey:@"EchoProxyUser"];
if (proxyPassString)
[proxyStringsDictionary setObject:[proxyPassString nullTerminatedData] forKey:@"EchoProxyPass"];
else
[proxyStringsDictionary setObject:[@"" nullTerminatedData] forKey:@"EchoProxyPass"];
SetLocalProxyInfo((char *) [[proxyStringsDictionary objectForKey:@"EchoProxyAddr"] bytes],
(char *) [[proxyStringsDictionary objectForKey:@"EchoProxyPort"] bytes],
(char *) [[proxyStringsDictionary objectForKey:@"EchoProxyUser"] bytes],
(char *) [[proxyStringsDictionary objectForKey:@"EchoProxyPass"] bytes]);
}
}
- (void) createEchoServerFromDictionary: (NSMutableDictionary *) echoDict
{
IDllProxyInfo* proxyInfo = (IDllProxyInfo*)CreateProxyInfoClassObject();
[echoDict setObject:[[[echoDict objectForKey:@"IPAddress"] nullTerminatedData] retain] forKey:@"IPAddress_cStringData"];
proxyInfo->SetIP((const char *)[[echoDict objectForKey:@"IPAddress_cStringData"] bytes]);
if ([echoDict objectForKey:@"Port"])
{
[echoDict setObject:[[[echoDict objectForKey:@"Port"] nullTerminatedData] retain] forKey:@"Port_cStringData"];
proxyInfo->SetPort((const char *)[[echoDict objectForKey:@"Port_cStringData"] bytes]);
}
else
proxyInfo->SetPort("1328");
if ([echoDict objectForKey:@"User"])
{
[echoDict setObject:[[[echoDict objectForKey:@"User"] nullTerminatedData] retain] forKey:@"User_cStringData"];
proxyInfo->SetMyID((char *)[[echoDict objectForKey:@"User_cStringData"] bytes]);
}
if ([echoDict objectForKey:@"Pass"])
{
[echoDict setObject:[[[echoDict objectForKey:@"Pass"] nullTerminatedData] retain] forKey:@"Pass_cStringData"];
proxyInfo->SetPassword((const char *)[[echoDict objectForKey:@"Pass_cStringData"] bytes]);
}
//YS: 21.12.2006 due to remove "128 bit encryption" button
//old code: SetEncryptionLevel([useAESCheckbox state], proxyInfo);
SetEncryptionLevel(1, proxyInfo);//nnn
CMyDllProxyInfo *pMyProxyInfo = new CMyDllProxyInfo(proxyInfo);
pMyProxyInfo->setStatus(CMyDllProxyInfo::Connecting);
[self addInfo: pMyProxyInfo];
[echoTableView displayRect:[echoTableView rectOfRow:[echoInfoProxys count]]];
[echoTableView setNeedsDisplay:YES];
[echoTableView displayIfNeeded];
}
- (void) loadServerList
{
NSUserDefaults *uDef = [NSUserDefaults standardUserDefaults];
NSEnumerator *echoEnum = [[uDef objectForKey:@"EchoServers"] objectEnumerator];
NSMutableDictionary *anEchoServer = nil;
[echoServers release];
echoServers = [[NSMutableArray alloc] init];
while (anEchoServer = [[[echoEnum nextObject] mutableCopy] autorelease])
{
[echoServers addObject: anEchoServer];
[self createEchoServerFromDictionary: anEchoServer];
}
[uDef setObject:echoServers forKey: @"EchoServers"];
}
#include
-(NSString*) GetComputerName
{
CFStringRef name = NULL;
NSString *computerName = NULL;
name = SCDynamicStoreCopyComputerName(NULL, NULL);
if (name != NULL)
computerName = [NSString stringWithString:(NSString*)name];
CFRelease(name);
return computerName;
}
- (IBAction)addServer:(id)sender
{
//YS: 21.12.2006 due to set by default all edits on add server screen
{
NSString *server_default = @"demo.echovnc.com";
NSString *password_default = @"demo2007";
NSString *username_default = [self GetComputerName];
if (username_default == NULL)
username_default = @"VineServerDemo";
[echoServerField setStringValue: server_default];
[usernameField setStringValue: username_default];
[passwordField setStringValue: password_default];
}
[NSApp beginSheet:addServerWindow
modalForWindow:[echoServersView window]
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
- (IBAction)cancelAddServer:(id)sender
{
[NSApp endSheet:addServerWindow returnCode:NSAlertAlternateReturn];
[addServerWindow orderOut:self];
}
- (IBAction)completeAddServer:(id)sender
{
NSMutableDictionary *newEchoServer = [[NSMutableDictionary alloc] init];
[addServerWindow makeFirstResponder:[addServerWindow nextResponder]];
NSArray *serverAndPort = [[echoServerField stringValue] componentsSeparatedByString:@":"];
if ([[serverAndPort objectAtIndex:0] length])
{
[newEchoServer setObject:[serverAndPort objectAtIndex:0] forKey:@"IPAddress"];
if ([serverAndPort count] > 1)
[newEchoServer setObject:[serverAndPort objectAtIndex:1] forKey:@"Port"];
if ([[usernameField stringValue] length])
{
NSString * tmp = [usernameField stringValue];
tmp = [tmp stringByAppendingString: @":vnc"];
[newEchoServer setObject:tmp forKey:@"User"];
}
if ([[passwordField stringValue] length])
[newEchoServer setObject:[passwordField stringValue] forKey:@"Pass"];
[echoServers addObject:newEchoServer];
}
[NSApp endSheet:addServerWindow returnCode:NSAlertDefaultReturn];
[addServerWindow orderOut:self];
[self createEchoServerFromDictionary: newEchoServer];
[self reloadData];
[self selectRow: [echoServers count] - 1];
[self saveData];
}
- (IBAction)removeServer:(id)sender
{
int index = [echoTableView selectedRow];
if (index >= 0)
{
CMyDllProxyInfo *pMyProxyInfo = [self getDllProxyInfo: index];
if (pMyProxyInfo == NULL)
return;
if (pMyProxyInfo->getStatus() == CMyDllProxyInfo::Removing)
return;
[self removeRow: index removeProxy: true removeServer: true];
[self reloadData];
if (index >= [echoServers count])
index = [echoServers count] - 1;
[self selectRow: index];
[self saveData];
pMyProxyInfo->setStatus(CMyDllProxyInfo::Removing);
[echoInfoProxysToRemove addObject: [NSValue valueWithPointer: pMyProxyInfo]];
}
}
- (IBAction)advancedSettings:(id)sender
{
[NSApp beginSheet:advancedSettingsWindow
modalForWindow:[echoServersView window]
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
- (IBAction)cancelAdvancedSettings:(id)sender
{
[NSApp endSheet:advancedSettingsWindow returnCode:NSAlertAlternateReturn];
[advancedSettingsWindow orderOut:self];
[self loadProxyFields];
}
- (IBAction)completeAdvancedSettings:(id)sender
{
[[NSUserDefaults standardUserDefaults] setObject:[proxyAddress stringValue] forKey:@"EchoProxyAddr"];
[[NSUserDefaults standardUserDefaults] setInteger:[proxyPort intValue] forKey:@"EchoProxyPort"];
if ([proxyAuthenticationCheckbox state])
{
[[NSUserDefaults standardUserDefaults] setObject:[proxyUsername stringValue] forKey:@"EchoProxyUser"];
[[NSUserDefaults standardUserDefaults] setObject:[proxyPassword stringValue] forKey:@"EchoProxyPass"];
}
else
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"EchoProxyUser"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"EchoProxyPass"];
}
[[NSUserDefaults standardUserDefaults] synchronize];
[self loadProxyFields];
[NSApp endSheet:advancedSettingsWindow returnCode:NSAlertDefaultReturn];
[advancedSettingsWindow orderOut:self];
}
- (IBAction)requireProxyAuthentication:(id)sender
{
BOOL enabled = [proxyAuthenticationCheckbox state];
[proxyUsername setEnabled:enabled];
[proxyPassword setEnabled:enabled];
[proxyUsernameLabel setTextColor:(enabled ? [NSColor blackColor] : [NSColor grayColor])];
[proxyPasswordLabel setTextColor:(enabled ? [NSColor blackColor] : [NSColor grayColor])];
}
- (IBAction)disableEcho:(id)sender
{
BOOL disabled = [disableEchoCheckbox state];
[addButton setEnabled:!disabled];
[advancedSettingsButton setEnabled:!disabled];
[echoTableView setEnabled:!disabled];
[removeButton setEnabled:!disabled];
//YS: 21.12.2006 due to remove "128 bit encryption" button
//[useAESCheckbox setEnabled:!disabled];
[[NSUserDefaults standardUserDefaults] setBool:disabled forKey:@"EchoDisabled"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (IBAction)enableLogging:(id)sender
{
bool enabled = [enableLoggingCheckbox state];
EnableLogging(enabled);
[[NSUserDefaults standardUserDefaults] setBool: enabled forKey: @"EnableLogging"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (IBAction)useEncryption:(id)sender
{
id proxyEnum = [echoInfoProxys objectEnumerator];
NSValue *aProxyValue = nil;
while (aProxyValue = [proxyEnum nextObject])
{
//YS: 21.12.2006 due to remove "128 bit encryption" button
//old code: SetEncryptionLevel([useAESCheckbox state], [aProxyValue pointerValue]);
SetEncryptionLevel(1, [aProxyValue pointerValue]);
}
//YS: 21.12.2006 due to remove "128 bit encryption" button
//[[NSUserDefaults standardUserDefaults] setBool:[useAESCheckbox state] forKey:@"EchoAESEncryption"];
//[[NSUserDefaults standardUserDefaults] synchronize];
}
- (IBAction)editServer:(id)sender
{
m_nEditIndex = [echoTableView selectedRow];
if (m_nEditIndex >= 0)
{
CMyDllProxyInfo *pMyProxyInfo = [self getDllProxyInfo: m_nEditIndex];
if (pMyProxyInfo == NULL)
return;
IDllProxyInfo *echoProxyInfo = pMyProxyInfo->getDllProxyInfo();
if (pMyProxyInfo->getStatus() == CMyDllProxyInfo::Removing
|| pMyProxyInfo->getStatus() == CMyDllProxyInfo::Connecting
|| pMyProxyInfo->getStatus() == CMyDllProxyInfo::Reconnecting)
return;
int nLen = strlen(echoProxyInfo->GetMyID());
char* sTmp = new char[nLen + 1];
memset(sTmp, 0, nLen + 1);
memcpy(sTmp, echoProxyInfo->GetMyID(), nLen);
char* p = strstr(sTmp, ":");
if (p != NULL)
*p = 0;
NSString *username = [NSString stringWithCString:sTmp];
delete sTmp;
NSString *password =[NSString stringWithCString: echoProxyInfo->GetPassword()];
NSString *server = [NSString stringWithCString: echoProxyInfo->GetIpPort()];
[echoServerField_edit setStringValue: server];
[usernameField_edit setStringValue: username];
[passwordField_edit setStringValue: password];
[NSApp beginSheet:editServerWindow
modalForWindow:[echoServersView window]
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
}
- (IBAction)cancelEditServer:(id)sender
{
[NSApp endSheet:editServerWindow returnCode:NSAlertAlternateReturn];
[editServerWindow orderOut:self];
}
- (IBAction)completeEditServer:(id)sender
{
[editServerWindow makeFirstResponder:[editServerWindow nextResponder]];
[NSApp endSheet:editServerWindow returnCode:NSAlertDefaultReturn];
[editServerWindow orderOut:self];
if (m_nEditIndex >= 0)
{
CMyDllProxyInfo *pMyProxyInfo = [self getDllProxyInfo: m_nEditIndex];
if (pMyProxyInfo == NULL) return;
IDllProxyInfo *echoProxyInfo = pMyProxyInfo->getDllProxyInfo();
NSString *username = [usernameField_edit stringValue];
username = [username stringByAppendingString: @":vnc"];
NSString *password = [passwordField_edit stringValue];
int len_username = [username length];
int len_password = [password length];
char pUsername[len_username + 1];
char pPassword[len_password + 1];
strncpy(pUsername, [username cString], len_username);
strncpy(pPassword, [password cString], len_password);
pUsername[len_username] = 0;
pPassword[len_password] = 0;
echoProxyInfo->SetMyID(pUsername);
echoProxyInfo->SetPassword(pPassword);
NSMutableDictionary *echoDict = [[[echoServers objectAtIndex: m_nEditIndex] mutableCopy] autorelease];
[echoDict setObject: username forKey: @"User"];
[echoDict setObject: password forKey: @"Pass"];
[echoDict setObject: [[username nullTerminatedData] retain] forKey:@"User_cStringData"];
[echoDict setObject: [[password nullTerminatedData] retain] forKey:@"Pass_cStringData"];
[echoServers replaceObjectAtIndex: m_nEditIndex withObject: echoDict];
pMyProxyInfo->setStatus(CMyDllProxyInfo::Reconnecting);
[self reloadData];
[self selectRow: m_nEditIndex];
[self saveData];
}
}
- (void) reloadData
{
m_critSection->Lock();
[echoTableView reloadData];
m_critSection->Unlock();
}
- (void) selectRow: (int)row;
{
m_critSection->Lock();
[echoTableView selectRow: row byExtendingSelection: false];
m_critSection->Unlock();
}
- (void) removeRow: (int)row removeProxy: (bool)rmProxy removeServer: (bool)rmServer;
{
m_critSection->Lock();
if (rmProxy)
[echoInfoProxys removeObjectAtIndex: row];
if (rmServer)
[echoServers removeObjectAtIndex: row];
m_critSection->Unlock();
}
- (CMyDllProxyInfo*) getDllProxyInfo: (int)row
{
CMyDllProxyInfo *res = NULL;
m_critSection->Lock();
if (row >= 0 && row < [echoInfoProxys count])
res = (CMyDllProxyInfo*)[[echoInfoProxys objectAtIndex: row] pointerValue];
m_critSection->Unlock();
return res;
}
- (void) addInfo: (CMyDllProxyInfo*)info
{
m_critSection->Lock();
[echoInfoProxys addObject: [NSValue valueWithPointer: info]];
m_critSection->Unlock();
}
- (void) saveData
{
m_critSection->Lock();
NSUserDefaults *suDefaults = [NSUserDefaults standardUserDefaults];
[suDefaults setObject:echoServers forKey:@"EchoServers"];
[suDefaults synchronize];
m_critSection->Unlock();
}
- (NSString*) GetColumnValue: (int)row column: (NSString*)col
{
NSString* res = @"";
if (col && row >= 0)
{
NSDictionary *echoServer = [echoServers objectAtIndex: row];
CMyDllProxyInfo *pMyProxyInfo = (CMyDllProxyInfo *)[[echoInfoProxys objectAtIndex: row] pointerValue];
IDllProxyInfo *proxyInfo = pMyProxyInfo->getDllProxyInfo();
if ([col isEqualToString:@"echoServer"])
{
if (proxyInfo->GetName() != nil)
res = [NSString stringWithCString:proxyInfo->GetName() encoding:NSUTF8StringEncoding];
else
res = @"";
}
else if ([col isEqualToString:@"IP"])
{
if ([echoServer objectForKey:@"Port"])
res = [NSString stringWithFormat:@"%@:%@", [echoServer objectForKey:@"IPAddress"], [echoServer objectForKey:@"Port"]];
else
res = [NSString stringWithFormat:@"%@", [echoServer objectForKey:@"IPAddress"]];
}
else if ([col isEqualToString:@"Status"])
{
res = [NSString stringWithCString: pMyProxyInfo->getStatusString()];
}
else if ([col isEqualToString:@"User"])
{
int nLen = strlen(proxyInfo->GetMyID());
char* sTmp = new char[nLen + 1];
memset(sTmp, 0, nLen + 1);
memcpy(sTmp, proxyInfo->GetMyID(), nLen);
char* p = strstr(sTmp, ":");
if (p != NULL)
*p = 0;
res = [NSString stringWithCString:sTmp encoding:NSUTF8StringEncoding];
delete sTmp;
}
}
return res;
}
@end
@implementation EchoController (TableDataSource)
- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
return [echoServers count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
return [self GetColumnValue: row column: [tableColumn identifier]];
}
@end
================================================
FILE: Bundles/Echoware/EchoSrvDataChannel.cpp
================================================
#include "StdAfx.h"
#include "echosrvdatachannel.h"
#include "localdatachannel.h"
#include "NetPacket.h"
#include "DataChannel.h"
CEchoSrvDataChannel::CEchoSrvDataChannel(CDataChannel* pDataChannel)
:CDataChannelSocket(pDataChannel)
{
m_bOffLoadingDataChannel = false;
ResetOffLoadingTimer();
ResetRetryTimer();
m_nRetryCounter = 0;
m_fStartRetry = false;
}
CEchoSrvDataChannel::~CEchoSrvDataChannel(void)
{
g_globals.m_logger.WriteFormated("CEchoSrvDataChannel: send buff=%d, rec buff=%d", m_pSendBuffer->Size(), m_pRecvBuffer->Size());
}
bool CEchoSrvDataChannel::Connect(const char* szIP, unsigned int nPort)
{
if (CDataChannelSocket::Connect(szIP, nPort)==0)
return true;
return g_globals.m_proxiesManager.ConnectViaProxy(this, szIP, nPort);
}
//connects tis data channel to echoServer and authenticating this connection
int CEchoSrvDataChannel::Connect(const char* szServer, unsigned int nPort, const char* szChannelCode, const char* szMyID)
{
if (!Connect(szServer, nPort))
return -1;
DWORD dwTemp = ID_STRING_SIZE;
DWORD dwTotalLength = ID_STRING_SIZE;
dwTotalLength += CHANNEL_CODE_SIZE;//(DWORD)strlen(szChannelCode)+1;
char *pBuff = new char[dwTotalLength];
g_globals.GetFormattedID(pBuff, dwTotalLength, szMyID);
memcpy(pBuff+dwTemp, szChannelCode, strlen(szChannelCode)+1);
SendMessage(MSG_DATA_CHANNEL_CONNECT,pBuff,dwTotalLength);
delete[] pBuff;
m_dwOffLoadingTime = GetTickCount();
return 0;
}
//message composer
void CEchoSrvDataChannel::SendMessage(DWORD message, char *data, unsigned int datalen)
{
char* lpBuf = NULL;
DWORD nBytesSent = 0;
CProxyMsg msg(message );
NetPacketHeader header;
header.len = msg.MakeMessage(&header, lpBuf, data, datalen); //create the message
DWORD dwToSend = OSSwapHostToLittleInt32(header.len + sizeof(DWORD));
m_pSendBuffer->Write(&dwToSend, sizeof(DWORD));
m_pSendBuffer->Write(lpBuf, header.len);
Send();
if (lpBuf)
delete lpBuf;
}
void CEchoSrvDataChannel::OnReceive(char* buff, int len)
{
CDataChannelSocket::OnReceive(buff, len);
if (m_bOffLoadingDataChannel)
m_pDataChannel->ConnectLocalServer();
m_pPairChannel->Send();
}
void CEchoSrvDataChannel::OnSend(char* buff, int& len)
{
CDataChannelSocket::OnSend(buff, len);
if (len > 0)
g_globals.m_logger.WriteFormated("CEchoSrvDataChannel::OnSend sock = %d len = %d", getSocket(), len);
}
void CEchoSrvDataChannel::OnError(int error)
{
CDataChannelSocket::OnError(error);
}
void CEchoSrvDataChannel::ResetOffLoadingTimer()
{
m_dwOffLoadingTime = GetTickCount();
}
void CEchoSrvDataChannel::ResetRetryTimer()
{
m_dwRetryTime = GetTickCount();
}
void CEchoSrvDataChannel::OnTimer()
{
APISocket::CClientSocket::OnTimer();
if (m_bOffLoadingDataChannel && GetTickCount() - m_dwOffLoadingTime >= CONNECTION_TO_OFFLOAD_TIMER_VALUE)
{
m_pDataChannel->ConnectLocalServer();
ResetOffLoadingTimer();
}
if (m_fStartRetry && m_bOffLoadingDataChannel && GetTickCount() - m_dwRetryTime >= RECONNECTION_TO_OFFLOAD_TIMER_VALUE)
{
g_globals.m_logger.WriteFormated("CEchoSrvDataChannel::OnTimer Start retrying the localdatachannel");
m_pDataChannel->m_pLocalDataChannel->StartAsync();
m_pDataChannel->m_pLocalDataChannel->StartSend();
ResetRetryTimer();
m_nRetryCounter++;
m_fStartRetry = false;
g_globals.m_logger.WriteFormated("CEchoSrvDataChannel::OnTimer End retrying the localdatachannel");
}
}
================================================
FILE: Bundles/Echoware/EchoSrvDataChannel.h
================================================
#ifndef _ECHOSRVDATACHANNELS_H
#define _ECHOSRVDATACHANNELS_H
#if _MSC_VER > 1000
#pragma once
#endif
#include "DataChannelSocket.h"
class CDataChannel;
//data channel to echoServer
class CEchoSrvDataChannel :
public CDataChannelSocket
{
public:
CEchoSrvDataChannel(CDataChannel* pDataChannel);
virtual ~CEchoSrvDataChannel(void);
//connect to echoServer
int Connect(const char* szServer, unsigned int nPort, const char* szChannelCode, const char* szMyID);
//notification : there are data to read
//[in] len : length of data
//[in] buff: data
virtual void OnReceive(char* buff, int len);
//notification : can send data
//[in] len : length of data
//[in] buff: data
virtual void OnSend(char* buff, int& len);
virtual void OnError(int error);
virtual void OnTimer();
void SetOffLoadingDataChannel(bool value) { m_bOffLoadingDataChannel = value; }
void ResetOffLoadingTimer();
void ResetRetryTimer();
int m_nRetryCounter;
bool m_bOffLoadingDataChannel;
bool m_fStartRetry;
protected:
//construct message to send to echoServer
void SendMessage(DWORD message, char *data, unsigned int datalen);
//connect the socket
bool Connect(const char* szIP, unsigned int nPort);
protected:
DWORD m_dwOffLoadingTime;
DWORD m_dwRetryTime;
};
#endif
================================================
FILE: Bundles/Echoware/EchoToOSX.cpp
================================================
/*
* EchoToOSX.cpp
* Echoware
*
* Created by Jonathan on 3/29/06.
* Copyright 2006 __MyCompanyName__. All rights reserved.
*
*/
#include
#include
#include
#include "EchoToOSX.h"
// Get Relative Time in milliseconds (not to be used for absolute time)
DWORD GetTickCount()
{
struct timeval startTime;
gettimeofday(&startTime, NULL);
return (DWORD) ((startTime.tv_sec * 1000) + (startTime.tv_usec / 1000));
}
void *CreateThread(int securityFlags,
int stackSize,
long unsigned int (*start_routine)(void *),
void *arg,
int creationFlags,
long unsigned int *lpThreadId)
{
pthread_t newThread;
int threadID = pthread_create(&newThread,
NULL,
(void *(*)(void *))start_routine,
arg);
*lpThreadId = threadID;
pthread_detach(newThread);
return newThread;
}
bool PostThreadMessage(unsigned long , int, void *, int)
{
// mach_msg, socket comm, shared state?
}
bool PeekMessage(void *, int,int,int, int)
{
}
bool ShutdownThread(void *shutdownThread, unsigned long waitTimeout, bool *shouldQuit, bool *hasQuit)
{
if (shutdownThread)
{
if (!(*hasQuit))
{
*shouldQuit = 1;
{
DWORD startTime = GetTickCount();
while (!(*hasQuit) && (GetTickCount() - startTime < waitTimeout))
{
Sleep(250000);
}
}
if (!(*hasQuit))
{
if (shutdownThread)
pthread_cancel((pthread_t) shutdownThread);
return false;
}
}
}
return true;
}
================================================
FILE: Bundles/Echoware/EchoToOSX.h
================================================
/*
* EchoToVNC.h
* Echoware
*
* Created by Jonathan on 3/3/06.
* Copyright 2006 __MyCompanyName__. All rights reserved.
*
*/
#include
// Some basic redifines
#undef TCP_NODELAY
#define TCP_NODELAY 0x01
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define LPHOSTENT struct hostent *
#define LPIN_ADDR struct in_addr *
#define WSAEALREADY EALREADY
#define WSAEINVAL EINVAL
#define WSAEWOULDBLOCK EAGAIN
#define WSAEISCONN EISCONN
#define WSAECONNRESET ECONNRESET
#define WSAECONNABORTED ECONNABORTED
#define WSAESHUTDOWN ESHUTDOWN
#define WSAENOTSOCK ENOTSOCK
#define WSAGetLastError() errno
#define closesocket close
#define ZeroMemory bzero
#define Sleep usleep
// Nothing
#define FAR
#define UINT unsigned int
#define CHAR unsigned char
#ifndef DWORD
#define DWORD long unsigned int
#endif
#define WORD unsigned short
#define BYTE unsigned char
#define INFINITE 2^16
#define BOOL bool
#define min(a,b) (((a)<(b))?(a):(b))
#define TRUE 1
#define FALSE 0
#define __stdcall
#define LPVOID void *
#ifndef MAKEWORD
#define MAKEWORD(b1, b2) ((WORD)(((BYTE)(b1)) | ((WORD)((BYTE)(b2))) << 8))
#endif
#ifndef LOBYTE
#define LOBYTE(w) ((BYTE)(w))
#endif
#ifndef HIBYTE
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#endif
#define SD_RECEIVE SHUT_RD
#define SD_SEND SHUT_WR
#define SD_BOTH SHUT_RDWR
#define WM_USER 1024
// Functions which need to be implemented or the callers reworked
DWORD GetTickCount();
#define WPARAM void *
void *CreateThread(int, int, long unsigned int (*)(void *), void *, int, long unsigned int *);
bool ShutdownThread(void *, unsigned long, bool *, bool *);
bool PostThreadMessage(unsigned long , int, void *, int);
bool PeekMessage(void *, int,int,int, int);
//#define STILL_ACTIVE 1
//#define WAIT_TIMEOUT 18
#define HANDLE void **
#ifndef ECHOWARE_API
#ifdef ECHOWARE_EXPORTS
#define ECHOWARE_API __attribute__ ((dllexport))
#else
//#define ECHOWARE_API __attribute__ ((dllimport))
#define ECHOWARE_API
#endif
#endif
================================================
FILE: Bundles/Echoware/Echoware.cpp
================================================
// Echoware.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "Echoware.h"
#include "Globals.h"
#include "DllProxyInfo.h"
//BOOL APIENTRY DllMain( HANDLE hModule,
BOOL DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) {
//#define DLL_PROCESS_ATTACH 0
//#define DLL_THREAD_ATTACH 1
//#define DLL_THREAD_DETACH 2
//#define DLL_PROCESS_DETACH 3
// switch (ul_reason_for_call)
// {
// case DLL_PROCESS_ATTACH:
// break;
// case DLL_THREAD_ATTACH:
// break;
// case DLL_THREAD_DETACH:
// break;
// case DLL_PROCESS_DETACH:
// /*if (g_globals.GetDllInitialized())
// {
// g_globals.m_logger.Write("ReleaseSockets");
// g_globals.ReleaseSockets();
// }*/
// break;
// }
return TRUE;
}
#define ECHOWARE_VERSION "1.926"
extern "C" ECHOWARE_API char* GetDllVersion()
{
return ECHOWARE_VERSION;
}
extern "C" ECHOWARE_API bool InitializeProxyDll()
{
if (g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("InitializeProxyDll : already been intialized");
return true;
}
if (!g_globals.InitSockets(1, 1))
{
g_globals.SetDllInitialized(false);
return false;
}
g_globals.SetDllInitialized(true);
return true;
}
extern "C" ECHOWARE_API void SetLoggingOptions(bool bEnablelogging, char *szLogPath)
{
g_globals.m_logger.SetLogger(bEnablelogging);
g_globals.m_logger.SetLoggerPath(szLogPath);
}
extern "C" ECHOWARE_API void EnableLogging(bool bEnablelogging)
{
g_globals.m_logger.SetLogger(bEnablelogging);
}
extern "C" ECHOWARE_API bool SetPortForOffLoadingData(int DataOffLoadingPort)
{
g_globals.SetPortForOffLoadingData(DataOffLoadingPort);
g_globals.m_logger.WriteFormated("Data offloading port : %d", DataOffLoadingPort);
return true;
}
extern "C" ECHOWARE_API void* CreateProxyInfoClassObject()
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("CreateProxyInfoClassObject : not been initialized");
return 0;
}
CDllProxyInfo* pProxyInfo=new CDllProxyInfo;
g_globals.m_proxiesManager.AddProxy(pProxyInfo);
return (IDllProxyInfo*)pProxyInfo;
}
extern "C" ECHOWARE_API void DeleteProxyInfoClassObject (void* pProxyInfo)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("DeleteProxyInfoClassObject : not been initialized");
return;
}
g_globals.m_proxiesManager.RemoveProxy((CDllProxyInfo*)pProxyInfo);
}
extern "C" ECHOWARE_API void AutoConnect()
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("AutoConnect : not been initialized");
return ;
}
g_globals.m_proxiesManager.AutoConnect();
}
extern "C" ECHOWARE_API int ConnectProxy(void* pProxyInfo)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("ConnectProxy : not been initialized");
return ERROR_CONNECTING_TO_PROXY;
}
return g_globals.m_proxiesManager.ConnectProxy((CDllProxyInfo*)pProxyInfo);
}
extern "C" ECHOWARE_API bool DisconnectProxy(void* pProxyInfo)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("DisconnectProxy : not been initialized");
return false;
}
return g_globals.m_proxiesManager.DisconnectProxy((CDllProxyInfo*)pProxyInfo);
}
extern "C" ECHOWARE_API bool DisconnectAllProxies()
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("DisconnectAllProxies : not been initialized");
return false;
}
return g_globals.m_proxiesManager.DisconnectAllProxies();
}
extern "C" ECHOWARE_API void StopConnecting(void* pProxyInfo)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("StopConnecting : not been initialized");
return;
}
g_globals.m_proxiesManager.StopConnecting((CDllProxyInfo*)pProxyInfo);
}
extern "C" ECHOWARE_API int EstablishNewDataChannel(void* pProxyInfo , char* IDOfPartner)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("EstablishNewDataChannel : not been initialized");
return 0;
}
return g_globals.m_proxiesManager.EstablishNewDataChannel((CDllProxyInfo*)pProxyInfo, IDOfPartner);
}
extern "C" ECHOWARE_API void SetEncryptionLevel(int level, void* pProxyInfo)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("SetEncryptionLevel : not been initialized");
return;
}
g_globals.m_logger.WriteFormated("Set Encryption Level to %d for %s", level, ((CDllProxyInfo*)pProxyInfo)->GetIpPort());
g_globals.m_proxiesManager.SetEncryptionLevel(level, (CDllProxyInfo*)pProxyInfo);
}
extern "C" ECHOWARE_API void SetLocalProxyInfo(char* ip, char* port, char* username, char* password)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("SetLocalProxyInfo : not been initialized");
return;
}
g_globals.m_proxiesManager.SetLocalProxyInfo(ip, port, username, password);
}
extern "C" ECHOWARE_API bool CheckServer(char* ip, unsigned short port)
{
if (!g_globals.GetDllInitialized())
{
g_globals.m_logger.Write("SetLocalProxyInfo : not been initialized");
return false;
}
APISocket::CClientSocket sock;
sock.Create();
if (sock.Connect(ip, port)==0)
return true;
return g_globals.m_proxiesManager.ConnectViaProxy(&sock, ip, port);
return false;
}
================================================
FILE: Bundles/Echoware/Echoware.dsp
================================================
# Microsoft Developer Studio Project File - Name="Echoware" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=Echoware - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Echoware.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Echoware.mak" CFG="Echoware - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Echoware - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Echoware - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "Echoware - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Echoware___Win32_Release"
# PROP BASE Intermediate_Dir "Echoware___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release6"
# PROP Intermediate_Dir "Release6"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ECHOWARE_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ECHOWARE_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT.lib" /nodefaultlib:"LIBC.lib"
!ELSEIF "$(CFG)" == "Echoware - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Echoware___Win32_Debug0"
# PROP BASE Intermediate_Dir "Echoware___Win32_Debug0"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug6"
# PROP Intermediate_Dir "Debug6"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ECHOWARE_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ECHOWARE_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"MSVCRTD.lib" /nodefaultlib:"LIBCD.lib" /pdbtype:sept
!ENDIF
# Begin Target
# Name "Echoware - Win32 Release"
# Name "Echoware - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\ACConnection.cpp
# End Source File
# Begin Source File
SOURCE=.\AES.cpp
# End Source File
# Begin Source File
SOURCE=.\blowfish.cpp
# End Source File
# Begin Source File
SOURCE=.\CritSection.cpp
# End Source File
# Begin Source File
SOURCE=.\DataChannel.cpp
# End Source File
# Begin Source File
SOURCE=.\DataChannels.cpp
# End Source File
# Begin Source File
SOURCE=.\DataChannelSocket.cpp
# End Source File
# Begin Source File
SOURCE=.\DllProxyInfo.cpp
# End Source File
# Begin Source File
SOURCE=.\EchoSrvDataChannel.cpp
# End Source File
# Begin Source File
SOURCE=.\Echoware.cpp
# End Source File
# Begin Source File
SOURCE=.\Globals.cpp
# End Source File
# Begin Source File
SOURCE=.\LocalDataChannel.cpp
# End Source File
# Begin Source File
SOURCE=.\LocalListener.cpp
# End Source File
# Begin Source File
SOURCE=.\Logger.cpp
# End Source File
# Begin Source File
SOURCE=.\ProxiesManager.cpp
# End Source File
# Begin Source File
SOURCE=.\ProxyConnection.cpp
# End Source File
# Begin Source File
SOURCE=.\RSAKeys.cpp
# End Source File
# Begin Source File
SOURCE=.\stdafx.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\ACConnection.h
# End Source File
# Begin Source File
SOURCE=.\AES.h
# End Source File
# Begin Source File
SOURCE=.\blowfish.h
# End Source File
# Begin Source File
SOURCE=.\CritSection.h
# End Source File
# Begin Source File
SOURCE=.\DataChannel.h
# End Source File
# Begin Source File
SOURCE=.\DataChannels.h
# End Source File
# Begin Source File
SOURCE=.\DataChannelSocket.h
# End Source File
# Begin Source File
SOURCE=.\DllProxyInfo.h
# End Source File
# Begin Source File
SOURCE=.\EchoSrvDataChannel.h
# End Source File
# Begin Source File
SOURCE=.\Echoware.h
# End Source File
# Begin Source File
SOURCE=.\Globals.h
# End Source File
# Begin Source File
SOURCE=.\InterfaceDllProxyInfo.h
# End Source File
# Begin Source File
SOURCE=.\LocalDataChannel.h
# End Source File
# Begin Source File
SOURCE=.\LocalListener.h
# End Source File
# Begin Source File
SOURCE=.\Logger.h
# End Source File
# Begin Source File
SOURCE=.\NetPacket.h
# End Source File
# Begin Source File
SOURCE=.\ProxiesManager.h
# End Source File
# Begin Source File
SOURCE=.\ProxyConnection.h
# End Source File
# Begin Source File
SOURCE=.\RSAKeys.h
# End Source File
# Begin Source File
SOURCE=.\stdafx.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# Begin Group "APISocket"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\APISocket\APISocket.h
# End Source File
# Begin Source File
SOURCE=.\APISocket\ClientSocket.cpp
# End Source File
# Begin Source File
SOURCE=.\APISocket\ServerSocket.cpp
# End Source File
# Begin Source File
SOURCE=.\APISocket\Socket.cpp
# End Source File
# End Group
# End Target
# End Project
================================================
FILE: Bundles/Echoware/Echoware.dsw
================================================
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "Echoware"=.\Echoware.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name LibeaySt
End Project Dependency
Begin Project Dependency
Project_Dep_Name ProxyConnect
End Project Dependency
Begin Project Dependency
Project_Dep_Name RSA
End Project Dependency
}}}
###############################################################################
Project: "LibeaySt"=.\OpenSSL\LibeaySt.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "ProxyConnect"=.\ProxyConnect\ProxyConnect.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "RSA"=.\RSA\RSA.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
================================================
FILE: Bundles/Echoware/Echoware.h
================================================
#if !defined(_ECHOWARE_H)
#define _ECHOWARE_H
#if _MSC_VER > 1000
#pragma once
#endif
extern "C" char* GetDllVersion();
extern "C" bool InitializeProxyDll();
extern "C" void SetLoggingOptions(bool bEnablelogging, char *szLogPath);
extern "C" void EnableLogging(bool bEnablelogging);
extern "C" bool SetPortForOffLoadingData(int DataOffLoadingPort);
extern "C" void* CreateProxyInfoClassObject();
extern "C" void DeleteProxyInfoClassObject (void* pProxyInfo);
extern "C" void AutoConnect();
extern "C" int ConnectProxy(void* pProxyInfo);
extern "C" bool DisconnectProxy(void* pProxyInfo);
extern "C" bool DisconnectAllProxies();
extern "C" void StopConnecting(void* pProxyInfo);
extern "C" void SetEncryptionLevel(int level, void* pProxyInfo);
extern "C" void SetLocalProxyInfo(char* ip, char* port, char* username, char* password);
extern "C" bool CheckServer(char* ip, unsigned short port);
#ifndef ECHOWARE_API
#ifdef ECHOWARE_EXPORTS
#define ECHOWARE_API __declspec(dllexport)
#else
#define ECHOWARE_API __declspec(dllimport)
#endif
#endif
#endif
================================================
FILE: Bundles/Echoware/Echoware.sln
================================================
Microsoft Visual Studio Solution File, Format Version 7.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Echoware", "Echoware.vcproj", "{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibeaySt", "OpenSSL\LibeaySt.vcproj", "{5CDA6CEE-1D30-4C05-ACCA-327274FFC553}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RSA", "RSA\RSA.vcproj", "{3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProxyConnect", "ProxyConnect\ProxyConnect.vcproj", "{CCEA3A1B-1170-4302-85A8-E4B441552105}"
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.0 = {5CDA6CEE-1D30-4C05-ACCA-327274FFC553}
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.1 = {CCEA3A1B-1170-4302-85A8-E4B441552105}
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.2 = {3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.Debug.ActiveCfg = Debug|Win32
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.Debug.Build.0 = Debug|Win32
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.Release.ActiveCfg = Release|Win32
{1CC002F1-843A-4B82-ADD1-A045B93A2DBA}.Release.Build.0 = Release|Win32
{5CDA6CEE-1D30-4C05-ACCA-327274FFC553}.Debug.ActiveCfg = Debug|Win32
{5CDA6CEE-1D30-4C05-ACCA-327274FFC553}.Debug.Build.0 = Debug|Win32
{5CDA6CEE-1D30-4C05-ACCA-327274FFC553}.Release.ActiveCfg = Release|Win32
{5CDA6CEE-1D30-4C05-ACCA-327274FFC553}.Release.Build.0 = Release|Win32
{3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}.Debug.ActiveCfg = Debug|Win32
{3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}.Debug.Build.0 = Debug|Win32
{3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}.Release.ActiveCfg = Release|Win32
{3FEAADB2-4A97-473B-8839-4E97C0CD4F4B}.Release.Build.0 = Release|Win32
{CCEA3A1B-1170-4302-85A8-E4B441552105}.Debug.ActiveCfg = Debug|Win32
{CCEA3A1B-1170-4302-85A8-E4B441552105}.Debug.Build.0 = Debug|Win32
{CCEA3A1B-1170-4302-85A8-E4B441552105}.Release.ActiveCfg = Release|Win32
{CCEA3A1B-1170-4302-85A8-E4B441552105}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
================================================
FILE: Bundles/Echoware/Echoware.vcproj
================================================
================================================
FILE: Bundles/Echoware/Echoware.xcodeproj/admin.mode1
================================================
ActivePerspectiveName
Project
AllowedModules
BundleLoadPath
MaxInstances
n
Module
PBXSmartGroupTreeModule
Name
Groups and Files Outline View
BundleLoadPath
MaxInstances
n
Module
PBXNavigatorGroup
Name
Editor
BundleLoadPath
MaxInstances
n
Module
XCTaskListModule
Name
Task List
BundleLoadPath
MaxInstances
n
Module
XCDetailModule
Name
File and Smart Group Detail Viewer
BundleLoadPath
MaxInstances
1
Module
PBXBuildResultsModule
Name
Detailed Build Results Viewer
BundleLoadPath
MaxInstances
1
Module
PBXProjectFindModule
Name
Project Batch Find Tool
BundleLoadPath
MaxInstances
n
Module
PBXRunSessionModule
Name
Run Log
BundleLoadPath
MaxInstances
n
Module
PBXBookmarksModule
Name
Bookmarks Tool
BundleLoadPath
MaxInstances
n
Module
PBXClassBrowserModule
Name
Class Browser
BundleLoadPath
MaxInstances
n
Module
PBXCVSModule
Name
Source Code Control Tool
BundleLoadPath
MaxInstances
n
Module
PBXDebugBreakpointsModule
Name
Debug Breakpoints Tool
BundleLoadPath
MaxInstances
n
Module
XCDockableInspector
Name
Inspector
BundleLoadPath
MaxInstances
n
Module
PBXOpenQuicklyModule
Name
Open Quickly Tool
BundleLoadPath
MaxInstances
1
Module
PBXDebugSessionModule
Name
Debugger
BundleLoadPath
MaxInstances
1
Module
PBXDebugCLIModule
Name
Debug Console
Description
DefaultDescriptionKey
DockingSystemVisible
Extension
mode1
FavBarConfig
PBXProjectModuleGUID
84DAA48B0B132F2800222618
XCBarModuleItemNames
XCBarModuleItems
FirstTimeWindowDisplayed
Identifier
com.apple.perspectives.project.mode1
MajorVersion
31
MinorVersion
1
Name
Default
Notifications
OpenEditors
Content
PBXProjectModuleGUID
849C677DC5B0469200F11330
PBXProjectModuleLabel
EchoController.m
PBXSplitModuleInNavigatorKey
Split0
PBXProjectModuleGUID
849C6784C5B0469200F11330
PBXProjectModuleLabel
EchoController.m
_historyCapacity
0
bookmark
8487D8B40C6B3851006BDD7C
history
849C6785C5B0469200F11330
8487D8A90C6B37E3006BDD7C
8487D8AA0C6B37E3006BDD7C
8487D8910C6B307D006BDD7C
prevStack
849C6787C5B0469200F11330
849C6788C5B0469200F11330
8487D8AB0C6B37E3006BDD7C
8487D8AC0C6B37E3006BDD7C
SplitCount
1
StatusBarVisibility
Geometry
Frame
{{0, 20}, {750, 461}}
PBXModuleWindowStatusBarHidden2
RubberWindowFrame
259 175 750 502 0 0 1024 746
PerspectiveWidths
-1
-1
Perspectives
ChosenToolbarItems
active-target-popup
active-buildstyle-popup
action
NSToolbarFlexibleSpaceItem
buildOrClean
build-and-runOrDebug
com.apple.ide.PBXToolbarStopButton
get-info
toggle-editor
NSToolbarFlexibleSpaceItem
com.apple.pbx.toolbar.searchfield
ControllerClassBaseName
IconName
WindowOfProjectWithEditor
Identifier
perspective.project
IsVertical
Layout
ContentConfiguration
PBXBottomSmartGroupGIDs
1C37FBAC04509CD000000102
1C37FAAC04509CD000000102
1C08E77C0454961000C914BD
1C37FABC05509CD000000102
1C37FABC05539CD112110102
E2644B35053B69B200211256
1C37FABC04509CD000100104
1CC0EA4004350EF90044410B
1CC0EA4004350EF90041110B
1C77FABC04509CD000000102
PBXProjectModuleGUID
1CE0B1FE06471DED0097A5F4
PBXProjectModuleLabel
Files
PBXProjectStructureProvided
yes
PBXSmartGroupTreeModuleColumnData
PBXSmartGroupTreeModuleColumnWidthsKey
217
PBXSmartGroupTreeModuleColumnsKey_v4
MainColumn
PBXSmartGroupTreeModuleOutlineStateKey_v7
PBXSmartGroupTreeModuleOutlineStateExpansionKey
089C166AFE841209C02AAC07
8400B9DE0B60F36E00FB16B3
19C28FB8FE9D52D311CA2CBB
1CC0EA4004350EF90041110B
PBXSmartGroupTreeModuleOutlineStateSelectionKey
27
1
0
PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
{{0, 190}, {217, 589}}
PBXTopSmartGroupGIDs
XCIncludePerspectivesSwitch
XCSharingToken
com.apple.Xcode.GFSharingToken
GeometryConfiguration
Frame
{{0, 0}, {234, 607}}
GroupTreeTableConfiguration
MainColumn
217
RubberWindowFrame
7 98 1024 648 0 0 1024 746
Module
PBXSmartGroupTreeModule
Proportion
234pt
Dock
BecomeActive
ContentConfiguration
PBXProjectModuleGUID
1CE0B20306471E060097A5F4
PBXProjectModuleLabel
EchoController.m
PBXSplitModuleInNavigatorKey
Split0
PBXProjectModuleGUID
1CE0B20406471E060097A5F4
PBXProjectModuleLabel
EchoController.m
_historyCapacity
0
bookmark
8487D8B30C6B3851006BDD7C
history
8456E4D00B4C1D20006B7550
8456E4D20B4C1D20006B7550
8456E5290B4C22C7006B7550
8456E7040B4D0EC2006B7550
8456E7060B4D0EC2006B7550
8456E7080B4D0EC2006B7550
8456E70A0B4D0EC2006B7550
8456E70C0B4D0EC2006B7550
8456E71A0B4D0EC2006B7550
8456E71C0B4D0EC2006B7550
8456E86F0B4E88C3006B7550
8456E8700B4E88C3006B7550
8456E8710B4E88C3006B7550
8456E8720B4E88C3006B7550
8456E8730B4E88C3006B7550
8456E8740B4E88C3006B7550
8456E8750B4E88C3006B7550
8456E8770B4E88C3006B7550
8456E9090B4E956F006B7550
84D9EE770B53EC5D00C10970
84D60AB30B5BB8EF00D9EBCB
84D60AB40B5BB8EF00D9EBCB
84D4FE540B5D2A960058AE41
84DFC6550B64D26200858CAB
848C41450B84919C00BD11B3
848C416E0B84946E00BD11B3
848C424C0B84C97700BD11B3
84AFF17D0B8C87E400D93058
84AFF17F0B8C87E400D93058
84AFF1B20B8C89CC00D93058
84B1AF9F0B94350200D477E7
84BC71A90B959EDF00BFC169
84BC71AA0B959EDF00BFC169
84BC71AB0B959EDF00BFC169
84BC71AD0B959EDF00BFC169
84BC71AE0B959EDF00BFC169
84BC71B00B959EDF00BFC169
84BC721F0B95BC1100BFC169
84BC730F0B95D09000BFC169
84BC73980B95F0D000BFC169
84BC74FA0B9604DE00BFC169
84BC75800B9610B400BFC169
84B0A8140B96D8B400B60726
84B0A9360B9707B000B60726
84B0AB400B973C9E00B60726
8428A4450B984D8900F257E1
84AF08E40B98819600B348CB
84AF08E60B98819600B348CB
84BE444E0B9D67F2007EF582
84BE44970B9D6EE7007EF582
84239D390BB2A1BA00C28522
84239D3C0BB2A1BA00C28522
84DDE9750BB90B6B0074B26A
84BF70560BC3D30900AB75ED
84BF70BE0BC3DAC200AB75ED
84DE1A860BCCE1DA0033A95C
840034DB0BCD16CB00D03C1B
84BE28730BCD2B780086E6B3
84409C610BCE2D4700A7BC33
84B18DB40BCF7EEF005360E0
8420DD240BD394E900937A80
847EA4B40BDDEC2B005AC757
847EA4B60BDDEC2B005AC757
847EA4FB0BDDF714005AC757
847EA4FC0BDDF714005AC757
847EA4FD0BDDF714005AC757
8418426EC5B04BFC00DC27BC
84A37A52C5B0A121003069A5
84C86843C5B077FA0013D2B1
84C86844C5B077FA0013D2B1
844D2C290C31125500A71AF3
84464D2F0C3A520F00064760
84464D330C3A520F00064760
84464D4C0C3A523400064760
84464E470C3A8F4900064760
84DF556F0C3CC76F00AD2F4B
843C1D500C3F94EB000BB087
8491B6BD0C44CB2B00E4B477
84E20C5D0C57AF7C004FB864
849C6797C5B0469200F11330
8487D8A10C6B37E3006BDD7C
8487D8A20C6B37E3006BDD7C
8487D8A30C6B37E3006BDD7C
prevStack
8456E4D70B4C1D20006B7550
8456E4D90B4C1D20006B7550
8456E52D0B4C22C7006B7550
8456E71E0B4D0EC2006B7550
8456E71F0B4D0EC2006B7550
8456E7200B4D0EC2006B7550
8456E7210B4D0EC2006B7550
8456E7230B4D0EC2006B7550
8456E7250B4D0EC2006B7550
8456E7270B4D0EC2006B7550
8456E7290B4D0EC2006B7550
8456E72B0B4D0EC2006B7550
8456E72D0B4D0EC2006B7550
8456E87B0B4E88C3006B7550
8456E87C0B4E88C3006B7550
8456E87D0B4E88C3006B7550
8456E90A0B4E956F006B7550
8456E95E0B4EA7D1006B7550
84F22A380B53D80F004CD709
84D9EE150B53E20600C10970
84E9145B0B564E2E009AD6FC
84E9145E0B564E2E009AD6FC
84E8F34C0B57B4DF001DACF7
84D60ABD0B5BB8EF00D9EBCB
84D60AC10B5BB8EF00D9EBCB
84D60AC30B5BB8EF00D9EBCB
84D60AC40B5BB8EF00D9EBCB
84D60AC90B5BB8EF00D9EBCB
84D60ACC0B5BB8EF00D9EBCB
84D60B760B5BC12200D9EBCB
84D60B770B5BC12200D9EBCB
84D60BA40B5BC49500D9EBCB
84D60BA50B5BC49500D9EBCB
84D4FA460B5CCFFB0058AE41
84D4FB3F0B5CFCE50058AE41
84D4FB5B0B5CFE640058AE41
84D4FCA60B5D15890058AE41
84D4FCA70B5D15890058AE41
84D5200B0B5E19C10050DE52
84D520E40B5E2C1A0050DE52
8400BEAE0B612C7C00FB16B3
84DFC45E0B64BF8200858CAB
84DFC6580B64D26200858CAB
84C5A4370B67B31C00A596C5
8460E80A0B8469BA009E0CB5
8460E80B0B8469BA009E0CB5
848C41470B84919C00BD11B3
848C414C0B84919C00BD11B3
848C414D0B84919C00BD11B3
848C41AE0B84A77400BD11B3
848C42570B84C97700BD11B3
848C42580B84C97700BD11B3
848C42590B84C97700BD11B3
848C425B0B84C97700BD11B3
84AFF1850B8C87E400D93058
84AFF1890B8C87E400D93058
84AFF18A0B8C87E400D93058
84AFF18D0B8C87E400D93058
84D448D60B8EE46C008F9D1F
84D44A870B8F44B4008F9D1F
84B1AFA50B94350200D477E7
84B1AFA80B94350200D477E7
84B1B0070B9465A300D477E7
84BC71BE0B959EDF00BFC169
84BC71BF0B959EDF00BFC169
84BC71C30B959EDF00BFC169
84BC71C50B959EDF00BFC169
84BC71CB0B959EDF00BFC169
84BC71CC0B959EDF00BFC169
84BC72210B95BC1100BFC169
84BC74FF0B9604DE00BFC169
84BC75900B9610B400BFC169
84B0A81D0B96D8B400B60726
84AF48B20BCCD4FB00C5BF0A
84184270C5B04BFC00DC27BC
841842B1C5B0606800DC27BC
849C6798C5B0469200F11330
8487D8A40C6B37E3006BDD7C
8487D8A50C6B37E3006BDD7C
SplitCount
1
StatusBarVisibility
GeometryConfiguration
Frame
{{0, 0}, {785, 493}}
RubberWindowFrame
7 98 1024 648 0 0 1024 746
Module
PBXNavigatorGroup
Proportion
493pt
ContentConfiguration
PBXProjectModuleGUID
1CE0B20506471E060097A5F4
PBXProjectModuleLabel
Detail
GeometryConfiguration
Frame
{{0, 498}, {785, 109}}
RubberWindowFrame
7 98 1024 648 0 0 1024 746
Module
XCDetailModule
Proportion
109pt
Proportion
785pt
Name
Project
ServiceClasses
XCModuleDock
PBXSmartGroupTreeModule
XCModuleDock
PBXNavigatorGroup
XCDetailModule
TableOfContents
8487D8A70C6B37E3006BDD7C
1CE0B1FE06471DED0097A5F4
8487D8A80C6B37E3006BDD7C
1CE0B20306471E060097A5F4
1CE0B20506471E060097A5F4
ToolbarConfiguration
xcode.toolbar.config.default
ControllerClassBaseName
IconName
WindowOfProject
Identifier
perspective.morph
IsVertical
0
Layout
BecomeActive
1
ContentConfiguration
PBXBottomSmartGroupGIDs
1C37FBAC04509CD000000102
1C37FAAC04509CD000000102
1C08E77C0454961000C914BD
1C37FABC05509CD000000102
1C37FABC05539CD112110102
E2644B35053B69B200211256
1C37FABC04509CD000100104
1CC0EA4004350EF90044410B
1CC0EA4004350EF90041110B
PBXProjectModuleGUID
11E0B1FE06471DED0097A5F4
PBXProjectModuleLabel
Files
PBXProjectStructureProvided
yes
PBXSmartGroupTreeModuleColumnData
PBXSmartGroupTreeModuleColumnWidthsKey
186
PBXSmartGroupTreeModuleColumnsKey_v4
MainColumn
PBXSmartGroupTreeModuleOutlineStateKey_v7
PBXSmartGroupTreeModuleOutlineStateExpansionKey
29B97314FDCFA39411CA2CEA
1C37FABC05509CD000000102
PBXSmartGroupTreeModuleOutlineStateSelectionKey
0
PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
{{0, 0}, {186, 337}}
PBXTopSmartGroupGIDs
XCIncludePerspectivesSwitch
1
XCSharingToken
com.apple.Xcode.GFSharingToken
GeometryConfiguration
Frame
{{0, 0}, {203, 355}}
GroupTreeTableConfiguration
MainColumn
186
RubberWindowFrame
373 269 690 397 0 0 1440 878
Module
PBXSmartGroupTreeModule
Proportion
100%
Name
Morph
PreferredWidth
300
ServiceClasses
XCModuleDock
PBXSmartGroupTreeModule
TableOfContents
11E0B1FE06471DED0097A5F4
ToolbarConfiguration
xcode.toolbar.config.default.short
PerspectivesBarVisible
PinnedNavigatorIdentifier
849C677DC5B0469200F11330
ShelfIsVisible
SourceDescription
file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec'
StatusbarIsVisible
TimeStamp
0.0
ToolbarDisplayMode
1
ToolbarIsVisible
ToolbarSizeMode
1
Type
Perspectives
UpdateMessage
The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?
WindowJustification
5
WindowOrderList
1C0AD2B3069F1EA900FABCE6
849C677DC5B0469200F11330
/Users/admin/Projects/Echoware/Echoware.xcodeproj
WindowString
7 98 1024 648 0 0 1024 746
WindowTools
FirstTimeWindowDisplayed
Identifier
windowTool.build
IsVertical
Layout
Dock
BecomeActive
ContentConfiguration
PBXProjectModuleGUID
1CD0528F0623707200166675
PBXProjectModuleLabel
EchoController.m
StatusBarVisibility
GeometryConfiguration
Frame
{{0, 0}, {851, 355}}
RubberWindowFrame
99 121 851 615 0 0 1024 746
Module
PBXNavigatorGroup
Proportion
355pt
ContentConfiguration
PBXProjectModuleGUID
XCMainBuildResultsModuleGUID
PBXProjectModuleLabel
Build
XCBuildResultsTrigger_Collapse
1021
XCBuildResultsTrigger_Open
1011
GeometryConfiguration
Frame
{{0, 360}, {851, 214}}
RubberWindowFrame
99 121 851 615 0 0 1024 746
Module
PBXBuildResultsModule
Proportion
214pt
Proportion
574pt
Name
Build Results
ServiceClasses
PBXBuildResultsModule
StatusbarIsVisible
TableOfContents
84DAA48C0B132F2800222618
8487D89C0C6B3773006BDD7C
1CD0528F0623707200166675
XCMainBuildResultsModuleGUID
ToolbarConfiguration
xcode.toolbar.config.build
WindowString
99 121 851 615 0 0 1024 746
WindowToolGUID
84DAA48C0B132F2800222618
WindowToolIsVisible
FirstTimeWindowDisplayed
Identifier
windowTool.debugger
IsVertical
Layout
Dock
ContentConfiguration
Debugger
HorizontalSplitView
_collapsingFrameDimension
0.0
_indexOfCollapsedView
0
_percentageOfCollapsedView
0.0
isCollapsed
yes
sizes
{{0, 0}, {266, 300}}
{{266, 0}, {582, 300}}
VerticalSplitView
_collapsingFrameDimension
0.0
_indexOfCollapsedView
0
_percentageOfCollapsedView
0.0
isCollapsed
yes
sizes
{{0, 0}, {848, 300}}
{{0, 300}, {848, 271}}
LauncherConfigVersion
8
PBXProjectModuleGUID
1C162984064C10D400B95A72
PBXProjectModuleLabel
Debug - GLUTExamples (Underwater)
GeometryConfiguration
DebugConsoleDrawerSize
{100, 120}
DebugConsoleVisible
None
DebugConsoleWindowFrame
{{200, 200}, {500, 300}}
DebugSTDIOWindowFrame
{{200, 200}, {500, 300}}
Frame
{{0, 0}, {848, 571}}
RubberWindowFrame
119 134 848 612 0 0 1024 746
Module
PBXDebugSessionModule
Proportion
571pt
Proportion
571pt
Name
Debugger
ServiceClasses
PBXDebugSessionModule
StatusbarIsVisible
TableOfContents
1CD10A99069EF8BA00B06720
84464E510C3A8F4900064760
1C162984064C10D400B95A72
84464E520C3A8F4900064760
84464E530C3A8F4900064760
84464E540C3A8F4900064760
84464E550C3A8F4900064760
84464E560C3A8F4900064760
84464E570C3A8F4900064760
ToolbarConfiguration
xcode.toolbar.config.debug
WindowString
119 134 848 612 0 0 1024 746
WindowToolGUID
1CD10A99069EF8BA00B06720
WindowToolIsVisible
FirstTimeWindowDisplayed
Identifier
windowTool.find
IsVertical
Layout
Dock
Dock
BecomeActive
ContentConfiguration
PBXProjectModuleGUID
1CDD528C0622207200134675
PBXProjectModuleLabel
ACConnection.cpp
StatusBarVisibility
GeometryConfiguration
Frame
{{0, 0}, {1024, 348}}
RubberWindowFrame
36 62 1024 671 0 0 1024 746
Module
PBXNavigatorGroup
Proportion
1024pt
Proportion
348pt
ContentConfiguration
PBXProjectModuleGUID
1CD0528E0623707200166675
PBXProjectModuleLabel
Project Find
GeometryConfiguration
Frame
{{0, 353}, {1024, 277}}
RubberWindowFrame
36 62 1024 671 0 0 1024 746
Module
PBXProjectFindModule
Proportion
277pt
Proportion
630pt
Name
Project Find
ServiceClasses
PBXProjectFindModule
StatusbarIsVisible
TableOfContents
1C530D57069F1CE1000CFCEE
84E20C5A0C57AF7B004FB864
84E20C5B0C57AF7B004FB864
1CDD528C0622207200134675
1CD0528E0623707200166675
WindowString
36 62 1024 671 0 0 1024 746
WindowToolGUID
1C530D57069F1CE1000CFCEE
WindowToolIsVisible
Identifier
MENUSEPARATOR
FirstTimeWindowDisplayed
Identifier
windowTool.debuggerConsole
IsVertical
Layout
Dock
ContentConfiguration
PBXProjectModuleGUID
1C78EAAC065D492600B07095
PBXProjectModuleLabel
Debugger Console
GeometryConfiguration
Frame
{{0, 0}, {440, 358}}
RubberWindowFrame
65 297 440 400 0 0 1024 746
Module
PBXDebugCLIModule
Proportion
358pt
Proportion
359pt
Name
Debugger Console
ServiceClasses
PBXDebugCLIModule
StatusbarIsVisible
TableOfContents
84DAA5480B14CCD900222618
84C86822C5B0743E0013D2B1
1C78EAAC065D492600B07095
WindowString
65 297 440 400 0 0 1024 746
WindowToolGUID
84DAA5480B14CCD900222618
WindowToolIsVisible
FirstTimeWindowDisplayed
Identifier
windowTool.run
IsVertical
Layout
Dock
ContentConfiguration
LauncherConfigVersion
3
PBXProjectModuleGUID
1CD0528B0623707200166675
PBXProjectModuleLabel
Run
Runner
HorizontalSplitView
_collapsingFrameDimension
0.0
_indexOfCollapsedView
0
_percentageOfCollapsedView
0.0
isCollapsed
yes
sizes
{{0, 0}, {493, 167}}
{{0, 176}, {493, 267}}
VerticalSplitView
_collapsingFrameDimension
0.0
_indexOfCollapsedView
0
_percentageOfCollapsedView
0.0
isCollapsed
yes
sizes
{{0, 0}, {405, 443}}
{{414, 0}, {514, 443}}
GeometryConfiguration
Frame
{{0, 0}, {657, 425}}
RubberWindowFrame
254 226 657 466 0 0 1024 746
Module
PBXRunSessionModule
Proportion
425pt
Proportion
425pt
Name
Run Log
ServiceClasses
PBXRunSessionModule
StatusbarIsVisible
TableOfContents
1C0AD2B3069F1EA900FABCE6
8487D89D0C6B3773006BDD7C
1CD0528B0623707200166675
8487D89E0C6B3773006BDD7C
ToolbarConfiguration
xcode.toolbar.config.run
WindowString
254 226 657 466 0 0 1024 746
WindowToolGUID
1C0AD2B3069F1EA900FABCE6
WindowToolIsVisible
Identifier
windowTool.scm
Layout
Dock
ContentConfiguration
PBXProjectModuleGUID
1C78EAB2065D492600B07095
PBXProjectModuleLabel
<No Editor>
PBXSplitModuleInNavigatorKey
Split0
PBXProjectModuleGUID
1C78EAB3065D492600B07095
SplitCount
1
StatusBarVisibility
1
GeometryConfiguration
Frame
{{0, 0}, {452, 0}}
RubberWindowFrame
743 379 452 308 0 0 1280 1002
Module
PBXNavigatorGroup
Proportion
0pt
BecomeActive
1
ContentConfiguration
PBXProjectModuleGUID
1CD052920623707200166675
PBXProjectModuleLabel
SCM
GeometryConfiguration
ConsoleFrame
{{0, 259}, {452, 0}}
Frame
{{0, 7}, {452, 259}}
RubberWindowFrame
743 379 452 308 0 0 1280 1002
TableConfiguration
Status
30
FileName
199
Path
197.09500122070312
TableFrame
{{0, 0}, {452, 250}}
Module
PBXCVSModule
Proportion
262pt
Proportion
266pt
Name
SCM
ServiceClasses
PBXCVSModule
StatusbarIsVisible
1
TableOfContents
1C78EAB4065D492600B07095
1C78EAB5065D492600B07095
1C78EAB2065D492600B07095
1CD052920623707200166675
ToolbarConfiguration
xcode.toolbar.config.scm
WindowString
743 379 452 308 0 0 1280 1002
FirstTimeWindowDisplayed
Identifier
windowTool.breakpoints
IsVertical
Layout
Dock
ContentConfiguration
PBXBottomSmartGroupGIDs
1C77FABC04509CD000000102
PBXProjectModuleGUID
1CE0B1FE06471DED0097A5F4
PBXProjectModuleLabel
Files
PBXProjectStructureProvided
no
PBXSmartGroupTreeModuleColumnData
PBXSmartGroupTreeModuleColumnWidthsKey
168
PBXSmartGroupTreeModuleColumnsKey_v4
MainColumn
PBXSmartGroupTreeModuleOutlineStateKey_v7
PBXSmartGroupTreeModuleOutlineStateExpansionKey
1C77FABC04509CD000000102
1C3E0DCA080725EA00A55177
PBXSmartGroupTreeModuleOutlineStateSelectionKey
0
PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
{{0, 0}, {168, 350}}
PBXTopSmartGroupGIDs
XCIncludePerspectivesSwitch
GeometryConfiguration
Frame
{{0, 0}, {185, 368}}
GroupTreeTableConfiguration
MainColumn
168
RubberWindowFrame
283 268 744 409 0 0 1024 746
Module
PBXSmartGroupTreeModule
Proportion
185pt
BecomeActive
ContentConfiguration
PBXProjectModuleGUID
1CA1AED706398EBD00589147
PBXProjectModuleLabel
Detail
GeometryConfiguration
Frame
{{190, 0}, {554, 368}}
RubberWindowFrame
283 268 744 409 0 0 1024 746
Module
XCDetailModule
Proportion
554pt
Proportion
368pt
MajorVersion
2
MinorVersion
0
Name
Breakpoints
ServiceClasses
PBXSmartGroupTreeModule
XCDetailModule
StatusbarIsVisible
TableOfContents
84C5A4630B67B67E00A596C5
84C5A4640B67B67E00A596C5
1CE0B1FE06471DED0097A5F4
1CA1AED706398EBD00589147
ToolbarConfiguration
xcode.toolbar.config.breakpoints
WindowString
283 268 744 409 0 0 1024 746
WindowToolGUID
84C5A4630B67B67E00A596C5
WindowToolIsVisible
Identifier
windowTool.debugAnimator
Layout
Dock
Module
PBXNavigatorGroup
Proportion
100%
Proportion
100%
Name
Debug Visualizer
ServiceClasses
PBXNavigatorGroup
StatusbarIsVisible
1
ToolbarConfiguration
xcode.toolbar.config.debugAnimator
WindowString
100 100 700 500 0 0 1280 1002
Identifier
windowTool.bookmarks
Layout
Dock
Module
PBXBookmarksModule
Proportion
100%
Proportion
100%
Name
Bookmarks
ServiceClasses
PBXBookmarksModule
StatusbarIsVisible
0
WindowString
538 42 401 187 0 0 1280 1002
Identifier
windowTool.classBrowser
Layout
Dock
BecomeActive
1
ContentConfiguration
OptionsSetName
Hierarchy, all classes
PBXProjectModuleGUID
1CA6456E063B45B4001379D8
PBXProjectModuleLabel
Class Browser - NSObject
GeometryConfiguration
ClassesFrame
{{0, 0}, {374, 96}}
ClassesTreeTableConfiguration
PBXClassNameColumnIdentifier
208
PBXClassBookColumnIdentifier
22
Frame
{{0, 0}, {630, 331}}
MembersFrame
{{0, 105}, {374, 395}}
MembersTreeTableConfiguration
PBXMemberTypeIconColumnIdentifier
22
PBXMemberNameColumnIdentifier
216
PBXMemberTypeColumnIdentifier
97
PBXMemberBookColumnIdentifier
22
PBXModuleWindowStatusBarHidden2
1
RubberWindowFrame
385 179 630 352 0 0 1440 878
Module
PBXClassBrowserModule
Proportion
332pt
Proportion
332pt
Name
Class Browser
ServiceClasses
PBXClassBrowserModule
StatusbarIsVisible
0
TableOfContents
1C0AD2AF069F1E9B00FABCE6
1C0AD2B0069F1E9B00FABCE6
1CA6456E063B45B4001379D8
ToolbarConfiguration
xcode.toolbar.config.classbrowser
WindowString
385 179 630 352 0 0 1440 878
WindowToolGUID
1C0AD2AF069F1E9B00FABCE6
WindowToolIsVisible
0
================================================
FILE: Bundles/Echoware/Echoware.xcodeproj/admin.pbxuser
================================================
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Deployment;
activeExecutable = 8480D0BC0B5F8D200030E8C0 /* Vine Server 2.1 */;
activeTarget = 8D5B49AC048680CD000E48DA /* Echoware */;
addToTargets = (
8D5B49AC048680CD000E48DA /* Echoware */,
);
breakpoints = (
);
breakpointsGroup = 84DAA51F0B14A33800222618 /* XCBreakpointsBucket */;
codeSenseManager = 84DAA48F0B132F2900222618 /* Code sense */;
executables = (
8480D0BC0B5F8D200030E8C0 /* Vine Server 2.1 */,
);
expressions = (
dwKey,
"*(dwKey)",
);
perUserDictionary = {
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
PBXFileTableDataSourceColumnSortingDirectionKey = 1;
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_ContinueID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
20,
210,
20,
110,
109,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXBreakpointsDataSource_ActionID,
PBXBreakpointsDataSource_TypeID,
PBXBreakpointsDataSource_BreakpointID,
PBXBreakpointsDataSource_UseID,
PBXBreakpointsDataSource_LocationID,
PBXBreakpointsDataSource_ConditionID,
PBXBreakpointsDataSource_ContinueID,
);
};
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CE0B20506471E060097A5F4" = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
20,
287,
20,
186,
187,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXBreakpointsDataSource_ActionID,
PBXBreakpointsDataSource_TypeID,
PBXBreakpointsDataSource_BreakpointID,
PBXBreakpointsDataSource_UseID,
PBXBreakpointsDataSource_LocationID,
PBXBreakpointsDataSource_ConditionID,
PBXBreakpointsDataSource_ContinueID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID;
PBXFileTableDataSourceColumnWidthsKey = (
200,
200,
57.5835,
);
PBXFileTableDataSourceColumnsKey = (
PBXBookmarksDataSource_LocationID,
PBXBookmarksDataSource_NameID,
PBXBookmarksDataSource_CommentsID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
300,
260,
);
PBXFileTableDataSourceColumnsKey = (
PBXErrorsWarningsDataSource_TypeID,
PBXErrorsWarningsDataSource_MessageID,
PBXErrorsWarningsDataSource_LocationID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
PBXFileTableDataSourceColumnWidthsKey = (
22,
300,
257,
);
PBXFileTableDataSourceColumnsKey = (
PBXExecutablesDataSource_ActiveFlagID,
PBXExecutablesDataSource_NameID,
PBXExecutablesDataSource_CommentsID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
546,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
PBXFileTableDataSourceColumnWidthsKey = (
200,
120,
);
PBXFileTableDataSourceColumnsKey = (
PBXFindDataSource_MessageID,
PBXFindDataSource_LocationID,
);
};
PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID;
PBXFileTableDataSourceColumnWidthsKey = (
16,
200,
50,
183,
);
PBXFileTableDataSourceColumnsKey = (
PBXSymbolsDataSource_SymbolTypeIconID,
PBXSymbolsDataSource_SymbolNameID,
PBXSymbolsDataSource_SymbolTypeID,
PBXSymbolsDataSource_ReferenceNameID,
);
};
PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
20,
121,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_SCM_ColumnID,
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
200,
366,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 208340943;
PBXWorkspaceStateSaveDate = 208340943;
};
perUserProjectItems = {
840034DB0BCD16CB00D03C1B /* PBXTextBookmark */ = 840034DB0BCD16CB00D03C1B /* PBXTextBookmark */;
8400BEAE0B612C7C00FB16B3 /* PBXTextBookmark */ = 8400BEAE0B612C7C00FB16B3 /* PBXTextBookmark */;
8418426EC5B04BFC00DC27BC /* PBXTextBookmark */ = 8418426EC5B04BFC00DC27BC /* PBXTextBookmark */;
84184270C5B04BFC00DC27BC /* PBXTextBookmark */ = 84184270C5B04BFC00DC27BC /* PBXTextBookmark */;
841842B1C5B0606800DC27BC /* PBXTextBookmark */ = 841842B1C5B0606800DC27BC /* PBXTextBookmark */;
8420DD240BD394E900937A80 /* PBXTextBookmark */ = 8420DD240BD394E900937A80 /* PBXTextBookmark */;
84239D390BB2A1BA00C28522 /* PBXTextBookmark */ = 84239D390BB2A1BA00C28522 /* PBXTextBookmark */;
84239D3C0BB2A1BA00C28522 /* PBXTextBookmark */ = 84239D3C0BB2A1BA00C28522 /* PBXTextBookmark */;
8428A4450B984D8900F257E1 /* PBXTextBookmark */ = 8428A4450B984D8900F257E1 /* PBXTextBookmark */;
843C1D500C3F94EB000BB087 /* PBXTextBookmark */ = 843C1D500C3F94EB000BB087 /* PBXTextBookmark */;
84409C610BCE2D4700A7BC33 /* PBXTextBookmark */ = 84409C610BCE2D4700A7BC33 /* PBXTextBookmark */;
84464D2F0C3A520F00064760 /* PBXTextBookmark */ = 84464D2F0C3A520F00064760 /* PBXTextBookmark */;
84464D330C3A520F00064760 /* PBXTextBookmark */ = 84464D330C3A520F00064760 /* PBXTextBookmark */;
84464D4C0C3A523400064760 /* PBXTextBookmark */ = 84464D4C0C3A523400064760 /* PBXTextBookmark */;
84464E470C3A8F4900064760 /* PBXTextBookmark */ = 84464E470C3A8F4900064760 /* PBXTextBookmark */;
844D2C290C31125500A71AF3 /* PBXTextBookmark */ = 844D2C290C31125500A71AF3 /* PBXTextBookmark */;
8456E4D00B4C1D20006B7550 /* PBXTextBookmark */ = 8456E4D00B4C1D20006B7550 /* PBXTextBookmark */;
8456E4D20B4C1D20006B7550 /* PBXTextBookmark */ = 8456E4D20B4C1D20006B7550 /* PBXTextBookmark */;
8456E4D70B4C1D20006B7550 /* PBXTextBookmark */ = 8456E4D70B4C1D20006B7550 /* PBXTextBookmark */;
8456E4D90B4C1D20006B7550 /* PBXTextBookmark */ = 8456E4D90B4C1D20006B7550 /* PBXTextBookmark */;
8456E5290B4C22C7006B7550 /* PBXTextBookmark */ = 8456E5290B4C22C7006B7550 /* PBXTextBookmark */;
8456E52D0B4C22C7006B7550 /* PBXTextBookmark */ = 8456E52D0B4C22C7006B7550 /* PBXTextBookmark */;
8456E7040B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7040B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7060B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7060B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7080B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7080B4D0EC2006B7550 /* PBXTextBookmark */;
8456E70A0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E70A0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E70C0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E70C0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E71A0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E71A0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E71C0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E71C0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E71E0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E71E0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E71F0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E71F0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7200B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7200B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7210B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7210B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7230B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7230B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7250B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7250B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7270B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7270B4D0EC2006B7550 /* PBXTextBookmark */;
8456E7290B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E7290B4D0EC2006B7550 /* PBXTextBookmark */;
8456E72B0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E72B0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E72D0B4D0EC2006B7550 /* PBXTextBookmark */ = 8456E72D0B4D0EC2006B7550 /* PBXTextBookmark */;
8456E86F0B4E88C3006B7550 /* PBXTextBookmark */ = 8456E86F0B4E88C3006B7550 /* PBXTextBookmark */;
8456E8700B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8700B4E88C3006B7550 /* PBXTextBookmark */;
8456E8710B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8710B4E88C3006B7550 /* PBXTextBookmark */;
8456E8720B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8720B4E88C3006B7550 /* PBXTextBookmark */;
8456E8730B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8730B4E88C3006B7550 /* PBXTextBookmark */;
8456E8740B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8740B4E88C3006B7550 /* PBXTextBookmark */;
8456E8750B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8750B4E88C3006B7550 /* PBXTextBookmark */;
8456E8770B4E88C3006B7550 /* PBXTextBookmark */ = 8456E8770B4E88C3006B7550 /* PBXTextBookmark */;
8456E87B0B4E88C3006B7550 /* PBXTextBookmark */ = 8456E87B0B4E88C3006B7550 /* PBXTextBookmark */;
8456E87C0B4E88C3006B7550 /* PBXTextBookmark */ = 8456E87C0B4E88C3006B7550 /* PBXTextBookmark */;
8456E87D0B4E88C3006B7550 /* PBXTextBookmark */ = 8456E87D0B4E88C3006B7550 /* PBXTextBookmark */;
8456E9090B4E956F006B7550 /* PBXTextBookmark */ = 8456E9090B4E956F006B7550 /* PBXTextBookmark */;
8456E90A0B4E956F006B7550 /* PBXTextBookmark */ = 8456E90A0B4E956F006B7550 /* PBXTextBookmark */;
8456E95E0B4EA7D1006B7550 /* PBXTextBookmark */ = 8456E95E0B4EA7D1006B7550 /* PBXTextBookmark */;
8460E80A0B8469BA009E0CB5 /* PBXTextBookmark */ = 8460E80A0B8469BA009E0CB5 /* PBXTextBookmark */;
8460E80B0B8469BA009E0CB5 /* PBXTextBookmark */ = 8460E80B0B8469BA009E0CB5 /* PBXTextBookmark */;
847EA4B40BDDEC2B005AC757 /* PBXTextBookmark */ = 847EA4B40BDDEC2B005AC757 /* PBXTextBookmark */;
847EA4B60BDDEC2B005AC757 /* PBXTextBookmark */ = 847EA4B60BDDEC2B005AC757 /* PBXTextBookmark */;
847EA4FB0BDDF714005AC757 /* PBXTextBookmark */ = 847EA4FB0BDDF714005AC757 /* PBXTextBookmark */;
847EA4FC0BDDF714005AC757 /* PBXTextBookmark */ = 847EA4FC0BDDF714005AC757 /* PBXTextBookmark */;
847EA4FD0BDDF714005AC757 /* PBXTextBookmark */ = 847EA4FD0BDDF714005AC757 /* PBXTextBookmark */;
8487D8910C6B307D006BDD7C /* PBXBookmark */ = 8487D8910C6B307D006BDD7C /* PBXBookmark */;
8487D8A10C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A10C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8A20C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A20C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8A30C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A30C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8A40C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A40C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8A50C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A50C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8A90C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8A90C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8AA0C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8AA0C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8AB0C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8AB0C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8AC0C6B37E3006BDD7C /* PBXTextBookmark */ = 8487D8AC0C6B37E3006BDD7C /* PBXTextBookmark */;
8487D8B30C6B3851006BDD7C /* PBXTextBookmark */ = 8487D8B30C6B3851006BDD7C /* PBXTextBookmark */;
8487D8B40C6B3851006BDD7C /* PBXTextBookmark */ = 8487D8B40C6B3851006BDD7C /* PBXTextBookmark */;
848C41450B84919C00BD11B3 /* PBXTextBookmark */ = 848C41450B84919C00BD11B3 /* PBXTextBookmark */;
848C41470B84919C00BD11B3 /* PBXTextBookmark */ = 848C41470B84919C00BD11B3 /* PBXTextBookmark */;
848C414C0B84919C00BD11B3 /* PBXTextBookmark */ = 848C414C0B84919C00BD11B3 /* PBXTextBookmark */;
848C414D0B84919C00BD11B3 /* PBXTextBookmark */ = 848C414D0B84919C00BD11B3 /* PBXTextBookmark */;
848C416E0B84946E00BD11B3 /* PBXTextBookmark */ = 848C416E0B84946E00BD11B3 /* PBXTextBookmark */;
848C41AE0B84A77400BD11B3 /* PBXTextBookmark */ = 848C41AE0B84A77400BD11B3 /* PBXTextBookmark */;
848C424C0B84C97700BD11B3 /* PBXTextBookmark */ = 848C424C0B84C97700BD11B3 /* PBXTextBookmark */;
848C42570B84C97700BD11B3 /* PBXTextBookmark */ = 848C42570B84C97700BD11B3 /* PBXTextBookmark */;
848C42580B84C97700BD11B3 /* PBXTextBookmark */ = 848C42580B84C97700BD11B3 /* PBXTextBookmark */;
848C42590B84C97700BD11B3 /* PBXTextBookmark */ = 848C42590B84C97700BD11B3 /* PBXTextBookmark */;
848C425B0B84C97700BD11B3 /* PBXTextBookmark */ = 848C425B0B84C97700BD11B3 /* PBXTextBookmark */;
8491B6BD0C44CB2B00E4B477 /* PBXTextBookmark */ = 8491B6BD0C44CB2B00E4B477 /* PBXTextBookmark */;
849C6785C5B0469200F11330 /* PBXTextBookmark */ = 849C6785C5B0469200F11330 /* PBXTextBookmark */;
849C6787C5B0469200F11330 /* PBXTextBookmark */ = 849C6787C5B0469200F11330 /* PBXTextBookmark */;
849C6788C5B0469200F11330 /* PBXTextBookmark */ = 849C6788C5B0469200F11330 /* PBXTextBookmark */;
849C6797C5B0469200F11330 /* PBXTextBookmark */ = 849C6797C5B0469200F11330 /* PBXTextBookmark */;
849C6798C5B0469200F11330 /* PBXTextBookmark */ = 849C6798C5B0469200F11330 /* PBXTextBookmark */;
84A37A52C5B0A121003069A5 /* PBXTextBookmark */ = 84A37A52C5B0A121003069A5 /* PBXTextBookmark */;
84AF08E40B98819600B348CB /* PBXTextBookmark */ = 84AF08E40B98819600B348CB /* PBXTextBookmark */;
84AF08E60B98819600B348CB /* PBXTextBookmark */ = 84AF08E60B98819600B348CB /* PBXTextBookmark */;
84AF48B20BCCD4FB00C5BF0A /* PBXTextBookmark */ = 84AF48B20BCCD4FB00C5BF0A /* PBXTextBookmark */;
84AFF17D0B8C87E400D93058 /* PBXTextBookmark */ = 84AFF17D0B8C87E400D93058 /* PBXTextBookmark */;
84AFF17F0B8C87E400D93058 /* PBXTextBookmark */ = 84AFF17F0B8C87E400D93058 /* PBXTextBookmark */;
84AFF1850B8C87E400D93058 /* PBXTextBookmark */ = 84AFF1850B8C87E400D93058 /* PBXTextBookmark */;
84AFF1890B8C87E400D93058 /* PBXTextBookmark */ = 84AFF1890B8C87E400D93058 /* PBXTextBookmark */;
84AFF18A0B8C87E400D93058 /* PBXTextBookmark */ = 84AFF18A0B8C87E400D93058 /* PBXTextBookmark */;
84AFF18D0B8C87E400D93058 /* PBXTextBookmark */ = 84AFF18D0B8C87E400D93058 /* PBXTextBookmark */;
84AFF1B20B8C89CC00D93058 /* PBXTextBookmark */ = 84AFF1B20B8C89CC00D93058 /* PBXTextBookmark */;
84B0A8140B96D8B400B60726 /* PBXTextBookmark */ = 84B0A8140B96D8B400B60726 /* PBXTextBookmark */;
84B0A81D0B96D8B400B60726 /* PBXTextBookmark */ = 84B0A81D0B96D8B400B60726 /* PBXTextBookmark */;
84B0A9360B9707B000B60726 /* PBXTextBookmark */ = 84B0A9360B9707B000B60726 /* PBXTextBookmark */;
84B0AB400B973C9E00B60726 /* PBXTextBookmark */ = 84B0AB400B973C9E00B60726 /* PBXTextBookmark */;
84B18DB40BCF7EEF005360E0 /* PBXTextBookmark */ = 84B18DB40BCF7EEF005360E0 /* PBXTextBookmark */;
84B1AF9F0B94350200D477E7 /* PBXTextBookmark */ = 84B1AF9F0B94350200D477E7 /* PBXTextBookmark */;
84B1AFA50B94350200D477E7 /* PBXTextBookmark */ = 84B1AFA50B94350200D477E7 /* PBXTextBookmark */;
84B1AFA80B94350200D477E7 /* PBXTextBookmark */ = 84B1AFA80B94350200D477E7 /* PBXTextBookmark */;
84B1B0070B9465A300D477E7 /* PBXTextBookmark */ = 84B1B0070B9465A300D477E7 /* PBXTextBookmark */;
84BC71A90B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71A90B959EDF00BFC169 /* PBXTextBookmark */;
84BC71AA0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71AA0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71AB0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71AB0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71AD0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71AD0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71AE0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71AE0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71B00B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71B00B959EDF00BFC169 /* PBXTextBookmark */;
84BC71BE0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71BE0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71BF0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71BF0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71C30B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71C30B959EDF00BFC169 /* PBXTextBookmark */;
84BC71C50B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71C50B959EDF00BFC169 /* PBXTextBookmark */;
84BC71CB0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71CB0B959EDF00BFC169 /* PBXTextBookmark */;
84BC71CC0B959EDF00BFC169 /* PBXTextBookmark */ = 84BC71CC0B959EDF00BFC169 /* PBXTextBookmark */;
84BC721F0B95BC1100BFC169 /* PBXTextBookmark */ = 84BC721F0B95BC1100BFC169 /* PBXTextBookmark */;
84BC72210B95BC1100BFC169 /* PBXTextBookmark */ = 84BC72210B95BC1100BFC169 /* PBXTextBookmark */;
84BC730F0B95D09000BFC169 /* PBXTextBookmark */ = 84BC730F0B95D09000BFC169 /* PBXTextBookmark */;
84BC73980B95F0D000BFC169 /* PBXTextBookmark */ = 84BC73980B95F0D000BFC169 /* PBXTextBookmark */;
84BC74FA0B9604DE00BFC169 /* PBXTextBookmark */ = 84BC74FA0B9604DE00BFC169 /* PBXTextBookmark */;
84BC74FF0B9604DE00BFC169 /* PBXTextBookmark */ = 84BC74FF0B9604DE00BFC169 /* PBXTextBookmark */;
84BC75800B9610B400BFC169 /* PBXTextBookmark */ = 84BC75800B9610B400BFC169 /* PBXTextBookmark */;
84BC75900B9610B400BFC169 /* PBXTextBookmark */ = 84BC75900B9610B400BFC169 /* PBXTextBookmark */;
84BE28730BCD2B780086E6B3 /* PBXTextBookmark */ = 84BE28730BCD2B780086E6B3 /* PBXTextBookmark */;
84BE444E0B9D67F2007EF582 /* PBXTextBookmark */ = 84BE444E0B9D67F2007EF582 /* PBXTextBookmark */;
84BE44970B9D6EE7007EF582 /* PBXTextBookmark */ = 84BE44970B9D6EE7007EF582 /* PBXTextBookmark */;
84BF70560BC3D30900AB75ED /* PBXTextBookmark */ = 84BF70560BC3D30900AB75ED /* PBXTextBookmark */;
84BF70BE0BC3DAC200AB75ED /* PBXTextBookmark */ = 84BF70BE0BC3DAC200AB75ED /* PBXTextBookmark */;
84C5A4370B67B31C00A596C5 /* PBXTextBookmark */ = 84C5A4370B67B31C00A596C5 /* PBXTextBookmark */;
84C86843C5B077FA0013D2B1 /* PBXTextBookmark */ = 84C86843C5B077FA0013D2B1 /* PBXTextBookmark */;
84C86844C5B077FA0013D2B1 /* PBXTextBookmark */ = 84C86844C5B077FA0013D2B1 /* PBXTextBookmark */;
84D448D60B8EE46C008F9D1F /* PBXTextBookmark */ = 84D448D60B8EE46C008F9D1F /* PBXTextBookmark */;
84D44A870B8F44B4008F9D1F /* PBXTextBookmark */ = 84D44A870B8F44B4008F9D1F /* PBXTextBookmark */;
84D4FA460B5CCFFB0058AE41 /* PBXTextBookmark */ = 84D4FA460B5CCFFB0058AE41 /* PBXTextBookmark */;
84D4FB3F0B5CFCE50058AE41 /* PBXTextBookmark */ = 84D4FB3F0B5CFCE50058AE41 /* PBXTextBookmark */;
84D4FB5B0B5CFE640058AE41 /* PBXTextBookmark */ = 84D4FB5B0B5CFE640058AE41 /* PBXTextBookmark */;
84D4FCA60B5D15890058AE41 /* PBXTextBookmark */ = 84D4FCA60B5D15890058AE41 /* PBXTextBookmark */;
84D4FCA70B5D15890058AE41 /* PBXTextBookmark */ = 84D4FCA70B5D15890058AE41 /* PBXTextBookmark */;
84D4FE540B5D2A960058AE41 /* PBXTextBookmark */ = 84D4FE540B5D2A960058AE41 /* PBXTextBookmark */;
84D5200B0B5E19C10050DE52 /* PBXTextBookmark */ = 84D5200B0B5E19C10050DE52 /* PBXTextBookmark */;
84D520E40B5E2C1A0050DE52 /* PBXTextBookmark */ = 84D520E40B5E2C1A0050DE52 /* PBXTextBookmark */;
84D60AB30B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AB30B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60AB40B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AB40B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60ABD0B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60ABD0B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60AC10B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AC10B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60AC30B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AC30B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60AC40B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AC40B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60AC90B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60AC90B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60ACC0B5BB8EF00D9EBCB /* PBXTextBookmark */ = 84D60ACC0B5BB8EF00D9EBCB /* PBXTextBookmark */;
84D60B760B5BC12200D9EBCB /* PBXTextBookmark */ = 84D60B760B5BC12200D9EBCB /* PBXTextBookmark */;
84D60B770B5BC12200D9EBCB /* PBXTextBookmark */ = 84D60B770B5BC12200D9EBCB /* PBXTextBookmark */;
84D60BA40B5BC49500D9EBCB /* PBXTextBookmark */ = 84D60BA40B5BC49500D9EBCB /* PBXTextBookmark */;
84D60BA50B5BC49500D9EBCB /* PBXTextBookmark */ = 84D60BA50B5BC49500D9EBCB /* PBXTextBookmark */;
84D9EE150B53E20600C10970 /* PBXTextBookmark */ = 84D9EE150B53E20600C10970 /* PBXTextBookmark */;
84D9EE770B53EC5D00C10970 /* PBXTextBookmark */ = 84D9EE770B53EC5D00C10970 /* PBXTextBookmark */;
84DDE9750BB90B6B0074B26A /* PBXTextBookmark */ = 84DDE9750BB90B6B0074B26A /* PBXTextBookmark */;
84DE1A860BCCE1DA0033A95C /* PBXTextBookmark */ = 84DE1A860BCCE1DA0033A95C /* PBXTextBookmark */;
84DF556F0C3CC76F00AD2F4B /* PBXTextBookmark */ = 84DF556F0C3CC76F00AD2F4B /* PBXTextBookmark */;
84DFC45E0B64BF8200858CAB /* PBXTextBookmark */ = 84DFC45E0B64BF8200858CAB /* PBXTextBookmark */;
84DFC6550B64D26200858CAB /* PBXTextBookmark */ = 84DFC6550B64D26200858CAB /* PBXTextBookmark */;
84DFC6580B64D26200858CAB /* PBXTextBookmark */ = 84DFC6580B64D26200858CAB /* PBXTextBookmark */;
84E20C5D0C57AF7C004FB864 /* PBXTextBookmark */ = 84E20C5D0C57AF7C004FB864 /* PBXTextBookmark */;
84E8F34C0B57B4DF001DACF7 /* PBXTextBookmark */ = 84E8F34C0B57B4DF001DACF7 /* PBXTextBookmark */;
84E9145B0B564E2E009AD6FC /* PBXTextBookmark */ = 84E9145B0B564E2E009AD6FC /* PBXTextBookmark */;
84E9145E0B564E2E009AD6FC /* PBXTextBookmark */ = 84E9145E0B564E2E009AD6FC /* PBXTextBookmark */;
84F22A380B53D80F004CD709 /* PBXTextBookmark */ = 84F22A380B53D80F004CD709 /* PBXTextBookmark */;
};
sourceControlManager = 84DAA48E0B132F2900222618 /* Source Control */;
userBuildSettings = {
OBJROOT = "/Users/admin/Projects/VS 2.1/Echoware.build";
SYMROOT = "/Users/admin/Projects/VS 2.1/Vine Server.app/Contents/Resources";
};
};
089C167EFE841241C02AAC07 /* English */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 446}}";
sepNavSelRange = "{127, 0}";
sepNavVisRect = "{{0, 0}, {658, 446}}";
sepNavWindowFrame = "{{15, 222}, {697, 519}}";
};
};
32DBCF630370AF2F00C91783 /* Echoware_Prefix.pch */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 538}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
sepNavWindowFrame = "{{38, 201}, {697, 519}}";
};
};
840034180BCD0E4900D03C1B /* RFBBundleWrapper.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 504}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{150, 107}, {864, 604}}";
};
};
840034190BCD0E4900D03C1B /* RFBBundleWrapper.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {788, 8372}}";
sepNavSelRange = "{17275, 0}";
sepNavVisRect = "{{0, 5713}, {744, 461}}";
sepNavWindowFrame = "{{149, 106}, {864, 604}}";
};
};
840034DB0BCD16CB00D03C1B /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA2F0B60F36F00FB16B3 /* CritSection.cpp */;
name = "CritSection.cpp: 28";
rLen = 0;
rLoc = 479;
rType = 0;
vrLen = 482;
vrLoc = 0;
};
8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {896, 9212}}";
sepNavSelRange = "{17181, 0}";
sepNavVisRect = "{{0, 7112}, {744, 461}}";
sepNavWindowFrame = "{{259, 119}, {750, 558}}";
};
};
8400B9E00B60F36E00FB16B3 /* ACConnection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 1316}}";
sepNavSelRange = "{1264, 7}";
sepNavVisRect = "{{0, 507}, {983, 316}}";
sepNavWindowFrame = "{{15, 75}, {697, 671}}";
};
};
8400B9E10B60F36E00FB16B3 /* AES.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1134}}";
sepNavSelRange = "{92, 0}";
sepNavVisRect = "{{0, 666}, {744, 461}}";
};
};
8400B9E40B60F36E00FB16B3 /* APISocket.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 3248}}";
sepNavSelRange = "{3376, 19}";
sepNavVisRect = "{{0, 1835}, {744, 461}}";
sepNavWindowFrame = "{{167, 128}, {743, 543}}";
};
};
8400B9E50B60F36E00FB16B3 /* ClientSocket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 966}}";
sepNavSelRange = "{336, 6}";
sepNavVisRect = "{{0, 0}, {983, 316}}";
sepNavWindowFrame = "{{167, 128}, {743, 543}}";
};
};
8400B9E60B60F36E00FB16B3 /* ServerSocket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 1330}}";
sepNavSelRange = "{1557, 8}";
sepNavVisRect = "{{0, 1014}, {983, 316}}";
sepNavWindowFrame = "{{130, 93}, {743, 543}}";
};
};
8400B9E70B60F36E00FB16B3 /* Socket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {866, 7742}}";
sepNavSelRange = "{9004, 19}";
sepNavVisRect = "{{0, 6553}, {744, 461}}";
sepNavWindowFrame = "{{112, 88}, {743, 543}}";
};
};
8400B9E80B60F36E00FB16B3 /* blowfish.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 3248}}";
sepNavSelRange = "{2113, 5}";
sepNavVisRect = "{{0, 533}, {744, 461}}";
sepNavWindowFrame = "{{249, 105}, {743, 543}}";
};
};
8400B9E90B60F36E00FB16B3 /* blowfish.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 1204}}";
sepNavSelRange = "{360, 31}";
sepNavVisRect = "{{0, 0}, {704, 414}}";
sepNavWindowFrame = "{{249, 105}, {743, 543}}";
};
};
8400BA2F0B60F36F00FB16B3 /* CritSection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 461}}";
sepNavSelRange = "{479, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA300B60F36F00FB16B3 /* CritSection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 461}}";
sepNavSelRange = "{158, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{98, 156}, {743, 543}}";
};
};
8400BA310B60F36F00FB16B3 /* DataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {884, 3374}}";
sepNavSelRange = "{4444, 0}";
sepNavVisRect = "{{0, 2832}, {658, 542}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
8400BA320B60F36F00FB16B3 /* DataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 980}}";
sepNavSelRange = "{557, 18}";
sepNavVisRect = "{{0, 241}, {983, 316}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
8400BA350B60F36F00FB16B3 /* DataChannels.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 2954}}";
sepNavSelRange = "{4092, 24}";
sepNavVisRect = "{{0, 1}, {744, 461}}";
sepNavWindowFrame = "{{167, 128}, {743, 543}}";
};
};
8400BA360B60F36F00FB16B3 /* DataChannels.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 980}}";
sepNavSelRange = "{1113, 14}";
sepNavVisRect = "{{0, 521}, {983, 316}}";
sepNavWindowFrame = "{{343, 71}, {697, 671}}";
};
};
8400BA370B60F36F00FB16B3 /* DataChannelSocket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1092}}";
sepNavSelRange = "{781, 44}";
sepNavVisRect = "{{0, 393}, {744, 461}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
8400BA380B60F36F00FB16B3 /* DataChannelSocket.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 882}}";
sepNavSelRange = "{187, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA390B60F36F00FB16B3 /* DllProxyInfo.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {980, 2310}}";
sepNavSelRange = "{1820, 0}";
sepNavVisRect = "{{0, 627}, {746, 367}}";
sepNavWindowFrame = "{{163, 75}, {697, 519}}";
};
};
8400BA3A0B60F36F00FB16B3 /* DllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 812}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
};
};
8400BA3B0B60F36F00FB16B3 /* EchoController.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {825, 1232}}";
sepNavSelRange = "{185, 0}";
sepNavVisRect = "{{0, 620}, {825, 475}}";
sepNavWindowFrame = "{{276, -4}, {864, 604}}";
};
};
8400BA3C0B60F36F00FB16B3 /* EchoController.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 10276}}";
sepNavSelRange = "{21478, 0}";
sepNavVisRect = "{{0, 9551}, {711, 429}}";
sepNavWindowFrame = "{{84, 103}, {864, 604}}";
};
};
8400BA3D0B60F36F00FB16B3 /* EchoSrvDataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {818, 1806}}";
sepNavSelRange = "{1057, 0}";
sepNavVisRect = "{{0, 378}, {711, 429}}";
sepNavWindowFrame = "{{259, 119}, {750, 558}}";
};
};
8400BA3E0B60F36F00FB16B3 /* EchoSrvDataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 714}}";
sepNavSelRange = "{748, 8}";
sepNavVisRect = "{{0, 325}, {983, 316}}";
sepNavWindowFrame = "{{409, 75}, {743, 671}}";
};
};
8400BA3F0B60F36F00FB16B3 /* EchoToOSX.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 1036}}";
sepNavSelRange = "{1336, 0}";
sepNavVisRect = "{{0, 737}, {983, 244}}";
sepNavWindowFrame = "{{447, 79}, {743, 543}}";
};
};
8400BA400B60F36F00FB16B3 /* EchoToOSX.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1428}}";
sepNavSelRange = "{1514, 0}";
sepNavVisRect = "{{0, 919}, {744, 429}}";
sepNavWindowFrame = "{{15, 70}, {739, 671}}";
};
};
8400BA410B60F36F00FB16B3 /* Echoware.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 2954}}";
sepNavSelRange = "{788, 4}";
sepNavVisRect = "{{0, 311}, {983, 316}}";
sepNavWindowFrame = "{{187, 31}, {864, 604}}";
};
};
8400BA440B60F36F00FB16B3 /* Echoware.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {810, 546}}";
sepNavSelRange = "{263, 0}";
sepNavVisRect = "{{0, 0}, {810, 323}}";
sepNavWindowFrame = "{{149, 106}, {864, 604}}";
};
};
8400BA4C0B60F36F00FB16B3 /* Echoware_Prefix.pch */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 367}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
};
};
8400BA550B60F36F00FB16B3 /* Globals.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1862}}";
sepNavSelRange = "{2121, 0}";
sepNavVisRect = "{{0, 1309}, {744, 461}}";
sepNavWindowFrame = "{{84, 135}, {743, 543}}";
};
};
8400BA560B60F36F00FB16B3 /* Globals.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {711, 2352}}";
sepNavSelRange = "{230, 0}";
sepNavVisRect = "{{0, 245}, {711, 429}}";
sepNavWindowFrame = "{{61, 156}, {743, 543}}";
};
};
8400BA580B60F36F00FB16B3 /* InterfaceDllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 798}}";
sepNavSelRange = "{295, 0}";
sepNavVisRect = "{{0, 126}, {744, 429}}";
sepNavWindowFrame = "{{15, 70}, {697, 671}}";
};
};
8400BA590B60F36F00FB16B3 /* LocalDataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {986, 2408}}";
sepNavSelRange = "{747, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
8400BA5A0B60F36F00FB16B3 /* LocalDataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {810, 560}}";
sepNavSelRange = "{724, 32}";
sepNavVisRect = "{{0, 237}, {810, 323}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA5B0B60F36F00FB16B3 /* LocalListener.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {933, 546}}";
sepNavSelRange = "{423, 0}";
sepNavVisRect = "{{0, 0}, {933, 546}}";
sepNavWindowFrame = "{{38, 45}, {972, 675}}";
};
};
8400BA5C0B60F36F00FB16B3 /* LocalListener.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 542}}";
sepNavSelRange = "{328, 0}";
sepNavVisRect = "{{0, 0}, {704, 542}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA5D0B60F36F00FB16B3 /* LocalProxyConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {825, 475}}";
sepNavSelRange = "{177, 0}";
sepNavVisRect = "{{0, 0}, {825, 475}}";
sepNavWindowFrame = "{{15, 137}, {864, 604}}";
};
};
8400BA5E0B60F36F00FB16B3 /* LocalProxyConnection.h */ = {
uiCtxt = {
sepNavWindowFrame = "{{15, 137}, {864, 604}}";
};
};
8400BA5F0B60F36F00FB16B3 /* Logger.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1582}}";
sepNavSelRange = "{408, 0}";
sepNavVisRect = "{{0, 0}, {744, 429}}";
sepNavWindowFrame = "{{50, 188}, {750, 558}}";
};
};
8400BA600B60F36F00FB16B3 /* Logger.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 546}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{15, 137}, {864, 604}}";
};
};
8400BA610B60F36F00FB16B3 /* MyDllProxyInfo.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1596}}";
sepNavSelRange = "{218, 0}";
sepNavVisRect = "{{0, 939}, {744, 461}}";
sepNavWindowFrame = "{{130, 93}, {743, 543}}";
};
};
8400BA620B60F36F00FB16B3 /* MyDllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {851, 588}}";
sepNavSelRange = "{272, 8}";
sepNavVisRect = "{{0, 82}, {851, 506}}";
sepNavWindowFrame = "{{15, 106}, {890, 635}}";
};
};
8400BA630B60F36F00FB16B3 /* NetPacket.h */ = {
uiCtxt = {
sepNavWindowFrame = "{{15, 70}, {697, 671}}";
};
};
8400BA650B60F36F00FB16B3 /* aes.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 1820}}";
sepNavSelRange = "{2900, 0}";
sepNavVisRect = "{{0, 710}, {704, 470}}";
sepNavWindowFrame = "{{38, 177}, {743, 543}}";
};
};
8400BA660B60F36F00FB16B3 /* aes_core.c */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 17850}}";
sepNavSelRange = "{42609, 0}";
sepNavVisRect = "{{0, 12316}, {704, 470}}";
sepNavWindowFrame = "{{61, 156}, {743, 543}}";
};
};
8400BA6C0B60F36F00FB16B3 /* ProxiesManager.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {825, 4088}}";
sepNavSelRange = "{2721, 10}";
sepNavVisRect = "{{0, 1380}, {825, 475}}";
sepNavWindowFrame = "{{150, 107}, {864, 604}}";
};
};
8400BA6D0B60F36F00FB16B3 /* ProxiesManager.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 1120}}";
sepNavSelRange = "{205, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA720B60F36F00FB16B3 /* md5.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 4858}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
};
};
8400BA750B60F36F00FB16B3 /* ntlmv2.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 12180}}";
sepNavSelRange = "{19225, 5}";
sepNavVisRect = "{{0, 10833}, {983, 244}}";
};
};
8400BA760B60F36F00FB16B3 /* ProxyConnect.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 14266}}";
sepNavSelRange = "{5332, 5}";
sepNavVisRect = "{{0, 3517}, {983, 316}}";
sepNavWindowFrame = "{{183, 75}, {743, 671}}";
};
};
8400BA780B60F36F00FB16B3 /* ProxyConnect.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 1414}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
sepNavWindowFrame = "{{15, 106}, {890, 635}}";
};
};
8400BA7B0B60F36F00FB16B3 /* stdafx.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 367}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
};
};
8400BA7C0B60F36F00FB16B3 /* ProxyConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 2240}}";
sepNavSelRange = "{3544, 24}";
sepNavVisRect = "{{0, 1924}, {983, 316}}";
sepNavWindowFrame = "{{255, 96}, {743, 543}}";
};
};
8400BA7D0B60F36F00FB16B3 /* ProxyConnection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 714}}";
sepNavSelRange = "{185, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BA870B60F36F00FB16B3 /* Hnumber.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 7434}}";
sepNavSelRange = "{392, 0}";
sepNavVisRect = "{{0, 210}, {807, 239}}";
sepNavWindowFrame = "{{61, 156}, {743, 543}}";
};
};
8400BA8A0B60F36F00FB16B3 /* Keys_main.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 462}}";
sepNavSelRange = "{158, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
};
};
8400BA920B60F36F00FB16B3 /* PrimeGen.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {983, 3122}}";
sepNavSelRange = "{1602, 4}";
sepNavVisRect = "{{0, 1095}, {983, 316}}";
};
};
8400BA990B60F36F00FB16B3 /* RSAKeys.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {770, 2534}}";
sepNavSelRange = "{3200, 0}";
sepNavVisRect = "{{0, 1571}, {744, 429}}";
sepNavWindowFrame = "{{278, 149}, {743, 543}}";
};
};
8400BA9A0B60F36F00FB16B3 /* RSAKeys.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 700}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
};
};
8400BA9D0B60F36F00FB16B3 /* stdafx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 429}}";
sepNavSelRange = "{295, 0}";
sepNavVisRect = "{{0, 0}, {744, 429}}";
sepNavWindowFrame = "{{15, 137}, {864, 604}}";
};
};
8400BA9E0B60F36F00FB16B3 /* stdafx.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 429}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 429}}";
sepNavWindowFrame = "{{15, 70}, {743, 671}}";
};
};
8400BAA00B60F36F00FB16B3 /* version.plist */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {825, 475}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {825, 475}}";
sepNavWindowFrame = "{{149, 106}, {864, 604}}";
};
};
8400BEAE0B612C7C00FB16B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA560B60F36F00FB16B3 /* Globals.h */;
name = "Globals.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 551;
vrLoc = 0;
};
8418426EC5B04BFC00DC27BC /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AF48A40BCCD42400C5BF0A /* DirService.cpp */;
name = "DirService.cpp: 5";
rLen = 0;
rLoc = 55;
rType = 0;
vrLen = 463;
vrLoc = 0;
};
84184270C5B04BFC00DC27BC /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AF48A40BCCD42400C5BF0A /* DirService.cpp */;
name = "DirService.cpp: 5";
rLen = 0;
rLoc = 55;
rType = 0;
vrLen = 463;
vrLoc = 0;
};
841842B1C5B0606800DC27BC /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E70B60F36E00FB16B3 /* Socket.cpp */;
name = "Socket.cpp: 491";
rLen = 0;
rLoc = 9285;
rType = 0;
vrLen = 668;
vrLoc = 8801;
};
8420DD240BD394E900937A80 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA380B60F36F00FB16B3 /* DataChannelSocket.h */;
name = "DataChannelSocket.h: 13";
rLen = 0;
rLoc = 187;
rType = 0;
vrLen = 761;
vrLoc = 0;
};
84239D390BB2A1BA00C28522 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA5F0B60F36F00FB16B3 /* Logger.cpp */;
name = "Logger.cpp: 17";
rLen = 0;
rLoc = 408;
rType = 0;
vrLen = 597;
vrLoc = 0;
};
84239D3C0BB2A1BA00C28522 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA9E0B60F36F00FB16B3 /* stdafx.h */;
name = "stdafx.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 173;
vrLoc = 0;
};
8428A4450B984D8900F257E1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA320B60F36F00FB16B3 /* DataChannel.h */;
name = "#include \"L";
rLen = 12;
rLoc = 184;
rType = 0;
vrLen = 606;
vrLoc = 110;
};
843C1D500C3F94EB000BB087 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E40B60F36E00FB16B3 /* APISocket.h */;
name = "atic unsigned long";
rLen = 19;
rLoc = 3426;
rType = 0;
vrLen = 648;
vrLoc = 3105;
};
84409C610BCE2D4700A7BC33 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA6C0B60F36F00FB16B3 /* ProxiesManager.cpp */;
name = "ProxiesManager.cpp: 241";
rLen = 0;
rLoc = 5615;
rType = 0;
vrLen = 839;
vrLoc = 5916;
};
84464D2F0C3A520F00064760 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA300B60F36F00FB16B3 /* CritSection.h */;
name = "CritSection.h: 12";
rLen = 0;
rLoc = 158;
rType = 0;
vrLen = 343;
vrLoc = 0;
};
84464D330C3A520F00064760 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AFF1410B8C841D00D93058 /* ServerListSynchronize.cpp */;
name = "ServerListSynchronize.cpp: 250";
rLen = 0;
rLoc = 6209;
rType = 0;
vrLen = 973;
vrLoc = 6596;
};
84464D4C0C3A523400064760 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3D0B60F36F00FB16B3 /* EchoSrvDataChannel.cpp */;
name = "EchoSrvDataChannel.cpp: 38";
rLen = 0;
rLoc = 1104;
rType = 0;
vrLen = 962;
vrLoc = 0;
};
84464E470C3A8F4900064760 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA590B60F36F00FB16B3 /* LocalDataChannel.cpp */;
name = "LocalDataChannel.cpp: 32";
rLen = 0;
rLoc = 747;
rType = 0;
vrLen = 752;
vrLoc = 0;
};
844D2C290C31125500A71AF3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA350B60F36F00FB16B3 /* DataChannels.cpp */;
name = GetPortForOffLoadingData;
rLen = 24;
rLoc = 4092;
rType = 0;
vrLen = 824;
vrLoc = 0;
};
8456E4D00B4C1D20006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E4D10B4C1D20006B7550 /* OSByteOrder.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 869;
vrLoc = 2963;
};
8456E4D10B4C1D20006B7550 /* OSByteOrder.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = OSByteOrder.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/libkern/ppc/OSByteOrder.h;
sourceTree = "";
};
8456E4D20B4C1D20006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E4D30B4C1D20006B7550 /* OSByteOrder.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 674;
vrLoc = 2856;
};
8456E4D30B4C1D20006B7550 /* OSByteOrder.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = OSByteOrder.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/libkern/i386/OSByteOrder.h;
sourceTree = "";
};
8456E4D70B4C1D20006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E4D80B4C1D20006B7550 /* OSByteOrder.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1346;
vrLoc = 0;
};
8456E4D80B4C1D20006B7550 /* OSByteOrder.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = OSByteOrder.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/libkern/i386/OSByteOrder.h;
sourceTree = "";
};
8456E4D90B4C1D20006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E4DA0B4C1D20006B7550 /* OSByteOrder.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 869;
vrLoc = 2963;
};
8456E4DA0B4C1D20006B7550 /* OSByteOrder.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = OSByteOrder.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/libkern/ppc/OSByteOrder.h;
sourceTree = "";
};
8456E5290B4C22C7006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E52A0B4C22C7006B7550 /* endian.h */;
name = "(null): 101";
rLen = 0;
rLoc = 3927;
rType = 0;
vrLen = 971;
vrLoc = 3502;
};
8456E52A0B4C22C7006B7550 /* endian.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = endian.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/i386/endian.h;
sourceTree = "";
};
8456E52D0B4C22C7006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E52E0B4C22C7006B7550 /* endian.h */;
name = "(null): 101";
rLen = 0;
rLoc = 3927;
rType = 0;
vrLen = 971;
vrLoc = 3502;
};
8456E52E0B4C22C7006B7550 /* endian.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = endian.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/i386/endian.h;
sourceTree = "";
};
8456E5570B4CFD3B006B7550 /* MacTypes.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = MacTypes.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h;
sourceTree = "";
};
8456E7040B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7050B4D0EC2006B7550 /* CoreFoundation.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 775;
vrLoc = 0;
};
8456E7050B4D0EC2006B7550 /* CoreFoundation.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CoreFoundation.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h;
sourceTree = "";
};
8456E7060B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7070B4D0EC2006B7550 /* CFXMLNode.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1825;
vrLoc = 0;
};
8456E7070B4D0EC2006B7550 /* CFXMLNode.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFXMLNode.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h;
sourceTree = "";
};
8456E7080B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7090B4D0EC2006B7550 /* CFTimeZone.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 810;
vrLoc = 0;
};
8456E7090B4D0EC2006B7550 /* CFTimeZone.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFTimeZone.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h;
sourceTree = "";
};
8456E70A0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E70B0B4D0EC2006B7550 /* CFBag.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1167;
vrLoc = 0;
};
8456E70B0B4D0EC2006B7550 /* CFBag.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFBag.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h;
sourceTree = "";
};
8456E70C0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E70D0B4D0EC2006B7550 /* CFBinaryHeap.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1344;
vrLoc = 0;
};
8456E70D0B4D0EC2006B7550 /* CFBinaryHeap.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFBinaryHeap.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h;
sourceTree = "";
};
8456E70F0B4D0EC2006B7550 /* CFData.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFData.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h;
sourceTree = "";
};
8456E7110B4D0EC2006B7550 /* CFStream.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFStream.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h;
sourceTree = "";
};
8456E7130B4D0EC2006B7550 /* CFRunLoop.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFRunLoop.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h;
sourceTree = "";
};
8456E7150B4D0EC2006B7550 /* CFPlugInCOM.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFPlugInCOM.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugInCOM.h;
sourceTree = "";
};
8456E7170B4D0EC2006B7550 /* CFNumberFormatter.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFNumberFormatter.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h;
sourceTree = "";
};
8456E7190B4D0EC2006B7550 /* CFAttributedString.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFAttributedString.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h;
sourceTree = "";
};
8456E71A0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E71B0B4D0EC2006B7550 /* CFCalendar.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1160;
vrLoc = 0;
};
8456E71B0B4D0EC2006B7550 /* CFCalendar.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFCalendar.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h;
sourceTree = "";
};
8456E71C0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E71D0B4D0EC2006B7550 /* CFMachPort.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1463;
vrLoc = 0;
};
8456E71D0B4D0EC2006B7550 /* CFMachPort.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFMachPort.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFMachPort.h;
sourceTree = "";
};
8456E71E0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6F09968B340046F588 /* NetPacket.h */;
name = "NetPacket.h: 66";
rLen = 0;
rLoc = 1569;
rType = 0;
vrLen = 1003;
vrLoc = 0;
};
8456E71F0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A4E09968B340046F588 /* ACConnection.cpp */;
name = "ACConnection.cpp: 10";
rLen = 0;
rLoc = 208;
rType = 0;
vrLen = 905;
vrLoc = 0;
};
8456E7200B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E5570B4CFD3B006B7550 /* MacTypes.h */;
name = "TimeBase base; /* reference to the time base */";
rLen = 78;
rLoc = 20972;
rType = 0;
vrLen = 1624;
vrLoc = 20028;
};
8456E7210B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 32DBCF630370AF2F00C91783 /* Echoware_Prefix.pch */;
name = "//";
rLen = 3;
rLoc = 0;
rType = 0;
vrLen = 148;
vrLoc = 0;
};
8456E7230B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7240B4D0EC2006B7550 /* CoreFoundation.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 775;
vrLoc = 0;
};
8456E7240B4D0EC2006B7550 /* CoreFoundation.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CoreFoundation.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h;
sourceTree = "";
};
8456E7250B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7260B4D0EC2006B7550 /* CFXMLNode.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1825;
vrLoc = 0;
};
8456E7260B4D0EC2006B7550 /* CFXMLNode.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFXMLNode.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h;
sourceTree = "";
};
8456E7270B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7280B4D0EC2006B7550 /* CFTimeZone.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 810;
vrLoc = 0;
};
8456E7280B4D0EC2006B7550 /* CFTimeZone.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFTimeZone.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h;
sourceTree = "";
};
8456E7290B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E72A0B4D0EC2006B7550 /* CFBag.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1167;
vrLoc = 0;
};
8456E72A0B4D0EC2006B7550 /* CFBag.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFBag.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h;
sourceTree = "";
};
8456E72B0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E72C0B4D0EC2006B7550 /* CFBinaryHeap.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1344;
vrLoc = 0;
};
8456E72C0B4D0EC2006B7550 /* CFBinaryHeap.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFBinaryHeap.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h;
sourceTree = "";
};
8456E72D0B4D0EC2006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E72E0B4D0EC2006B7550 /* CFCalendar.h */;
name = "(null): 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1160;
vrLoc = 0;
};
8456E72E0B4D0EC2006B7550 /* CFCalendar.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFCalendar.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h;
sourceTree = "";
};
8456E7BC0B4D1B38006B7550 /* libkern.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = libkern.h;
path = /Developer/SDKs/MacOSX10.3.9.sdk/usr/include/libkern/libkern.h;
sourceTree = "";
};
8456E86F0B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E5570B4CFD3B006B7550 /* MacTypes.h */;
name = "MacTypes.h: 504";
rLen = 0;
rLoc = 21014;
rType = 0;
vrLen = 1768;
vrLoc = 19789;
};
8456E8700B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7190B4D0EC2006B7550 /* CFAttributedString.h */;
name = "CFAttributedString.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1735;
vrLoc = 24;
};
8456E8710B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7170B4D0EC2006B7550 /* CFNumberFormatter.h */;
name = "CFNumberFormatter.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1215;
vrLoc = 0;
};
8456E8720B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7150B4D0EC2006B7550 /* CFPlugInCOM.h */;
name = "CFPlugInCOM.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1361;
vrLoc = 0;
};
8456E8730B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7130B4D0EC2006B7550 /* CFRunLoop.h */;
name = "CFRunLoop.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1941;
vrLoc = 0;
};
8456E8740B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7110B4D0EC2006B7550 /* CFStream.h */;
name = "CFStream.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1164;
vrLoc = 0;
};
8456E8750B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E70F0B4D0EC2006B7550 /* CFData.h */;
name = "CFData.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1054;
vrLoc = 0;
};
8456E8770B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7BC0B4D1B38006B7550 /* libkern.h */;
name = "min(u_int a, u_int b)";
rLen = 22;
rLoc = 3708;
rType = 0;
vrLen = 2243;
vrLoc = 524;
};
8456E87A0B4E88C3006B7550 /* CFByteOrder.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFByteOrder.h;
path = /System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h;
sourceTree = "";
};
8456E87B0B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E70F0B4D0EC2006B7550 /* CFData.h */;
name = "CFData.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1054;
vrLoc = 0;
};
8456E87C0B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6309968B340046F588 /* Echoware.h */;
name = "Echoware.h: ConnectProxy";
rLen = 0;
rLoc = 540;
rType = 0;
vrLen = 959;
vrLoc = 0;
};
8456E87D0B4E88C3006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E7BC0B4D1B38006B7550 /* libkern.h */;
name = "min(u_int a, u_int b)";
rLen = 22;
rLoc = 3708;
rType = 0;
vrLen = 2243;
vrLoc = 524;
};
8456E9090B4E956F006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E87A0B4E88C3006B7550 /* CFByteOrder.h */;
name = "CFByteOrder.h: 23";
rLen = 0;
rLoc = 516;
rType = 0;
vrLen = 1042;
vrLoc = 0;
};
8456E90A0B4E956F006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8456E87A0B4E88C3006B7550 /* CFByteOrder.h */;
name = "CFByteOrder.h: 23";
rLen = 0;
rLoc = 516;
rType = 0;
vrLen = 1042;
vrLoc = 0;
};
8456E95E0B4EA7D1006B7550 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6009968B340046F588 /* EchoSrvDataChannel.cpp */;
name = "EchoSrvDataChannel.cpp: 69";
rLen = 0;
rLoc = 1778;
rType = 0;
vrLen = 871;
vrLoc = 1388;
};
8460E80A0B8469BA009E0CB5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA600B60F36F00FB16B3 /* Logger.h */;
name = "Logger.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 544;
vrLoc = 0;
};
8460E80B0B8469BA009E0CB5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA5F0B60F36F00FB16B3 /* Logger.cpp */;
name = "Logger.cpp: CLogger";
rLen = 0;
rLoc = 190;
rType = 0;
vrLen = 533;
vrLoc = 0;
};
847EA4B40BDDEC2B005AC757 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA600B60F36F00FB16B3 /* Logger.h */;
name = "Logger.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 724;
vrLoc = 0;
};
847EA4B60BDDEC2B005AC757 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA410B60F36F00FB16B3 /* Echoware.cpp */;
name = "Echoware.cpp: 14";
rLen = 0;
rLoc = 380;
rType = 0;
vrLen = 721;
vrLoc = 203;
};
847EA4FB0BDDF714005AC757 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA560B60F36F00FB16B3 /* Globals.h */;
name = "Globals.h: 15";
rLen = 0;
rLoc = 230;
rType = 0;
vrLen = 648;
vrLoc = 0;
};
847EA4FC0BDDF714005AC757 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA440B60F36F00FB16B3 /* Echoware.h */;
name = "Echoware.h: EnableLogging";
rLen = 0;
rLoc = 263;
rType = 0;
vrLen = 1050;
vrLoc = 0;
};
847EA4FD0BDDF714005AC757 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AFF1400B8C841D00D93058 /* ServerListSynchronize.h */;
name = "ServerListSynchronize.h: 41";
rLen = 0;
rLoc = 775;
rType = 0;
vrLen = 788;
vrLoc = 519;
};
8480D0BC0B5F8D200030E8C0 /* Vine Server 2.1 */ = {
isa = PBXExecutable;
activeArgIndex = 2147483647;
activeArgIndices = (
);
argumentStrings = (
);
autoAttachOnCrash = 1;
configStateDict = {
};
customDataFormattersEnabled = 1;
debuggerPlugin = GDBDebugging;
disassemblyDisplayState = 0;
dylibVariantSuffix = "";
enableDebugStr = 1;
environmentEntries = (
);
executableSystemSymbolLevel = 0;
executableUserSymbolLevel = 0;
launchableReference = 8480D0BD0B5F8D200030E8C0 /* Vine Server.app */;
libgmallocEnabled = 0;
name = "Vine Server 2.1";
savedGlobals = {
};
sourceDirectories = (
);
variableFormatDictionary = {
$cs = 1;
$ds = 1;
$eax = 1;
$ebp = 1;
$ebx = 1;
$ecx = 1;
$edi = 1;
$edx = 1;
$eflags = 1;
$eip = 1;
$es = 1;
$esi = 1;
$esp = 1;
$gs = 1;
$mm0 = 1;
$mm1 = 1;
$mm2 = 1;
$mm3 = 1;
$mm4 = 1;
$mm5 = 1;
$mm6 = 1;
$mm7 = 1;
$mxcsr = 1;
$ss = 1;
$xmm0 = 1;
$xmm1 = 1;
$xmm2 = 1;
$xmm3 = 1;
$xmm4 = 1;
$xmm5 = 1;
$xmm6 = 1;
$xmm7 = 1;
};
};
8480D0BD0B5F8D200030E8C0 /* Vine Server.app */ = {
isa = PBXFileReference;
explicitFileType = wrapper.application;
name = "Vine Server.app";
path = "/Users/admin/Projects/VS 2.1/Vine Server.app";
sourceTree = "";
};
8487D8910C6B307D006BDD7C /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8400BA3C0B60F36F00FB16B3 /* EchoController.m */;
};
8487D8A10C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA550B60F36F00FB16B3 /* Globals.cpp */;
name = "Globals.cpp: 111";
rLen = 0;
rLoc = 2121;
rType = 0;
vrLen = 946;
vrLoc = 1684;
};
8487D8A20C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */;
name = "ACConnection.cpp: 550";
rLen = 0;
rLoc = 17181;
rType = 0;
vrLen = 1002;
vrLoc = 15841;
};
8487D8A30C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
comments = "error: expected ',' or ';' before 'if'";
fRef = 8400BA3C0B60F36F00FB16B3 /* EchoController.m */;
rLen = 1;
rLoc = 710;
rType = 1;
};
8487D8A40C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA550B60F36F00FB16B3 /* Globals.cpp */;
name = "Globals.cpp: 111";
rLen = 0;
rLoc = 2121;
rType = 0;
vrLen = 946;
vrLoc = 1684;
};
8487D8A50C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */;
name = "ACConnection.cpp: 550";
rLen = 0;
rLoc = 17181;
rType = 0;
vrLen = 1002;
vrLoc = 15841;
};
8487D8A90C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3D0B60F36F00FB16B3 /* EchoSrvDataChannel.cpp */;
name = "EchoSrvDataChannel.cpp: 37";
rLen = 0;
rLoc = 1057;
rType = 0;
vrLen = 853;
vrLoc = 760;
};
8487D8AA0C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */;
name = "ACConnection.cpp: 345";
rLen = 0;
rLoc = 10364;
rType = 0;
vrLen = 1173;
vrLoc = 9811;
};
8487D8AB0C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3D0B60F36F00FB16B3 /* EchoSrvDataChannel.cpp */;
name = "EchoSrvDataChannel.cpp: 37";
rLen = 0;
rLoc = 1057;
rType = 0;
vrLen = 853;
vrLoc = 760;
};
8487D8AC0C6B37E3006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */;
name = "ACConnection.cpp: 345";
rLen = 0;
rLoc = 10364;
rType = 0;
vrLen = 1173;
vrLoc = 9811;
};
8487D8B30C6B3851006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3C0B60F36F00FB16B3 /* EchoController.m */;
name = "EchoController.m: 381";
rLen = 0;
rLoc = 11082;
rType = 0;
vrLen = 1105;
vrLoc = 11010;
};
8487D8B40C6B3851006BDD7C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3C0B60F36F00FB16B3 /* EchoController.m */;
name = "EchoController.m: 714";
rLen = 0;
rLoc = 21478;
rType = 0;
vrLen = 1148;
vrLoc = 20315;
};
848C411E0B848FDC00BD11B3 /* rfbserver.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {810, 630}}";
sepNavSelRange = "{272, 0}";
sepNavVisRect = "{{0, 57}, {810, 323}}";
sepNavWindowFrame = "{{15, 70}, {739, 671}}";
};
};
848C411F0B848FDC00BD11B3 /* rfbserver.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 367}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
sepNavWindowFrame = "{{15, 70}, {739, 671}}";
};
};
848C41450B84919C00BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 848C411F0B848FDC00BD11B3 /* rfbserver.cpp */;
name = "rfbserver.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 161;
vrLoc = 0;
};
848C41470B84919C00BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA310B60F36F00FB16B3 /* DataChannel.cpp */;
name = "DataChannel.cpp: 129";
rLen = 0;
rLoc = 3338;
rType = 0;
vrLen = 866;
vrLoc = 3315;
};
848C414C0B84919C00BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 848C411E0B848FDC00BD11B3 /* rfbserver.h */;
name = "rfbserver.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 488;
vrLoc = 0;
};
848C414D0B84919C00BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 848C411F0B848FDC00BD11B3 /* rfbserver.cpp */;
name = "rfbserver.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 161;
vrLoc = 0;
};
848C416E0B84946E00BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 848C411E0B848FDC00BD11B3 /* rfbserver.h */;
name = "CGKeyCode *keyTable;";
rLen = 25;
rLoc = 709;
rType = 0;
vrLen = 469;
vrLoc = 339;
};
848C41AE0B84A77400BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA320B60F36F00FB16B3 /* DataChannel.h */;
name = "DataChannel.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 551;
vrLoc = 0;
};
848C424C0B84C97700BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6C09968B340046F588 /* LocalProxyConnection.h */;
name = "LocalProxyConnection.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 274;
vrLoc = 0;
};
848C42570B84C97700BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6709968B340046F588 /* LocalDataChannel.cpp */;
name = "LocalDataChannel.cpp: ~CLocalDataChannel";
rLen = 0;
rLoc = 406;
rType = 0;
vrLen = 522;
vrLoc = 3026;
};
848C42580B84C97700BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6809968B340046F588 /* LocalDataChannel.h */;
name = "LocalDataChannel.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 573;
vrLoc = 0;
};
848C42590B84C97700BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6C09968B340046F588 /* LocalProxyConnection.h */;
name = "LocalProxyConnection.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 274;
vrLoc = 0;
};
848C425B0B84C97700BD11B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E50B60F36E00FB16B3 /* ClientSocket.cpp */;
name = "ClientSocket.cpp: 178";
rLen = 0;
rLoc = 1383;
rType = 0;
vrLen = 0;
vrLoc = 1331;
};
8491B6BD0C44CB2B00E4B477 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E70B60F36E00FB16B3 /* Socket.cpp */;
name = "m_csAsync.Lock();";
rLen = 19;
rLoc = 9004;
rType = 0;
vrLen = 726;
vrLoc = 8689;
};
849C6785C5B0469200F11330 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA560B60F36F00FB16B3 /* Globals.h */;
name = "Globals.h: 15";
rLen = 0;
rLoc = 230;
rType = 0;
vrLen = 640;
vrLoc = 311;
};
849C6787C5B0469200F11330 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */;
name = "ACConnection.cpp: 352";
rLen = 0;
rLoc = 10666;
rType = 0;
vrLen = 1011;
vrLoc = 9996;
};
849C6788C5B0469200F11330 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA560B60F36F00FB16B3 /* Globals.h */;
name = "Globals.h: 15";
rLen = 0;
rLoc = 230;
rType = 0;
vrLen = 640;
vrLoc = 311;
};
849C6797C5B0469200F11330 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 840034190BCD0E4900D03C1B /* RFBBundleWrapper.cpp */;
name = "RFBBundleWrapper.cpp: 425";
rLen = 0;
rLoc = 17275;
rType = 0;
vrLen = 1389;
vrLoc = 16529;
};
849C6798C5B0469200F11330 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 840034190BCD0E4900D03C1B /* RFBBundleWrapper.cpp */;
name = "RFBBundleWrapper.cpp: 425";
rLen = 0;
rLoc = 17275;
rType = 0;
vrLen = 1389;
vrLoc = 16529;
};
84A37A52C5B0A121003069A5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E80B60F36E00FB16B3 /* blowfish.cpp */;
name = PArr;
rLen = 5;
rLoc = 2113;
rType = 0;
vrLen = 934;
vrLoc = 948;
};
84AF08E40B98819600B348CB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E50B60F36E00FB16B3 /* ClientSocket.cpp */;
name = "ClientSocket.cpp: 48";
rLen = 0;
rLoc = 979;
rType = 0;
vrLen = 675;
vrLoc = 708;
};
84AF08E60B98819600B348CB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E00B60F36E00FB16B3 /* ACConnection.h */;
name = "ACConnection.h: 19";
rLen = 0;
rLoc = 310;
rType = 0;
vrLen = 552;
vrLoc = 0;
};
84AF48A30BCCD42400C5BF0A /* DirService.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {691, 546}}";
sepNavSelRange = "{207, 18}";
sepNavVisRect = "{{0, 0}, {691, 435}}";
sepNavWindowFrame = "{{174, 42}, {864, 703}}";
};
};
84AF48A40BCCD42400C5BF0A /* DirService.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1124, 5950}}";
sepNavSelRange = "{55, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{78, 42}, {864, 703}}";
};
};
84AF48B20BCCD4FB00C5BF0A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AF48A30BCCD42400C5BF0A /* DirService.h */;
name = "DirService.h: 5";
rLen = 0;
rLoc = 46;
rType = 0;
vrLen = 164;
vrLoc = 0;
};
84AF49000BCCD76E00C5BF0A /* User.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 630}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{170, 142}, {864, 604}}";
};
};
84AF49010BCCD76E00C5BF0A /* User.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1028, 1862}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {744, 461}}";
sepNavWindowFrame = "{{102, 43}, {864, 703}}";
};
};
84AFF1400B8C841D00D93058 /* ServerListSynchronize.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {744, 840}}";
sepNavSelRange = "{775, 0}";
sepNavVisRect = "{{0, 379}, {744, 461}}";
sepNavWindowFrame = "{{150, 107}, {864, 604}}";
};
};
84AFF1410B8C841D00D93058 /* ServerListSynchronize.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {842, 5348}}";
sepNavSelRange = "{8843, 0}";
sepNavVisRect = "{{0, 4678}, {711, 429}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
84AFF17D0B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA570B60F36F00FB16B3 /* Info.plist */;
name = "Info.plist: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 718;
vrLoc = 0;
};
84AFF17F0B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3A0B60F36F00FB16B3 /* DllProxyInfo.h */;
name = "DllProxyInfo.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 518;
vrLoc = 0;
};
84AFF1850B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E40B60F36E00FB16B3 /* APISocket.h */;
name = StopSend;
rLen = 8;
rLoc = 3858;
rType = 0;
vrLen = 551;
vrLoc = 3590;
};
84AFF1890B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA570B60F36F00FB16B3 /* Info.plist */;
name = "Info.plist: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 718;
vrLoc = 0;
};
84AFF18A0B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AFF1400B8C841D00D93058 /* ServerListSynchronize.h */;
name = "ServerListSynchronize.h: 11";
rLen = 0;
rLoc = 174;
rType = 0;
vrLen = 583;
vrLoc = 0;
};
84AFF18D0B8C87E400D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AFF1410B8C841D00D93058 /* ServerListSynchronize.cpp */;
name = "ServerListSynchronize.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 600;
vrLoc = 0;
};
84AFF1B20B8C89CC00D93058 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA4C0B60F36F00FB16B3 /* Echoware_Prefix.pch */;
name = "Echoware_Prefix.pch: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 148;
vrLoc = 0;
};
84B0A8140B96D8B400B60726 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9EA0B60F36E00FB16B3 /* blowfish.h2 */;
name = "blowfish.h2: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1230;
vrLoc = 0;
};
84B0A81D0B96D8B400B60726 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9EA0B60F36E00FB16B3 /* blowfish.h2 */;
name = "blowfish.h2: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1230;
vrLoc = 0;
};
84B0A9360B9707B000B60726 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA7D0B60F36F00FB16B3 /* ProxyConnection.h */;
name = "ProxyConnection.h: 14";
rLen = 0;
rLoc = 185;
rType = 0;
vrLen = 480;
vrLoc = 0;
};
84B0AB400B973C9E00B60726 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA760B60F36F00FB16B3 /* ProxyConnect.cpp */;
name = "ProxyConnect.cpp: 206";
rLen = 0;
rLoc = 4183;
rType = 0;
vrLen = 399;
vrLoc = 4019;
};
84B18DB40BCF7EEF005360E0 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA7C0B60F36F00FB16B3 /* ProxyConnection.cpp */;
name = "ProxyConnection.cpp: 26";
rLen = 0;
rLoc = 517;
rType = 0;
vrLen = 920;
vrLoc = 2710;
};
84B1AF9F0B94350200D477E7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA5A0B60F36F00FB16B3 /* LocalDataChannel.h */;
name = "LocalDataChannel.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 573;
vrLoc = 0;
};
84B1AFA50B94350200D477E7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA370B60F36F00FB16B3 /* DataChannelSocket.cpp */;
name = "DataChannelSocket.cpp: 68";
rLen = 0;
rLoc = 1322;
rType = 0;
vrLen = 581;
vrLoc = 978;
};
84B1AFA80B94350200D477E7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA380B60F36F00FB16B3 /* DataChannelSocket.h */;
name = "DataChannelSocket.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 614;
vrLoc = 0;
};
84B1B0070B9465A300D477E7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA9E0B60F36F00FB16B3 /* stdafx.h */;
name = "stdafx.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 173;
vrLoc = 0;
};
84BC718E0B959CCB00BFC169 /* OpenTransportProviders.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = OpenTransportProviders.h;
path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h;
sourceTree = "";
};
84BC71A90B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA7B0B60F36F00FB16B3 /* stdafx.h */;
name = "stdafx.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 330;
vrLoc = 0;
};
84BC71AA0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA780B60F36F00FB16B3 /* ProxyConnect.h */;
name = "ProxyConnect.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 579;
vrLoc = 0;
};
84BC71AB0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA770B60F36F00FB16B3 /* ProxyConnect.dsp */;
name = "ProxyConnect.dsp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1009;
vrLoc = 0;
};
84BC71AD0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA720B60F36F00FB16B3 /* md5.cpp */;
name = "md5.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 996;
vrLoc = 0;
};
84BC71AE0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84D520B90B5E27CD0050DE52 /* NSObjCRuntime.h */;
name = "@class NSString;";
rLen = 17;
rLoc = 1535;
rType = 0;
vrLen = 1062;
vrLoc = 1134;
};
84BC71B00B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC718E0B959CCB00BFC169 /* OpenTransportProviders.h */;
name = "TCP_NODELAY = 0x01,";
rLen = 40;
rLoc = 2260;
rType = 0;
vrLen = 931;
vrLoc = 2059;
};
84BC71BE0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA780B60F36F00FB16B3 /* ProxyConnect.h */;
name = "ProxyConnect.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 579;
vrLoc = 0;
};
84BC71BF0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA7B0B60F36F00FB16B3 /* stdafx.h */;
name = "stdafx.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 330;
vrLoc = 0;
};
84BC71C30B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA770B60F36F00FB16B3 /* ProxyConnect.dsp */;
name = "ProxyConnect.dsp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1009;
vrLoc = 0;
};
84BC71C50B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA720B60F36F00FB16B3 /* md5.cpp */;
name = "md5.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 996;
vrLoc = 0;
};
84BC71CB0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA300B60F36F00FB16B3 /* CritSection.h */;
name = "CritSection.h: 8";
rLen = 0;
rLoc = 89;
rType = 0;
vrLen = 343;
vrLoc = 0;
};
84BC71CC0B959EDF00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC718E0B959CCB00BFC169 /* OpenTransportProviders.h */;
name = "TCP_NODELAY = 0x01,";
rLen = 40;
rLoc = 2260;
rType = 0;
vrLen = 931;
vrLoc = 2059;
};
84BC71E40B95A00F00BFC169 /* CFRunLoop.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = CFRunLoop.h;
path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h;
sourceTree = "";
};
84BC721F0B95BC1100BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC71E40B95A00F00BFC169 /* CFRunLoop.h */;
name = "CFRunLoop.h: 344";
rLen = 0;
rLoc = 13964;
rType = 0;
vrLen = 951;
vrLoc = 13650;
};
84BC72210B95BC1100BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC71E40B95A00F00BFC169 /* CFRunLoop.h */;
name = "CFRunLoop.h: 344";
rLen = 0;
rLoc = 13964;
rType = 0;
vrLen = 951;
vrLoc = 13650;
};
84BC730F0B95D09000BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E60B60F36E00FB16B3 /* ServerSocket.cpp */;
name = "ServerSocket.cpp: 25";
rLen = 0;
rLoc = 403;
rType = 0;
vrLen = 561;
vrLoc = 880;
};
84BC73980B95F0D000BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA390B60F36F00FB16B3 /* DllProxyInfo.cpp */;
name = "DllProxyInfo.cpp: 92";
rLen = 0;
rLoc = 1820;
rType = 0;
vrLen = 500;
vrLoc = 801;
};
84BC744A0B95FDC800BFC169 /* limits */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.h;
name = limits;
path = "/Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/limits";
sourceTree = "";
};
84BC74FA0B9604DE00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC744A0B95FDC800BFC169 /* limits */;
name = "static _Tp min() throw() { return static_cast<_Tp>(0); }";
rLen = 63;
rLoc = 10942;
rType = 0;
vrLen = 1390;
vrLoc = 10448;
};
84BC74FF0B9604DE00BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84BC744A0B95FDC800BFC169 /* limits */;
name = "static _Tp min() throw() { return static_cast<_Tp>(0); }";
rLen = 63;
rLoc = 10942;
rType = 0;
vrLen = 1390;
vrLoc = 10448;
};
84BC75800B9610B400BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA360B60F36F00FB16B3 /* DataChannels.h */;
name = "DataChannels.h: 49";
rLen = 0;
rLoc = 1214;
rType = 0;
vrLen = 643;
vrLoc = 1007;
};
84BC75900B9610B400BFC169 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA7D0B60F36F00FB16B3 /* ProxyConnection.h */;
name = "ProxyConnection.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 506;
vrLoc = 0;
};
84BE28730BCD2B780086E6B3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA6D0B60F36F00FB16B3 /* ProxiesManager.h */;
name = "ProxiesManager.h: 13";
rLen = 0;
rLoc = 205;
rType = 0;
vrLen = 775;
vrLoc = 0;
};
84BE444E0B9D67F2007EF582 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA580B60F36F00FB16B3 /* InterfaceDllProxyInfo.h */;
name = "InterfaceDllProxyInfo.h: STATUS_AUTHENTICATING";
rLen = 0;
rLoc = 295;
rType = 0;
vrLen = 813;
vrLoc = 135;
};
84BE44970B9D6EE7007EF582 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA990B60F36F00FB16B3 /* RSAKeys.cpp */;
name = "RSAKeys.cpp: 135";
rLen = 0;
rLoc = 3200;
rType = 0;
vrLen = 775;
vrLoc = 2653;
};
84BF70560BC3D30900AB75ED /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3E0B60F36F00FB16B3 /* EchoSrvDataChannel.h */;
name = "EchoSrvDataChannel.h: 30";
rLen = 0;
rLoc = 685;
rType = 0;
vrLen = 775;
vrLoc = 104;
};
84BF70BE0BC3DAC200AB75ED /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA400B60F36F00FB16B3 /* EchoToOSX.h */;
name = "EchoToOSX.h: GetTickCount";
rLen = 0;
rLoc = 1512;
rType = 0;
vrLen = 738;
vrLoc = 1238;
};
84C5A4370B67B31C00A596C5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E80B60F36E00FB16B3 /* blowfish.cpp */;
name = Xr;
rLen = 5;
rLoc = 2113;
rType = 0;
vrLen = 762;
vrLoc = 1076;
};
84C86843C5B077FA0013D2B1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA310B60F36F00FB16B3 /* DataChannel.cpp */;
name = "DataChannel.cpp: 164";
rLen = 0;
rLoc = 4451;
rType = 0;
vrLen = 810;
vrLoc = 4235;
};
84C86844C5B077FA0013D2B1 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA3B0B60F36F00FB16B3 /* EchoController.h */;
name = loadGUI;
rLen = 7;
rLoc = 1579;
rType = 0;
vrLen = 971;
vrLoc = 1121;
};
84D448D60B8EE46C008F9D1F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E60B60F36E00FB16B3 /* ServerSocket.cpp */;
name = "ServerSocket.cpp: 70";
rLen = 0;
rLoc = 1255;
rType = 0;
vrLen = 419;
vrLoc = 1067;
};
84D44A870B8F44B4008F9D1F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA760B60F36F00FB16B3 /* ProxyConnect.cpp */;
name = "ProxyConnect.cpp: 206";
rLen = 0;
rLoc = 4183;
rType = 0;
vrLen = 400;
vrLoc = 4019;
};
84D4FA460B5CCFFB0058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A7009968B340046F588 /* ProxiesManager.cpp */;
name = "ProxiesManager.cpp: 309";
rLen = 0;
rLoc = 6068;
rType = 0;
vrLen = 0;
vrLoc = 6731;
};
84D4FB3F0B5CFCE50058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A7209968B340046F588 /* ProxyConnection.cpp */;
name = "ProxyConnection.cpp: 149";
rLen = 0;
rLoc = 3442;
rType = 0;
vrLen = 859;
vrLoc = 2691;
};
84D4FB5B0B5CFE640058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6609968B340046F588 /* InterfaceDllProxyInfo.h */;
name = "ERROR_CONNECTING_TO_PROXY = -1,";
rLen = 34;
rLoc = 548;
rType = 0;
vrLen = 902;
vrLoc = 0;
};
84D4FCA60B5D15890058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6209968B340046F588 /* Echoware.cpp */;
name = "Echoware.cpp: 121";
rLen = 0;
rLoc = 2866;
rType = 0;
vrLen = 895;
vrLoc = 2401;
};
84D4FCA70B5D15890058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6109968B340046F588 /* EchoSrvDataChannel.h */;
name = "EchoSrvDataChannel.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 1035;
vrLoc = 0;
};
84D4FE540B5D2A960058AE41 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84D60B3C0B5BBF2400D9EBCB /* MyDllProxyInfo.h */;
name = "MyDllProxyInfo.h: 14";
rLen = 0;
rLoc = 227;
rType = 0;
vrLen = 742;
vrLoc = 0;
};
84D5200B0B5E19C10050DE52 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5609968B340046F588 /* CritSection.cpp */;
name = "CritSection.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 482;
vrLoc = 0;
};
84D520B90B5E27CD0050DE52 /* NSObjCRuntime.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = NSObjCRuntime.h;
path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h;
sourceTree = "";
};
84D520E40B5E2C1A0050DE52 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84D520B90B5E27CD0050DE52 /* NSObjCRuntime.h */;
name = "NSObjCRuntime.h: 62";
rLen = 0;
rLoc = 1575;
rType = 0;
vrLen = 1247;
vrLoc = 1017;
};
84D60AB30B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5309968B340046F588 /* AES.h */;
name = "AES.h: 9";
rLen = 0;
rLoc = 104;
rType = 0;
vrLen = 671;
vrLoc = 0;
};
84D60AB40B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB090FF909DB286900098B1F /* EchoToOSX.cpp */;
name = Thread;
rLen = 6;
rLoc = 671;
rType = 0;
vrLen = 876;
vrLoc = 0;
};
84D60ABD0B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5309968B340046F588 /* AES.h */;
name = "AES.h: 9";
rLen = 0;
rLoc = 104;
rType = 0;
vrLen = 671;
vrLoc = 0;
};
84D60AC10B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB090FF909DB286900098B1F /* EchoToOSX.cpp */;
name = Thread;
rLen = 6;
rLoc = 671;
rType = 0;
vrLen = 876;
vrLoc = 0;
};
84D60AC30B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5B09968B340046F588 /* DataChannels.h */;
name = "DataChannels.h: 59";
rLen = 0;
rLoc = 1494;
rType = 0;
vrLen = 997;
vrLoc = 732;
};
84D60AC40B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5F09968B340046F588 /* DllProxyInfo.h */;
name = "DllProxyInfo.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 858;
vrLoc = 0;
};
84D60AC90B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5A09968B340046F588 /* DataChannels.cpp */;
name = "DataChannels.cpp: 18";
rLen = 0;
rLoc = 521;
rType = 0;
vrLen = 995;
vrLoc = 0;
};
84D60ACC0B5BB8EF00D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB090FF809DB286900098B1F /* EchoToOSX.h */;
name = "EchoToOSX.h: INVALID_SOCKET";
rLen = 0;
rLoc = 257;
rType = 0;
vrLen = 870;
vrLoc = 1174;
};
84D60B3C0B5BBF2400D9EBCB /* MyDllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 598}}";
sepNavSelRange = "{741, 0}";
sepNavVisRect = "{{0, 0}, {824, 598}}";
sepNavWindowFrame = "{{426, 51}, {863, 671}}";
};
};
84D60B3D0B5BBF2400D9EBCB /* MyDllProxyInfo.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 1344}}";
sepNavSelRange = "{368, 22}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
sepNavWindowFrame = "{{58, 203}, {743, 543}}";
};
};
84D60B760B5BC12200D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744AE70996A9700046F588 /* EchoController.h */;
name = "EchoController.h: echoServersView";
rLen = 0;
rLoc = 202;
rType = 0;
vrLen = 1179;
vrLoc = 0;
};
84D60B770B5BC12200D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A7109968B340046F588 /* ProxiesManager.h */;
name = "ProxiesManager.h: 14";
rLen = 0;
rLoc = 252;
rType = 0;
vrLen = 989;
vrLoc = 0;
};
84D60BA40B5BC49500D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84D60B3C0B5BBF2400D9EBCB /* MyDllProxyInfo.h */;
name = "MyDllProxyInfo.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 630;
vrLoc = 0;
};
84D60BA50B5BC49500D9EBCB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84D60B3D0B5BBF2400D9EBCB /* MyDllProxyInfo.cpp */;
name = "MyDllProxyInfo.cpp: 21";
rLen = 0;
rLoc = 501;
rType = 0;
vrLen = 668;
vrLoc = 0;
};
84D9EE150B53E20600C10970 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6409968B340046F588 /* Globals.cpp */;
name = "Globals.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 832;
vrLoc = 0;
};
84D9EE770B53EC5D00C10970 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A6F09968B340046F588 /* NetPacket.h */;
name = "NetPacket.h: 106";
rLen = 0;
rLoc = 2669;
rType = 0;
vrLen = 1311;
vrLoc = 2270;
};
84DAA48E0B132F2900222618 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
};
scmType = "";
};
84DAA48F0B132F2900222618 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
84DAA51F0B14A33800222618 /* XCBreakpointsBucket */ = {
isa = XCBreakpointsBucket;
name = Echoware;
objects = (
);
};
84DDE9750BB90B6B0074B26A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA9D0B60F36F00FB16B3 /* stdafx.cpp */;
name = "stdafx.cpp: 9";
rLen = 0;
rLoc = 295;
rType = 0;
vrLen = 295;
vrLoc = 0;
};
84DE1A860BCCE1DA0033A95C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84AF48A30BCCD42400C5BF0A /* DirService.h */;
name = "class CDirService";
rLen = 18;
rLoc = 207;
rType = 0;
vrLen = 924;
vrLoc = 0;
};
84DF556F0C3CC76F00AD2F4B /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA370B60F36F00FB16B3 /* DataChannelSocket.cpp */;
name = "//sets the pair data channel for this data c";
rLen = 44;
rLoc = 781;
rType = 0;
vrLen = 742;
vrLoc = 462;
};
84DFC45E0B64BF8200858CAB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400B9E00B60F36E00FB16B3 /* ACConnection.h */;
name = "ACConnection.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 485;
vrLoc = 0;
};
84DFC6460B64CFED00858CAB /* NSUserDefaults.h */ = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = NSUserDefaults.h;
path = /System/Library/Frameworks/Foundation.framework/Headers/NSUserDefaults.h;
sourceTree = "";
};
84DFC6550B64D26200858CAB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84DFC6460B64CFED00858CAB /* NSUserDefaults.h */;
name = registerDefaults;
rLen = 16;
rLoc = 1413;
rType = 0;
vrLen = 1139;
vrLoc = 813;
};
84DFC6580B64D26200858CAB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 84DFC6460B64CFED00858CAB /* NSUserDefaults.h */;
name = registerDefaults;
rLen = 16;
rLoc = 1413;
rType = 0;
vrLen = 1139;
vrLoc = 813;
};
84E20C5D0C57AF7C004FB864 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8400BA610B60F36F00FB16B3 /* MyDllProxyInfo.cpp */;
name = "MyDllProxyInfo.cpp: 12";
rLen = 0;
rLoc = 218;
rType = 0;
vrLen = 577;
vrLoc = 1223;
};
84E8F34C0B57B4DF001DACF7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A7609968B340046F588 /* stdafx.cpp */;
name = "stdafx.cpp: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 295;
vrLoc = 0;
};
84E9145B0B564E2E009AD6FC /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A7409968B340046F588 /* RSAKeys.cpp */;
name = "RSAKeys.cpp: 69";
rLen = 0;
rLoc = 315;
rType = 0;
vrLen = 1414;
vrLoc = 1015;
};
84E9145E0B564E2E009AD6FC /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744A5E09968B340046F588 /* DllProxyInfo.cpp */;
name = "m_nConnectTimeOut=connectTimeout;";
rLen = 35;
rLoc = 1704;
rType = 0;
vrLen = 1012;
vrLoc = 1229;
};
84F22A380B53D80F004CD709 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = AB744AE60996A9700046F588 /* EchoController.m */;
name = "EchoController.m: 88";
rLen = 0;
rLoc = 3779;
rType = 0;
vrLen = 1458;
vrLoc = 1128;
};
8D5B49AC048680CD000E48DA /* Echoware */ = {
activeExec = 0;
};
8D5B49B7048680CD000E48DA /* Info.plist */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {686, 446}}";
sepNavSelRange = "{163, 0}";
sepNavVisRect = "{{0, 0}, {658, 446}}";
sepNavWindowFrame = "{{38, 201}, {697, 519}}";
};
};
AB090FF809DB286900098B1F /* EchoToOSX.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {584, 1428}}";
sepNavSelRange = "{187, 25}";
sepNavVisRect = "{{0, 0}, {568, 367}}";
sepNavWindowFrame = "{{38, 201}, {697, 519}}";
};
};
AB090FF909DB286900098B1F /* EchoToOSX.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 1036}}";
sepNavSelRange = "{1136, 0}";
sepNavVisRect = "{{0, 756}, {807, 239}}";
sepNavWindowFrame = "{{212, -32}, {697, 671}}";
};
};
AB7449FE09968AF50046F588 /* APISocket.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {680, 3360}}";
sepNavSelRange = "{3717, 48}";
sepNavVisRect = "{{0, 1892}, {658, 598}}";
sepNavWindowFrame = "{{245, 42}, {697, 671}}";
};
};
AB7449FF09968AF50046F588 /* ClientSocket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {710, 2548}}";
sepNavSelRange = "{1315, 0}";
sepNavVisRect = "{{0, 496}, {658, 598}}";
sepNavWindowFrame = "{{142, -28}, {697, 671}}";
};
};
AB744A0109968AF50046F588 /* Socket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {866, 5740}}";
sepNavSelRange = "{3793, 0}";
sepNavVisRect = "{{0, 2576}, {807, 239}}";
sepNavWindowFrame = "{{175, 165}, {697, 519}}";
};
};
AB744A1109968AF60046F588 /* ntlmv2.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {881, 12180}}";
sepNavSelRange = "{6198, 3}";
sepNavVisRect = "{{0, 2156}, {881, 323}}";
sepNavWindowFrame = "{{15, 66}, {863, 675}}";
};
};
AB744A1F09968AF60046F588 /* Hnfunct.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 5096}}";
sepNavSelRange = "{3516, 0}";
sepNavVisRect = "{{0, 2030}, {807, 239}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A2109968AF60046F588 /* Hnumber.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 7434}}";
sepNavSelRange = "{8700, 0}";
sepNavVisRect = "{{0, 6370}, {807, 239}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A2309968AF60046F588 /* Keys.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {752, 2506}}";
sepNavSelRange = "{3129, 77}";
sepNavVisRect = "{{0, 1963}, {752, 261}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A2909968AF60046F588 /* MyTypes.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {916, 224}}";
sepNavSelRange = "{166, 7}";
sepNavVisRect = "{{0, 20}, {916, 204}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A2C09968AF60046F588 /* PrimeGen.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {881, 3122}}";
sepNavSelRange = "{2636, 0}";
sepNavVisRect = "{{0, 1719}, {881, 301}}";
sepNavWindowFrame = "{{166, -51}, {863, 671}}";
};
};
AB744A3009968AF70046F588 /* stdafx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {996, 244}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {996, 244}}";
};
};
AB744A4E09968B340046F588 /* ACConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {896, 8778}}";
sepNavSelRange = "{14656, 0}";
sepNavVisRect = "{{0, 6748}, {568, 367}}";
sepNavWindowFrame = "{{192, 67}, {697, 671}}";
};
};
AB744A4F09968B340046F588 /* ACConnection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 1246}}";
sepNavSelRange = "{531, 0}";
sepNavVisRect = "{{0, 0}, {658, 598}}";
sepNavWindowFrame = "{{15, 75}, {697, 671}}";
};
};
AB744A5209968B340046F588 /* AES.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 1134}}";
sepNavSelRange = "{219, 0}";
sepNavVisRect = "{{0, 0}, {824, 598}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A5309968B340046F588 /* AES.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 538}}";
sepNavSelRange = "{104, 0}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A5409968B340046F588 /* blowfish.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 3290}}";
sepNavSelRange = "{2924, 17}";
sepNavVisRect = "{{0, 1342}, {824, 598}}";
sepNavWindowFrame = "{{191, 75}, {863, 671}}";
};
};
AB744A5609968B340046F588 /* CritSection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 446}}";
sepNavSelRange = "{415, 0}";
sepNavVisRect = "{{0, 0}, {658, 446}}";
sepNavWindowFrame = "{{174, 108}, {697, 519}}";
};
};
AB744A5709968B340046F588 /* CritSection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 446}}";
sepNavSelRange = "{297, 0}";
sepNavVisRect = "{{0, 0}, {658, 446}}";
sepNavWindowFrame = "{{15, 222}, {697, 519}}";
};
};
AB744A5809968B340046F588 /* DataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {884, 3472}}";
sepNavSelRange = "{1833, 0}";
sepNavVisRect = "{{0, 0}, {658, 598}}";
sepNavWindowFrame = "{{261, 4}, {697, 671}}";
};
};
AB744A5909968B340046F588 /* DataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 980}}";
sepNavSelRange = "{1144, 0}";
sepNavVisRect = "{{0, 534}, {658, 446}}";
sepNavWindowFrame = "{{61, 180}, {697, 519}}";
};
};
AB744A5A09968B340046F588 /* DataChannels.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 2842}}";
sepNavSelRange = "{5238, 0}";
sepNavVisRect = "{{0, 2226}, {658, 598}}";
sepNavWindowFrame = "{{263, 75}, {697, 671}}";
};
};
AB744A5B09968B340046F588 /* DataChannels.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 980}}";
sepNavSelRange = "{1511, 12}";
sepNavVisRect = "{{0, 382}, {658, 598}}";
sepNavWindowFrame = "{{343, 71}, {697, 671}}";
};
};
AB744A5C09968B340046F588 /* DataChannelSocket.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {896, 1400}}";
sepNavSelRange = "{333, 0}";
sepNavVisRect = "{{0, 140}, {807, 239}}";
sepNavWindowFrame = "{{306, 75}, {697, 671}}";
};
};
AB744A5D09968B340046F588 /* DataChannelSocket.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 882}}";
sepNavSelRange = "{1340, 1}";
sepNavVisRect = "{{0, 0}, {658, 602}}";
sepNavWindowFrame = "{{166, 28}, {697, 675}}";
};
};
AB744A5E09968B340046F588 /* DllProxyInfo.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {980, 2310}}";
sepNavSelRange = "{194, 0}";
sepNavVisRect = "{{0, 29}, {658, 446}}";
sepNavWindowFrame = "{{163, 75}, {697, 519}}";
};
};
AB744A5F09968B340046F588 /* DllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 812}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
sepNavWindowFrame = "{{15, 75}, {863, 671}}";
};
};
AB744A6009968B340046F588 /* EchoSrvDataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {818, 1358}}";
sepNavSelRange = "{1814, 0}";
sepNavVisRect = "{{0, 674}, {574, 538}}";
sepNavWindowFrame = "{{166, 63}, {697, 671}}";
};
};
AB744A6109968B340046F588 /* EchoSrvDataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {668, 644}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {568, 538}}";
};
};
AB744A6209968B340046F588 /* Echoware.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 2786}}";
sepNavSelRange = "{2523, 0}";
sepNavVisRect = "{{0, 1456}, {807, 239}}";
sepNavWindowFrame = "{{166, 60}, {697, 519}}";
};
};
AB744A6309968B340046F588 /* Echoware.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 538}}";
sepNavSelRange = "{488, 0}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
sepNavWindowFrame = "{{84, 159}, {697, 519}}";
};
};
AB744A6409968B340046F588 /* Globals.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 1372}}";
sepNavSelRange = "{172, 0}";
sepNavVisRect = "{{0, 0}, {658, 598}}";
sepNavWindowFrame = "{{215, -120}, {697, 671}}";
};
};
AB744A6509968B340046F588 /* Globals.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {658, 2268}}";
sepNavSelRange = "{684, 0}";
sepNavVisRect = "{{0, 268}, {658, 446}}";
sepNavWindowFrame = "{{517, 89}, {697, 519}}";
};
};
AB744A6609968B340046F588 /* InterfaceDllProxyInfo.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {584, 798}}";
sepNavSelRange = "{295, 0}";
sepNavVisRect = "{{0, 126}, {568, 538}}";
sepNavWindowFrame = "{{260, 13}, {697, 519}}";
};
};
AB744A6709968B340046F588 /* LocalDataChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {986, 2296}}";
sepNavSelRange = "{441, 0}";
sepNavVisRect = "{{0, 0}, {658, 390}}";
sepNavWindowFrame = "{{227, 92}, {697, 519}}";
};
};
AB744A6809968B340046F588 /* LocalDataChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 490}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
};
};
AB744A6909968B340046F588 /* LocalListener.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 476}}";
sepNavSelRange = "{497, 0}";
sepNavVisRect = "{{0, 62}, {704, 414}}";
sepNavWindowFrame = "{{38, 177}, {743, 543}}";
};
};
AB744A6B09968B340046F588 /* LocalProxyConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {704, 414}}";
sepNavSelRange = "{177, 0}";
sepNavVisRect = "{{0, 0}, {704, 414}}";
sepNavWindowFrame = "{{61, 156}, {743, 543}}";
};
};
AB744A6C09968B340046F588 /* LocalProxyConnection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {746, 367}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {746, 367}}";
sepNavWindowFrame = "{{84, 135}, {743, 543}}";
};
};
AB744A6D09968B340046F588 /* Logger.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 1568}}";
sepNavSelRange = "{1398, 54}";
sepNavVisRect = "{{0, 1062}, {807, 249}}";
};
};
AB744A6E09968B340046F588 /* Logger.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1118, 546}}";
sepNavSelRange = "{86, 19}";
sepNavVisRect = "{{0, 0}, {1118, 323}}";
};
};
AB744A6F09968B340046F588 /* NetPacket.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 2100}}";
sepNavSelRange = "{2854, 0}";
sepNavVisRect = "{{0, 1861}, {807, 239}}";
sepNavWindowFrame = "{{116, 41}, {863, 671}}";
};
};
AB744A7009968B340046F588 /* ProxiesManager.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {716, 4886}}";
sepNavSelRange = "{7971, 82}";
sepNavVisRect = "{{0, 4697}, {695, 189}}";
sepNavWindowFrame = "{{242, 109}, {697, 519}}";
};
};
AB744A7109968B340046F588 /* ProxiesManager.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {568, 1120}}";
sepNavSelRange = "{245, 0}";
sepNavVisRect = "{{0, 0}, {568, 538}}";
};
};
AB744A7209968B340046F588 /* ProxyConnection.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {695, 2254}}";
sepNavSelRange = "{2831, 0}";
sepNavVisRect = "{{0, 1621}, {695, 189}}";
sepNavWindowFrame = "{{153, 150}, {697, 519}}";
};
};
AB744A7309968B340046F588 /* ProxyConnection.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1118, 728}}";
sepNavSelRange = "{132, 22}";
sepNavVisRect = "{{0, 0}, {1118, 323}}";
};
};
AB744A7409968B340046F588 /* RSAKeys.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {807, 2240}}";
sepNavSelRange = "{2886, 0}";
sepNavVisRect = "{{0, 1680}, {807, 239}}";
sepNavWindowFrame = "{{84, 135}, {743, 543}}";
};
};
AB744A7509968B340046F588 /* RSAKeys.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {824, 700}}";
sepNavSelRange = "{381, 0}";
sepNavVisRect = "{{0, 0}, {824, 598}}";
sepNavWindowFrame = "{{293, 75}, {863, 671}}";
};
};
AB744A7609968B340046F588 /* stdafx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {574, 538}}";
sepNavSelRange = "{0, 0}";
sepNavVisRect = "{{0, 0}, {574, 538}}";
};
};
AB744AE60996A9700046F588 /* EchoController.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1088, 16268}}";
sepNavSelRange = "{25003, 18}";
sepNavVisRect = "{{0, 10576}, {746, 367}}";
sepNavWindowFrame = "{{278, 104}, {743, 543}}";
};
};
AB744AE70996A9700046F588 /* EchoController.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {668, 1694}}";
sepNavSelRange = "{512, 0}";
sepNavVisRect = "{{0, 277}, {568, 367}}";
sepNavWindowFrame = "{{233, 181}, {697, 519}}";
};
};
}
================================================
FILE: Bundles/Echoware/Echoware.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
8400341A0BCD0E4900D03C1B /* RFBBundleWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840034190BCD0E4900D03C1B /* RFBBundleWrapper.cpp */; };
8456E5530B4CFCFE006B7550 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8456E5520B4CFCFE006B7550 /* CoreFoundation.framework */; };
848C41200B848FDC00BD11B3 /* rfbserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 848C411F0B848FDC00BD11B3 /* rfbserver.cpp */; };
84AE56F50B42906500425DCA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84AE56F40B42906500425DCA /* SystemConfiguration.framework */; };
84AF48140BCCCE0B00C5BF0A /* DirectoryService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84AF48130BCCCE0B00C5BF0A /* DirectoryService.framework */; };
84AF48A50BCCD42400C5BF0A /* DirService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84AF48A40BCCD42400C5BF0A /* DirService.cpp */; };
84AF49020BCCD76E00C5BF0A /* User.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84AF49010BCCD76E00C5BF0A /* User.cpp */; };
84AFF1420B8C841D00D93058 /* ServerListSynchronize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84AFF1410B8C841D00D93058 /* ServerListSynchronize.cpp */; };
84D60B3E0B5BBF2400D9EBCB /* MyDllProxyInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D60B3D0B5BBF2400D9EBCB /* MyDllProxyInfo.cpp */; };
84FD7F370BCB729100C66DF1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FD7F360BCB729100C66DF1 /* Security.framework */; };
8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
AB090FFA09DB286900098B1F /* EchoToOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB090FF909DB286900098B1F /* EchoToOSX.cpp */; };
AB744AE50996A1320046F588 /* EchoServers.nib in Resources */ = {isa = PBXBuildFile; fileRef = AB744AE30996A1320046F588 /* EchoServers.nib */; };
AB87EAEF09B8E11900AC7E96 /* CritSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5609968B340046F588 /* CritSection.cpp */; };
AB87EB2E09B8E2FE00AC7E96 /* EchoController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB744AE60996A9700046F588 /* EchoController.m */; };
AB87EB3B09B8E3B000AC7E96 /* ACConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A4E09968B340046F588 /* ACConnection.cpp */; };
AB87EBFE09B8E87B00AC7E96 /* AES.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5209968B340046F588 /* AES.cpp */; };
AB87EC0009B8E88200AC7E96 /* blowfish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5409968B340046F588 /* blowfish.cpp */; };
AB87EC0509B8E8B100AC7E96 /* DataChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5809968B340046F588 /* DataChannel.cpp */; };
AB87EC5609B8F13F00AC7E96 /* DataChannels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5A09968B340046F588 /* DataChannels.cpp */; };
AB87EC5709B8F14000AC7E96 /* DataChannelSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5C09968B340046F588 /* DataChannelSocket.cpp */; };
AB87EC5809B8F14200AC7E96 /* DllProxyInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A5E09968B340046F588 /* DllProxyInfo.cpp */; };
AB87EC5A09B8F15000AC7E96 /* stdafx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A7609968B340046F588 /* stdafx.cpp */; };
AB87EC5C09B8F15300AC7E96 /* EchoSrvDataChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6009968B340046F588 /* EchoSrvDataChannel.cpp */; };
AB87EC5D09B8F15400AC7E96 /* Echoware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6209968B340046F588 /* Echoware.cpp */; };
AB87EC5E09B8F15500AC7E96 /* Globals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6409968B340046F588 /* Globals.cpp */; };
AB87EC5F09B8F15600AC7E96 /* LocalDataChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6709968B340046F588 /* LocalDataChannel.cpp */; };
AB87EC6009B8F15800AC7E96 /* LocalListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6909968B340046F588 /* LocalListener.cpp */; };
AB87EC6109B8F15900AC7E96 /* LocalProxyConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6B09968B340046F588 /* LocalProxyConnection.cpp */; };
AB87EC6209B8F15A00AC7E96 /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A6D09968B340046F588 /* Logger.cpp */; };
AB87EC6309B8F15B00AC7E96 /* ProxiesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A7009968B340046F588 /* ProxiesManager.cpp */; };
AB87EC6409B8F15C00AC7E96 /* ProxyConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A7209968B340046F588 /* ProxyConnection.cpp */; };
AB87ECF309BB3B8E00AC7E96 /* Code.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1909968AF60046F588 /* Code.cpp */; };
AB87ECF409BB3B8F00AC7E96 /* Commonf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1A09968AF60046F588 /* Commonf.cpp */; };
AB87ECF609BB3B9100AC7E96 /* Hnfunct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1F09968AF60046F588 /* Hnfunct.cpp */; };
AB87ECF709BB3B9200AC7E96 /* Hnumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2109968AF60046F588 /* Hnumber.cpp */; };
AB87ECF809BB3B9400AC7E96 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2309968AF60046F588 /* Keys.cpp */; };
AB87ECF909BB3B9500AC7E96 /* Keys_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2409968AF60046F588 /* Keys_main.cpp */; };
AB87ECFA09BB3B9600AC7E96 /* Mynum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2509968AF60046F588 /* Mynum.cpp */; };
AB87ECFB09BB3B9700AC7E96 /* Myprint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2709968AF60046F588 /* Myprint.cpp */; };
AB87ECFC09BB3B9700AC7E96 /* Operator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2A09968AF60046F588 /* Operator.cpp */; };
AB87ECFD09BB3B9800AC7E96 /* PrimeGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A2C09968AF60046F588 /* PrimeGen.cpp */; };
AB87ED0009BB3B9A00AC7E96 /* stdafx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A3009968AF70046F588 /* stdafx.cpp */; };
AB87F13B09C1F95100AC7E96 /* RSAKeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A7409968B340046F588 /* RSAKeys.cpp */; };
AB87F1A209C1FE2700AC7E96 /* aes_core.c in Sources */ = {isa = PBXBuildFile; fileRef = AB744A0409968AF60046F588 /* aes_core.c */; };
AB87F1A409C1FE3300AC7E96 /* md4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A0C09968AF60046F588 /* md4.cpp */; };
AB87F1A509C1FE3300AC7E96 /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A0E09968AF60046F588 /* md5.cpp */; };
AB87F1A809C1FE3B00AC7E96 /* stdafx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1609968AF60046F588 /* stdafx.cpp */; };
AB87F1AB09C1FE5E00AC7E96 /* Gsimply.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1D09968AF60046F588 /* Gsimply.cpp */; };
AB87F2D009C211AB00AC7E96 /* ProxyConnect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1209968AF60046F588 /* ProxyConnect.cpp */; };
AB87F2D109C211AC00AC7E96 /* ntlmv2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A1109968AF60046F588 /* ntlmv2.cpp */; };
AB87F5A109C5FFC100AC7E96 /* ClientSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB7449FF09968AF50046F588 /* ClientSocket.cpp */; };
AB87F5D609C602A500AC7E96 /* ServerSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A0009968AF50046F588 /* ServerSocket.cpp */; };
AB87F5DB09C602BB00AC7E96 /* Socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB744A0109968AF50046F588 /* Socket.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
32DBCF630370AF2F00C91783 /* Echoware_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Echoware_Prefix.pch; sourceTree = ""; };
840034180BCD0E4900D03C1B /* RFBBundleWrapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = RFBBundleWrapper.h; sourceTree = ""; };
840034190BCD0E4900D03C1B /* RFBBundleWrapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = RFBBundleWrapper.cpp; sourceTree = ""; };
8400B9DF0B60F36E00FB16B3 /* ACConnection.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ACConnection.cpp; sourceTree = ""; };
8400B9E00B60F36E00FB16B3 /* ACConnection.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = ACConnection.h; sourceTree = ""; };
8400B9E10B60F36E00FB16B3 /* AES.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = AES.cpp; sourceTree = ""; };
8400B9E20B60F36E00FB16B3 /* AES.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = AES.h; sourceTree = ""; };
8400B9E40B60F36E00FB16B3 /* APISocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = APISocket.h; sourceTree = ""; };
8400B9E50B60F36E00FB16B3 /* ClientSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ClientSocket.cpp; sourceTree = ""; };
8400B9E60B60F36E00FB16B3 /* ServerSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ServerSocket.cpp; sourceTree = ""; };
8400B9E70B60F36E00FB16B3 /* Socket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = Socket.cpp; sourceTree = ""; };
8400B9E80B60F36E00FB16B3 /* blowfish.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = blowfish.cpp; sourceTree = ""; };
8400B9E90B60F36E00FB16B3 /* blowfish.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = blowfish.h; sourceTree = ""; };
8400B9EA0B60F36E00FB16B3 /* blowfish.h2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = blowfish.h2; sourceTree = ""; };
8400BA2F0B60F36F00FB16B3 /* CritSection.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = CritSection.cpp; sourceTree = ""; };
8400BA300B60F36F00FB16B3 /* CritSection.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = CritSection.h; sourceTree = ""; };
8400BA310B60F36F00FB16B3 /* DataChannel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = DataChannel.cpp; sourceTree = ""; };
8400BA320B60F36F00FB16B3 /* DataChannel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = DataChannel.h; sourceTree = ""; };
8400BA350B60F36F00FB16B3 /* DataChannels.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = DataChannels.cpp; sourceTree = ""; };
8400BA360B60F36F00FB16B3 /* DataChannels.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = DataChannels.h; sourceTree = ""; };
8400BA370B60F36F00FB16B3 /* DataChannelSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = DataChannelSocket.cpp; sourceTree = ""; };
8400BA380B60F36F00FB16B3 /* DataChannelSocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = DataChannelSocket.h; sourceTree = ""; };
8400BA390B60F36F00FB16B3 /* DllProxyInfo.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = DllProxyInfo.cpp; sourceTree = ""; };
8400BA3A0B60F36F00FB16B3 /* DllProxyInfo.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = DllProxyInfo.h; sourceTree = ""; };
8400BA3B0B60F36F00FB16B3 /* EchoController.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = EchoController.h; sourceTree = ""; };
8400BA3C0B60F36F00FB16B3 /* EchoController.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = EchoController.m; sourceTree = ""; };
8400BA3D0B60F36F00FB16B3 /* EchoSrvDataChannel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = EchoSrvDataChannel.cpp; sourceTree = ""; };
8400BA3E0B60F36F00FB16B3 /* EchoSrvDataChannel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = EchoSrvDataChannel.h; sourceTree = ""; };
8400BA3F0B60F36F00FB16B3 /* EchoToOSX.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = EchoToOSX.cpp; sourceTree = ""; };
8400BA400B60F36F00FB16B3 /* EchoToOSX.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = EchoToOSX.h; sourceTree = ""; };
8400BA410B60F36F00FB16B3 /* Echoware.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = Echoware.cpp; sourceTree = ""; };
8400BA440B60F36F00FB16B3 /* Echoware.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = Echoware.h; sourceTree = ""; };
8400BA480B60F36F00FB16B3 /* Echoware.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Echoware.xcodeproj; sourceTree = ""; };
8400BA4C0B60F36F00FB16B3 /* Echoware_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Echoware_Prefix.pch; sourceTree = ""; };
8400BA540B60F36F00FB16B3 /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
8400BA550B60F36F00FB16B3 /* Globals.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = Globals.cpp; sourceTree = ""; };
8400BA560B60F36F00FB16B3 /* Globals.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = Globals.h; sourceTree = ""; };
8400BA570B60F36F00FB16B3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; };
8400BA580B60F36F00FB16B3 /* InterfaceDllProxyInfo.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = InterfaceDllProxyInfo.h; sourceTree = ""; };
8400BA590B60F36F00FB16B3 /* LocalDataChannel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = LocalDataChannel.cpp; sourceTree = ""; };
8400BA5A0B60F36F00FB16B3 /* LocalDataChannel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = LocalDataChannel.h; sourceTree = ""; };
8400BA5B0B60F36F00FB16B3 /* LocalListener.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = LocalListener.cpp; sourceTree = ""; };
8400BA5C0B60F36F00FB16B3 /* LocalListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = LocalListener.h; sourceTree = ""; };
8400BA5D0B60F36F00FB16B3 /* LocalProxyConnection.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = LocalProxyConnection.cpp; sourceTree = ""; };
8400BA5E0B60F36F00FB16B3 /* LocalProxyConnection.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = LocalProxyConnection.h; sourceTree = ""; };
8400BA5F0B60F36F00FB16B3 /* Logger.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = Logger.cpp; sourceTree = ""; };
8400BA600B60F36F00FB16B3 /* Logger.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = Logger.h; sourceTree = ""; };
8400BA610B60F36F00FB16B3 /* MyDllProxyInfo.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = MyDllProxyInfo.cpp; sourceTree = ""; };
8400BA620B60F36F00FB16B3 /* MyDllProxyInfo.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = MyDllProxyInfo.h; sourceTree = ""; };
8400BA630B60F36F00FB16B3 /* NetPacket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = NetPacket.h; sourceTree = ""; };
8400BA650B60F36F00FB16B3 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; };
8400BA660B60F36F00FB16B3 /* aes_core.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = aes_core.c; sourceTree = ""; };
8400BA670B60F36F00FB16B3 /* aes_locl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = aes_locl.h; sourceTree = ""; };
8400BA680B60F36F00FB16B3 /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = ""; };
8400BA690B60F36F00FB16B3 /* LibeaySt.dsp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = LibeaySt.dsp; sourceTree = ""; };
8400BA6A0B60F36F00FB16B3 /* LibeaySt.vcproj */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = LibeaySt.vcproj; sourceTree = ""; };
8400BA6B0B60F36F00FB16B3 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = ""; };
8400BA6C0B60F36F00FB16B3 /* ProxiesManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ProxiesManager.cpp; sourceTree = ""; };
8400BA6D0B60F36F00FB16B3 /* ProxiesManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = ProxiesManager.h; sourceTree = ""; };
8400BA6F0B60F36F00FB16B3 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = ""; };
8400BA700B60F36F00FB16B3 /* md4.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = md4.cpp; sourceTree = ""; };
8400BA710B60F36F00FB16B3 /* md4.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = ""; };
8400BA720B60F36F00FB16B3 /* md5.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = md5.cpp; sourceTree = ""; };
8400BA730B60F36F00FB16B3 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; };
8400BA740B60F36F00FB16B3 /* ntlm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ntlm.h; sourceTree = ""; };
8400BA750B60F36F00FB16B3 /* ntlmv2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ntlmv2.cpp; sourceTree = ""; };
8400BA760B60F36F00FB16B3 /* ProxyConnect.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ProxyConnect.cpp; sourceTree = ""; };
8400BA770B60F36F00FB16B3 /* ProxyConnect.dsp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ProxyConnect.dsp; sourceTree = ""; };
8400BA780B60F36F00FB16B3 /* ProxyConnect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProxyConnect.h; sourceTree = ""; };
8400BA790B60F36F00FB16B3 /* ProxyConnect.vcproj */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = ProxyConnect.vcproj; sourceTree = ""; };
8400BA7A0B60F36F00FB16B3 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = stdafx.cpp; sourceTree = ""; };
8400BA7B0B60F36F00FB16B3 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stdafx.h; sourceTree = ""; };
8400BA7C0B60F36F00FB16B3 /* ProxyConnection.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = ProxyConnection.cpp; sourceTree = ""; };
8400BA7D0B60F36F00FB16B3 /* ProxyConnection.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = ProxyConnection.h; sourceTree = ""; };
8400BA7F0B60F36F00FB16B3 /* Code.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Code.cpp; sourceTree = ""; };
8400BA800B60F36F00FB16B3 /* Commonf.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Commonf.cpp; sourceTree = ""; };
8400BA810B60F36F00FB16B3 /* Commonf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Commonf.h; sourceTree = ""; };
8400BA820B60F36F00FB16B3 /* Function.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Function.h; sourceTree = ""; };
8400BA830B60F36F00FB16B3 /* Gsimply.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Gsimply.cpp; sourceTree = ""; };
8400BA840B60F36F00FB16B3 /* Gsimply.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Gsimply.h; sourceTree = ""; };
8400BA850B60F36F00FB16B3 /* Hnfunct.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Hnfunct.cpp; sourceTree = ""; };
8400BA860B60F36F00FB16B3 /* Hnfunct.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Hnfunct.h; sourceTree = ""; };
8400BA870B60F36F00FB16B3 /* Hnumber.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Hnumber.cpp; sourceTree = ""; };
8400BA880B60F36F00FB16B3 /* HNumber.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HNumber.h; sourceTree = ""; };
8400BA890B60F36F00FB16B3 /* Keys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Keys.cpp; sourceTree = ""; };
8400BA8A0B60F36F00FB16B3 /* Keys_main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Keys_main.cpp; sourceTree = ""; };
8400BA8B0B60F36F00FB16B3 /* Mynum.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Mynum.cpp; sourceTree = ""; };
8400BA8C0B60F36F00FB16B3 /* MyNum.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyNum.h; sourceTree = ""; };
8400BA8D0B60F36F00FB16B3 /* Myprint.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Myprint.cpp; sourceTree = ""; };
8400BA8E0B60F36F00FB16B3 /* Myprint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Myprint.h; sourceTree = ""; };
8400BA8F0B60F36F00FB16B3 /* MyTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyTypes.h; sourceTree = ""; };
8400BA900B60F36F00FB16B3 /* Operator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Operator.cpp; sourceTree = ""; };
8400BA910B60F36F00FB16B3 /* Operator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Operator.h; sourceTree = ""; };
8400BA920B60F36F00FB16B3 /* PrimeGen.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PrimeGen.cpp; sourceTree = ""; };
8400BA930B60F36F00FB16B3 /* Profiler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Profiler.h; sourceTree = ""; };
8400BA940B60F36F00FB16B3 /* RSA.dsp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = RSA.dsp; sourceTree = ""; };
8400BA950B60F36F00FB16B3 /* RSA.vcproj */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = RSA.vcproj; sourceTree = ""; };
8400BA960B60F36F00FB16B3 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = stdafx.cpp; sourceTree = ""; };
8400BA970B60F36F00FB16B3 /* StdAfx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = StdAfx.h; sourceTree = ""; };
8400BA980B60F36F00FB16B3 /* TMSG.H */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = TMSG.H; sourceTree = ""; };
8400BA990B60F36F00FB16B3 /* RSAKeys.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = RSAKeys.cpp; sourceTree = ""; };
8400BA9A0B60F36F00FB16B3 /* RSAKeys.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = RSAKeys.h; sourceTree = ""; };
8400BA9D0B60F36F00FB16B3 /* stdafx.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = stdafx.cpp; sourceTree = ""; };
8400BA9E0B60F36F00FB16B3 /* stdafx.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 30; path = stdafx.h; sourceTree = ""; };
8400BAA00B60F36F00FB16B3 /* version.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = version.plist; sourceTree = ""; };
8456E5520B4CFCFE006B7550 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
848C411E0B848FDC00BD11B3 /* rfbserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rfbserver.h; sourceTree = ""; };
848C411F0B848FDC00BD11B3 /* rfbserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rfbserver.cpp; sourceTree = ""; };
84AE56F40B42906500425DCA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; };
84AF48130BCCCE0B00C5BF0A /* DirectoryService.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DirectoryService.framework; path = /System/Library/Frameworks/DirectoryService.framework; sourceTree = ""; };
84AF48A30BCCD42400C5BF0A /* DirService.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = DirService.h; sourceTree = ""; };
84AF48A40BCCD42400C5BF0A /* DirService.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = DirService.cpp; sourceTree = ""; };
84AF49000BCCD76E00C5BF0A /* User.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = User.h; sourceTree = ""; };
84AF49010BCCD76E00C5BF0A /* User.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = User.cpp; sourceTree = ""; };
84AFF1400B8C841D00D93058 /* ServerListSynchronize.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = ServerListSynchronize.h; sourceTree = ""; };
84AFF1410B8C841D00D93058 /* ServerListSynchronize.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = ServerListSynchronize.cpp; sourceTree = ""; };
84D60B3C0B5BBF2400D9EBCB /* MyDllProxyInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyDllProxyInfo.h; sourceTree = ""; };
84D60B3D0B5BBF2400D9EBCB /* MyDllProxyInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MyDllProxyInfo.cpp; sourceTree = ""; };
84FD7F360BCB729100C66DF1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; };
8D5B49B6048680CD000E48DA /* Echoware.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Echoware.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; };
AB090FF809DB286900098B1F /* EchoToOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EchoToOSX.h; sourceTree = ""; };
AB090FF909DB286900098B1F /* EchoToOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EchoToOSX.cpp; sourceTree = ""; };
AB7449FE09968AF50046F588 /* APISocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = APISocket.h; sourceTree = ""; };
AB7449FF09968AF50046F588 /* ClientSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ClientSocket.cpp; sourceTree = ""; };
AB744A0009968AF50046F588 /* ServerSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ServerSocket.cpp; sourceTree = ""; };
AB744A0109968AF50046F588 /* Socket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Socket.cpp; sourceTree = ""; };
AB744A0309968AF50046F588 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; };
AB744A0409968AF60046F588 /* aes_core.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = aes_core.c; sourceTree = ""; };
AB744A0509968AF60046F588 /* aes_locl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = aes_locl.h; sourceTree = ""; };
AB744A0609968AF60046F588 /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = ""; };
AB744A0909968AF60046F588 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = ""; };
AB744A0B09968AF60046F588 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = ""; };
AB744A0C09968AF60046F588 /* md4.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = md4.cpp; sourceTree = ""; };
AB744A0D09968AF60046F588 /* md4.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = ""; };
AB744A0E09968AF60046F588 /* md5.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = md5.cpp; sourceTree = ""; };
AB744A0F09968AF60046F588 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; };
AB744A1009968AF60046F588 /* ntlm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ntlm.h; sourceTree = ""; };
AB744A1109968AF60046F588 /* ntlmv2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ntlmv2.cpp; sourceTree = ""; };
AB744A1209968AF60046F588 /* ProxyConnect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ProxyConnect.cpp; sourceTree = ""; };
AB744A1409968AF60046F588 /* ProxyConnect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProxyConnect.h; sourceTree = ""; };
AB744A1609968AF60046F588 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = stdafx.cpp; sourceTree = ""; };
AB744A1709968AF60046F588 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stdafx.h; sourceTree = ""; };
AB744A1909968AF60046F588 /* Code.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Code.cpp; sourceTree = ""; };
AB744A1A09968AF60046F588 /* Commonf.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Commonf.cpp; sourceTree = ""; };
AB744A1B09968AF60046F588 /* Commonf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Commonf.h; sourceTree = ""; };
AB744A1C09968AF60046F588 /* Function.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Function.h; sourceTree = ""; };
AB744A1D09968AF60046F588 /* Gsimply.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Gsimply.cpp; sourceTree = ""; };
AB744A1E09968AF60046F588 /* Gsimply.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Gsimply.h; sourceTree = ""; };
AB744A1F09968AF60046F588 /* Hnfunct.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Hnfunct.cpp; sourceTree = ""; };
AB744A2009968AF60046F588 /* Hnfunct.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Hnfunct.h; sourceTree = ""; };
AB744A2109968AF60046F588 /* Hnumber.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Hnumber.cpp; sourceTree = ""; };
AB744A2209968AF60046F588 /* HNumber.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HNumber.h; sourceTree = ""; };
AB744A2309968AF60046F588 /* Keys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Keys.cpp; sourceTree = ""; };
AB744A2409968AF60046F588 /* Keys_main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Keys_main.cpp; sourceTree = ""; };
AB744A2509968AF60046F588 /* Mynum.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Mynum.cpp; sourceTree = ""; };
AB744A2609968AF60046F588 /* MyNum.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyNum.h; sourceTree = ""; };
AB744A2709968AF60046F588 /* Myprint.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Myprint.cpp; sourceTree = ""; };
AB744A2809968AF60046F588 /* Myprint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Myprint.h; sourceTree = ""; };
AB744A2909968AF60046F588 /* MyTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyTypes.h; sourceTree = ""; };
AB744A2A09968AF60046F588 /* Operator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Operator.cpp; sourceTree = ""; };
AB744A2B09968AF60046F588 /* Operator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Operator.h; sourceTree = ""; };
AB744A2C09968AF60046F588 /* PrimeGen.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PrimeGen.cpp; sourceTree = ""; };
AB744A2D09968AF70046F588 /* Profiler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Profiler.h; sourceTree = ""; };
AB744A3009968AF70046F588 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = stdafx.cpp; sourceTree = ""; };
AB744A3109968AF70046F588 /* StdAfx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = StdAfx.h; sourceTree = ""; };
AB744A3209968AF70046F588 /* TMSG.H */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = TMSG.H; sourceTree = ""; };
AB744A4E09968B340046F588 /* ACConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ACConnection.cpp; sourceTree = ""; };
AB744A4F09968B340046F588 /* ACConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ACConnection.h; sourceTree = ""; };
AB744A5209968B340046F588 /* AES.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AES.cpp; sourceTree = ""; };
AB744A5309968B340046F588 /* AES.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AES.h; sourceTree = ""; };
AB744A5409968B340046F588 /* blowfish.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = blowfish.cpp; sourceTree = ""; };
AB744A5509968B340046F588 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; };
AB744A5609968B340046F588 /* CritSection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CritSection.cpp; sourceTree = ""; };
AB744A5709968B340046F588 /* CritSection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CritSection.h; sourceTree = ""; };
AB744A5809968B340046F588 /* DataChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DataChannel.cpp; sourceTree = ""; };
AB744A5909968B340046F588 /* DataChannel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DataChannel.h; sourceTree = ""; };
AB744A5A09968B340046F588 /* DataChannels.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DataChannels.cpp; sourceTree = ""; };
AB744A5B09968B340046F588 /* DataChannels.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DataChannels.h; sourceTree = ""; };
AB744A5C09968B340046F588 /* DataChannelSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DataChannelSocket.cpp; sourceTree = ""; };
AB744A5D09968B340046F588 /* DataChannelSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DataChannelSocket.h; sourceTree = ""; };
AB744A5E09968B340046F588 /* DllProxyInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DllProxyInfo.cpp; sourceTree = ""; };
AB744A5F09968B340046F588 /* DllProxyInfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DllProxyInfo.h; sourceTree = ""; };
AB744A6009968B340046F588 /* EchoSrvDataChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = EchoSrvDataChannel.cpp; sourceTree = ""; };
AB744A6109968B340046F588 /* EchoSrvDataChannel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = EchoSrvDataChannel.h; sourceTree = ""; };
AB744A6209968B340046F588 /* Echoware.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Echoware.cpp; sourceTree = "