--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/ErrorMonitorData.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __ERRRORMONITORDATA_H__
+#define __ERRRORMONITORDATA_H__
+
+#include "shareddata.h"
+#include "mutex.h"
+
+// Error memory written by Server for 1 client
+#define MAX_ERRORS 200
+typedef struct tagErrorEntry
+{
+ BOOL osErrorUsed;
+ LONG tcfError;
+ DWORD osError;
+} *pErrorEntry, ErrorEntry;
+typedef struct tagErrorData
+{
+ int first; // first error in queue
+ int next; // last error in queue
+ int numberErrors; // number of errors in queue
+ ErrorEntry errors[MAX_ERRORS];
+} *pErrorData, ErrorData;
+
+
+// base name (each client has different name)
+#define ERRORMONITORDATA_MAP_BASENAME "TCFErrorMonitorData"
+#define ERRORMONITORDATA_MAP_SIZE (sizeof(ErrorData))
+
+// mutex to restrict access (each client has different name)
+#define ERRORMONITORDATA_MUTEX_BASENAME "TCFErrorMonitorMutex"
+#define ERRORMONITORDATA_MUTEX_TIMEOUT (60000L)
+
+class CErrorMonitorData : public CSharedData
+{
+public:
+ BOOL Init();
+};
+
+class CErrorMonitor
+{
+public:
+ CErrorMonitor();
+ CErrorMonitor(long inClientID);
+ ~CErrorMonitor();
+
+ BOOL CreateData();
+ BOOL IsThisClient(long inClientID) { return (inClientID == m_ClientID); }
+ long GetClientId() { return m_ClientID; }
+
+ BOOL PutError(LONG tcfError, BOOL osErrorUsed=FALSE, DWORD osError=0);
+ BOOL GetError(LONG* tcfError, BOOL* osErrorUsed=NULL, DWORD* osError=NULL);
+ void ResetErrorQueue(pErrorData pData) { pData->first = pData->next = pData->numberErrors = 0; }
+ BOOL IsErrorQueueEmpty(pErrorData pData) { return (pData->numberErrors <= 0); }
+ BOOL IsErrorQueueFull(pErrorData pData) { return (pData->numberErrors >= MAX_ERRORS); }
+
+private:
+ pErrorData GetDataPtr() { return (pErrorData)m_Data.GetDataPtr(); }
+
+ BOOL WaitForAccess() { return m_Mutex.Wait(); };
+ BOOL ReleaseAccess() { return m_Mutex.Release(); };
+
+ long m_ClientID;
+ CErrorMonitorData m_Data;
+ Mutex m_Mutex;
+};
+#endif// __ERRRORMONITORDATA_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/InputStream.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __INPUTSTREAM_H__
+#define __INPUTSTREAM_H__
+
+#ifdef TCF_CLIENT
+#include <jni.h>
+#endif
+
+#include "shareddata.h"
+#include "mutex.h"
+#include "TCDebugLog.h"
+#include "ServerClient.h"
+
+#define USE_CIRCULAR_BUFFER
+//
+// Input Stream - one per client
+//
+
+//----------------------------------
+// Input Stream Mutex
+//----------------------------------
+// Mutex name is basename + clientID
+#define INPUTSTREAMDATA_MUTEX_BASENAME "TCFInputStreamDataMutex"
+#define INPUTSTREAMDATA_MUTEX_TIMEOUT (60000L)
+
+//----------------------------------
+// Input Stream Buffer
+//----------------------------------
+typedef BYTE *pInputStreamData;
+// Mapping name is basename + clientID
+#define INPUTSTREAMDATA_MAP_BASENAME "TCFInputStreamData"
+class CInputStreamData : public CSharedData
+{
+public:
+ BOOL Init();
+};
+
+#ifdef USE_CIRCULAR_BUFFER
+//----------------------------------
+// Input Stream Buffer & File Information
+//----------------------------------
+typedef struct tagInputStreamInfo
+{
+ DWORD numberMessages; // total messages (buffer and file)
+ DWORD numberBytes; // total bytes (buffer and file)
+ DWORD numberMessagesInFile; // number of messages in file
+ DWORD numberBytesInFile; // number of bytes in file
+ DWORD bufferRead; // where to read from buffer
+ DWORD bufferPeek; // where to peek some data from buffer
+ DWORD bufferWrite; // where to write to buffer
+ DWORD bufferSize; // current size of buffer
+ DWORD bufferCapacity; // total capacity of buffer
+} *pInputStreamInfo, InputStreamInfo;
+#else
+//----------------------------------
+// Input Stream Buffer & File Information
+//----------------------------------
+typedef struct tagInputStreamInfo
+{
+ DWORD numberMessages; // total messages (buffer and file)
+ DWORD numberBytes; // total bytes (buffer and file)
+ DWORD numberMessagesInFile; // number of messages in file
+ DWORD numberBytesInFile; // number of bytes in file
+} *pInputStreamInfo, InputStreamInfo;
+#endif
+// Mapping name is basename + clientID
+#define INPUTSTREAMINFO_MAP_BASENAME "TCFInputStreamInfo"
+#define INPUTSTREAMINFO_MAP_SIZE (sizeof(InputStreamInfo))
+
+class CInputStreamInfo : public CSharedData
+{
+public:
+ BOOL Init();
+};
+
+//----------------------------------
+// Input Stream Overflow Files
+//----------------------------------
+#define INPUTSTREAMOVERFLOW_FILE_SIZE (20*1024*1024L)
+
+typedef BYTE* pInputStreamFile;
+
+// Mapping name is basename + clientID
+#define INPUTSTREAMOVERFLOW_MAP_BASENAME "TCFInputStreamOverflowFile"
+class CInputStreamFile : public CSharedData
+{
+public:
+ void SetClientId(long id);
+ BOOL Open(DWORD dwSize, CHAR *filePath);
+ BOOL Init();
+ Close();
+
+ long m_ClientID;
+ HANDLE m_hFile; // handle from CreateFile
+};
+
+//----------------------------------
+// Input Stream class
+//----------------------------------
+class CInputStream
+{
+public:
+ CInputStream();
+ CInputStream(CHAR* pOverflowPath, DWORD inBufferSize, BOOL inOverFlowToFile, long inClientID);
+ ~CInputStream();
+
+ BOOL CreateStream();
+ long AddMessage(DWORD inLength, BYTE* inMessage);
+ LONG GetNumberMessages();
+
+ DWORD GetNextMessage(DWORD inLength, BYTE* outMessage);
+ DWORD GetNextMessageSize();
+ void GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes);
+ void GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize);
+ BOOL IsThisClient(long inClientID) { return (inClientID == m_ClientID); }
+ long GetClientId() { return m_ClientID; }
+#ifdef TCF_CLIENT
+ DWORD GetMessages(JNIEnv* env, long inNumberMessages, long inNumberMaxBytes, long& outNumberBytesRead, long& outNumberMessagesRead, jbyteArray outMessageData);
+#endif
+ void UnLockStream() { ReleaseAccess(); }
+
+#ifdef USE_CIRCULAR_BUFFER
+ void DoReadBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength);
+ void DoWriteBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* inData, DWORD inLength);
+ void IncrementReadPosition(pInputStreamInfo pInfo, DWORD inLength);
+ void IncrementWritePosition(pInputStreamInfo pInfo, DWORD inLength);
+ void DoPeekBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength);
+ void IncrementPeekPosition(pInputStreamInfo pInfo, DWORD inLength);
+#endif
+
+private:
+ pInputStreamData GetDataPtr() { return (pInputStreamData)m_Data.GetDataPtr(); }
+ pInputStreamInfo GetInfoPtr() { return (pInputStreamInfo)m_Info.GetDataPtr(); }
+ pInputStreamFile GetFilePtr() { if (m_File == NULL) return NULL; else return (pInputStreamFile)m_File->GetDataPtr(); }
+
+ BOOL WaitForAccess() { if (m_StreamLocked) return TRUE; else { m_StreamLocked = TRUE; return m_Mutex.Wait();} };
+ BOOL ReleaseAccess() { if (m_StreamLocked) { m_StreamLocked = FALSE; return m_Mutex.Release();} else return TRUE; };
+
+ long m_ClientID;
+ Mutex m_Mutex;
+ CInputStreamData m_Data;
+ CInputStreamInfo m_Info;
+ DWORD m_BufferSize;
+ DWORD m_FileSize;
+ CHAR m_OverFlowBaseName[MAX_FILEPATH];
+ BOOL m_OverFlowToFile;
+ CInputStreamFile* m_File;
+ BOOL m_StreamLocked;
+};
+
+#endif __INPUTSTREAM_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/PSerialCommPref.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,103 @@
+/*
+ * PSerialCommPref.h
+ *
+ * Copyright 2002 metrowerks inc. All rights reserved.
+ *
+ */
+
+#ifndef __PSERIALCOMMPREF_H__
+#define __PSERIALCOMMPREF_H__
+
+//#include "DEPrefTypes.h"
+
+enum menu_port
+{
+ PortCOM1=0,
+ PortCOM2=1,
+ PortCOM3=2,
+ PortCOM4=3,
+ PortCOM5=4,
+ PortCOM6=5,
+ PortCOM7=6,
+ PortCOM8=7,
+ PortCOM9=8
+};
+
+enum menu_rate
+{
+ Baud300=0,
+ Baud1200=1,
+ Baud2400=2,
+ Baud4800=3,
+ Baud9600=4,
+ Baud19200=5,
+ Baud38400=6,
+ Baud57600=7,
+ Baud115200=8,
+ Baud230400=9
+};
+
+enum menu_databits
+{
+ DataBits4=0,
+ DataBits5=1,
+ DataBits6=2,
+ DataBits7=3,
+ DataBits8=4
+};
+
+enum menu_stopbits
+{
+ StopBits1=0,
+ StopBits15=1,
+ StopBits2=2
+};
+
+enum menu_parity
+{
+ ParNone=0,
+ ParOdd=1,
+ ParEven=2
+};
+
+enum menu_flowcontrol
+{
+ FlowNone=0,
+ FlowHardware=1,
+ FlowSoftware=2
+};
+
+#if (0)
+#define PSerialCommPrefPanelDisplayName "Serial"
+
+// --- DEPREF ---
+// Comment line above is required by deprefs.pl tool, which this header is run
+// through as part of the DE builds (standalone debugger engine). There are
+// various restrictions and requirements that tool imposes on this header, so
+// if you change anything past here, please run this header through deprefs.pl
+// and ensure no errors result.
+
+#define PSerialCommPrefPanelName "Serial Communications"
+
+#define PSERIALCOMMPREFVERSION 2
+
+typedef struct PSerialCommPref {
+ short version;
+
+ // serial 1
+ signed char port;
+ signed char rate;
+ signed char databits;
+ signed char stopbits;
+ signed char parity;
+ signed char flowcontrol;
+ BOOLCHAR logdata;
+//#if (HOSTOS == SOLARIS) || (HOSTOS == LINUX)
+// unsigned char pad1[3];
+// char dynamicPort[256];
+//#endif
+
+} PSerialCommPref, **PSerialCommPrefHandle;
+#endif
+
+#endif // __PSERIALCOMMPREF_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/ServerClient.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __SERVERCLIENT_H__
+#define __SERVERCLIENT_H__
+
+#include "shareddata.h"
+#include "mutex.h"
+
+#define MAX_IPADDRESS_SIZE (20)
+#define MAX_PORT_SIZE (6)
+typedef struct tagTcpConnectData
+{
+ char ipAddress[MAX_IPADDRESS_SIZE];
+ char ipPort[MAX_PORT_SIZE];
+} *pTcpConnectData, TcpConnectData;
+
+enum eFlowControl
+{
+ eFlowControlNone,
+ eFlowControlHW,
+ eFlowControlSW,
+};
+enum eStopBits
+{
+ eStopBits1,
+ eStopBits15,
+ eStopBits2,
+};
+enum eParity
+{
+ eParityNone,
+ eParityOdd,
+ eParityEven,
+};
+
+#define MAX_COMPORT_SIZE (20)
+typedef struct tagRealSerialConnectData
+{
+ eFlowControl flowControl;
+ eStopBits stopBits;
+ eParity parity;
+ DWORD baudRate;
+ DWORD dataBits;
+ char comPort[MAX_COMPORT_SIZE];
+} *pRealSerialConnectData, RealSerialConnectData;
+
+typedef struct tagVirtualSerialConnectData
+{
+ char comPort[MAX_COMPORT_SIZE];
+} *pVirtualSerialConnectData, VirtualSerialConnectData;
+
+#define MAX_USBDEVICE_SIZE (100)
+typedef struct tagUSBConnectData
+{
+ // TODO
+ char device[MAX_USBDEVICE_SIZE];
+} *pUSBConnectData, USBConnectData;
+
+#define MAX_NUMBER_OPTIONS (20)
+#define MAX_DECODE_FORMAT (16)
+#define MAX_CONNECTION_TYPE (16)
+
+// per connection settings
+typedef struct tagConnectData
+{
+ DWORD retryInterval; // retry interval option
+ DWORD retryTimeout; // retry timeout option
+ DWORD traceBoxChannel; // added TraceBox information
+ char decodeFormat[MAX_DECODE_FORMAT]; // decode format (e.g. "ost") option
+ char connectType[MAX_CONNECTION_TYPE]; // connection type (e.g. "tcp")
+ TcpConnectData tcpSettings; // TCP/IP settings
+ RealSerialConnectData realSerialSettings; // real serial
+ VirtualSerialConnectData virtualSerialSettings; // virtual serial
+ USBConnectData usbSettings; // real USB
+
+} *pConnectData, ConnectData;
+
+// per client options - done at connect time
+typedef struct tagClientOptions
+{
+ DWORD unWrapFormat; // message unwrapping option (PN or OST)
+ DWORD ostVersion; // which OST version to use on sendmessage (unused in native)
+
+} *pClientOptions, ClientOptions;
+
+// per client options - done on opening stream
+enum eMessageDestination
+{
+ eDestinationInputStream = 0, // input stream
+ eDestinationFile, // message file
+};
+#define MAX_FILEPATH (2048L)
+typedef struct tagDestinationOptions
+{
+ eMessageDestination destination; // eMessageDestination
+ DWORD streamSize; // input stream size
+ BOOL overFlowToFile; // overflow stream to file option
+ CHAR destinationFile[MAX_FILEPATH]; // stream overflow file or message file
+
+} *pDestinationOptions, DestinationOptions;
+
+enum eServerCommand
+{
+ eCmdNone = 0, // no command to process
+ eCmdConnect, // connect (connectSettings clientOptions *clientId)
+ eCmdDisconnect, // disconnect (clientId)
+ eCmdGetClientStatus, // getclientstatus (clientId *clientStatus)
+ eCmdGetConnectionStatus, // getconnstatus
+ eCmdSetMessageIds, // setmessageIds (clientId number messageIds)
+ eCmdGetNumberVersions, // getnumberversions (clientId *number)
+ eCmdGetVersion, // getversion (clientId index *version)
+ eCmdGetNumberConnections, // getnumberconnections (*number)
+ eCmdGetConnectionType, // getconnectiontype (index *connectionSettings.connectType)
+ eCmdGetConnection, // getconnection (index *connectionSettings)
+ eCmdGetNumberClients, // getnumclients (*number)
+ eCmdOpenStream, // openstream (clientId destinationoptions)
+ eCmdCloseStream, // closestream (clientId)
+ eCmdStart, // start (clientId)
+ eCmdStop, // stop (clientId)
+ eCmdSendMessage, // sendmessage (clientId number message)
+ eCmdTestClientConnection, // testconnection (clientId)
+ eCmdTestConnection, // testconnection (connectSettings)
+ eCmdExit, // tell server to exit its main command thread
+ eCmdOpenMessageFile, // openfile (clientId destinationoptions)
+ eCmdCloseMessageFile, // closefile (clientId)
+ eCmdClearMessageFile, // clearfile (clientId)
+
+};
+
+enum eServerResponse
+{
+ eRspNone = 0, // no response generated
+ eRspOK, // response with no errors
+ eRspError, // error response: error
+ eRspExitted, // server has exitted
+};
+
+enum eClientStatus
+{
+ eStarted, // message processing started
+ eStopped, // message processing stopped
+ eUnknownClient, // client not found
+};
+
+enum eConnectionStatus
+{
+ eConnected, // connection is OK
+ eDisconnected, // disconnected
+ eRetryInProgress, // inside retry interval (connected)
+ eRetryTimedOut, // retry timedout (disconnected)
+};
+
+// ----------- Command/Response Data -------------------
+#define MAX_VERSION_STRING (80)
+#define MAX_MESSAGEIDS (256)
+typedef struct tagServerCommandData
+{
+ eServerCommand command; // command type
+ eServerResponse response; // response type
+ eClientStatus clientStatus; // client status
+ eConnectionStatus connectionStatus; // connection status
+ long error; // response error
+ unsigned long osError; // error from the OS if applicable
+ long clientId; // clientID for command/response
+ long index; // eGetVersion command/eGetConnection command
+ long number; // length or other number value (see commands)
+ char version[MAX_VERSION_STRING]; // eGetVersion response
+ ConnectData connectSettings; // eConnect command/eGetConnection response
+ ClientOptions clientOptions; // per client options
+ DestinationOptions destinationOptions; // input stream or message file options
+ long numClients; // eGetNumberClients response
+ long numConnections; // eGetNumberConnections response
+ long encodeOption; // eSendMessage - what to do with protocol headers
+ BYTE protocolVersion; // eSendMessage - OST version byte if OST protocol
+ BOOL useMyId; // eSendMessage
+ BYTE myId; // eSendMessage
+ BYTE messageIds[MAX_MESSAGEIDS]; // eSetMessageIds command
+
+} *pServerCommandData, ServerCommandData;
+
+#define SERVERCOMMANDDATA_MAP_SIZE (sizeof(ServerCommandData))
+#define SERVERCOMMANDDATA_MAP_NAME "TCFServerCommandData"
+
+#define SERVERCOMMANDDATA_MUTEX_NAME "TCFServerCommandDataMutex"
+//#define SERVERCOMMANDDATA_MUTEX_TIMEOUT (60000L)
+#define SERVERCOMMANDDATA_MUTEX_TIMEOUT (1000L)
+
+class CServerCommandData : public CSharedData
+{
+public:
+ BOOL Init() { if (IsCreator()) \
+ {\
+ pServerCommandData pData = (pServerCommandData)GetDataPtr();\
+ pData->command = eCmdNone;\
+ pData->response = eRspNone;\
+ pData->clientStatus = eStopped;\
+ pData->connectionStatus = eDisconnected;\
+ pData->clientId = -1;\
+ pData->index = 0;\
+ pData->number = 0;\
+ pData->version[0] = 0;\
+ pData->numClients = 0;\
+ pData->numConnections = 0;\
+ memset(&pData->messageIds, 0, MAX_MESSAGEIDS);\
+ }\
+ return TRUE; }
+};
+// ----------- Command/Response Data -------------------
+
+// ----------- Send Message Data -------------------
+#define MAX_SENDMESSAGE (64*1024L+12)
+typedef struct tagServerMessageData
+{
+ long length;
+ BYTE message[MAX_SENDMESSAGE]; // eSendMessage command
+} *pServerMessageData, ServerMessageData;
+
+#define SERVERMESSAGEDATA_MAP_SIZE (sizeof(ServerMessageData))
+#define SERVERMESSAGEDATA_MAP_NAME "TCFServerMessageData"
+
+class CServerMessageData : public CSharedData
+{
+public:
+ BOOL Init() { if (IsCreator()) \
+ {\
+ pServerMessageData pData = (pServerMessageData)GetDataPtr();\
+ memset(&pData->message, 0, MAX_SENDMESSAGE);\
+ pData->length = 0;\
+ }\
+ return TRUE; }
+};
+// ----------- Send Message Data -------------------
+
+// ----------- Server Process Data -------------------
+typedef struct tagServerProcessData
+{
+ long numRefs; // reference count (first creates server process/last destroys server process)
+ PROCESS_INFORMATION serverProcess; // Server process information
+} *pServerProcessData, ServerProcessData;
+
+#define SERVERPROCESSDATA_MAP_SIZE (sizeof(ServerProcessData))
+#define SERVERPROCESSDATA_MAP_NAME "TCFServerProcessData"
+
+class CServerProcessData : public CSharedData
+{
+public:
+ BOOL Init() { if (IsCreator()) \
+ {\
+ pServerProcessData pData = (pServerProcessData)GetDataPtr();\
+ pData->numRefs = 0;\
+ memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));\
+ pData->serverProcess.hProcess = NULL;\
+ }\
+ return TRUE; }
+};
+// ----------- Server Process Data -------------------
+
+
+// Main server command/response class
+#define SERVERPIPE_MUTEX_NAME "TCFServerPipeMutex"
+#define SERVERPIPE_MUTEX_TIMEOUT (60000L)
+
+// Server command/response events
+#define SERVER_COMMAND_READY_EVENTNAME "TCFServerCommandReadyEvent"
+#define SERVER_RESPONSE_READY_EVENTNAME "TCFServerResponseReadyEvent"
+#define SERVER_CMDRSP_EVENT_TIMEOUT 60000L
+
+class CServerCommand
+{
+public:
+ CServerCommand();
+ ~CServerCommand();
+
+ // Client methods
+ BOOL SendCommand(pServerCommandData pCmd, DWORD msgLength=0, BYTE* message=NULL);
+ BOOL GetResponse(pServerCommandData pRsp);
+
+ // Server methods
+ BOOL GetCommand(pServerCommandData pCmd, pServerMessageData pMsg);
+ BOOL SendResponse(pServerCommandData pRsp);
+
+ BOOL WaitforServerPipeAccess() { return m_ServerPipeMutex.Wait(); }
+ BOOL ReleaseServerPipeAccess() { return m_ServerPipeMutex.Release(); }
+
+ pServerProcessData GetProcessPtr() { return (pServerProcessData)m_ServerProcessData.GetDataPtr(); }
+
+private:
+ pServerCommandData GetDataPtr() { return (pServerCommandData)m_ServerCommandData.GetDataPtr(); }
+ pServerMessageData GetMsgPtr() { return (pServerMessageData)m_ServerMessageData.GetDataPtr(); }
+
+private:
+ // Server Commands/Responses
+ BOOL WaitForServerCommandAccess() { return m_ServerCommandMutex.Wait(); };
+ BOOL ReleaseServerCommandAccess() { return m_ServerCommandMutex.Release(); };
+// BOOL WaitForServerCommandAccess() { return TRUE; };
+// BOOL ReleaseServerCommandAccess() { return TRUE; };
+ CServerCommandData m_ServerCommandData;
+ CServerMessageData m_ServerMessageData;
+ CServerProcessData m_ServerProcessData;
+
+ Mutex m_ServerCommandMutex;
+ Mutex m_ServerPipeMutex;
+
+ // client
+ void SetCommandReady();
+ // server
+ void SetResponseReady();
+ HANDLE m_hServerCommandReadyEvent;
+ HANDLE m_hServerResponseReadyEvent;
+};
+
+#endif// __SERVERCLIENT_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCConstants.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __TCCONSTANTS_H__
+#define __TCCONSTANTS_H__
+
+#include <stdio.h>
+
+// com.nokia.tcf.api.ITCConnection.java
+#define DEFAULT_COMM_ERROR_RETRY_INTERVAL 1i64
+#define DEFAULT_COMM_ERROR_RETRY_TIMEOUT 300i64
+
+// com.nokia.tcf.api.ITCMessageOptions.java
+
+#define DESTINATION_INPUTSTREAM 0i64
+#define DESTINATION_CLIENTFILE 1i64
+#define DEFAULT_DESTINATION 0i64
+#define DEFAULT_INPUTSTREAM_OVERFLOW 1i64
+#define UNWRAP_LEAVE_HEADERS 0i64
+#define UNWRAP_DELETE_HEADERS 1i64
+#define DEFAULT_UNWRAP_OPTION 0i64
+#define ENCODE_NO_FORMAT 0i64
+#define ENCODE_FORMAT 1i64
+#define ENCODE_TRK_FORMAT 2i64
+#define DEFAULT_ENCODE_FORMAT 0i64
+#define DEFAULT_OST_VERSION 1L
+
+#endif //__TCCONSTANTS_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCDebugLog.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __TCDEBUGLOG_H__
+#define __TCDEBUGLOG_H__
+#include <stdio.h>
+#include <share.h>
+#include "mutex.h"
+
+
+#define LOG_BASENAME "c:\\TCDebugLog"
+#define LOG_MUTEX_BASENAME "TCDebugLogMutex"
+#define LOG_MUTEX_TIMEOUT (60000L)
+
+class TCDebugLog
+{
+public:
+ TCDebugLog();
+ TCDebugLog(char* baseName, DWORD id);
+ TCDebugLog(char* baseName, DWORD id, DWORD timeout);
+ ~TCDebugLog();
+
+ void log(char* msg);
+
+//private:
+// BOOL WaitForAccess() { return m_Mutex.Wait(); };
+// BOOL ReleaseAccess() { return m_Mutex.Release(); };
+ BOOL WaitForAccess();
+ BOOL ReleaseAccess();
+
+ void logTime();
+ Mutex m_Mutex;
+ FILE* m_fLog;
+ char m_FileName[80];
+
+};
+#endif //__TCDEBUGLOG_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCErrorConstants.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __TCERRORCONSTANTS_H__
+#define __TCERRORCONSTANTS_H__
+
+#include <stdio.h>
+
+// these must match com.nokia.tcf.api.TCErrorContants.java
+
+ #define TCAPI_ERR_NONE 0 // no error
+ #define TCAPI_ERR_CANNOT_OPEN 1 // cannot open port
+ #define TCAPI_ERR_ALREADY_OPEN 2 // port already open
+ #define TCAPI_ERR_INVALID_HANDLE 3 // invalid handle
+ #define TCAPI_ERR_TIMEOUT 4 // timeout on port
+ #define TCAPI_ERR_FILE_IS_OPEN 5 // a file is already open
+ #define TCAPI_ERR_FILE_DOES_NOT_EXIST 6 // file does not exist
+ #define TCAPI_ERR_NO_FILE 7 // no file is open
+ #define TCAPI_ERR_ROUTING_STOPPED 8 // routing is stopped
+ #define TCAPI_ERR_ROUTING_IN_PROGRESS 9 // routing in progress
+ #define TCAPI_ERR_WRITING_FILE 10 // could not write to file
+ #define TCAPI_ERR_NO_MESSAGESIDS_REGISTERED 11 // no message Ids are registered
+ #define TCAPI_ERR_MEDIA_NOT_OPEN 12 // handle indicates openMedia not called
+ #define TCAPI_ERR_MEDIA_NOT_SUPPORTED 13 // media type is not supported yet
+ #define TCAPI_ERR_UNKNOWN_MEDIA_TYPE 14 // media not known
+ #define TCAPI_ERR_MISSING_MEDIA_DATA 15 // media type known, but missing data
+ #define TCAPI_ERR_INVALID_MEDIA_DATA 16 // media type known, but has invalid prefs
+ #define TCAPI_ERR_WHILE_CONFIGURING_MEDIA 17 // media type known, but couldn't be configured
+ #define TCAPI_ERR_CANNOT_FIND_ROUTER 18 // cannot find TCFServer.exe
+ #define TCAPI_ERR_CANNOT_CREATE_ROUTER_PROCESS 19 // found " but error returned on CreateProcess
+ #define TCAPI_ERR_MEDIA_IS_BUSY 20 // used for Trace bpx when someone else is connected
+ #define TCAPI_ERR_PROTOCOL_NOT_SUPPORTED_BY_MEDIA 21 // TraceBox does not support protocol
+ #define TCAPI_ERR_FEATURE_NOT_IMPLEMENTED 22 // API feature not implemented yet
+ #define TCAPI_ERR_COMM_ERROR 23 // error while polling/reading COMM port
+ #define TCAPI_ERR_COMM_TIMEOUT 24 // comm error retry timeout
+ #define TCAPI_ERR_COMM_MULTIPLE_OPEN 25 // there are multiple connections open - cannot attach
+ #define TCAPI_ERR_NO_COMM_OPEN 26 // there are no connections open - cannot attach
+ #define TCAPI_ERR_ALREADY_CONNECTED 27 // this client is already connected to some target
+ #define TCAPI_ERR_INVALID_DECODE_FORMAT 28 // invalid decode format (PN or OST is required)
+ #define TCAPI_ERR_INVALID_RETRY_PERIODS 29 // invalid retry timeout or interval
+ #define TCAPI_ERR_INVALID_STREAM_OVERFLOW_OPTION 30 // invalid option for overflowing input stream
+ #define TCAPI_ERR_INVALID_ENCODE_FORMAT 31 // invalid trace encoding format option
+ #define TCAPI_ERR_INVALID_MESSAGE_UNWRAP_OPTION 32 // invalid trace message unwrapping option
+ #define TCAPI_ERR_INVALID_STREAM_BUFFER_SIZE 33 // input stream buffer size is restricted (> 0 currently)
+ #define TCAPI_ERR_MISSING_MESSAGE_OPTIONS 34 // messages options (ITCMessageOptions) not specified
+ #define TCAPI_ERR_MISSING_CONNECTION_SPEC 35 // missing ITCConnection specification
+ #define TCAPI_ERR_MISSING_MESSAGE 36 // ITCMessage is missing on send Message
+ #define TCAPI_ERR_MESSAGE_OPTIONS_CONFLICT 37 // ITCMessage message options conflict with client's options
+ #define TCAPI_ERR_MESSAGEID_MAXIMUM 38 // ITCMessageIds number > 256 (probably duplicates)
+ #define TCAPI_ERR_INPUTSTREAM_FILECREATE 39 // cannot create overflow file
+ #define TCAPI_ERR_INPUTSTREAM_CLOSED 40 // operation not allowed - input stream is closed
+ #define TCAPI_ERR_PLATFORM_CONFIG 41 // Platform configuration not found
+ #define TCAPI_ERR_ERRLISTENER_NULL 42 // error listener cannot be null (add)
+ #define TCAPI_ERR_COMM_RETRY_IN_PROGRESS 43 // comm retry in progress
+ #define TCAPI_INFO_COMM_RECONNECTED 44 // reconnected during retry
+ #define TCAPI_ERR_COMM_INVALID_BAUDRATE 45 // Real Serial parameter checking
+ #define TCAPI_ERR_COMM_INVALID_DATABITS 46 // Real Serial parameter checking
+ #define TCAPI_ERR_COMM_INVALID_PARITY 47 // Real Serial parameter checking
+ #define TCAPI_ERR_COMM_INVALID_STOPBITS 48 // Real Serial parameter checking
+ #define TCAPI_ERR_COMM_INVALID_FLOWCONTROL 49 // Real Serial parameter checking
+ #define TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT 50 // TCFServer response timed out
+ #define TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS 51 // buffer overflowed (no overflow file) - msgs missed
+ #define TCAPI_INFO_INPUTSTREAM_BUFFER_OVERFLOW_TO_FILE 52 // buffer overflowed (overflow file in use)
+ #define TCAPI_ERR_INPUTSTREAM_FILE_OVERFLOW_MISSED_MSGS 53 // file overflowed - msgs missed
+ #define TCAPI_ERR_FILE_SPEC_MISSING 54 // Message file not specified
+ #define TCAPI_ERR_CREATE_FILE 55 // Message file could not be created
+ #define TCAPI_INFO_TRACEBOX_MEMORY_WARNING 56 // TRACEBOX buffer is close to overflowing
+ #define TCAPI_ERR_TRACEBOX_MEMORY_IS_CLOSED 57 // TRACEBOX buffer overflowed and is now closed
+ #define TCAPI_INFO_TRACEBOX_MEMORY_IS_NORMAL 58 // TRACEBOX buffer overflowed and is now closed
+ #define TCAPI_ERR_TRACEBOX_DATA_CORRUPTED 59 // TRACEBOX received corrupted trace data from phone
+ #define TCAPI_ERR_TRACEBOX_PROTOCOL_MEMORY_OVERFLOW 60 // TRACEBOX protocol processing buffer overflowed - fatal
+
+#endif //__TCERRORCONSTANTS_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/mutex.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __MUTEX_H__
+#define __MUTEX_H__
+
+class Mutex
+{
+public:
+ Mutex();
+ ~Mutex();
+
+ BOOL Open(CHAR* mutexName, DWORD waitTimeout);
+ void Close();
+ BOOL Wait();
+ BOOL Release();
+
+private:
+#ifdef WIN32
+ HANDLE m_hMutex;
+#else
+#error non WIN32
+#endif
+
+ DWORD m_waitTimeout;
+ BOOL m_mutexOpen;
+};
+#endif __MUTEX_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/shareddata.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __SHAREDDATA_H__
+#define __SHAREDDATA_H__
+
+class CSharedData
+{
+public:
+ CSharedData();
+ ~CSharedData();
+
+ BOOL Open(DWORD dwSize, CHAR *sharedName);
+ BOOL Open(HANDLE hFile, DWORD dwSize, CHAR *sharedName);
+ Close();
+ virtual BOOL Init();
+ LPVOID GetDataPtr();
+ BOOL IsCreator();
+
+private:
+ HANDLE m_hSharedData;
+ LPVOID m_lpDataPtr; // pointer to mapped data
+ BOOL m_fCreator; // am i the creator?
+};
+
+#endif // __SHAREDDATA_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/ErrorMonitorData.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "ErrorMonitorData.h"
+#include "TCErrorConstants.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_PERFORMANCE
+#ifdef LOG_PERFORMANCE
+# ifdef TCF_CLIENT
+static char* perfFileName="c:\\tcf\\clienterrorperf.txt";
+# else
+static char* perfFileName="c:\\tcf\\servererrorperf.txt";
+# endif
+static FILE *fpLog = NULL;
+static int numLogged=0;
+static void logPerf(char* msg);
+static void openPerf();
+static void closePerf();
+#define OPENPERF() openPerf()
+#define LOGPERF(s) logPerf(s)
+#define CLOSEPERF() closePerf()
+#else
+#define OPENPERF()
+#define LOGPERF(s)
+#define CLOSEPERF()
+#endif
+
+//#define LOG_ERRORMONITOR
+#if defined(LOG_ERRORMONITOR) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) gManager->m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) if (gDoLogging) sprintf(TCDebugMsg,"%s", s); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) sprintf(TCDebugMsg, s, a1); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2, a3); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() if (gDoLogging) gManager->m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CErrorMonitor::CErrorMonitor()
+{
+}
+CErrorMonitor::CErrorMonitor(long inClientID)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CErrorMonitor::CErrorMonitor clientId = %d this = %x\n", inClientID, this);
+
+ m_ClientID = inClientID;
+
+ TCDEBUGLOGS("CErrorMonitor::CErrorMonitor done\n");
+ TCDEBUGCLOSE();
+
+ OPENPERF();
+}
+CErrorMonitor::~CErrorMonitor()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CErrorMonitor::~CErrorMonitor clientId = %d this = %x\n", m_ClientID, this);
+
+ m_Data.Close();
+ m_Mutex.Close();
+
+ TCDEBUGLOGS("CErrorMonitor::~CErrorMonitor done\n");
+ TCDEBUGCLOSE();
+
+ CLOSEPERF();
+}
+
+BOOL CErrorMonitor::CreateData()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CErrorMonitor::CreateData clientId = %d this = %x\n", m_ClientID, this);
+
+ // create shared data location
+ char toString[30];
+ sprintf(toString, "%s%04.4ld",ERRORMONITORDATA_MAP_BASENAME, m_ClientID);
+ m_Data.Open(ERRORMONITORDATA_MAP_SIZE, toString);
+ m_Data.Init();
+
+ sprintf(toString, "%s%04.4ld",ERRORMONITORDATA_MUTEX_BASENAME, m_ClientID);
+
+ m_Mutex.Open(toString, ERRORMONITORDATA_MUTEX_TIMEOUT);
+
+ TCDEBUGLOGS("CErrorMonitor::CreateData done\n");
+ TCDEBUGCLOSE();
+
+ return TRUE;
+}
+
+BOOL CErrorMonitor::GetError(LONG* tcfError, BOOL* osErrorUsed, DWORD* osError)
+{
+ TCDEBUGOPEN();
+// TCDEBUGLOGA2("CErrorMonitor::GetError clientId = %d this = %x\n", m_ClientID, this);
+ BOOL found = FALSE;
+
+ WaitForAccess();
+
+ pErrorData pData = GetDataPtr();
+
+#if (0)
+ if (pData->errorOccurred)
+ {
+ TCDEBUGLOGA3("CErrorMonitor::GetError tcfError = %d osErrorUsed = %d osError = %d\n",
+ pData->tcfError, pData->osErrorUsed, pData->osError);
+
+ found = TRUE;
+ *tcfError = pData->tcfError;
+ *osErrorUsed = pData->osErrorUsed;
+ *osError = pData->osError;
+
+ pData->errorOccurred = FALSE;
+ }
+#endif
+#ifdef LOG_PERFORMANCE
+ char msg[100];
+ sprintf(msg, "GetError numErrors=%d\n", pData->numberErrors);
+ LOGPERF(msg);
+#endif
+ if (!IsErrorQueueEmpty(pData))
+ {
+ LOGPERF("GetError\n");
+ found = TRUE;
+ *tcfError = pData->errors[pData->first].tcfError;
+ *osErrorUsed = pData->errors[pData->first].osErrorUsed;
+ *osError = pData->errors[pData->first].osError;
+ TCDEBUGLOGA3("CErrorMonitor::GetError tcfError = %d osErrorUsed = %d osError = %d\n",
+ *tcfError, *osErrorUsed, *osError);
+ pData->numberErrors--;
+ if (pData->numberErrors <= 0)
+ {
+ ResetErrorQueue(pData);
+ }
+ else
+ {
+ pData->first++;
+ if (pData->first >= MAX_ERRORS)
+ pData->first = 0;
+ }
+ }
+#ifdef LOG_PERFORMANCE
+// char msg[100];
+ sprintf(msg, "GetError numErrors=%d tcfError=%d\n", pData->numberErrors, *tcfError);
+ LOGPERF(msg);
+#endif
+ ReleaseAccess();
+
+// TCDEBUGLOGS("CErrorMonitor::GetError done\n");
+ TCDEBUGCLOSE();
+ return found;
+}
+
+BOOL CErrorMonitor::PutError(LONG tcfError, BOOL osErrorUsed, DWORD osError)
+{
+ TCDEBUGOPEN();
+// TCDEBUGLOGA2("CErrorMonitor::PutError clientId = %d this = %x\n", m_ClientID, this);
+
+ BOOL done = FALSE;
+
+ WaitForAccess();
+
+ pErrorData pData = GetDataPtr();
+ if (pData == NULL)
+ return done;
+#if (0)
+ if (!pData->errorOccurred)
+ {
+ done = TRUE;
+ pData->tcfError = tcfError;
+ pData->osErrorUsed = osErrorUsed;
+ pData->osError = osError;
+
+// TCDEBUGLOGA3("CErrorMonitor::PutError tcfError = %d osErrorUsed = %d osError = %d\n",
+// pData->tcfError, pData->osErrorUsed, pData->osError);
+
+ pData->errorOccurred = TRUE;
+ }
+#endif
+#ifdef LOG_PERFORMANCE
+ char msg[100];
+ sprintf(msg, "PutError numErrors=%d tcfError=%d\n", pData->numberErrors, tcfError);
+ LOGPERF(msg);
+#endif
+ if (!IsErrorQueueFull(pData))
+ {
+ LOGPERF("PutError\n");
+ TCDEBUGLOGA3("CErrorMonitor::PutError tcfError = %d osErrorUsed = %d osError = %d\n",
+ tcfError, osErrorUsed, osError);
+ done = TRUE;
+ pData->errors[pData->next].tcfError = tcfError;
+ pData->errors[pData->next].osErrorUsed = osErrorUsed;
+ pData->errors[pData->next].osError = osError;
+ pData->numberErrors++;
+ pData->next++;
+ if (pData->next >= MAX_ERRORS)
+ pData->next = 0;
+ }
+#ifdef LOG_PERFORMANCE
+// char msg[100];
+ sprintf(msg, "PutError numErrors=%d\n", pData->numberErrors);
+ LOGPERF(msg);
+#endif
+ ReleaseAccess();
+
+// TCDEBUGLOGS("CErrorMonitor::GetError done\n");
+ TCDEBUGCLOSE();
+ return done;
+}
+
+BOOL CErrorMonitorData::Init()
+{
+ if (IsCreator())
+ {
+ pErrorData pData = (pErrorData)GetDataPtr();
+// pData->errorOccurred = FALSE;
+// pData->osErrorUsed = FALSE;
+// pData->osError = 0;
+// pData->tcfError = TCAPI_ERR_NONE;
+ pData->first = pData->next = pData->numberErrors = 0;
+ }
+ return TRUE;
+}
+#ifdef LOG_PERFORMANCE
+static void logPerf(char* msg)
+{
+ if (fpLog)
+ {
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ fprintf(fpLog,
+ "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+ sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+ msg);
+
+ numLogged++;
+ if ((numLogged % 1000) == 0)
+ fflush(fpLog);
+ }
+}
+static void openPerf()
+{
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ if (fpLog == NULL)
+ fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+ }
+ else
+ {
+ fpLog = NULL;
+ }
+}
+static void closePerf()
+{
+ if (fpLog)
+ {
+ fflush(fpLog);
+ fclose(fpLog);
+ }
+ fpLog = NULL;
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/InputStream.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,1044 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "InputStream.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+//#define LOG_PERFORMANCE
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+// for performance - independent of debug logging
+//#define LOG_PERFORMANCE
+#ifdef LOG_PERFORMANCE
+# ifdef TCF_CLIENT
+static char* perfFileName="c:\\tcf\\clientperf.txt";
+# else
+static char* perfFileName="c:\\tcf\\serverperf.txt";
+# endif
+static FILE *fpLog = NULL;
+static int numLogged=0;
+static void logPerf(char* msg);
+static void openPerf();
+static void closePerf();
+#define OPENPERF() openPerf()
+#define LOGPERF(s) logPerf(s)
+#define CLOSEPERF() closePerf()
+#else
+#define OPENPERF()
+#define LOGPERF(s)
+#define CLOSEPERF()
+#endif
+
+//#define LOG_INPUTSTREAM
+#if defined(LOG_INPUTSTREAM) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CInputStream::CInputStream()
+{
+}
+
+CInputStream::CInputStream(CHAR* pOverflowPath, DWORD inBufferSize, BOOL inOverFlowToFile, long inClientID)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::CInputStream clientId = %d this = %x\n", inClientID, this);
+
+ m_ClientID = inClientID;
+ m_BufferSize = inBufferSize;
+ m_FileSize = INPUTSTREAMOVERFLOW_FILE_SIZE;
+// m_FileSize = 2*1024L; for testing only
+
+ if (pOverflowPath == NULL)
+ {
+ m_OverFlowBaseName[0] = NULL;
+ m_OverFlowToFile = FALSE;
+ }
+ else
+ {
+ strncpy(m_OverFlowBaseName, pOverflowPath, MAX_FILEPATH);
+ m_OverFlowToFile = inOverFlowToFile;
+ }
+
+ m_File = NULL;
+
+ m_StreamLocked = FALSE;
+
+ TCDEBUGLOGS("CInputStream::CInputStream done\n");
+ TCDEBUGCLOSE();
+}
+
+CInputStream::~CInputStream()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::~CInputStream clientId = %d this = %x\n", m_ClientID, this);
+
+ m_Mutex.Close();
+ m_Data.Close();
+ m_Info.Close();
+
+ if (m_File != NULL)
+ {
+ m_File->Close();
+ delete m_File;
+ }
+
+ TCDEBUGLOGS("CInputStream::~CInputStream done\n");
+ TCDEBUGCLOSE();
+
+ CLOSEPERF();
+}
+
+BOOL CInputStream::CreateStream()
+{
+ BOOL ok = TRUE;
+#if (0)
+#ifdef _DEBUGLOG
+ #ifdef TCF_CLIENT
+ m_DebugLog = new TCDebugLog("TCF_ClientStreamLog", m_ClientID);
+ #else
+ m_DebugLog = new TCDebugLog("TCF_ServerStreamLog", m_ClientID);
+ #endif
+#else
+ m_DebugLog = NULL;
+#endif
+#endif
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::CreateStream clientId = %d this = %x\n", m_ClientID, this);
+
+ char toString[30];
+ sprintf(toString, "%s%04.4d", INPUTSTREAMDATA_MAP_BASENAME, m_ClientID);
+
+ TCDEBUGLOGA1("CInputStream::CreateStream dataname = %s\n", toString);
+
+ m_Data.Open(m_BufferSize, toString);
+ m_Data.Init();
+
+ sprintf(toString, "%s%04.4d", INPUTSTREAMDATA_MUTEX_BASENAME, m_ClientID);
+ TCDEBUGLOGA1("CInputStream::CreateStream mutexname = %s\n", toString);
+
+ m_Mutex.Open(toString, INPUTSTREAMDATA_MUTEX_TIMEOUT);
+
+ sprintf(toString, "%s%04.4d", INPUTSTREAMINFO_MAP_BASENAME, m_ClientID);
+ TCDEBUGLOGA1("CInputStream::CreateStream infoname = %s\n", toString);
+
+ m_Info.Open(INPUTSTREAMINFO_MAP_SIZE, toString);
+ m_Info.Init();
+#ifdef USE_CIRCULAR_BUFFER
+ GetInfoPtr()->bufferCapacity = m_BufferSize;
+#endif
+
+ // overflow file?
+ if (m_OverFlowToFile)
+ {
+ m_File = new CInputStreamFile();
+ m_File->SetClientId(m_ClientID);
+ if (!m_File->Open(m_FileSize, m_OverFlowBaseName))
+ {
+ delete m_File;
+ m_File = NULL;
+ ok = FALSE;
+ }
+ }
+ TCDEBUGLOGS("CInputStream::CreateStream done\n");
+ TCDEBUGCLOSE();
+
+ OPENPERF();
+
+ return ok;
+}
+#ifdef USE_CIRCULAR_BUFFER
+void CInputStream::DoReadBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+ if (lenToEnd > inLength)
+ lenToEnd = inLength;
+
+ if (lenToEnd > 0)
+ memcpy(outData, &pBuffer[pInfo->bufferRead], lenToEnd);
+
+ DWORD lenRemaining = inLength - lenToEnd;
+ if (lenRemaining > 0)
+ memcpy(&outData[lenToEnd], &pBuffer[0], lenRemaining);
+
+ pInfo->bufferSize -= inLength;
+
+ IncrementReadPosition(pInfo, inLength);
+}
+void CInputStream::DoWriteBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* inData, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferWrite;
+ if (lenToEnd > inLength)
+ lenToEnd = inLength;
+ memcpy(&pBuffer[pInfo->bufferWrite], inData, lenToEnd);
+ DWORD lenRemaining = inLength - lenToEnd;
+ if (lenRemaining > 0)
+ memcpy(&pBuffer[0], (const void*)&inData[lenToEnd], lenRemaining);
+
+ pInfo->bufferSize += inLength;
+
+ IncrementWritePosition(pInfo, inLength);
+}
+void CInputStream::IncrementReadPosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+ if (inLength <= lenToEnd)
+ pInfo->bufferRead += inLength;
+ else
+ pInfo->bufferRead = inLength - lenToEnd;
+}
+void CInputStream::IncrementWritePosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferWrite;
+ if (inLength <= lenToEnd)
+ pInfo->bufferWrite += inLength;
+ else
+ pInfo->bufferWrite = inLength - lenToEnd;
+}
+void CInputStream::DoPeekBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferPeek;
+ if (lenToEnd > inLength)
+ lenToEnd = inLength;
+
+ if (lenToEnd > 0)
+ memcpy(outData, &pBuffer[pInfo->bufferPeek], lenToEnd);
+
+ DWORD lenRemaining = inLength - lenToEnd;
+ if (lenRemaining > 0)
+ memcpy(&outData[lenToEnd], &pBuffer[0], lenRemaining);
+}
+void CInputStream::IncrementPeekPosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferPeek;
+ if (inLength <= lenToEnd)
+ pInfo->bufferPeek += inLength;
+ else
+ pInfo->bufferPeek = inLength - lenToEnd;
+}
+long CInputStream::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::AddMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+ long err = TCAPI_ERR_NONE;
+
+ BOOL done = FALSE;
+ if (inLength == 0 || inMessage == NULL)
+ return TCAPI_ERR_NONE;
+
+ BOOL gotIt = WaitForAccess(); // will lock on first access only
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+
+ long nfile = pInfo->numberBytesInFile; // number bytes in file
+ long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile; // number bytes in buffer
+
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+ DWORD nWriteSize = pInfo->bufferCapacity - pInfo->bufferSize;
+ if (nWriteSize > (inLength+sizeof(DWORD)))
+ {
+ DoWriteBuffer(pInfo, pData, (BYTE*)&inLength, sizeof(DWORD));
+ DoWriteBuffer(pInfo, pData, inMessage, inLength);
+ pInfo->numberBytes += inLength + sizeof(DWORD);
+ pInfo->numberMessages++;
+ done = TRUE;
+ }
+ else
+ {
+ // not enough room
+ // we just lost a message
+ TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed and no file - msg lost\n");
+ LOGPERF("AddMessage buffer overflowed\n");
+ err = TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS;
+ }
+
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+#ifdef LOG_PERFORMANCE
+ char msg[200];
+ sprintf(msg, "AddMessage numMsgs = %d numByts = %d\n", pInfo->numberMessages, pInfo->numberBytes);
+ LOGPERF(msg);
+#endif
+// ReleaseAccess(); // server will unlock all streams once the buffer is processed if any added
+
+ TCDEBUGLOGA1("CInputStream::AddMessage err=%d\n", err);
+ TCDEBUGCLOSE();
+
+ return err;
+}
+// now only used still by the C++ api
+DWORD CInputStream::GetNextMessage(DWORD inLength, BYTE* outMessage)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetNextMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+ DWORD outMsgLen = 0;
+
+ BOOL gotIt = WaitForAccess();
+ if (gotIt)
+ {
+ DWORD dwMsgSize = 0;
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+ if (pInfo->numberBytes > 0)
+ {
+ DoReadBuffer(pInfo, pData, (BYTE*)&dwMsgSize, sizeof(DWORD));
+ if (inLength > dwMsgSize)
+ inLength = dwMsgSize;
+
+ DoReadBuffer(pInfo, pData, outMessage, inLength);
+ outMsgLen = inLength;
+ pInfo->numberMessages--;
+ pInfo->numberBytes = pInfo->numberBytes - dwMsgSize - sizeof(DWORD);
+ }
+
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+ ReleaseAccess();
+ }
+
+#ifdef LOG_PERFORMANCE
+// char msg[200];
+// sprintf(msg, "GetNextMessage.outMsgLen = %d\n", outMsgLen);
+// LOGPERF(msg);
+ LOGPERF("GetNextMessage\n");
+#endif
+
+ TCDEBUGLOGS("CInputStream::GetNextMessage done\n");
+ TCDEBUGCLOSE();
+
+ return outMsgLen;
+}
+
+DWORD CInputStream::GetNextMessageSize()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::GetNextMessageSize clientId = %d this = %x\n", m_ClientID, this);
+
+ DWORD length = 0;
+
+ BOOL gotIt = WaitForAccess();
+ if (gotIt)
+ {
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+
+ if (pInfo->numberMessages > 0)
+ {
+ pInfo->bufferPeek = pInfo->bufferRead;
+ DoPeekBuffer(pInfo, pData, (BYTE*)&length, sizeof(DWORD));
+ }
+
+ ReleaseAccess();
+ }
+
+ TCDEBUGLOGA1("CInputStream::GetNextMessageSize length = %d\n", length);
+ TCDEBUGCLOSE();
+
+#ifdef LOG_PERFORMANCE
+// char msg[200];
+// sprintf(msg, "GetNextMessageSize.length = %d\n", length);
+// LOGPERF(msg);
+ LOGPERF("GetNextMessageSize\n");
+#endif
+ return length;
+}
+void CInputStream::GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetMessageSizes clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+ BOOL gotIt = WaitForAccess();
+ if (gotIt)
+ {
+
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+ pInputStreamInfo pInfo = GetInfoPtr();
+
+ DWORD numberToGet = inNumberMessages;
+ if (numberToGet > pInfo->numberMessages) numberToGet = pInfo->numberMessages;
+
+ if (numberToGet > 0)
+ {
+ pInfo->bufferPeek = pInfo->bufferRead;
+ for (DWORD i = 0; i < numberToGet; i++)
+ {
+ DWORD len = 0;
+ DoPeekBuffer(pInfo, pData, (BYTE*)&len, sizeof(DWORD));
+ outMessageSizes[i] = len;
+ IncrementPeekPosition(pInfo, len+sizeof(DWORD));
+ }
+ }
+
+ ReleaseAccess();
+ }
+
+ TCDEBUGLOGS("CInputStream::GetMessageSizes done\n");
+ TCDEBUGCLOSE();
+ LOGPERF("GetMessageSizes\n");
+}
+
+#ifdef TCF_CLIENT
+DWORD CInputStream::GetMessages(JNIEnv* env, long inNumberMessages, long inNumberMaxBytes, long& outNumberBytesRead, long& outNumberMessagesRead, jbyteArray outMessageData)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::GetMessages inNumberMaxBytes = %d inNumberMessages = %d\n", inNumberMaxBytes, inNumberMessages);
+
+ DWORD dwMsgSize = 0;
+ outNumberBytesRead = outNumberMessagesRead = 0;
+
+ BOOL gotIt = WaitForAccess();
+ if (gotIt)
+ {
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+
+ if (pInfo->numberMessages > 0)
+ {
+ if (inNumberMessages == 0 || (inNumberMessages > pInfo->numberMessages))
+ inNumberMessages = pInfo->numberMessages;
+ for (long i = 0; i < inNumberMessages; i++)
+ {
+ pInfo->bufferPeek = pInfo->bufferRead;
+ DoPeekBuffer(pInfo, pData, (BYTE*)&dwMsgSize, sizeof(DWORD));
+
+ if ((outNumberBytesRead + dwMsgSize) > inNumberMaxBytes)
+ break;
+
+ IncrementReadPosition(pInfo, sizeof(DWORD));
+ pInfo->numberBytes -= sizeof(DWORD);
+
+ DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+ if (lenToEnd > dwMsgSize)
+ lenToEnd = dwMsgSize;
+
+ if (lenToEnd > 0)
+ env->SetByteArrayRegion(outMessageData, outNumberBytesRead, lenToEnd, (jbyte*)&pData[pInfo->bufferRead]);
+
+ DWORD lenRemaining = dwMsgSize - lenToEnd;
+ if (lenRemaining > 0)
+ env->SetByteArrayRegion(outMessageData, outNumberBytesRead+lenToEnd, lenRemaining, (jbyte*)&pData[0]);
+
+ pInfo->bufferSize -= dwMsgSize;
+
+ IncrementReadPosition(pInfo, dwMsgSize);
+
+ outNumberBytesRead += dwMsgSize;
+ outNumberMessagesRead++;
+ pInfo->numberBytes -= dwMsgSize;
+ pInfo->numberMessages--;
+
+ if ((i % 500) == 0)
+ Sleep(1);
+ }
+ }
+ if (pInfo->numberBytes == 0)
+ {
+ pInfo->bufferRead = pInfo->bufferWrite = 0;
+ }
+ ReleaseAccess();
+ }
+
+#ifdef LOG_PERFORMANCE
+ char msg[200];
+ sprintf(msg, "GetMessages numMsgs = %d numByts = %d\n", outNumberMessagesRead, outNumberBytesRead);
+ LOGPERF(msg);
+#endif
+
+ TCDEBUGLOGA2("CInputStream::GetMessages outNumberBytesRead = %d outNumberMessagesRead = %d\n", outNumberBytesRead, outNumberMessagesRead);
+ TCDEBUGCLOSE();
+ return outNumberMessagesRead;
+}
+#endif // TCF_CLIENT
+
+void CInputStream::GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetTotalMessageSize clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+ outTotalSize = 0;
+ BOOL gotIt = WaitForAccess();
+ if (gotIt)
+ {
+
+ DWORD len = 0;
+
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+ pInputStreamInfo pInfo = GetInfoPtr();
+
+ DWORD numberToGet = inNumberMessages;
+ if (numberToGet > pInfo->numberMessages) numberToGet = pInfo->numberMessages;
+
+ if (numberToGet > 0)
+ {
+ TCDEBUGLOGA1("CInputStream::GetTotalMessageSize numberToGet = %d\n", numberToGet);
+ pInfo->bufferPeek = pInfo->bufferRead;
+ for (DWORD i = 0; i < numberToGet; i++)
+ {
+ DoPeekBuffer(pInfo, pData, (BYTE*)&len, sizeof(DWORD));
+ outTotalSize += len;
+ IncrementPeekPosition(pInfo, len+sizeof(DWORD));
+ }
+ }
+
+
+ ReleaseAccess();
+ }
+
+#ifdef LOG_PERFORMANCE
+// char msg[200];
+// sprintf(msg, "GetTotalMessageSize.outTotalSize = %d\n", outTotalSize);
+ LOGPERF("GetTotalMessageSize\n");
+#endif
+ TCDEBUGLOGA1("CInputStream::GetTotalMessageSize done = %d\n", outTotalSize);
+ TCDEBUGCLOSE();
+
+}
+
+#else // !USE_CIRCULAR_BUFFER
+
+long CInputStream::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::AddMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+ long err = TCAPI_ERR_NONE;
+
+ BOOL done = FALSE;
+ if (inLength == 0 || inMessage == NULL)
+ return TCAPI_ERR_NONE;
+
+ WaitForAccess();
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+
+ long nfile = pInfo->numberBytesInFile; // number bytes in file
+ long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile; // number bytes in buffer
+
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+ if (nfile > 0)
+ {
+ // we've already overflowed
+ // and we are using an overflow file
+ // so attempt to put message there
+ if ((nfile + inLength + sizeof(DWORD)) <= m_FileSize)
+ {
+ // room to put msg into file
+ BYTE* ptr = pFile;
+ ptr += nfile;
+ *(DWORD*)ptr = inLength;
+ ptr += sizeof(DWORD);
+ memcpy(ptr, inMessage, inLength);
+ pInfo->numberMessages++;
+ pInfo->numberMessagesInFile++;
+ pInfo->numberBytes += inLength + sizeof(DWORD);
+ pInfo->numberBytesInFile += inLength + sizeof(DWORD);
+ done = TRUE;
+ }
+ else
+ {
+ // we just lost a message
+ TCDEBUGLOGS("CInputStream::AddMessage file overflowed - msg lost\n");
+ err = TCAPI_ERR_INPUTSTREAM_FILE_OVERFLOW_MISSED_MSGS;
+ }
+ }
+ else // number of bytes in file == 0 ==> either not overflowed or not using file
+ {
+ // attempt to put message into buffer
+ if ((nbuffer + inLength + sizeof(DWORD)) <= m_BufferSize)
+ {
+ // room to put msg into buffer
+ BYTE* ptr = pData;
+ ptr += nbuffer;
+ *(DWORD*)ptr = inLength;
+ ptr += sizeof(DWORD);
+ memcpy(ptr, inMessage, inLength);
+ pInfo->numberMessages++;
+ pInfo->numberBytes += inLength + sizeof(DWORD);
+ done = TRUE;
+ }
+ else
+ {
+ // overflow to file?
+ if (m_File != NULL)
+ {
+ // room to put msg into file
+ BYTE* ptr = pFile;
+ ptr += nfile;
+ *(DWORD*)ptr = inLength;
+ ptr += sizeof(DWORD);
+ memcpy(ptr, inMessage, inLength);
+ pInfo->numberMessages++;
+ pInfo->numberMessagesInFile++;
+ pInfo->numberBytes += inLength + sizeof(DWORD);
+ pInfo->numberBytesInFile += inLength + sizeof(DWORD);
+ done = TRUE;
+ TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed to file\n");
+ LOGPERF("AddMessage buffer overflowed\n");
+ err = TCAPI_INFO_INPUTSTREAM_BUFFER_OVERFLOW_TO_FILE;
+ }
+ else
+ {
+ // we just lost a message
+ TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed and no file - msg lost\n");
+ err = TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS;
+ }
+ }
+ }
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+ TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+ LOGPERF("AddMessage\n");
+
+ ReleaseAccess();
+
+ TCDEBUGLOGA1("CInputStream::AddMessage err=%d\n", err);
+ TCDEBUGCLOSE();
+
+ return err;
+}
+DWORD CInputStream::GetNextMessage(DWORD inLength, BYTE* outMessage)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetNextMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+ BYTE* ptr, *ptrStart;
+ DWORD outMsgLen = 0;
+
+ WaitForAccess();
+
+ DWORD dwMsgSize = 0;
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+
+ ptr = ptrStart = pData;
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+ if (pInfo->numberBytes > 0)
+ {
+ // get 1 msg from buffer
+ dwMsgSize = *(DWORD*)pData;
+ TCDEBUGLOGA1("CInputStream::GetNextMessage 1st msg in buffer = %d\n", dwMsgSize);
+ ptr += sizeof(DWORD);
+ if (inLength > dwMsgSize)
+ inLength = dwMsgSize;
+
+ memcpy(outMessage, ptr, inLength);
+ outMsgLen = inLength;
+ ptr += dwMsgSize;
+
+ // move up rest of buffer msgs to beginning of buffer
+ long moveLen = m_BufferSize - dwMsgSize - sizeof(DWORD);
+// memcpy(ptrStart, ptr, moveLen);
+ TCDEBUGLOGA1("CInputStream::GetNextMessage move bytes up in buffer = %d\n", moveLen);
+
+ // adjust totals
+ pInfo->numberMessages--;
+ pInfo->numberBytes = pInfo->numberBytes - dwMsgSize - sizeof(DWORD);
+
+ // move next file message up to buffer
+ if (m_File != NULL)
+ {
+ // using file
+ if (pInfo->numberBytesInFile > 0)
+ {
+ // messages exist in file
+ dwMsgSize = *(DWORD*)pFile;
+ TCDEBUGLOGA1("CInputStream::GetNextMessage 1st msg in file = %d\n", dwMsgSize);
+ long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile; // number bytes in buffer
+ if ((nbuffer + dwMsgSize + sizeof(DWORD)) <= m_BufferSize)
+ {
+ // room in buffer - move to buffer
+ ptrStart = &pData[nbuffer];
+ moveLen = dwMsgSize + sizeof(DWORD);
+ memcpy(ptrStart, pFile, moveLen);
+ TCDEBUGLOGA1("CInputStream::GetNextMessage move from file to buffer = %d\n", moveLen);
+ LOGPERF("GetNextMessage move from file to buffer\n");
+
+ // adjust file totals
+ pInfo->numberMessagesInFile--;
+ pInfo->numberBytesInFile = pInfo->numberBytesInFile - moveLen;
+
+ // move msgs in file up
+ if (pInfo->numberMessagesInFile > 0)
+ {
+ ptr = &pFile[moveLen]; // new end
+ moveLen = pInfo->numberBytesInFile;
+ memcpy(pFile, ptr, moveLen);
+ TCDEBUGLOGA1("CInputStream::GetNextMessage move bytes up in file = %d\n", moveLen);
+ }
+ }
+ else
+ {
+ // no room in buffer for next file msg - leave it there
+ TCDEBUGLOGS("CInputStream::GetNextMessage no room in buffer for message in file - leave it there\n");
+ }
+ }
+ }
+ }
+
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages =%d numberBytes =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+ TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+ LOGPERF("GetNextMessage\n");
+
+ ReleaseAccess();
+
+ TCDEBUGLOGS("CInputStream::GetNextMessage done\n");
+ TCDEBUGCLOSE();
+
+ return outMsgLen;
+}
+DWORD CInputStream::GetNextMessageSize()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::GetNextMessageSize clientId = %d this = %x\n", m_ClientID, this);
+
+ DWORD length = 0;
+
+ WaitForAccess();
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+ pInputStreamData pData = GetDataPtr();
+
+ if (pInfo->numberMessages > 0)
+ {
+ BYTE* ptr = pData;
+ length = *(DWORD*)ptr;
+ }
+
+ ReleaseAccess();
+
+ TCDEBUGLOGA1("CInputStream::GetNextMessageSize length = %d\n", length);
+ TCDEBUGCLOSE();
+
+ LOGPERF("GetNextMessageSize\n");
+ return length;
+}
+void CInputStream::GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetMessageSizes clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+ WaitForAccess();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+ pInputStreamInfo pInfo = GetInfoPtr();
+
+ long ntotal = pInfo->numberMessages; // number of total messages (buffer + file)
+ long nfile = pInfo->numberMessagesInFile; // number of file messages
+ long nbuffer = ntotal - nfile; // number of buffer messages
+ long nreadtotal = min(ntotal, inNumberMessages); // number of total messages to read
+ long nreadbuffer = min(nbuffer, nreadtotal); // number of buffer messages to read
+ long nreadfile = nreadtotal - nreadbuffer; // number of file messages to read
+ TCDEBUGLOGA3("CInputStream::GetMessageSizes ntotal=%d nfile=%d nbuffer=%d\n", ntotal, nfile, nbuffer);
+ TCDEBUGLOGA3("CInputStream::GetMessageSizes nreadtotal=%d nreadfile=%d nreadbuffer=%d\n", nreadtotal, nreadfile, nreadbuffer);
+
+
+ if (nreadtotal > 0)
+ {
+ if (nreadbuffer > 0)
+ {
+ BYTE* ptr = pData;
+ DWORD prevSize = 0;
+ for (long i = 0; i < nreadbuffer; i++)
+ {
+ DWORD len = *(DWORD*)&ptr[prevSize];
+ outMessageSizes[i] = len;
+ prevSize += len + sizeof(DWORD);
+ }
+ }
+ if (nreadfile > 0)
+ {
+ BYTE* ptr = pFile;
+ DWORD prevSize = 0;
+ for (long i = 0; i < nreadfile; i++)
+ {
+ DWORD len = *(DWORD*)&ptr[prevSize];
+ outMessageSizes[nreadbuffer+i] = len;
+ prevSize += len + sizeof(DWORD);
+ }
+ }
+ }
+
+
+ ReleaseAccess();
+
+ TCDEBUGLOGS("CInputStream::GetMessageSizes done\n");
+ TCDEBUGCLOSE();
+ LOGPERF("GetMessageSizes\n");
+}
+
+void CInputStream::GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA3("CInputStream::GetTotalMessageSize clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+ WaitForAccess();
+ pInputStreamData pData = GetDataPtr();
+ pInputStreamFile pFile = GetFilePtr();
+ pInputStreamInfo pInfo = GetInfoPtr();
+
+ long ntotal = pInfo->numberMessages; // number of total messages (buffer + file)
+ long nfile = pInfo->numberMessagesInFile; // number of file messages
+ long nbuffer = ntotal - nfile; // number of buffer messages
+ long nreadtotal = min(ntotal, inNumberMessages); // number of total messages to read
+ long nreadbuffer = min(nbuffer, nreadtotal); // number of buffer messages to read
+ long nreadfile = nreadtotal - nreadbuffer; // number of file messages to read
+ TCDEBUGLOGA3("CInputStream::GetTotalMessageSize ntotal=%d nfile=%d nbuffer=%d\n", ntotal, nfile, nbuffer);
+ TCDEBUGLOGA3("CInputStream::GetTotalMessageSize nreadtotal=%d nreadfile=%d nreadbuffer=%d\n", nreadtotal, nreadfile, nreadbuffer);
+
+ outTotalSize = 0;
+
+ if (nreadtotal > 0)
+ {
+ if (nreadbuffer > 0)
+ {
+ BYTE* ptr = pData;
+ DWORD prevSize = 0;
+ for (long i = 0; i < nreadbuffer; i++)
+ {
+ DWORD len = *(DWORD*)&ptr[prevSize];
+ outTotalSize += len;
+ prevSize += len + sizeof(DWORD);
+ }
+ }
+ if (nreadfile > 0)
+ {
+ BYTE* ptr = pFile;
+ DWORD prevSize = 0;
+ for (long i = 0; i < nreadfile; i++)
+ {
+ DWORD len = *(DWORD*)&ptr[prevSize];
+ outTotalSize += len;
+ prevSize += len + sizeof(DWORD);
+ }
+ }
+ }
+
+
+ ReleaseAccess();
+
+ TCDEBUGLOGS("CInputStream::GetTotalMessageSize done\n");
+ TCDEBUGCLOSE();
+ LOGPERF("GetTotalMessageSize\n");
+}
+#endif // USE_CIRCULAR_BUFFER
+
+LONG CInputStream::GetNumberMessages()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CInputStream::GetNumberMessages clientId = %d this = %x\n", m_ClientID, this);
+
+ LONG number = 0;
+
+ WaitForAccess();
+
+ pInputStreamInfo pInfo = GetInfoPtr();
+
+ number = pInfo->numberMessages;
+
+ ReleaseAccess();
+
+ TCDEBUGLOGA1("CInputStream::GetNumberMessages number = %d\n", number);
+ TCDEBUGCLOSE();
+
+ LOGPERF("GetNumberMessages\n");
+ return number;
+}
+
+
+
+BOOL CInputStreamData::Init()
+{
+ if (IsCreator())
+ {
+ }
+ return TRUE;
+}
+BOOL CInputStreamInfo::Init()
+{
+ if (IsCreator())
+ {
+ pInputStreamInfo pInfo = (pInputStreamInfo)GetDataPtr();
+ pInfo->numberBytes = 0;
+ pInfo->numberMessages = 0;
+ pInfo->numberBytesInFile = 0;
+ pInfo->numberMessagesInFile = 0;
+#ifdef USE_CIRCULAR_BUFFER
+ pInfo->bufferRead = 0; // where to read from buffer
+ pInfo->bufferPeek = 0; // where to peek some data from buffer
+ pInfo->bufferWrite = 0; // where to write to buffer
+ pInfo->bufferSize = 0; // current size of buffer
+ pInfo->bufferCapacity = 0; // total capacity of buffer
+#endif
+ }
+ return TRUE;
+}
+
+// real file on disk (ie, not tied to swap file)
+void CInputStreamFile::SetClientId(long clientId)
+{
+ m_ClientID = clientId;
+}
+BOOL CInputStreamFile::Open(DWORD dwSize, CHAR* filePath)
+{
+ BOOL fOk = FALSE;
+
+ // first process (clients) will create and map file
+ // second process (server) will get an error on create, but will go ahead and map
+ m_hFile = CreateFile(
+ filePath,
+ GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ 0,
+ CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL|FILE_FLAG_DELETE_ON_CLOSE,
+ 0);
+
+ char mapname[80];
+ sprintf(mapname, "%s%d", INPUTSTREAMOVERFLOW_MAP_BASENAME, m_ClientID);
+ if (m_hFile != INVALID_HANDLE_VALUE)
+ {
+ // we got a good handle (we might have gotten an error, but create was successful)
+ // create a mapping to this file
+ fOk = CSharedData::Open(m_hFile, dwSize, mapname);
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CInputStreamFile::Open CreateFile successful\n");
+ TCDEBUGCLOSE();
+ }
+ else
+ {
+ // this causes the open to do an OpenFileMapping instead of a CreateFileMapping (file handle not needed in former)
+ fOk = CSharedData::Open(INVALID_HANDLE_VALUE, dwSize, mapname);
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CInputStreamFile::Open CreateFile failed\n");
+ TCDEBUGCLOSE();
+ }
+
+ return fOk;
+}
+
+CInputStreamFile::Close()
+{
+ // close all mapping handles
+ CSharedData::Close();
+
+ // close file
+ if (m_hFile != INVALID_HANDLE_VALUE)
+ {
+ CloseHandle(m_hFile);
+ m_hFile = INVALID_HANDLE_VALUE;
+ }
+}
+
+BOOL CInputStreamFile::Init()
+{
+ return TRUE;
+}
+
+#ifdef LOG_PERFORMANCE
+static void logPerf(char* msg)
+{
+ if (fpLog)
+ {
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ fprintf(fpLog,
+ "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+ sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+ msg);
+
+ numLogged++;
+ if ((numLogged % 1000) == 0)
+ fflush(fpLog);
+ }
+}
+static void openPerf()
+{
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ if (fpLog == NULL)
+ fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+ }
+ else
+ {
+ fpLog = NULL;
+ }
+}
+static void closePerf()
+{
+ if (fpLog)
+ {
+ fflush(fpLog);
+ fclose(fpLog);
+ }
+ fpLog = NULL;
+}
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/ServerClient.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include <time.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_SERVERCLIENT
+#if defined(LOG_SERVERCLIENT) && defined(_DEBUG)
+extern BOOL gDoLogging;
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CServerCommand::CServerCommand()
+{
+ // Server commands/responses
+ m_ServerCommandMutex.Open(SERVERCOMMANDDATA_MUTEX_NAME, SERVERCOMMANDDATA_MUTEX_TIMEOUT);
+ m_ServerCommandData.Open(SERVERCOMMANDDATA_MAP_SIZE, SERVERCOMMANDDATA_MAP_NAME);
+ m_ServerCommandData.Init();
+ m_ServerMessageData.Open(SERVERMESSAGEDATA_MAP_SIZE, SERVERMESSAGEDATA_MAP_NAME);
+ m_ServerMessageData.Init();
+
+ m_ServerProcessData.Open(SERVERPROCESSDATA_MAP_SIZE, SERVERPROCESSDATA_MAP_NAME);
+ m_ServerProcessData.Init();
+
+ // General server access
+ m_ServerPipeMutex.Open(SERVERPIPE_MUTEX_NAME, SERVERPIPE_MUTEX_TIMEOUT);
+
+ // command/response events
+ m_hServerCommandReadyEvent = ::CreateEvent(NULL, FALSE, FALSE, SERVER_COMMAND_READY_EVENTNAME);
+ m_hServerResponseReadyEvent = ::CreateEvent(NULL, FALSE, FALSE, SERVER_RESPONSE_READY_EVENTNAME);
+}
+
+CServerCommand::~CServerCommand()
+{
+ m_ServerCommandMutex.Close();
+ m_ServerCommandData.Close();
+ m_ServerMessageData.Close();
+
+ m_ServerProcessData.Close();
+
+ m_ServerPipeMutex.Close();
+
+ ::CloseHandle(m_hServerCommandReadyEvent);
+ ::CloseHandle(m_hServerResponseReadyEvent);
+
+}
+
+// Client methods
+BOOL CServerCommand::SendCommand(pServerCommandData pCmd, DWORD msgLength, BYTE* message)
+{
+ BOOL sent = FALSE;
+
+// if (pCmd == NULL) return sent;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerCommand::SendCommand\n");
+ TCDEBUGCLOSE();
+
+ WaitForServerCommandAccess();
+
+ pServerCommandData pData1 = GetDataPtr();
+
+ if (pCmd->command != eCmdNone)
+ {
+ memcpy(pData1, pCmd, sizeof(ServerCommandData));
+ if (msgLength > 0 && message != NULL)
+ {
+ pServerMessageData pData2 = GetMsgPtr();
+ pData2->length = msgLength;
+ if (msgLength > 0)
+ memcpy(pData2->message, message, msgLength);
+ }
+ pData1->response = eRspNone; // setup for response
+ sent = TRUE;
+ ::SetEvent(m_hServerCommandReadyEvent);
+ }
+
+ ReleaseServerCommandAccess();
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerCommand::SendCommand done\n");
+ TCDEBUGCLOSE();
+
+ return sent;
+}
+
+BOOL CServerCommand::GetResponse(pServerCommandData pRsp)
+{
+ BOOL found = FALSE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerCommand::GetResponse\n");
+ TCDEBUGCLOSE();
+
+ if (::WaitForSingleObject(m_hServerResponseReadyEvent, SERVER_CMDRSP_EVENT_TIMEOUT) == WAIT_OBJECT_0)
+ {
+ WaitForServerCommandAccess();
+ pServerCommandData pData = GetDataPtr();
+ if (pData->response != eRspNone)
+ {
+ // response is ready when command is cleared
+ memcpy(pRsp, pData, sizeof(ServerCommandData));
+ found = TRUE;
+ }
+ ReleaseServerCommandAccess();
+ }
+ else
+ {
+ TCDEBUGLOGS("CServerCommand::GetResponse timeout\n");
+ pRsp->response = eRspError;
+ pRsp->error = TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+ }
+#if (0)
+
+ BOOL timeoutoccurred = FALSE;
+ pServerCommandData pData = GetDataPtr();
+ time_t ctime = time(NULL);
+ time_t timeout = ctime + 60; // wait 60 seconds only
+
+// if (pRsp == NULL) return found;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2("CServerCommand::GetResponse time = %d timeout = %d\n", ctime, timeout);
+ TCDEBUGCLOSE();
+
+ while(!found && !timeoutoccurred)
+ {
+ WaitForServerCommandAccess();
+ if (pData->response != eRspNone)
+ {
+ // response is ready when command is cleared
+ memcpy(pRsp, pData, sizeof(ServerCommandData));
+ found = TRUE;
+ }
+ else
+ {
+ time_t ctime = time(NULL);
+ if (ctime >= timeout)
+ {
+ TCDEBUGLOGS("CServerCommand::GetResponse timeout\n");
+ pRsp->response = eRspError;
+ pRsp->error = TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+ timeoutoccurred = TRUE;
+ }
+ }
+ ReleaseServerCommandAccess();
+ Sleep(1);
+ }
+#endif
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("CServerCommand::GetResponse waiting for response found=%d\n", found);
+ TCDEBUGCLOSE();
+
+ return found;
+}
+// Server methods
+BOOL CServerCommand::GetCommand(pServerCommandData pCmd, pServerMessageData pMsg)
+{
+ BOOL found = FALSE;
+
+ if (::WaitForSingleObject(m_hServerCommandReadyEvent, SERVER_CMDRSP_EVENT_TIMEOUT) == WAIT_OBJECT_0)
+ {
+ pServerCommandData pData1 = GetDataPtr();
+
+ WaitForServerCommandAccess();
+ if (pData1->command != eCmdNone)
+ {
+ memcpy(pCmd, pData1, sizeof(ServerCommandData));
+ if (pMsg)
+ {
+ pServerMessageData pData2 = GetMsgPtr();
+ pMsg->length = pData2->length;
+ memcpy(pMsg->message, pData2->message, pData2->length);
+ }
+ found = TRUE;
+ }
+ ReleaseServerCommandAccess();
+ }
+
+ return found;
+}
+
+BOOL CServerCommand::SendResponse(pServerCommandData pRsp)
+{
+ BOOL sent = FALSE;
+ pServerCommandData pData = GetDataPtr();
+
+ WaitForServerCommandAccess();
+ if (pRsp->response != eRspNone)
+ {
+ memcpy(pData, pRsp, sizeof(ServerCommandData));
+ pData->command = eCmdNone; // setup for next command
+ sent = TRUE;
+ ::SetEvent(m_hServerResponseReadyEvent);
+ }
+
+ ReleaseServerCommandAccess();
+
+ return sent;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/TCDebugLog.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "TCDebugLog.h"
+
+TCDebugLog::TCDebugLog()
+{
+ m_fLog = NULL;
+}
+
+TCDebugLog::TCDebugLog(char* baseName, DWORD pid)
+{
+ m_fLog = NULL;
+ char name[30];
+ sprintf(name, "%sMutex%d", baseName, pid);
+ m_Mutex.Open(name, LOG_MUTEX_TIMEOUT);
+
+ sprintf(m_FileName, "c:\\tcf\\%s%d.txt", baseName, pid);
+ m_fLog = _fsopen(m_FileName, "at", _SH_DENYNO);
+}
+
+TCDebugLog::TCDebugLog(char* baseName, DWORD pid, DWORD timeout)
+{
+ m_fLog = NULL;
+ char name[30];
+ sprintf(name, "%sMutex%d", baseName, pid);
+ m_Mutex.Open(name, timeout);
+
+ sprintf(m_FileName, "c:\\tcf\\%s%d.txt", baseName, pid);
+ m_fLog = _fsopen(m_FileName, "at", _SH_DENYNO);
+
+#ifdef _DEBUG
+ FILE* f = fopen("c:\\tcf\\tcdebuglog.txt", "at");
+ fprintf(f, "name=%s m_FileName=%s\n", name, m_FileName);
+ fclose(f);
+#endif
+}
+TCDebugLog::~TCDebugLog()
+{
+ if (m_fLog)
+ {
+ fflush(m_fLog);
+ fclose(m_fLog);
+ m_fLog = NULL;
+ }
+ m_Mutex.Close();
+}
+
+void TCDebugLog::log(char* msg)
+{
+// WaitForAccess();
+
+ if (m_fLog)
+ {
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ fprintf(m_fLog,
+ "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+ sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+ msg);
+ fflush(m_fLog);
+ }
+// ReleaseAccess();
+}
+/*
+void TCDebugLog::log(char* msg, argType type1, void* arg1)
+{
+ switch(type1)
+ {
+ case eCHAR:
+ char t = *(char*)arg1;
+ break;
+ }
+}
+
+void TCDebugLog::log(char* msg, argType type1, void* arg1, argType type2, void* arg2)
+{
+}
+void TCDebugLog::log(char* msg, argType type1, void* arg1, argType type2, void* arg2, argType type3, void* arg3)
+{
+}
+*/
+void TCDebugLog::logTime()
+{
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ fprintf(m_fLog, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#ifdef TCF_SERVER
+//#define _LOG_DEBUG_MUTEX
+#else
+#endif
+BOOL TCDebugLog::WaitForAccess()
+{
+#ifdef _LOG_DEBUG_MUTEX
+ BOOL ok = m_Mutex.Wait();
+ if (ok == FALSE)
+ {
+ log("TCDebugLog::WaitForAccess failed\n");
+ }
+ else
+ {
+ log("TCDebugLog::WaitForAccess OK\n");
+ }
+ return ok;
+#else
+ return m_Mutex.Wait();
+#endif
+}
+
+BOOL TCDebugLog::ReleaseAccess()
+{
+#ifdef _LOG_DEBUG_MUTEX
+ BOOL ok = m_Mutex.Release();
+ if (ok == FALSE)
+ {
+ log("TCDebugLog::ReleaseAccess failed\n");
+ }
+ else
+ {
+ log("TCDebugLog::ReleaseAccess OK\n");
+ }
+ return ok;
+#else
+ return m_Mutex.Release();
+#endif
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/mutex.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "mutex.h"
+
+Mutex::Mutex()
+{
+ m_hMutex = NULL;
+ m_waitTimeout = 0L;
+ m_mutexOpen = FALSE;
+}
+Mutex::~Mutex()
+{
+ Close();
+}
+
+BOOL Mutex::Open(CHAR *mutexName, DWORD waitTimeout)
+{
+#ifdef WIN32
+ m_hMutex = ::CreateMutex(NULL, FALSE, mutexName);
+#else
+#error non Win32
+#endif
+ if (m_hMutex == NULL)
+ m_mutexOpen = FALSE;
+ else
+ {
+ m_mutexOpen = TRUE;
+ m_waitTimeout = waitTimeout;
+ }
+
+ return m_mutexOpen;
+}
+void Mutex::Close()
+{
+ if (m_mutexOpen)
+ {
+#ifdef WIN32
+ ::ReleaseMutex(m_hMutex);
+ ::CloseHandle(m_hMutex);
+#else
+#error non WIN32
+#endif
+ m_hMutex = NULL;
+ m_mutexOpen = FALSE;
+ }
+}
+BOOL Mutex::Wait()
+{
+#ifdef WIN32
+ DWORD dwWaitResult = ::WaitForSingleObject(m_hMutex, m_waitTimeout);
+ if (dwWaitResult == WAIT_OBJECT_0)
+ {
+ return TRUE;
+ }
+ return FALSE;
+#else
+#error non WIN32
+#endif
+}
+BOOL Mutex::Release()
+{
+ BOOL ret = FALSE;
+#ifdef WIN32
+ ret = ::ReleaseMutex(m_hMutex);
+#else
+#error non WIN32
+#endif
+
+ return ret;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/shareddata.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "shareddata.h"
+
+CSharedData::CSharedData()
+{
+ m_fCreator = FALSE;
+ m_hSharedData = NULL;
+ m_lpDataPtr = NULL;
+
+}
+CSharedData::~CSharedData()
+{
+ Close();
+}
+
+// open map backed by OS paging file
+BOOL
+CSharedData::Open(DWORD dwSize, CHAR* name)
+{
+ BOOL fOK = FALSE;
+ m_hSharedData = m_lpDataPtr = NULL;
+
+ m_hSharedData = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, dwSize, name);
+
+ m_fCreator = (GetLastError() != ERROR_ALREADY_EXISTS);
+ if (!m_fCreator)
+ {
+ // not creator, re-open using Open
+ CloseHandle(m_hSharedData);
+ m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+
+ }
+ if (m_hSharedData)
+ {
+ m_lpDataPtr = MapViewOfFile(m_hSharedData, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+ if (m_lpDataPtr == NULL)
+ {
+ CloseHandle(this->m_hSharedData);
+ m_hSharedData = NULL;
+ }
+ else
+ fOK = TRUE;
+ }
+ return fOK;
+}
+
+// open map backed by a real file handle
+BOOL
+CSharedData::Open(HANDLE hFile, DWORD dwSize, CHAR* name)
+{
+ BOOL fOK = FALSE;
+
+ m_hSharedData = m_lpDataPtr = NULL;
+
+ // if hFile is invalid do not create mapping - go directly to open mapping by name
+ if (hFile == INVALID_HANDLE_VALUE)
+ {
+ m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+ m_fCreator = FALSE;
+ }
+ else
+ {
+ m_hSharedData = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, name);
+ if (m_hSharedData == NULL) // failed
+ {
+ }
+ else
+ {
+ // succeeded
+ m_fCreator = (GetLastError() != ERROR_ALREADY_EXISTS);
+ if (!m_fCreator)
+ {
+ // not creator, re-open using Open
+ CloseHandle(m_hSharedData);
+ m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+ }
+ }
+
+ }
+ if (m_hSharedData)
+ {
+ m_lpDataPtr = MapViewOfFile(m_hSharedData, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+ if (m_lpDataPtr == NULL)
+ {
+ CloseHandle(m_hSharedData);
+ m_hSharedData = NULL;
+ }
+ else
+ fOK = TRUE;
+ }
+ return fOK;
+}
+CSharedData::Close()
+{
+ BOOL fIgnore = FALSE;
+
+ if (m_lpDataPtr != NULL)
+ {
+ fIgnore = UnmapViewOfFile(m_lpDataPtr);
+ m_lpDataPtr = NULL;
+ }
+
+ if (m_hSharedData != NULL)
+ {
+ fIgnore = CloseHandle(m_hSharedData);
+ m_hSharedData = NULL;
+ }
+}
+BOOL CSharedData::Init()
+{
+ // intended to be overridden
+ return TRUE;
+}
+
+LPVOID CSharedData::GetDataPtr()
+{
+ return m_lpDataPtr;
+}
+
+BOOL CSharedData::IsCreator()
+{
+ return m_fCreator;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ClientManager.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,836 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ClientManager.cpp: implementation of the CClientManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ClientManager.h"
+#include "TCErrorConstants.h"
+#include "resource.h"
+#include <stdio.h>
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+extern char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) if (gDoLogging) sprintf(TCDebugMsg,"%s", s); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) sprintf(TCDebugMsg, s, a1); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2, a3); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() if (gDoLogging) m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+#ifdef _DEBUG
+static char* GetErrorText(DWORD inError);
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CClientManager::CClientManager()
+{
+ m_Server = NULL;
+ m_StreamList = NULL;
+ m_ErrorMonitorList = NULL;
+ m_DebugLog = NULL;
+ m_DllLocation = NULL;
+ m_hServer = NULL;
+ m_hServerThread = NULL;
+ m_Version[0] = NULL;
+ m_ServerLockFile = NULL;
+ m_ServerExeFile = NULL;
+}
+CClientManager::CClientManager(HINSTANCE hinstDLL)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ m_DebugLog = new TCDebugLog("TCF_ClientLog", ::GetCurrentProcessId());
+ else
+ m_DebugLog = NULL;
+
+#else
+ m_DebugLog = NULL;
+#endif
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClientManager::CClientManager\n");
+
+ m_Server = new CServerCommand();
+
+ // lock server access (it might be running)
+ m_Server->WaitforServerPipeAccess();
+
+ m_StreamList = new InputStreamList();
+ m_StreamList->clear();
+
+ m_ErrorMonitorList = new ErrorMonitorList();
+ m_ErrorMonitorList->clear();
+
+ m_DllLocation = new char[MAX_DLLPATHNAME];
+ ::GetModuleFileName(hinstDLL, m_DllLocation, MAX_DLLPATHNAME);
+
+ char exeDirectory[MAX_DLLPATHNAME] = {0};
+ strncpy(exeDirectory, m_DllLocation, MAX_DLLPATHNAME);
+ size_t len = strlen(exeDirectory);
+ // remove file
+ for (int i = len-1; i > 0; i--)
+ {
+ if (exeDirectory[i] == PATH_DELIMITER)
+ break;
+ }
+ exeDirectory[i] = NULL;
+
+ m_ServerExeFile = new char[MAX_DLLPATHNAME];
+ sprintf(m_ServerExeFile, "\"%s%c%s\"", exeDirectory, PATH_DELIMITER, SERVER_PROCESS_NAME);
+
+ m_ServerLockFile = new char[MAX_DLLPATHNAME];
+ sprintf(m_ServerLockFile, "%s%c%s", exeDirectory, PATH_DELIMITER, SERVER_LOCKFILE_NAME);
+
+ char name[100];
+ sprintf(name, "%s%ld", ERRORMONITORLIST_MUTEX_BASENAME, ::GetCurrentProcessId());
+ m_ErrorMonitorListMutex.Open(name, ERRORMONITORLIST_MUTEX_TIMEOUT);
+
+ sprintf(name, "%s%ld", INPUTSTREAMLIST_MUTEX_BASENAME, ::GetCurrentProcessId());
+ m_StreamListMutex.Open(name, INPUTSTREAMLIST_MUTEX_TIMEOUT);
+
+ m_hServer = NULL;
+ m_hServerThread = NULL;
+
+ // release server access
+ m_Server->ReleaseServerPipeAccess();
+ int ret = ::LoadString(hinstDLL, IDS_VERSION, m_Version, MAX_VERSION_STRING);
+
+ TCDEBUGCLOSE();
+}
+
+CClientManager::~CClientManager()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClientManager::~CClientManager\n");
+ pServerProcessData pData = m_Server->GetProcessPtr();
+
+ if (m_Server)
+ {
+ delete m_Server;
+ m_Server = NULL;
+ }
+
+ WaitForStreamListAccess();
+ TCDEBUGLOGA1("CClientManager::~CClientManager: erasing stream list size=%d\n", InputStreamListSize());
+ if (m_StreamList)
+ {
+ InputStreamList::iterator iter;
+ for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+ {
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list next 1\n");
+// m_StreamList->erase(iter);
+ delete *iter;
+// TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list next 2\n");
+ }
+ m_StreamList->clear();
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list done 1\n");
+ delete m_StreamList;
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list done 2\n");
+ }
+ ReleaseStreamListAccess();
+ m_StreamListMutex.Close();
+
+ WaitForErrorMonitorListAccess();
+ TCDEBUGLOGA1("CClientManager::~CClientManager: erasing monitor list size=%d\n", ErrorMonitorListSize());
+ if (m_ErrorMonitorList)
+ {
+ ErrorMonitorList::iterator iter;
+ for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+ {
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list next 1\n");
+// m_ErrorMonitorList->erase(iter);
+ delete *iter;
+// TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list next 1\n");
+ }
+ m_ErrorMonitorList->clear();
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list done 1\n");
+ delete m_ErrorMonitorList;
+ TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list done 2\n");
+ }
+ ReleaseErrorMonitorListAccess();
+ m_ErrorMonitorListMutex.Close();
+
+ if (m_DllLocation)
+ {
+ delete[] m_DllLocation;
+ m_DllLocation = NULL;
+ }
+
+ if (m_ServerLockFile)
+ {
+ delete[] m_ServerLockFile;
+ m_ServerLockFile = NULL;
+ }
+
+ if (m_ServerExeFile)
+ {
+ delete[] m_ServerExeFile;
+ m_ServerExeFile = NULL;
+ }
+ TCDEBUGLOGS("CClientManager::~CClientManager: closing log\n");
+ TCDEBUGCLOSE();
+ if (m_DebugLog)
+ {
+ delete m_DebugLog;
+ m_DebugLog = NULL;
+ }
+}
+CErrorMonitor*
+CClientManager::FindErrorMonitor(long inClientId)
+{
+ CErrorMonitor* errorMonitor = NULL;
+ ErrorMonitorList::iterator iter;
+
+ for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+ {
+ if ((*iter)->IsThisClient(inClientId))
+ {
+ errorMonitor = *iter;
+ break;
+ }
+ }
+ return errorMonitor;
+}
+long CClientManager::ErrorMonitorListSize()
+{
+ long size = m_ErrorMonitorList->size();
+
+ return size;
+}
+void CClientManager::AddErrorMonitor(CErrorMonitor* monitor)
+{
+ m_ErrorMonitorList->push_back(monitor);
+}
+void CClientManager::RemoveErrorMonitor(CErrorMonitor* monitor)
+{
+ ErrorMonitorList::iterator iter;
+
+ for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+ {
+ if ((*iter)->IsThisClient(monitor->GetClientId()))
+ {
+ m_ErrorMonitorList->erase(iter);
+ break;
+ }
+ }
+}
+
+CInputStream*
+CClientManager::FindInputStream(long inClientId)
+{
+ CInputStream* inputStream = NULL;
+ InputStreamList::iterator iter;
+
+ for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+ {
+ if ((*iter)->IsThisClient(inClientId))
+// if ((*iter).IsThisClient(inClientId))
+ {
+ inputStream = *iter;
+// inputStream = iter;
+ break;
+ }
+ }
+ return inputStream;
+}
+long CClientManager::InputStreamListSize()
+{
+ long size = m_StreamList->size();
+
+ return size;
+}
+void CClientManager::AddInputStream(CInputStream* stream)
+{
+ m_StreamList->push_back(stream);
+// m_StreamList->push_back(*stream);
+
+}
+void CClientManager::RemoveInputStream(CInputStream* stream)
+{
+ InputStreamList::iterator iter;
+
+ for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+ {
+ if ((*iter)->IsThisClient(stream->GetClientId()))
+// if ((*iter).IsThisClient(stream->GetClientId()))
+ {
+ m_StreamList->erase(iter);
+ break;
+ }
+ }
+}
+
+BOOL CClientManager::StartServer(pServerProcessData pData)
+{
+ TCDEBUGLOGA1("CClientManager::StartServer numRefs = %d\n",pData->numRefs);
+
+ BOOL serverStarted = FALSE;
+ // server is ref counted
+ // refcount = 0 => server is not running
+ // refcount > 0 => server already started by some other process
+ if (pData->numRefs == 0)
+ {
+ // server not running
+ // get exe location
+ char exeLocation[MAX_DLLPATHNAME] = {0};
+ strncpy(exeLocation, m_DllLocation, MAX_DLLPATHNAME);
+ size_t len = strlen(exeLocation);
+ // remove file
+ for (int i = len-1; i > 0; i--)
+ {
+ if (exeLocation[i] == PATH_DELIMITER)
+ break;
+ }
+ exeLocation[i] = NULL;
+ char quotedLocation[MAX_DLLPATHNAME] = {0};
+ sprintf(quotedLocation, "\"%s%c%s\"", exeLocation, PATH_DELIMITER, SERVER_PROCESS_NAME);
+
+ TCDEBUGLOGA1(" exeLocation=%s\n", quotedLocation);
+
+ // create process
+ STARTUPINFO si;
+ memset(&si,0,sizeof(si));
+ si.cb = sizeof(si);
+ memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));
+ pData->serverProcess.hProcess = NULL;
+ if (!::CreateProcess(
+ NULL, // module location
+ quotedLocation, // command line
+ NULL, // process attributes
+ NULL, // thread attributes
+ FALSE, // inherit our handles
+ CREATE_NO_WINDOW, // no window
+ NULL, // use our environment
+ NULL, // user our current directory
+ &si, // startup info
+ &pData->serverProcess)) // process info
+ {
+ // TODO: error creating process
+ }
+ else
+ {
+ // we are the creator so save handles for later
+ m_hServer = pData->serverProcess.hProcess;
+ m_hServerThread = pData->serverProcess.hThread;
+ // add a refcount
+ pData->numRefs++;
+ serverStarted = TRUE;
+ }
+ }
+ else
+ {
+ // already running
+ // add a refcount and open our process handle to it
+ pData->numRefs++;
+ m_hServer = ::OpenProcess(0, FALSE, pData->serverProcess.dwProcessId);
+ serverStarted = TRUE;
+ }
+ TCDEBUGLOGA1("CClientManager::StartServer serverStarted=%d\n", serverStarted);
+ return serverStarted;
+}
+
+BOOL CClientManager::StopServer(pServerProcessData pData)
+{
+ TCDEBUGLOGS("CClientManager::StopServer\n");
+
+ BOOL serverStopped = FALSE;
+
+ if (pData->serverProcess.hProcess == NULL || pData->numRefs <= 0)
+ {
+ serverStopped = TRUE;
+ }
+ else
+ {
+ TCDEBUGLOGA1(" numRefs = %d\n",pData->numRefs);
+
+ // substract ref count
+ pData->numRefs--;
+ // if refcount == 0 then really stop the server process
+ if (pData->numRefs <= 0)
+ {
+ // last client process is closing
+ // tell server to exit
+ ServerCommandData cmdrsp;
+ cmdrsp.command = eCmdExit;
+ TCDEBUGLOGS(" SendCommand eCmdExit\n");
+ m_Server->SendCommand(&cmdrsp);
+ TCDEBUGLOGS(" GetResponse eExit\n");
+ m_Server->GetResponse(&cmdrsp);
+ // wait for process to exit
+ TCDEBUGLOGS(" WaitForSingleObject start\n");
+ WaitForSingleObject(m_hServer, 10000L /*INFINITE*/);
+ TCDEBUGLOGS(" WaitForSingleObject found\n");
+
+ if (m_hServer != NULL)
+ CloseHandle(m_hServer);
+
+ if (m_hServerThread != NULL)
+ CloseHandle(m_hServerThread);
+ }
+ else
+ {
+ // just close our handle to server process
+ if (m_hServer != NULL)
+ CloseHandle(m_hServer);
+
+ if (m_hServerThread != NULL)
+ CloseHandle(m_hServerThread);
+ }
+ }
+
+ TCDEBUGLOGS("CClientManager::StopServer end\n");
+ return TRUE;
+}
+long CClientManager::StartServer()
+{
+ long ret = TCAPI_ERR_NONE;
+ pServerProcessData pData = m_Server->GetProcessPtr();
+
+ TCDEBUGLOGA3("CClientManager::StartServer this = %x m_hServer = %x numRefs = %d\n", this, m_hServer, pData->numRefs);
+// TCDEBUGLOGA1(" mgrRefs = %d\n", m_MgrServerRef);
+
+ BOOL serverStarted = FALSE;
+ // server is ref counted
+ // refcount = 0 => server is not running
+ // refcount > 0 => server already started by some other process
+
+ // terminate the TCFServer if it is already running
+ TerminateServerThroughLockFile(pData);
+
+ if (pData->numRefs == 0)
+ {
+ // server not running
+ TCDEBUGLOGA1(" TCFServer exe =%s\n", m_ServerExeFile);
+ TCDEBUGLOGA1(" TCFServer lock=%s\n", m_ServerLockFile);
+
+
+ // create process
+ STARTUPINFO si;
+ memset(&si,0,sizeof(si));
+ si.cb = sizeof(si);
+ memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));
+ pData->serverProcess.hProcess = NULL;
+ if (!::CreateProcess(
+ NULL, // module location
+ m_ServerExeFile, // command line
+ NULL, // process attributes
+ NULL, // thread attributes
+ FALSE, // inherit our handles
+ CREATE_NO_WINDOW, // no window
+ NULL, // use our environment
+ NULL, // user our current directory
+ &si, // startup info
+ &pData->serverProcess)) // process info
+ {
+ // TODO: error creating process
+ }
+ else
+ {
+ // we are the creator so save handles for later
+ m_hServer = pData->serverProcess.hProcess;
+ m_hServerThread = pData->serverProcess.hThread;
+ // add a refcount
+ pData->numRefs++;
+ serverStarted = TRUE;
+ TCDEBUGLOGA3("CClientManager::StartServer created m_hServer = %x processId = %d numRefs = %d\n", m_hServer, pData->serverProcess.dwProcessId, pData->numRefs);
+
+ // create lock file and save process ID
+ TCDEBUGLOGS("CClientManager::StartServer CreateLockFile\n");
+ CreateLockFile(pData->serverProcess.dwProcessId);
+ }
+ }
+ else
+ {
+ // already running
+ // add a refcount and open our process handle to it only if we haven't opened it already
+ pData->numRefs++;
+ if (m_hServer == NULL)
+ m_hServer = ::OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pData->serverProcess.dwProcessId);
+ if (m_hServer == 0)
+ {
+ TCDEBUGLOGA1("CClientManager::StartServer opened m_hServer null error=%d\n", ::GetLastError());
+ }
+ m_hServerThread = NULL; // only creator gets real thread handle
+ serverStarted = TRUE;
+ TCDEBUGLOGA3("CClientManager::StartServer opened m_hServer = %x processId = %d numRefs = %d\n", m_hServer, pData->serverProcess.dwProcessId, pData->numRefs);
+ // save our process id to lock file
+ AppendToLockFile(pData->serverProcess.dwProcessId);
+ }
+ if (serverStarted)
+ m_ServerRunning = TRUE;
+
+ TCDEBUGLOGA1("CClientManager::StartServer end numRefs = %d\n", pData->numRefs);
+ return ret;
+}
+
+long CClientManager::StopServer()
+{
+ long ret = TCAPI_ERR_NONE;
+ pServerProcessData pData = m_Server->GetProcessPtr();
+
+ TCDEBUGLOGA3("CClientManager::StopServer this = %x m_hServer = %x numRefs = %d\n", this, m_hServer, pData->numRefs);
+
+ BOOL serverStopped = FALSE;
+
+ if (pData->serverProcess.hProcess == NULL || pData->numRefs <= 0)
+ {
+ TCDEBUGLOGS("CClientManager::StopServer hProcess NULL or numRefs <= 0\n");
+ serverStopped = TRUE;
+ }
+#if (0)
+ else if (m_hServer == NULL)
+ {
+ // we've already closed our handle to server
+ // don't close it again
+ TCDEBUGLOGS("CClientManager::StopServer m_hServer null\n");
+ }
+#endif
+ else
+ {
+ // substract ref count
+ pData->numRefs--;
+ if (pData->numRefs < 0) pData->numRefs = 0;
+ // if refcount == 0 then really stop the server process
+ if (pData->numRefs == 0)
+ {
+ // last client process is closing
+ // tell server to exit
+ ServerCommandData cmdrsp;
+ cmdrsp.command = eCmdExit;
+
+ TCDEBUGLOGS(" SendCommand eCmdExit\n");
+ m_Server->SendCommand(&cmdrsp);
+ TCDEBUGLOGS(" GetResponse eExit\n");
+ m_Server->GetResponse(&cmdrsp);
+
+ // wait for process to exit
+ TCDEBUGLOGS(" WaitForSingleObject start\n");
+ DWORD waitErr = ::WaitForSingleObject(m_hServer, 10000L /*INFINITE*/);
+ TCDEBUGLOGA1("CClientManager::StopServer WaitForSingleObject = %d\n", waitErr);
+
+ // now close our handle to server process
+ if (m_hServer != NULL)
+ {
+ CloseHandle(m_hServer);
+ m_hServer = NULL;
+ }
+
+ if (m_hServerThread != NULL)
+ {
+ CloseHandle(m_hServerThread);
+ m_hServerThread = NULL;
+ }
+ serverStopped = TRUE;
+
+ // delete lock file
+ TCDEBUGLOGS("CClientManager::StopServer DeleteLockFile\n");
+ DeleteLockFile();
+ }
+ else
+ {
+ // just close our handle to server process
+
+ if (m_hServer != NULL)
+ {
+ CloseHandle(m_hServer);
+ m_hServer = NULL;
+ }
+
+ if (m_hServerThread != NULL)
+ {
+ CloseHandle(m_hServerThread);
+ m_hServerThread = NULL;
+ }
+ DeleteFromLockFile(pData->serverProcess.dwProcessId);
+ }
+ }
+ if (serverStopped)
+ m_ServerRunning = FALSE;
+
+ TCDEBUGLOGA1("CClientManager::StopServer end numRefs = %d\n", pData->numRefs);
+ return ret;
+}
+
+BOOL CClientManager::IsServerRunning()
+{
+ pServerProcessData pData = m_Server->GetProcessPtr();
+ if (pData->serverProcess.hProcess != NULL)
+ return TRUE;
+ else
+ return FALSE;
+
+}
+
+void CClientManager::CreateLockFile(DWORD processId)
+{
+ if (m_ServerLockFile != NULL)
+ {
+ FILE* f = fopen(m_ServerLockFile, "wt");
+ TCDEBUGLOGA1("CClientManager::CreateLockFile f=%x\n", f);
+
+ if (f)
+ {
+ DWORD callingProcessId = ::GetCurrentProcessId();
+ TCDEBUGLOGA2("CClientManager::CreateLockFile callingProcessId=%d processId=%d\n", callingProcessId, processId);
+ fprintf(f, "%ld %ld\n", callingProcessId, processId);
+ fclose(f);
+ }
+ else
+ {
+ DWORD err = ::GetLastError();
+ TCDEBUGLOGA2("CClientManager::CreateLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+ }
+ }
+}
+void CClientManager::AppendToLockFile(DWORD processId)
+{
+ if (m_ServerLockFile != NULL)
+ {
+ FILE* f = fopen(m_ServerLockFile, "at");
+ TCDEBUGLOGA1("CClientManager::AppendToLockFile f=%x\n", f);
+
+ if (f)
+ {
+ DWORD callingProcessId = ::GetCurrentProcessId();
+ TCDEBUGLOGA2("CClientManager::AppendToLockFile callingProcessId=%d processId=%d\n", callingProcessId, processId);
+ fprintf(f, "%ld %ld\n", callingProcessId, processId);
+ fclose(f);
+ }
+ else
+ {
+ DWORD err = ::GetLastError();
+ TCDEBUGLOGA2("CClientManager::AppendToLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+ }
+ }
+}
+void CClientManager::DeleteLockFile()
+{
+ if (m_ServerLockFile != NULL)
+ {
+ TCDEBUGLOGS("CClientManager::DeleteLockFile\n");
+ ::remove(m_ServerLockFile);
+ }
+}
+
+void CClientManager::DeleteFromLockFile(DWORD serverProcessId)
+{
+ DWORD callingId[10];
+ DWORD serverId[10];
+ int numIds = 0;
+
+ DWORD ourProcessId = ::GetCurrentProcessId();
+
+ if (m_ServerLockFile != NULL)
+ {
+ DWORD attr = ::GetFileAttributes(m_ServerLockFile);
+ TCDEBUGLOGA1("CClientManager::DeleteFromLockFile attr=%x\n", attr);
+
+ if (attr != 0xffffffff) // error
+ {
+ // file exists
+ // read the process Ids from it
+
+ FILE *f = fopen(m_ServerLockFile, "rt");
+ TCDEBUGLOGA1("CClientManager::DeleteFromLockFile f=%x\n", f);
+ if (f)
+ {
+ BOOL done = FALSE;
+ while (!done)
+ {
+ DWORD cId = 0xffffffff;
+ DWORD sId = 0xffffffff;
+ int n = fscanf(f, "%ld %ld\n", &cId, &sId);
+ if (n == 2)
+ {
+ TCDEBUGLOGA3("CClientManager::DeleteFromLockFile numIds=%d sId=%d pId=%d\n", numIds, cId, sId);
+ if (cId != ourProcessId || sId != serverProcessId)
+ {
+ callingId[numIds] = cId;
+ serverId[numIds] = sId;
+ numIds++;
+ if (numIds > 9)
+ done = TRUE;
+ }
+ }
+ else
+ {
+ done = TRUE;
+ }
+ }
+ fclose(f);
+ }
+
+ // now rewrite lock file without us
+ ::remove(m_ServerLockFile);
+ if (numIds > 0)
+ {
+ f = fopen(m_ServerLockFile, "wt");
+ if (f)
+ {
+ for (int i = 0; i < numIds; i++)
+ {
+ fprintf(f, "%ld %ld\n", callingId[i], serverId[i]);
+ }
+ fclose(f);
+ }
+ }
+ }
+ }
+}
+
+// Currently assumes there is only ONE TCFServer, but multiple client processes (that use that server)
+// we should not have more than a few Carbide processes connecting to the same TCFServer
+void CClientManager::TerminateServerThroughLockFile(pServerProcessData pData)
+{
+ DWORD callingId[10];
+ DWORD serverId[10];
+ BOOL liveCaller[10];
+ int numIds = 0;
+ if (m_ServerLockFile != NULL)
+ {
+ DWORD attr = ::GetFileAttributes(m_ServerLockFile);
+ TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile attr=%x\n", attr);
+
+ if (attr != 0xffffffff) // error
+ {
+ // file exists
+ // read the process Ids from it
+
+ FILE *f = fopen(m_ServerLockFile, "rt");
+ TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile f=%x\n", f);
+ if (f)
+ {
+ BOOL done = FALSE;
+ while (!done)
+ {
+ DWORD cId = 0xffffffff;
+ DWORD sId = 0xffffffff;
+ int n = fscanf(f, "%ld %ld\n", &cId, &sId);
+ if (n == 2)
+ {
+ TCDEBUGLOGA3("CClientManager::TerminateServerThroughLockFile n=%d sId=%d pId=%d\n", n, cId, sId);
+ callingId[numIds] = cId;
+ serverId[numIds] = sId;
+ numIds++;
+ if (numIds > 9)
+ done = TRUE;
+ }
+ else
+ {
+ done = TRUE;
+ }
+ }
+ fclose(f);
+
+ int numDeadCallers = 0;
+ for (int i = 0; i < numIds; i++)
+ {
+ HANDLE h = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, callingId[i]);
+ if (h)
+ {
+ // calling process is still alive
+ liveCaller[i] = TRUE;
+ ::CloseHandle(h);
+ TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile %d alive\n", callingId[i]);
+ }
+ else
+ {
+ liveCaller[i] = FALSE;
+ numDeadCallers++;
+ DWORD err = ::GetLastError();
+ TCDEBUGLOGA3("CClientManager::TerminateServerThroughLockFile %d dead err=%d:%s\n", callingId[i], err, GetErrorText(err));
+ }
+ }
+ if (numDeadCallers == numIds)
+ {
+ // terminate the TCFServer, and delete lock file
+ pData->numRefs = 0;
+ ::remove(m_ServerLockFile);
+ HANDLE h = ::OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, serverId[0]);
+ if (h)
+ {
+ BOOL ret = ::TerminateProcess(h, -1);
+ if (ret == 0)
+ {
+ DWORD err = ::GetLastError();
+ TCDEBUGLOGA2("CClientManager::TerminateServerThroughLockFile TerminateProcess=%d:%s\n", err, GetErrorText(err));
+ }
+ ::CloseHandle(h);
+ }
+ }
+ else
+ {
+ // leave TCFServer running, recreate lock file and save live callers
+ ::remove(m_ServerLockFile);
+ f = fopen(m_ServerLockFile, "wt");
+ if (f)
+ {
+ for (int i = 0; i < numIds; i++)
+ {
+ if (liveCaller[i])
+ {
+ fprintf(f, "%ld %ld\n", callingId[i], serverId[i]);
+ }
+ }
+ fclose(f);
+ }
+ pData->numRefs -= numDeadCallers;
+ if (pData->numRefs < 0) pData->numRefs = 0;
+ }
+ }
+ else
+ {
+ // error opening lock file
+ DWORD err = ::GetLastError();
+ TCDEBUGLOGA2("CClientManager::TerminateServerThroughLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+ }
+ }
+ }
+}
+#ifdef _DEBUG
+static char* GetErrorText(DWORD inError)
+{
+ static char msg[256];
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ inError,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &msg,
+ sizeof(msg) - 1,
+ NULL);
+
+ return msg;
+}
+#else
+static char* GetErrorText(DWORD inError)
+{
+ return NULL;
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ClientManager.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ClientManager.h: interface for the CClientManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_)
+#define AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+#include <vector>
+#include <list>
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include "TCErrorConstants.h"
+#include "TCDebugLog.h"
+
+typedef std::vector<CInputStream*> InputStreamList;
+typedef std::vector<CErrorMonitor*> ErrorMonitorList;
+//typedef std::vector<CInputStream> InputStreamList;
+
+#define ERRORMONITORLIST_MUTEX_BASENAME "TCFErrorMonitorList"
+#define ERRORMONITORLIST_MUTEX_TIMEOUT (60000L)
+#define INPUTSTREAMLIST_MUTEX_BASENAME "TCFInputStreamList"
+#define INPUTSTREAMLIST_MUTEX_TIMEOUT (60000L)
+
+#ifdef WIN32
+#define SERVER_PROCESS_NAME "TCFServer.exe"
+#define SERVER_LOCKFILE_NAME "TCFServer.lock"
+#define PATH_DELIMITER '\\'
+#else
+#error not WIN32
+#endif
+
+#define MAX_DLLPATHNAME (2048)
+
+class CClientManager
+{
+public:
+ CClientManager();
+ CClientManager(HINSTANCE hinstDLL);
+ virtual ~CClientManager();
+
+ // starting/stopping server
+ BOOL StartServer(pServerProcessData pData);
+ BOOL StopServer(pServerProcessData pData);
+ long StartServer();
+ long StopServer();
+ BOOL IsServerRunning(); // { return m_ServerRunning; }
+ BOOL m_ServerRunning;
+ void TerminateServerThroughLockFile(pServerProcessData pData);
+ void CreateLockFile(DWORD processId);
+ void AppendToLockFile(DWORD processId);
+ void DeleteLockFile();
+ void DeleteFromLockFile(DWORD processId);
+
+ // input stream
+ CInputStream* FindInputStream(long inClientId);
+ long InputStreamListSize();
+ void RemoveInputStream(CInputStream* inputStream);
+ void AddInputStream(CInputStream* stream);
+ BOOL WaitForStreamListAccess() { return m_StreamListMutex.Wait(); }
+ BOOL ReleaseStreamListAccess() { return m_StreamListMutex.Release(); }
+ Mutex m_StreamListMutex;
+
+ // error monitors
+ CErrorMonitor* FindErrorMonitor(long inClientId);
+ long ErrorMonitorListSize();
+ void RemoveErrorMonitor(CErrorMonitor* errorMonitor);
+ void AddErrorMonitor(CErrorMonitor* monitor);
+ BOOL WaitForErrorMonitorListAccess() { return m_ErrorMonitorListMutex.Wait(); }
+ BOOL ReleaseErrorMonitorListAccess() { return m_ErrorMonitorListMutex.Release(); }
+ Mutex m_ErrorMonitorListMutex;
+
+ CServerCommand* m_Server;
+ TCDebugLog* m_DebugLog;
+ InputStreamList* m_StreamList;
+ ErrorMonitorList* m_ErrorMonitorList;
+ char* m_DllLocation;
+ HANDLE m_hServer; // our handle to the server process (per process)
+ HANDLE m_hServerThread; // handle to server main thread (creator process only)
+ char m_Version[MAX_VERSION_STRING]; // our version string
+
+ char* m_ServerLockFile; // TCFServer lock file name at the DLL location
+ char* m_ServerExeFile; // TCFServer exe
+
+};
+
+#endif // !defined(AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : TCFClient
+========================================================================
+
+
+AppWizard has created this TCFClient DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFClient application.
+
+TCFClient.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFClient.cpp
+ This is the main DLL source file.
+
+ When created, this DLL does not export any symbols. As a result, it
+ will not produce a .lib file when it is built. If you wish this project
+ to be a project dependency of some other project, you will either need to
+ add code to export some symbols from the DLL so that an export library
+ will be produced, or you can check the "doesn't produce lib" checkbox in
+ the Linker settings page for this project.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFClient.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFClient.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_)
+#define AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define TCF_CLIENT
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCAPIConnectionJni.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,1639 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "TCAPIConnectionJni.h"
+#include "TCConstants.h"
+#include "TCErrorConstants.h"
+#include "ClientManager.h"
+#include "ServerClient.h"
+#include "TCDebugLog.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include <list>
+#include <vector>
+
+extern CClientManager* gManager;
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+#ifdef _DEBUG
+FILE* fLog1 = NULL;
+FILE* fLog2 = NULL;
+static void OpenLogFile1(char* filename);
+static void CloseLogFile1();
+static void OpenLogFile2(char* filename);
+static void CloseLogFile2();
+#define OPENLOGf1(f) OpenLogFile1(f)
+#define CLOSELOG1() CloseLogFile1()
+#define OPENLOGf2(f) OpenLogFile2(f)
+#define CLOSELOG2() CloseLogFile2()
+#else
+#define OPENLOGf1(f)
+#define CLOSELOG1()
+#endif
+
+static void ConvertRealSerialSettingsToHost(char* pBaud, char* pDataBits, char* pParity, char* pStopBits, char* pFlowControl, pRealSerialConnectData pData);
+static void ConvertRealSerialSettingsToServer(const char* pBaud, const char* pDataBits, const char* pParity, const char* pStopBits, const char* pFlowControl, pRealSerialConnectData pData);
+static const char* GetErrorText(unsigned long error);
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeConnect
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;[JLjava/lang/String;[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeConnect
+ (JNIEnv *env, jobject pThis, jstring inType, jlongArray inOptions, jobjectArray inSettings, jlongArray inMessageOptions, jstring inFilePath, jlongArray outClientId)
+ {
+ // inOptions are connection options
+ // inMessageOptions are client's message options
+ // inFilePath will be null if message destination is not DESTINATION_CLIENTFILE
+ long ret = TCAPI_ERR_NONE;
+ unsigned long osError = 0;
+ long clientId;
+
+ TCDEBUGOPEN();
+
+ TCDEBUGLOGS("nativeConnect\n");
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ {
+ jboolean isCopy = false;
+ // options per connection
+ jlong* pOptions = env->GetLongArrayElements(inOptions, &isCopy);
+ DWORD retryInterval = (DWORD)pOptions[0];
+ DWORD retryTimeout = (DWORD)pOptions[1];
+
+
+
+ env->ReleaseLongArrayElements(inOptions, pOptions, 0);
+
+ pOptions = env->GetLongArrayElements(inMessageOptions, &isCopy);
+
+ // options per client
+ long unWrapFormat = pOptions[0];
+ long ostVersion = pOptions[1];
+ env->ReleaseLongArrayElements(inMessageOptions, pOptions, 0);
+
+
+ TCDEBUGLOGA2(" retryInterval=%d, retryTimeout=%d\n", retryInterval, retryTimeout);
+
+ TCDEBUGLOGA3(" unWrapFormat=%d, ostVersion=%d destination=%s\n", unWrapFormat, ostVersion, ((inFilePath == NULL) ? "stream" : "file"));
+
+ char* pType = (char*)env->GetStringUTFChars(inType, &isCopy);
+ TCDEBUGLOGA1(" pType = %s\n", pType);
+
+ if (strcmp(pType, "musti") == 0 || strcmp(pType, "platsim") == 0)
+ {
+ jstring addString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+ jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+ jstring chanString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+ jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 3);
+
+ const char* pAddress = env->GetStringUTFChars(addString, NULL);
+ const char* pPort = env->GetStringUTFChars(portString, NULL);
+ const char* pChan = env->GetStringUTFChars(chanString, NULL);
+ const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+ TCDEBUGLOGA2(" TCP: ipAddress=%s, ipPort=%s\n", pAddress, pPort);
+ TCDEBUGLOGA2(" TCP: channel=%s, decode=%s\n", pChan, pDecode);
+
+ ServerCommandData cmd;
+ cmd.command = eCmdConnect;
+ strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+ strncpy(cmd.connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+ strncpy(cmd.connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+ cmd.connectSettings.retryInterval = retryInterval;
+ cmd.connectSettings.retryTimeout = retryTimeout;
+ strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+
+ if (pChan != NULL)
+ {
+ if (strcmp(pChan, "1") == 0)
+ {
+ cmd.connectSettings.traceBoxChannel = 1;
+ }
+ else
+ {
+ cmd.connectSettings.traceBoxChannel = 2;
+ }
+ }
+ else
+ {
+ cmd.connectSettings.traceBoxChannel = 2;
+ }
+
+
+ cmd.clientOptions.unWrapFormat = unWrapFormat;
+ cmd.clientOptions.ostVersion = ostVersion;
+
+ gManager->m_Server->SendCommand(&cmd);
+ gManager->m_Server->GetResponse(&cmd);
+
+ if (cmd.response == eRspError)
+ {
+ TCDEBUGLOGA1(" from server: ret = %d\n", cmd.error);
+ ret = cmd.error;
+ osError = cmd.osError;
+ }
+ else
+ {
+ TCDEBUGLOGA1(" from server: id = %d\n", cmd.clientId);
+ clientId = cmd.clientId;
+
+ gManager->WaitForErrorMonitorListAccess();
+ TCDEBUGLOGS(" TODO: create error monitor storage if server connected\n");
+ CErrorMonitor* monitor = new CErrorMonitor(clientId);
+ if (monitor != NULL)
+ {
+ monitor->CreateData();
+ gManager->AddErrorMonitor(monitor);
+ }
+
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGA1(" clientId=%d\n", clientId);
+ jlong jClientId = clientId;
+ env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+
+ }
+ env->ReleaseStringUTFChars(addString, pAddress);
+ env->ReleaseStringUTFChars(portString, pPort);
+ env->ReleaseStringUTFChars(chanString, pChan);
+ env->ReleaseStringUTFChars(decodeString, pDecode);
+ }
+ else if (strcmp(pType, "tcp") == 0)
+ {
+ jstring addString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+ jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+ jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+
+ const char* pAddress = env->GetStringUTFChars(addString, NULL);
+ const char* pPort = env->GetStringUTFChars(portString, NULL);
+ const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+ TCDEBUGLOGA3(" TCP: ipAddress=%s, ipPort=%s decode=%s\n", pAddress, pPort, pDecode);
+
+ ServerCommandData cmd;
+ cmd.command = eCmdConnect;
+ strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+ strncpy(cmd.connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+ strncpy(cmd.connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+ cmd.connectSettings.retryInterval = retryInterval;
+ cmd.connectSettings.retryTimeout = retryTimeout;
+ strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+ cmd.clientOptions.unWrapFormat = unWrapFormat;
+ cmd.clientOptions.ostVersion = ostVersion;
+
+ gManager->m_Server->SendCommand(&cmd);
+ gManager->m_Server->GetResponse(&cmd);
+
+ if (cmd.response == eRspError)
+ {
+ TCDEBUGLOGA1(" from server: ret = %d\n", cmd.error);
+ ret = cmd.error;
+ osError = cmd.osError;
+ }
+ else
+ {
+ TCDEBUGLOGA1(" from server: id = %d\n", cmd.clientId);
+ clientId = cmd.clientId;
+
+ gManager->WaitForErrorMonitorListAccess();
+ TCDEBUGLOGS(" TODO: create error monitor storage if server connected\n");
+ CErrorMonitor* monitor = new CErrorMonitor(clientId);
+ if (monitor != NULL)
+ {
+ monitor->CreateData();
+ gManager->AddErrorMonitor(monitor);
+ }
+
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGA1(" clientId=%d\n", clientId);
+ jlong jClientId = clientId;
+ env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+
+ }
+ env->ReleaseStringUTFChars(addString, pAddress);
+ env->ReleaseStringUTFChars(portString, pPort);
+ env->ReleaseStringUTFChars(decodeString, pDecode);
+ }
+ else if (strcmp(pType, "virtualserial") == 0)
+ {
+ jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+ const char* pPort = env->GetStringUTFChars(portString, NULL);
+ jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+ const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+ TCDEBUGLOGA2(" vserial: pPort=%s decode=%s\n", pPort, pDecode);
+
+ ServerCommandData cmd;
+ cmd.command = eCmdConnect;
+ strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+ strncpy(cmd.connectSettings.virtualSerialSettings.comPort, pPort, MAX_COMPORT_SIZE);
+
+ cmd.connectSettings.retryInterval = retryInterval;
+ cmd.connectSettings.retryTimeout = retryTimeout;
+ strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+ cmd.clientOptions.unWrapFormat = unWrapFormat;
+ cmd.clientOptions.ostVersion = ostVersion;
+
+ gManager->m_Server->SendCommand(&cmd);
+ gManager->m_Server->GetResponse(&cmd);
+
+ if (cmd.response == eRspError)
+ {
+ TCDEBUGLOGA1(" from server: ret = %d\n", cmd.error);
+ ret = cmd.error;
+ osError = cmd.osError;
+ }
+ else
+ {
+ TCDEBUGLOGA1(" from server: id = %d\n", cmd.clientId);
+ clientId = cmd.clientId;
+
+ gManager->WaitForErrorMonitorListAccess();
+ CErrorMonitor* monitor = new CErrorMonitor(clientId);
+ if (monitor != NULL)
+ {
+ monitor->CreateData();
+ gManager->AddErrorMonitor(monitor);
+ }
+
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGA1(" clientId=%d\n", clientId);
+ jlong jClientId = clientId;
+ env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+ }
+ env->ReleaseStringUTFChars(portString, pPort);
+ env->ReleaseStringUTFChars(decodeString, pDecode);
+ }
+ else if (strcmp(pType, "serial") == 0)
+ {
+ jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+ const char* pPort = env->GetStringUTFChars(portString, NULL);
+
+ jstring baudString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+ const char* pBaud = env->GetStringUTFChars(baudString, NULL);
+
+ jstring dataBitsString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+ const char* pDataBits = env->GetStringUTFChars(dataBitsString, NULL);
+
+ jstring parityString = (jstring)env->GetObjectArrayElement(inSettings, 3);
+ const char* pParity = env->GetStringUTFChars(parityString, NULL);
+
+ jstring stopBitsString = (jstring)env->GetObjectArrayElement(inSettings, 4);
+ const char* pStopBits = env->GetStringUTFChars(stopBitsString, NULL);
+
+ jstring flowControlString = (jstring)env->GetObjectArrayElement(inSettings, 5);
+ const char* pFlowControl = env->GetStringUTFChars(flowControlString, NULL);
+
+ jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 6);
+ const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+ TCDEBUGLOGA3(" real serial: pPort=%s pBaud=%s pDataBits=%s\n", pPort, pBaud, pDataBits);
+
+ ServerCommandData cmd;
+ cmd.command = eCmdConnect;
+ strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+ strncpy(cmd.connectSettings.realSerialSettings.comPort, pPort, MAX_COMPORT_SIZE);
+ ConvertRealSerialSettingsToServer(pBaud, pDataBits, pParity, pStopBits, pFlowControl, &cmd.connectSettings.realSerialSettings);
+
+ cmd.connectSettings.retryInterval = retryInterval;
+ cmd.connectSettings.retryTimeout = retryTimeout;
+ strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+ cmd.clientOptions.unWrapFormat = unWrapFormat;
+ cmd.clientOptions.ostVersion = ostVersion;
+
+ gManager->m_Server->SendCommand(&cmd);
+ gManager->m_Server->GetResponse(&cmd);
+
+ if (cmd.response == eRspError)
+ {
+ TCDEBUGLOGA1(" from server: ret = %d\n", cmd.error);
+ ret = cmd.error;
+ osError = cmd.osError;
+ }
+ else
+ {
+ TCDEBUGLOGA1(" from server: id = %d\n", cmd.clientId);
+ clientId = cmd.clientId;
+
+ gManager->WaitForErrorMonitorListAccess();
+ CErrorMonitor* monitor = new CErrorMonitor(clientId);
+ if (monitor != NULL)
+ {
+ monitor->CreateData();
+ gManager->AddErrorMonitor(monitor);
+ }
+
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGA1(" clientId=%d\n", clientId);
+ jlong jClientId = clientId;
+ env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+ }
+ env->ReleaseStringUTFChars(portString, pPort);
+ env->ReleaseStringUTFChars(baudString, pBaud);
+ env->ReleaseStringUTFChars(dataBitsString, pDataBits);
+ env->ReleaseStringUTFChars(parityString, pParity);
+ env->ReleaseStringUTFChars(stopBitsString, pStopBits);
+ env->ReleaseStringUTFChars(flowControlString, pFlowControl);
+ env->ReleaseStringUTFChars(decodeString, pDecode);
+ }
+ else
+ {
+ TCDEBUGLOGS(" TCAPI_ERR_MEDIA_NOT_SUPPORTED\n");
+ ret = TCAPI_ERR_MEDIA_NOT_SUPPORTED;
+ }
+
+ env->ReleaseStringUTFChars(inType, pType);
+
+
+ // handle message destinations
+ // input stream is done by java on open input stream not here
+ // message file is done here
+ if (ret == TCAPI_ERR_NONE)
+ {
+ long destination = DESTINATION_INPUTSTREAM;
+ char* pMessageFile = NULL;
+ if (inFilePath != NULL)
+ {
+ destination = DESTINATION_CLIENTFILE;
+ jboolean isCopy=FALSE;
+ pMessageFile = (char*)env->GetStringUTFChars(inFilePath, &isCopy);
+
+ // send to TCFServer
+ ServerCommandData cmd;
+ cmd.command = eCmdOpenMessageFile;
+ cmd.clientId = clientId;
+ cmd.destinationOptions.destination = eDestinationFile;
+ strncpy(cmd.destinationOptions.destinationFile, pMessageFile, MAX_FILEPATH);
+ gManager->m_Server->SendCommand(&cmd);
+ gManager->m_Server->GetResponse(&cmd);
+
+ env->ReleaseStringUTFChars(inFilePath, pMessageFile);
+ }
+ }
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA3("nativeConnect return ret=%d, osError=%d : %s\n", ret, osError, GetErrorText(osError));
+
+ TCDEBUGCLOSE();
+
+ if (ret != TCAPI_ERR_NONE && osError > 0)
+ {
+ jclass clazz = env->FindClass("Ljava/lang/Exception;");
+ env->ThrowNew(clazz, GetErrorText(osError));
+ }
+
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeDisconnect
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeDisconnect
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeDisconnect\n");
+
+ if (gManager->m_Server == NULL)
+ {
+ TCDEBUGLOGS(" TCAPI_ERR_INVALID_HANDLE - gServer NULL\n");
+ ret = TCAPI_ERR_INVALID_HANDLE;
+ }
+ else if (inClientId <= 0)
+ {
+ TCDEBUGLOGS(" TCAPI_ERR_INVALID_HANDLE - inClientId <= 0\n");
+ ret = TCAPI_ERR_INVALID_HANDLE;
+ }
+ else
+ {
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ BOOL found = FALSE;
+ long id = inClientId;
+
+ TCDEBUGLOGA1(" look for clientId=%d\n", id);
+
+ TCDEBUGLOGS(" TODO: tell server to disconnect this client\n");
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdDisconnect;
+ pCmdrsp->clientId = id;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ {
+ gManager->WaitForErrorMonitorListAccess();
+ TCDEBUGLOGS(" TODO: destroy error monitor for this client\n");
+ CErrorMonitor *monitor = gManager->FindErrorMonitor(id);
+ if (monitor != NULL)
+ {
+ gManager->RemoveErrorMonitor(monitor);
+ delete monitor;
+ }
+ gManager->ReleaseErrorMonitorListAccess();
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+ }
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetNumberConnections
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberConnections
+ (JNIEnv *env, jobject pThis, jlongArray outNumber)
+{
+ long ret = TCAPI_ERR_NONE;
+ long number = 0;
+
+ TCDEBUGOPEN();
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS("nativeGetNumberConnections\n");
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdGetNumberConnections;
+
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ else
+ {
+ number = pCmdrsp->numConnections;
+
+ jlong jNumber = number;
+ env->SetLongArrayRegion(outNumber, 0, 1, &jNumber);
+
+ TCDEBUGLOGA1(" number=%d\n", number);
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetTypeOfConnection
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetTypeOfConnection
+ (JNIEnv *env, jobject pThis, jlong inIndex, jobjectArray outType)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS("nativeGetTypeOfConnection\n");
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdGetConnectionType;
+ pCmdrsp->index = inIndex;
+
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ else
+ {
+ env->SetObjectArrayElement(outType, 0, env->NewStringUTF(pCmdrsp->connectSettings.connectType));
+ }
+
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetConnectionSettings
+ * Signature: (J[Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetConnectionSettings
+ (JNIEnv *env, jobject pThis, jlong inIndex, jobjectArray outType, jlongArray outOptions, jobjectArray outSettings)
+{
+ long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+ TCDEBUGOPEN();
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS("nativeGetConnectionSettings\n");
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdGetConnection;
+ pCmdrsp->index = inIndex;
+
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ else
+ {
+ env->SetObjectArrayElement(outType, 0, env->NewStringUTF(pCmdrsp->connectSettings.connectType));
+ if (strcmp(pCmdrsp->connectSettings.connectType, "musti") == 0 || strcmp(pCmdrsp->connectSettings.connectType, "platsim") == 0)
+ {
+ env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipAddress));
+ env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipPort));
+ char *pChan = NULL;
+ if (pCmdrsp->connectSettings.traceBoxChannel == 1)
+ pChan = "1";
+ else
+ pChan = "2";
+ env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(pChan));
+ env->SetObjectArrayElement(outSettings, 3, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+ }
+ else if (strcmp(pCmdrsp->connectSettings.connectType, "tcp") == 0)
+ {
+ env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipAddress));
+ env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipPort));
+ env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+ }
+ else if (strcmp(pCmdrsp->connectSettings.connectType, "virtualserial") == 0)
+ {
+ env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.virtualSerialSettings.comPort));
+ env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+ }
+ else if (strcmp(pCmdrsp->connectSettings.connectType, "serial") == 0)
+ {
+ env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.realSerialSettings.comPort));
+
+ char baud[10], databits[10], parity[10], stopbits[10], flowcontrol[15];
+ ConvertRealSerialSettingsToHost(baud, databits, parity, stopbits, flowcontrol, &pCmdrsp->connectSettings.realSerialSettings);
+ env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(baud));
+ env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(databits));
+ env->SetObjectArrayElement(outSettings, 3, env->NewStringUTF(parity));
+ env->SetObjectArrayElement(outSettings, 4, env->NewStringUTF(stopbits));
+ env->SetObjectArrayElement(outSettings, 5, env->NewStringUTF(flowcontrol));
+ env->SetObjectArrayElement(outSettings, 6, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+ }
+ else if (strcmp(pCmdrsp->connectSettings.connectType, "usb") == 0)
+ {
+ env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.usbSettings.device));
+ }
+ jlong jRetryInterval = pCmdrsp->connectSettings.retryInterval;
+ env->SetLongArrayRegion(outOptions, 0, 1, &jRetryInterval);
+ jlong jRetryTimeout = pCmdrsp->connectSettings.retryTimeout;
+ env->SetLongArrayRegion(outOptions, 1, 1, &jRetryTimeout);
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollError
+ * Signature: (J[I[Z[J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollError
+ (JNIEnv *env, jobject pThis, jlong inClientId, jintArray outErrorCode,
+ jbooleanArray outHasOSErrorCode, jlongArray outOSErrorCode)
+{
+ jboolean foundError = false;
+ long id = inClientId;
+ LONG tcfError = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativePollError\n");
+// TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->WaitForErrorMonitorListAccess();
+
+ if (gManager->ErrorMonitorListSize() > 0)
+ {
+// TCDEBUGLOGA1(" size of gManager->ErrorMonitorListSize=%d\n", gManager->ErrorMonitorListSize());
+
+ CErrorMonitor* errorMonitor = gManager->FindErrorMonitor(id);
+// TCDEBUGLOGA1(" errorMonitor = %x\n", errorMonitor);
+
+ if (errorMonitor != NULL)
+ {
+// TCDEBUGLOGS(" found client\n");
+
+ BOOL osErrorUsed = FALSE;
+ DWORD osError = 0;
+ BOOL found = errorMonitor->GetError(&tcfError, &osErrorUsed, &osError);
+ if (found)
+ {
+// TCDEBUGLOGA1("nativePollError error for client=%d\n", inClientId);
+// TCDEBUGLOGA3(" found tcfError=%d, osErrorUsed=%d, osError=%d\n",
+// tcfError, osErrorUsed, osError);
+
+ foundError = true;
+ jint jval = tcfError;
+ env->SetIntArrayRegion(outErrorCode, 0, 1, &jval);
+ jboolean jos = osErrorUsed;
+ env->SetBooleanArrayRegion(outHasOSErrorCode, 0, 1, &jos);
+ jlong jlval = osError;
+ env->SetLongArrayRegion(outOSErrorCode, 0, 1, &jlval);
+
+// TCDEBUGOPEN();
+// TCDEBUGLOGS("nativePollError found error\n");
+// TCDEBUGCLOSE();
+ }
+ }
+ }
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGA2(" return foundError=%d tcfError=%d\n", foundError, tcfError);
+
+ TCDEBUGCLOSE();
+ return foundError;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetNumberVersionEntities
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberVersionEntities
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long number = 0;
+ long id = inClientId;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeGetNumberVersionEntities\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ // eCmdGetNumberVersions
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdGetNumberVersions;
+ pCmdrsp->clientId = id;
+
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ }
+ else
+ {
+ number = pCmdrsp->number + 1; // + 1 for DLL version
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" numberVersions = %d\n", number);
+ TCDEBUGCLOSE();
+ return number;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetVersion
+ * Signature: (JJ[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetVersion
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumToGet, jobjectArray outVersion)
+{
+ long ret = TCAPI_ERR_NONE;
+ long id = inClientId;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeGetVersion\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ // eCmdGetVersion
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdGetVersion;
+ pCmdrsp->clientId = id;
+
+
+ // index = 0 ==> TCFClient.dll version
+ env->SetObjectArrayElement(outVersion, 0, env->NewStringUTF(gManager->m_Version));
+ long numberGot = 1;
+
+ if (inNumToGet > 0)
+ {
+ // index = 1 ==> TCFServer.exe version
+ pCmdrsp->command = eCmdGetVersion;
+ pCmdrsp->clientId = id;
+ pCmdrsp->index = 1;
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspOK)
+ {
+ env->SetObjectArrayElement(outVersion, 1, env->NewStringUTF(pCmdrsp->version));
+ numberGot++;
+
+ if (inNumToGet > 1)
+ {
+ // index = 2 ==> connection version
+ pCmdrsp->command = eCmdGetVersion;
+ pCmdrsp->clientId = id;
+ pCmdrsp->index = 2;
+ BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+ BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspOK)
+ {
+ env->SetObjectArrayElement(outVersion, 2, env->NewStringUTF(pCmdrsp->version));
+ numberGot++;
+ }
+ }
+ }
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return numberGot=%d\n", numberGot);
+ TCDEBUGCLOSE();
+ return numberGot;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollInputStream
+ * Signature: (J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlongArray outNumberMessages)
+{
+ long ret = TCAPI_ERR_NONE;
+ long number = 0;
+ long id = inClientId;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativePollInputStream\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ TCDEBUGLOGS(" TODO: get number from client's input stream\n");
+
+ gManager->WaitForStreamListAccess();
+
+ CInputStream* inputStream = gManager->FindInputStream(id);
+
+ if (inputStream != NULL)
+ {
+ TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+ number = inputStream->GetNumberMessages();
+ }
+
+ gManager->ReleaseStreamListAccess();
+ jlong jNumber = number;
+ env->SetLongArrayRegion(outNumberMessages, 0, 1, &jNumber);
+
+ TCDEBUGLOGA2(" numberMessages=%d ret=%d\n", number, ret);
+
+ TCDEBUGCLOSE();
+ return ret;
+}
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollInputStream2
+ * Signature: (JJ[J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream2
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessagesToPeek, jlongArray outNumberMessagesPeeked, jlongArray outNumberBytesPeeked)
+{
+ long ret = TCAPI_ERR_NONE;
+ long id = inClientId;
+ long numberToGet = inNumberMessagesToPeek;
+ long numberStored = 0;
+ DWORD numberBytes = 0;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativePollInputStream2\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->WaitForStreamListAccess();
+
+ CInputStream* inputStream = gManager->FindInputStream(id);
+
+ if (inputStream != NULL)
+ {
+ TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+ numberStored = inputStream->GetNumberMessages();
+
+ if ((numberToGet == 0) || (numberToGet > numberStored))
+ {
+ numberToGet = numberStored;
+ }
+ if (numberToGet > 0)
+ {
+ inputStream->GetTotalMessageSize(numberToGet, numberBytes);
+ }
+ }
+
+ gManager->ReleaseStreamListAccess();
+
+ jlong jNumber = numberToGet;
+ env->SetLongArrayRegion(outNumberMessagesPeeked, 0, 1, &jNumber);
+ jNumber = numberBytes;
+ env->SetLongArrayRegion(outNumberBytesPeeked, 0, 1, &jNumber);
+
+ TCDEBUGLOGA3(" numberMessages=%d numberBytes=%d ret=%d\n", numberToGet, numberBytes, ret);
+
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetInputStreamMessageBytes
+ * Signature: (JJ[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetInputStreamMessageBytes
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessages, jlongArray outMessageSizes)
+{
+ long ret = TCAPI_ERR_NONE;
+ long id = inClientId;
+ long numberToGet = inNumberMessages;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeGetInputStreamMessageBytes\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->WaitForStreamListAccess();
+
+ CInputStream* inputStream = gManager->FindInputStream(id);
+
+ if (inputStream != NULL)
+ {
+ TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+ DWORD* pSizes = new DWORD[numberToGet];
+ inputStream->GetMessageSizes(numberToGet, pSizes);
+ for (int i = 0; i < numberToGet; i++)
+ {
+ TCDEBUGLOGA2(" -- message size[%d] = %d\n", i, pSizes[i]);
+ jlong jsize = pSizes[i];
+ env->SetLongArrayRegion(outMessageSizes, i, 1, &jsize);
+ }
+ delete[] pSizes;
+ }
+
+ gManager->ReleaseStreamListAccess();
+
+ TCDEBUGLOGA1("nativeGetInputStreamMessageBytes ret=%d\n", ret);
+
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeReadInputStream
+ * Signature: (JJ[J[JJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeReadInputStream
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessages, jlongArray outNumberMessages, jlongArray outNumberBytesRead, jlong inNumberMaxBytes, jbyteArray outMessageData)
+{
+ long ret = TCAPI_ERR_NONE;
+ long id = inClientId;
+ long numberToGet = inNumberMessages;
+ long numberMaxBytes = inNumberMaxBytes;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeReadInputStream start\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->WaitForStreamListAccess();
+
+ CInputStream* inputStream = gManager->FindInputStream(id);
+ if (inputStream != NULL)
+ {
+ long numberBytesRead = 0;
+ long numberMessagesRead = 0;
+#if (0)
+ DWORD mSize = 0;
+ DWORD outOffset = 0;
+ BYTE* pData = new BYTE[64*1024];
+ for (int i = 0; i < numberToGet; i++)
+ {
+ TCDEBUGLOGS("nativeReadInputStream 1\n");
+ mSize = inputStream->GetNextMessageSize();
+ if ((numberBytesRead + mSize) > numberMaxBytes)
+ break;
+ if (mSize != 0)
+ {
+ mSize = inputStream->GetNextMessage(mSize, pData);
+ TCDEBUGLOGA3("outOffset = %d mSize = %d pData[0] = %02.2x\n", outOffset, mSize, pData[0]);
+ jbyte* pByte = (jbyte*)pData;
+ env->SetByteArrayRegion(outMessageData, outOffset, mSize, pByte);
+ outOffset += mSize;
+ numberBytesRead += mSize;
+ numberMessagesRead++;
+
+ if ((i % 500) == 0)
+ Sleep(1);
+ }
+ }
+ delete [] pData;
+#endif
+ numberMessagesRead = inputStream->GetMessages(env, numberToGet, numberMaxBytes, numberBytesRead, numberMessagesRead, outMessageData);
+ jlong jMsgs = numberMessagesRead;
+ env->SetLongArrayRegion(outNumberMessages, 0, 1, &jMsgs);
+ jlong jNum = numberBytesRead;
+ env->SetLongArrayRegion(outNumberBytesRead, 0, 1, &jNum);
+
+ TCDEBUGLOGS("nativeReadInputStream 2\n");
+ }
+
+ gManager->ReleaseStreamListAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeOpenInputStream
+ * Signature: (JLjava/lang/String;JZ)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeOpenInputStream
+ (JNIEnv *env, jobject pThis, jlong inClientId, jstring inFileBaseName, jlong inStreamSize, jboolean inOverflowToFile)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeOpenInputStream\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+ TCDEBUGLOGA1(" inFileBaseName=%x\n", inFileBaseName);
+ TCDEBUGLOGA1(" inStreamSize=%d\n", inStreamSize);
+ TCDEBUGLOGA1(" inOverflowToFile=%d\n", inOverflowToFile);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+ gManager->WaitForStreamListAccess();
+
+ char* pFileName = NULL;
+
+ if (inFileBaseName != NULL)
+ {
+ TCDEBUGLOGS("nativeOpenInputStream GetStringUTFChars on inFileBaseName\n");
+ jboolean isCopy=FALSE;
+ pFileName = (char*)env->GetStringUTFChars(inFileBaseName, &isCopy);
+ TCDEBUGLOGS("nativeOpenInputStream return GetStringUTFChars\n");
+ TCDEBUGLOGA1(" pFileName=%x\n", pFileName);
+// if (pFileName != NULL)
+// {
+// TCDEBUGLOGA1(" pFileName=%s\n", pFileName);
+// }
+ }
+ else
+ {
+ TCDEBUGLOGS("nativeOpenInputStream inFileBaseName == NULL\n");
+ }
+
+
+ TCDEBUGLOGS("nativeOpenInputStream continue after GetStringUTFChars\n");
+ DWORD streamSize = inStreamSize;
+ TCDEBUGLOGA1(" streamSize=%d\n", streamSize);
+
+ BOOL overflowOption = FALSE;
+ TCDEBUGLOGA1(" overflowOption=%d\n", overflowOption);
+
+ long id = inClientId;
+
+ TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+ // create stream
+ CInputStream* stream = new CInputStream(pFileName, streamSize, overflowOption, id);
+ stream->CreateStream();
+ gManager->AddInputStream(stream);
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdOpenStream;
+ pCmdrsp->clientId = id;
+ pCmdrsp->destinationOptions.destination = eDestinationInputStream;
+ pCmdrsp->destinationOptions.streamSize = streamSize;
+ pCmdrsp->destinationOptions.overFlowToFile = FALSE;
+ if (pFileName != NULL)
+ {
+ strncpy(pCmdrsp->destinationOptions.destinationFile, pFileName, MAX_FILEPATH);
+ }
+ else
+ {
+ pCmdrsp->destinationOptions.destinationFile[0] = NULL;
+ }
+ if (inFileBaseName != NULL)
+ {
+ TCDEBUGLOGS("nativeOpenInputStream ReleaseStringUTFChars on inFileBaseName\n");
+ env->ReleaseStringUTFChars(inFileBaseName, pFileName);
+ }
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+ gManager->ReleaseStreamListAccess();
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeCloseInputStream
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeCloseInputStream
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeCloseInputStream\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+ gManager->WaitForStreamListAccess();
+
+ long id = inClientId;
+
+ TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+ TCDEBUGLOGS(" TODO: tell server to close this stream\n");
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdCloseStream;
+ pCmdrsp->clientId = id;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ CInputStream* inputStream = gManager->FindInputStream(id);
+ if (inputStream != NULL)
+ {
+ TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+ gManager->RemoveInputStream(inputStream);
+ delete inputStream;
+ }
+
+ TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+ gManager->ReleaseStreamListAccess();
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeSetMessageIds
+ * Signature: (J[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSetMessageIds
+ (JNIEnv *env, jobject pThis, jlong inClientId, jbyteArray inIds)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeSetMessageIds\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdSetMessageIds;
+ pCmdrsp->clientId = inClientId;
+ jsize numberIds = env->GetArrayLength(inIds);
+ pCmdrsp->number = numberIds;
+ jboolean isCopy = FALSE;
+ jbyte* bytes = env->GetByteArrayElements(inIds, &isCopy);
+ for (int i = 0; i < numberIds; i++)
+ {
+ pCmdrsp->messageIds[i] = bytes[i];
+ TCDEBUGLOGA1(" -- msgId = 0x%02.2X\n", pCmdrsp->messageIds[i]);
+ }
+ env->ReleaseByteArrayElements(inIds, bytes, 0);
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeClearFile
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeClearFile
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ long id = inClientId;
+
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+ pCmdrsp->command = eCmdClearMessageFile;
+ pCmdrsp->clientId = id;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeSendMessage
+ * Signature: (J[J[Ljava/lang/String;[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSendMessage
+ (JNIEnv *env, jobject pThis, jlong inClientId, jlongArray inFormattingOptions, jobjectArray inSettings, jbyteArray inMessage)
+{
+ long ret = TCAPI_ERR_NONE;
+ unsigned long osError = 0;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeSendMessage\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ jboolean isCopy = false;
+ // formatting options
+ jlong* pOptions = env->GetLongArrayElements(inFormattingOptions, &isCopy);
+// long encodeFormat = (long)pOptions[0]; // not used
+ long encodeOption = (long)pOptions[1]; // formatting option for protocol
+ long protocolVersion = (long)pOptions[2]; // OST version byte to use if protocol is OST
+ BYTE myId = (BYTE)(pOptions[3] & 0xff); // my message ID to use of adding protocol
+ BOOL useMyId = (pOptions[4] == 1) ? TRUE : FALSE; // use my ID or not
+ env->ReleaseLongArrayElements(inFormattingOptions, pOptions, 0);
+
+ jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+ const char* pDecode = env->GetStringUTFChars(decodeString, NULL); // not used
+ env->ReleaseStringUTFChars(decodeString, pDecode);
+
+ jsize numberBytes = 0;
+ if (inMessage != NULL)
+ numberBytes = env->GetArrayLength(inMessage);
+ long inLength = numberBytes; // this can be null
+
+ jbyte* inData = NULL;
+ if (inLength > 0)
+ inData = env->GetByteArrayElements(inMessage, &isCopy);
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdSendMessage;
+ pCmdrsp->clientId = inClientId;
+ pCmdrsp->encodeOption = encodeOption;
+ pCmdrsp->useMyId = useMyId;
+ pCmdrsp->myId = myId;
+ pCmdrsp->protocolVersion = protocolVersion & 0xff;
+
+ // send message to server
+ pCmdrsp->osError = 0;
+ gManager->m_Server->SendCommand(pCmdrsp, inLength, (BYTE*)inData);
+
+ TCDEBUGLOGS(" nativeSendMessage GetResponse\n");
+
+ // get response from server
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ osError = pCmdrsp->osError;
+ }
+ if (inData != NULL)
+ env->ReleaseByteArrayElements(inMessage, inData, 0);
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA3("nativeSendMessage return ret=%d, osError=%d : %s\n", ret, osError, GetErrorText(osError));
+ TCDEBUGCLOSE();
+
+ if (ret == TCAPI_ERR_COMM_ERROR && osError > 0)
+ {
+ jclass clazz = env->FindClass("Ljava/lang/Exception;");
+ env->ThrowNew(clazz, GetErrorText(osError));
+ }
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStart
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStart
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeStart\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS(" TODO: tell server to start this client\n");
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdStart;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStop
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStop
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeStop\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS(" TODO: tell server to stop this client\n");
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdStop;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeTestConnection
+ * Signature: (I[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__I_3J_3Ljava_lang_String_2
+ (JNIEnv *env, jobject pThis, jint inType, jlongArray inOptions, jobjectArray inSettings)
+{
+ long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeTestConnection\n");
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS(" TODO: ask server to test this connection\n");
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeTestConnection
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__J
+ (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+ long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeTestConnection\n");
+ TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ TCDEBUGLOGS(" TODO: ask server to test this client's connection\n");
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStartServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStartServer
+ (JNIEnv *env, jobject pThis)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeStartServer\n");
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ret = gManager->StartServer();
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStopServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStopServer
+ (JNIEnv *env, jobject pThis)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("nativeStopServer\n");
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ret = gManager->StopServer();
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1(" return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+
+ return ret;
+}
+
+void ConvertRealSerialSettingsToServer(const char* pBaud, const char* pDataBits, const char* pParity, const char* pStopBits, const char* pFlowControl, pRealSerialConnectData pData)
+{
+ // no error checking - all error checking is done at the Java level
+ pData->baudRate = atol(pBaud);
+ pData->dataBits = atol(pDataBits);
+
+ pData->parity = eParityNone;
+ if (strcmp(pParity, "odd") == 0)
+ {
+ pData->parity = eParityOdd;
+ }
+ else if (strcmp(pParity, "even") == 0)
+ {
+ pData->parity = eParityEven;
+ }
+
+ pData->stopBits = eStopBits1;
+ if (strcmp(pStopBits, "1.5") == 0)
+ {
+ pData->stopBits = eStopBits15;
+ }
+ else if (strcmp(pStopBits, "2") == 0)
+ {
+ pData->stopBits = eStopBits2;
+ }
+
+ pData->flowControl = eFlowControlNone;
+ if (strcmp(pFlowControl, "software") == 0)
+ {
+ pData->flowControl = eFlowControlSW;
+ }
+ else if (strcmp(pFlowControl, "hardware") == 0)
+ {
+ pData->flowControl = eFlowControlHW;
+ }
+}
+void ConvertRealSerialSettingsToHost(char* pBaud, char* pDataBits, char* pParity, char* pStopBits, char* pFlowControl, pRealSerialConnectData pData)
+{
+ sprintf(pBaud, "%ld", pData->baudRate);
+ sprintf(pDataBits, "%ld", pData->dataBits);
+
+ switch (pData->parity)
+ {
+ default:
+ case eParityNone:
+ strcpy(pParity, "none");
+ break;
+ case eParityEven:
+ strcpy(pParity, "even");
+ break;
+ case eParityOdd:
+ strcpy(pParity, "odd");
+ break;
+ }
+
+ switch (pData->stopBits)
+ {
+ default:
+ case eStopBits1:
+ strcpy(pStopBits, "1");
+ break;
+ case eStopBits15:
+ strcpy(pStopBits, "1.5");
+ break;
+ case eStopBits2:
+ strcpy(pStopBits, "2");
+ break;
+ }
+
+ switch (pData->flowControl)
+ {
+ default:
+ case eFlowControlNone:
+ strcpy(pFlowControl, "none");
+ break;
+ case eFlowControlHW:
+ strcpy(pFlowControl, "hardware");
+ break;
+ case eFlowControlSW:
+ strcpy(pFlowControl, "software");
+ break;
+ }
+}
+
+#ifdef _DEBUG
+void OpenLogFile1(char* filename)
+{
+ if (fLog1 == NULL)
+ fLog1 = _fsopen(filename, "at", _SH_DENYNO);
+}
+
+void CloseLogFile1()
+{
+ if (fLog1 != NULL)
+ {
+ fclose(fLog1);
+ fLog1 = NULL;
+ }
+}
+void OpenLogFile2(char* filename)
+{
+ if (fLog2 == NULL)
+ fLog2 = _fsopen(filename, "at", _SH_DENYNO);
+}
+
+void CloseLogFile2()
+{
+ if (fLog2 != NULL)
+ {
+ fclose(fLog2);
+ fLog2 = NULL;
+ }
+}
+void LogTime(FILE* f)
+{
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ if (f)
+ fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+
+static const char* GetErrorText(unsigned long error)
+{
+ if (error == ERROR_FILE_NOT_FOUND)
+ return "Could not open the device\n";
+
+ else if (error == ERROR_ACCESS_DENIED)
+ return "The device is currently in use\n";
+
+ static char msg[256];
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ error,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &msg,
+ sizeof(msg) - 1,
+ NULL);
+
+ return msg;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCAPIConnectionJni.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class com_nokia_tcf_impl_TCAPIConnection */
+
+#ifndef _Included_com_nokia_tcf_impl_TCAPIConnection
+#define _Included_com_nokia_tcf_impl_TCAPIConnection
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeConnect
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;[JLjava/lang/String;[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeConnect
+ (JNIEnv *, jobject, jstring, jlongArray, jobjectArray, jlongArray, jstring, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeDisconnect
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeDisconnect
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetNumberConnections
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberConnections
+ (JNIEnv *, jobject, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetTypeOfConnection
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetTypeOfConnection
+ (JNIEnv *, jobject, jlong, jobjectArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetConnectionSettings
+ * Signature: (J[Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetConnectionSettings
+ (JNIEnv *, jobject, jlong, jobjectArray, jlongArray, jobjectArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollError
+ * Signature: (J[I[Z[J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollError
+ (JNIEnv *, jobject, jlong, jintArray, jbooleanArray, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetNumberVersionEntities
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberVersionEntities
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetVersion
+ * Signature: (JJ[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetVersion
+ (JNIEnv *, jobject, jlong, jlong, jobjectArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollInputStream
+ * Signature: (J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream
+ (JNIEnv *, jobject, jlong, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativePollInputStream2
+ * Signature: (JJ[J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream2
+ (JNIEnv *, jobject, jlong, jlong, jlongArray, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeGetInputStreamMessageBytes
+ * Signature: (JJ[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetInputStreamMessageBytes
+ (JNIEnv *, jobject, jlong, jlong, jlongArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeReadInputStream
+ * Signature: (JJ[J[JJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeReadInputStream
+ (JNIEnv *, jobject, jlong, jlong, jlongArray, jlongArray, jlong, jbyteArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeOpenInputStream
+ * Signature: (JLjava/lang/String;JZ)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeOpenInputStream
+ (JNIEnv *, jobject, jlong, jstring, jlong, jboolean);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeCloseInputStream
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeCloseInputStream
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeClearFile
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeClearFile
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeSendMessage
+ * Signature: (J[J[Ljava/lang/String;[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSendMessage
+ (JNIEnv *, jobject, jlong, jlongArray, jobjectArray, jbyteArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeSetMessageIds
+ * Signature: (J[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSetMessageIds
+ (JNIEnv *, jobject, jlong, jbyteArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStart
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStart
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStop
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStop
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeTestConnection
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__Ljava_lang_String_2_3J_3Ljava_lang_String_2
+ (JNIEnv *, jobject, jstring, jlongArray, jobjectArray);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeTestConnection
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__J
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStartServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStartServer
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_nokia_tcf_impl_TCAPIConnection
+ * Method: nativeStopServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStopServer
+ (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFClient.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <stdio.h>
+#include <sys/stat.h>
+#include "ClientManager.h"
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include "TCDebugLog.h"
+#include <vector>
+
+// process wide data
+CClientManager* gManager;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+#ifdef _DEBUG
+static void LogTime(FILE* f);
+#endif
+
+
+BOOL APIENTRY DllMain( HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpReserved
+ )
+{
+ // Perform actions based on the reason for calling.
+ switch( fdwReason )
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ // Initialize once for each new process.
+ // Return FALSE to fail DLL load.
+ DWORD currentProcessId = ::GetCurrentProcessId();
+
+ // Create client manager for this process
+#ifdef _DEBUG
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ gDoLogging = TRUE;
+ }
+ else
+ {
+ gDoLogging = FALSE;
+ }
+
+#endif
+ gManager = new CClientManager(hinstDLL);
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_PROCESS_ATTACH.txt", "at");
+ LogTime(f);
+ fprintf(f,"DLL_PROCESS_ATTACH:\n hinstDLL=%x\n processId=%d\n DllLocation=%s\n DebugLog->m_FileName=%s\n",
+ hinstDLL,
+ currentProcessId,
+ gManager->m_DllLocation,
+ gManager->m_DebugLog->m_FileName);
+ fclose(f);
+ }
+#endif
+ }
+ break;
+
+ case DLL_THREAD_ATTACH:
+ {
+ // Do thread-specific initialization.
+ DWORD currentThreadId = ::GetCurrentThreadId();
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_THREAD_ATTACH.txt", "at");
+ LogTime(f);
+ fprintf(f,"DLL_THREAD_ATTACH: hinstDLL=%x currentThreadId=%d\n", hinstDLL, currentThreadId);
+ fclose(f);
+ }
+#endif
+ }
+ break;
+
+ case DLL_THREAD_DETACH:
+ {
+ // Do thread-specific cleanup.
+ DWORD currentThreadId = ::GetCurrentThreadId();
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_THREAD_DETACH.txt", "at");
+ LogTime(f);
+ fprintf(f,"DLL_THREAD_DETTACH: hinstDLL=%x currentThreadId=%d\n", hinstDLL, currentThreadId);
+ fclose(f);
+ }
+#endif
+ }
+ break;
+
+ case DLL_PROCESS_DETACH:
+ {
+ // Perform any necessary cleanup.
+ DWORD currentProcessId = ::GetCurrentProcessId();
+ // delete the client manager for this process
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_PROCESS_DETACH.txt", "at");
+ LogTime(f);
+ fprintf(f,"DLL_PROCESS_DETACH processId=%d\n", currentProcessId);
+ fclose(f);
+ }
+#endif
+ if (gManager)
+ {
+ delete gManager;
+ }
+ }
+ break;
+ }
+ return TRUE; // Successful DLL_PROCESS_ATTACH.
+}
+#ifdef _DEBUG
+static void LogTime(FILE* f)
+{
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ if (f)
+ fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,99 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFClient.mak
+
+.\ClientManager.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\ClientManager.h"\
+
+
+..\Common\Source\ErrorMonitorData.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\ClientManager.h"\
+
+
+..\Common\Source\InputStream.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ ".\ClientManager.h"\
+
+
+..\Common\Source\mutex.cpp : \
+ "..\Common\Headers\mutex.h"\
+
+
+..\Common\Source\ServerClient.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\ClientManager.h"\
+
+
+..\Common\Source\shareddata.cpp : \
+ "..\Common\Headers\shareddata.h"\
+
+
+.\StdAfx.cpp : \
+ ".\StdAfx.h"\
+
+
+.\TCAPIConnectionJni.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\ClientManager.h"\
+ ".\jdk1.5.0_10\include\jni.h"\
+ ".\jdk1.5.0_10\include\win32\jni_md.h"\
+ ".\TCAPIConnectionJni.h"\
+
+
+..\Common\Source\TCDebugLog.cpp : \
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+
+
+.\TCFClient.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ ".\ClientManager.h"\
+
+
+.\TCFCppApi.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\pn_const.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\ClientManager.h"\
+ ".\TCFCppApi.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,229 @@
+# Microsoft Developer Studio Project File - Name="TCFClient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFClient - 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 "TCFClient.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 "TCFClient.mak" CFG="TCFClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFClient - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFClient - 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)" == "TCFClient - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /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 shlwapi.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# SUBTRACT CPP /X
+# 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 shlwapi.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFClient - Win32 Release"
+# Name "TCFClient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\ClientManager.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\InputStream.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ServerClient.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\shareddata.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Zp2 /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCAPIConnectionJni.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFClient.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCppApi.cpp
+# ADD CPP /Zp2
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\ClientManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ErrorMonitorData.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\InputStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\mutex.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ServerClient.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\shareddata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCAPIConnectionJni.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCDebugLog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCErrorConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCppApi.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"
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,530 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFClient.dsp
+!IF "$(CFG)" == ""
+CFG=TCFClient - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFClient - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFClient - Win32 Release" && "$(CFG)" != "TCFClient - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFClient.mak" CFG="TCFClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFClient - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFClient - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFClient.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ClientManager.obj"
+ -@erase "$(INTDIR)\ErrorMonitorData.obj"
+ -@erase "$(INTDIR)\InputStream.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\resource.res"
+ -@erase "$(INTDIR)\ServerClient.obj"
+ -@erase "$(INTDIR)\shareddata.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCAPIConnectionJni.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFClient.obj"
+ -@erase "$(INTDIR)\TCFClient.pch"
+ -@erase "$(INTDIR)\TCFCppApi.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\TCFClient.dll"
+ -@erase "$(OUTDIR)\TCFClient.exp"
+ -@erase "$(OUTDIR)\TCFClient.lib"
+ -@erase "$(OUTDIR)\TCFClient.map"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFClient.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFClient.pdb" /map:"$(INTDIR)\TCFClient.map" /machine:I386 /out:"$(OUTDIR)\TCFClient.dll" /implib:"$(OUTDIR)\TCFClient.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ClientManager.obj" \
+ "$(INTDIR)\ErrorMonitorData.obj" \
+ "$(INTDIR)\InputStream.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\ServerClient.obj" \
+ "$(INTDIR)\shareddata.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCAPIConnectionJni.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFClient.obj" \
+ "$(INTDIR)\TCFCppApi.obj" \
+ "$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFClient.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFClient.dll"
+ copybinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFClient.dll" "$(OUTDIR)\TCFClient.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ClientManager.obj"
+ -@erase "$(INTDIR)\ClientManager.sbr"
+ -@erase "$(INTDIR)\ErrorMonitorData.obj"
+ -@erase "$(INTDIR)\ErrorMonitorData.sbr"
+ -@erase "$(INTDIR)\InputStream.obj"
+ -@erase "$(INTDIR)\InputStream.sbr"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\mutex.sbr"
+ -@erase "$(INTDIR)\resource.res"
+ -@erase "$(INTDIR)\ServerClient.obj"
+ -@erase "$(INTDIR)\ServerClient.sbr"
+ -@erase "$(INTDIR)\shareddata.obj"
+ -@erase "$(INTDIR)\shareddata.sbr"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\StdAfx.sbr"
+ -@erase "$(INTDIR)\TCAPIConnectionJni.obj"
+ -@erase "$(INTDIR)\TCAPIConnectionJni.sbr"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCDebugLog.sbr"
+ -@erase "$(INTDIR)\TCFClient.obj"
+ -@erase "$(INTDIR)\TCFClient.pch"
+ -@erase "$(INTDIR)\TCFClient.sbr"
+ -@erase "$(INTDIR)\TCFCppApi.obj"
+ -@erase "$(INTDIR)\TCFCppApi.sbr"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\TCFClient.bsc"
+ -@erase "$(OUTDIR)\TCFClient.dll"
+ -@erase "$(OUTDIR)\TCFClient.exp"
+ -@erase "$(OUTDIR)\TCFClient.ilk"
+ -@erase "$(OUTDIR)\TCFClient.lib"
+ -@erase "$(OUTDIR)\TCFClient.map"
+ -@erase "$(OUTDIR)\TCFClient.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFClient.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\ClientManager.sbr" \
+ "$(INTDIR)\ErrorMonitorData.sbr" \
+ "$(INTDIR)\InputStream.sbr" \
+ "$(INTDIR)\mutex.sbr" \
+ "$(INTDIR)\ServerClient.sbr" \
+ "$(INTDIR)\shareddata.sbr" \
+ "$(INTDIR)\StdAfx.sbr" \
+ "$(INTDIR)\TCAPIConnectionJni.sbr" \
+ "$(INTDIR)\TCDebugLog.sbr" \
+ "$(INTDIR)\TCFClient.sbr" \
+ "$(INTDIR)\TCFCppApi.sbr"
+
+"$(OUTDIR)\TCFClient.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFClient.pdb" /map:"$(INTDIR)\TCFClient.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFClient.dll" /implib:"$(OUTDIR)\TCFClient.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\ClientManager.obj" \
+ "$(INTDIR)\ErrorMonitorData.obj" \
+ "$(INTDIR)\InputStream.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\ServerClient.obj" \
+ "$(INTDIR)\shareddata.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCAPIConnectionJni.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFClient.obj" \
+ "$(INTDIR)\TCFCppApi.obj" \
+ "$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFClient.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFClient.dll" "$(OUTDIR)\TCFClient.bsc"
+ copybinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFClient.dep")
+!INCLUDE "TCFClient.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFClient.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFClient - Win32 Release" || "$(CFG)" == "TCFClient - Win32 Debug"
+SOURCE=.\ClientManager.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\ClientManager.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\ClientManager.obj" "$(INTDIR)\ClientManager.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\ErrorMonitorData.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\ErrorMonitorData.obj" "$(INTDIR)\ErrorMonitorData.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\InputStream.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\InputStream.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\InputStream.obj" "$(INTDIR)\InputStream.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\mutex.obj" "$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\ServerClient.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\ServerClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\ServerClient.obj" "$(INTDIR)\ServerClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\shareddata.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\shareddata.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\shareddata.obj" "$(INTDIR)\shareddata.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFClient.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\StdAfx.sbr" "$(INTDIR)\TCFClient.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\TCAPIConnectionJni.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\TCAPIConnectionJni.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\TCAPIConnectionJni.obj" "$(INTDIR)\TCAPIConnectionJni.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\TCDebugLog.obj" "$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\TCFClient.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\TCFClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\TCFClient.obj" "$(INTDIR)\TCFClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\TCFCppApi.cpp
+
+!IF "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\TCFCppApi.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\TCFCppApi.obj" "$(INTDIR)\TCFCppApi.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\resource.rc
+
+"$(INTDIR)\resource.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,83 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3228.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3228.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3229.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3229.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322A.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFClient.pdb" /map:"Debug/TCFClient.map" /debug /machine:I386 /out:"Debug/TCFClient.dll" /implib:"Debug/TCFClient.lib" /pdbtype:sept
+.\Debug\ClientManager.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\mutex.obj
+.\Debug\ServerClient.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCAPIConnectionJni.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFClient.obj
+.\Debug\TCFCppApi.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322B.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322B.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFCppApi.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,955 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "TCFCppApi.h"
+#include "ServerClient.h"
+#include "ClientManager.h"
+#include "TCConstants.h"
+#include <vector>
+
+extern CClientManager* gManager;
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+extern char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+// for internal testing with 2.x USB TRK define this
+//#define FOR_2X_USB
+
+// client Ids connected for this C++ process
+static std::vector<long> *pcppClientIds = NULL;
+
+static long CheckClient(long id);
+static long CheckConnection(pTCFCppConnectData inConnection);
+static long CheckRealSerialSettings(pTCFCppConnectData inConnection);
+static long CheckMessageOptions(pTCFCppMessageOptions inMessageOptions);
+static long CheckMessageIds(pTCFCppMessageIds inMessageIds);
+static long CheckMessage(pTCFCppMessage inMessage);
+static void ConvertRealSerialSettingsToServer(pTCFCppConnectData inConnection, pRealSerialConnectData pData);
+static void ConvertRealSerialSettingsToHost(pTCFCppConnectData inConnection, pRealSerialConnectData pData);
+
+TCF_EXP long TCF_CALL TCFConnect(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("TCFConnect\n");
+// if (!gManager->IsServerRunning())
+// return TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ret = CheckConnection(inConnection);
+#ifdef FOR_2X_USB
+ inMessageOptions->unWrapFormat = eTCFCppNone;
+#endif
+ if (ret == TCAPI_ERR_NONE)
+ {
+ ret = CheckMessageOptions(inMessageOptions);
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ ret = CheckMessageIds(inMessageIds);
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ if (strcmp(inConnection->connectType, "tcp") == 0)
+ {
+ char* pAddress = inConnection->tcpSettings.ipAddress;
+ char* pPort = inConnection->tcpSettings.ipPort;
+
+ pCmdrsp->command = eCmdConnect;
+ strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+ strncpy(pCmdrsp->connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+ strncpy(pCmdrsp->connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+ pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+ pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+ strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+ pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+ pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+ }
+ else if (strcmp(inConnection->connectType, "virtualserial") == 0)
+ {
+ char* pComPort = inConnection->virtualSerialSettings.comPort;
+
+ pCmdrsp->command = eCmdConnect;
+ strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+ strncpy(pCmdrsp->connectSettings.virtualSerialSettings.comPort, pComPort, MAX_COMPORT_SIZE);
+
+ pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+ pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+ strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+ pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+ pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+ }
+ else if (strcmp(inConnection->connectType, "serial") == 0)
+ {
+ char* pComPort = inConnection->realSerialSettings.comPort;
+
+ pCmdrsp->command = eCmdConnect;
+ strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+ strncpy(pCmdrsp->connectSettings.realSerialSettings.comPort, pComPort, MAX_COMPORT_SIZE);
+
+ ConvertRealSerialSettingsToServer(inConnection, &pCmdrsp->connectSettings.realSerialSettings);
+
+ pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+ pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+ strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+ pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+ pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+ }
+ else
+ {
+ // Add other connections here
+ }
+ // send connect command
+ long id = 0;
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ TCDEBUGLOGA1("TCFConnect eCmdConnect: ret = %d\n", ret);
+ }
+ else
+ {
+ id = pCmdrsp->clientId;
+ TCDEBUGLOGA1("TCFConnect eCmdConnect: id = %d\n", id);
+ }
+ }
+
+ // send message Ids to capture
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdSetMessageIds;
+ pCmdrsp->clientId = id;
+ pCmdrsp->number = inMessageIds->numberIds;
+ for (int i = 0; i < inMessageIds->numberIds; i++)
+ {
+ pCmdrsp->messageIds[i] = inMessageIds->messageIds[i];
+ }
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ TCDEBUGLOGA1("TCFConnect eCmdSetMessageIds: ret = %d\n", ret);
+ }
+ else
+ {
+ TCDEBUGLOGA1("TCFConnect eCmdSetMessageIds: ret = %d\n", ret);
+ }
+ }
+
+ // create input stream overflow temp file
+ // create input stream
+ if (ret == TCAPI_ERR_NONE)
+ {
+// eTCPCppStreamOverflowOption overflowOption = inMessageOptions->streamOverflowOption;
+// char* pFileName = inMessageOptions->overflowFile;
+ long streamSize = inMessageOptions->inputStreamSize;
+ CInputStream* stream = new CInputStream(NULL, streamSize, eTCPCppStreamOverflowOff, id);
+ stream->CreateStream();
+ gManager->AddInputStream(stream);
+
+ pCmdrsp->command = eCmdOpenStream;
+ pCmdrsp->clientId = id;
+ // TODO: implement message file in the future?
+ pCmdrsp->destinationOptions.destination = eDestinationInputStream;
+ pCmdrsp->destinationOptions.streamSize = streamSize;
+ pCmdrsp->destinationOptions.overFlowToFile = FALSE;//(overflowOption == eTCPCppStreamOverflowOn);
+// if (pFileName != NULL)
+// {
+// strncpy(pCmdrsp->destinationOptions.destinationFile, pFileName, MAX_INPUTSTREAMPATH);
+// }
+// else
+ {
+ pCmdrsp->destinationOptions.destinationFile[0] = NULL;
+ }
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ TCDEBUGLOGA1("TCFConnect eCmdOpenStream: ret = %d\n", ret);
+ }
+ else
+ {
+ TCDEBUGLOGA1("TCFConnect eCmdOpenStream: ret = %d\n", ret);
+ }
+ }
+
+ // create error monitor
+ if (ret == TCAPI_ERR_NONE)
+ {
+ CErrorMonitor* monitor = new CErrorMonitor(id);
+ if (monitor != NULL)
+ {
+ monitor->CreateData();
+ gManager->AddErrorMonitor(monitor);
+ }
+ }
+
+ // start client capture
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdStart;
+ pCmdrsp->clientId = id;
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ TCDEBUGLOGA1("TCFConnect eCmdStart: ret = %d\n", ret);
+ }
+ else
+ {
+ TCDEBUGLOGA1("TCFConnect eCmdStart: ret = %d\n", ret);
+ }
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ TCDEBUGLOGA1("TCFConnect pcppClientIds: %x\n", pcppClientIds);
+ if (pcppClientIds == NULL)
+ {
+ pcppClientIds = new std::vector<long>;
+ pcppClientIds->empty();
+ }
+ pcppClientIds->push_back(id);
+ *outClientId = id;
+ TCDEBUGLOGA1("TCFConnect pcppClientIds: size = %d\n", pcppClientIds->size());
+ }
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+ TCDEBUGLOGA1("TCFConnect return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+
+TCF_EXP long TCF_CALL TCFDisconnect(long inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+ ServerCommandData cmdrsp;
+ pServerCommandData pCmdrsp = &cmdrsp;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("TCFDisconnect id=%d\n", inClientId);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+ gManager->WaitForErrorMonitorListAccess();
+ gManager->WaitForStreamListAccess();
+
+ // check client ID
+ ret = CheckClient(inClientId);
+ TCDEBUGLOGA1("TCFDisconnect CheckClient: ret = %d\n", ret);
+
+ // stop client
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->clientId = inClientId;
+ pCmdrsp->command = eCmdStop;
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ }
+
+ // close error monitor
+ TCDEBUGLOGS("TCFDisconnect clear error monitor\n");
+ CErrorMonitor *monitor = gManager->FindErrorMonitor(inClientId);
+ if (monitor != NULL)
+ {
+ gManager->RemoveErrorMonitor(monitor);
+ delete monitor;
+ }
+
+ // close input stream
+ TCDEBUGLOGS("TCFDisconnect remove input stream\n");
+ CInputStream* inputStream = gManager->FindInputStream(inClientId);
+ if (inputStream != NULL)
+ {
+ gManager->RemoveInputStream(inputStream);
+ delete inputStream;
+ }
+
+ // send disconnect
+ TCDEBUGLOGS("TCFDisconnect send disconnect\n");
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdDisconnect;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ }
+
+ TCDEBUGLOGS("TCFDisconnect clear erase id\n");
+ if (pcppClientIds != NULL && ret == TCAPI_ERR_NONE)
+ {
+ std::vector<long>::iterator idIter;
+ for (idIter = pcppClientIds->begin(); idIter != pcppClientIds->end(); idIter++)
+ {
+ if (*idIter == inClientId)
+ {
+ pcppClientIds->erase(idIter);
+ break;
+ }
+ }
+ if (pcppClientIds->size() == 0)
+ {
+ pcppClientIds->empty();
+ delete pcppClientIds;
+ pcppClientIds = NULL;
+ }
+ }
+
+ gManager->ReleaseStreamListAccess();
+ gManager->ReleaseErrorMonitorListAccess();
+
+ TCDEBUGLOGS("TCFDisconnect stop server\n");
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1("TCFDisconnect return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+TCF_EXP long TCF_CALL TCFGetVersions(long inClientId, long& outNumberVersions, char** outVersions)
+{
+ long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+ outNumberVersions = 0;
+
+ // check client ID
+
+ // get # versions from server
+
+ // get version[i] from server
+
+
+ return ret;
+}
+TCF_EXP long TCF_CALL TCFGetConnections(long& outNumberConnections, pTCFCppConnectData* outConnections)
+{
+ long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+ outNumberConnections = 0;
+
+ return ret;
+}
+TCF_EXP long TCF_CALL TCFSendMessage(long inClientId, pTCFCppMessage inMessage, long inLength, BYTE* inData)
+{
+ long ret = TCAPI_ERR_NONE;
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+#ifdef FOR_2X_USB
+ inMessage->useMyId = FALSE;
+#endif
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("TCFSendMessage id=%d\n", inClientId);
+
+ // check client ID
+ ret = CheckClient(inClientId);
+ TCDEBUGLOGA1("TCFSendMessage CheckClient: ret=%d\n", ret);
+
+ gManager->m_Server->WaitforServerPipeAccess();
+ // send message to server
+ if (ret == TCAPI_ERR_NONE)
+ {
+ ret = CheckMessage(inMessage);
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdSendMessage;
+ pCmdrsp->clientId = inClientId;
+ pCmdrsp->encodeOption = (inMessage->encodeFormat == eTCFCppEncodeNone) ? ENCODE_NO_FORMAT : ENCODE_FORMAT;
+ pCmdrsp->useMyId = inMessage->useMyId;
+ pCmdrsp->protocolVersion = inMessage->ostVersion;
+ pCmdrsp->myId = inMessage->myId;
+
+ gManager->m_Server->SendCommand(pCmdrsp, inLength, inData);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ TCDEBUGLOGA1("TCFSendMessage eCmdSendMessage: ret=%d\n", ret);
+ }
+ }
+ }
+
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ TCDEBUGLOGA1("TCFSendMessage return ret=%d\n", ret);
+ TCDEBUGCLOSE();
+ return ret;
+}
+TCF_EXP long TCF_CALL TCFStart(long inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ // check client Id
+ ret = CheckClient(inClientId);
+ if (ret == TCAPI_ERR_NONE)
+ {
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdStart;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ }
+
+ return ret;
+}
+
+TCF_EXP long TCF_CALL TCFStop(long inClientId)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ // check client Id
+ ret = CheckClient(inClientId);
+ if (ret == TCAPI_ERR_NONE)
+ {
+ gManager->m_Server->WaitforServerPipeAccess();
+
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ pCmdrsp->command = eCmdStop;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ }
+
+ return ret;
+}
+
+TCF_EXP long TCF_CALL TCFSetMessageIds(long inClientId, pTCFCppMessageIds inMessageIds)
+{
+ long ret = TCAPI_ERR_NONE;
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+ // check client Id
+ ret = CheckClient(inClientId);
+
+ // check message ids
+ if (ret == TCAPI_ERR_NONE)
+ {
+ ret = CheckMessageIds(inMessageIds);
+ }
+
+ gManager->m_Server->WaitforServerPipeAccess();
+ // check client status
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdGetClientStatus;
+ pCmdrsp->clientId = inClientId;
+
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+ else
+ {
+ if (pCmdrsp->clientStatus == eStarted)
+ {
+ ret = TCAPI_ERR_ROUTING_IN_PROGRESS;
+ }
+ else if (pCmdrsp->clientStatus == eUnknownClient)
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ }
+ }
+
+ // set message ids
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->command = eCmdSetMessageIds;
+ pCmdrsp->clientId = inClientId;
+ pCmdrsp->number = inMessageIds->numberIds;
+ for (int i = 0; i < inMessageIds->numberIds; i++)
+ {
+ pCmdrsp->messageIds[i] = inMessageIds->messageIds[i];
+ }
+ gManager->m_Server->SendCommand(pCmdrsp);
+ gManager->m_Server->GetResponse(pCmdrsp);
+
+ if (pCmdrsp->response == eRspError)
+ {
+ ret = pCmdrsp->error;
+ }
+
+ }
+ gManager->m_Server->ReleaseServerPipeAccess();
+
+ return ret;
+}
+
+TCF_EXP long TCF_CALL TCFPollInputStream(long inClientId, long& outLength)
+{
+ long ret = TCAPI_ERR_NONE;
+ outLength = 0;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("TCFPollInputStream id=%d\n", inClientId);
+
+ gManager->WaitForStreamListAccess();
+
+ // check client ID
+ ret = CheckClient(inClientId);
+ if (ret == TCAPI_ERR_NONE)
+ {
+ // get client's input stream
+ CInputStream* inputStream = gManager->FindInputStream(inClientId);
+
+ if (inputStream != NULL)
+ {
+ outLength = inputStream->GetNextMessageSize();
+ }
+ else
+ {
+ ret = TCAPI_ERR_INPUTSTREAM_CLOSED;
+ }
+ }
+
+ gManager->ReleaseStreamListAccess();
+
+ TCDEBUGLOGA2("TCFPollInputStream return ret=%d outLength=%d\n", ret, outLength);
+ TCDEBUGCLOSE();
+ return ret;
+}
+TCF_EXP long TCF_CALL TCFReadInputStream(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (outData == NULL || inLength <= 0)
+ return ret;
+
+ gManager->WaitForStreamListAccess();
+
+ // check client ID
+ ret = CheckClient(inClientId);
+ if (ret == TCAPI_ERR_NONE)
+ {
+ // get client's input stream
+ CInputStream* inputStream = gManager->FindInputStream(inClientId);
+
+ if (inputStream != NULL)
+ {
+ DWORD length = inputStream->GetNextMessageSize();
+ if (length > inLength) length = inLength;
+ if (length > 0)
+ {
+ inLength = length;
+ inputStream->GetNextMessage(inLength, outData);
+
+ }
+ else
+ {
+ inLength = 0;
+ }
+ }
+ else
+ {
+ ret = TCAPI_ERR_INPUTSTREAM_CLOSED;
+ }
+ }
+
+ gManager->ReleaseStreamListAccess();
+
+ return ret;
+}
+TCF_EXP BOOL TCF_CALL TCFPollError(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode)
+{
+ BOOL foundError = FALSE;
+ gManager->WaitForErrorMonitorListAccess();
+
+ if (gManager->ErrorMonitorListSize() > 0)
+ {
+ CErrorMonitor* errorMonitor = gManager->FindErrorMonitor(inClientId);
+ if (errorMonitor != NULL)
+ {
+ LONG tcfError = TCAPI_ERR_NONE;
+ BOOL osErrorUsed = FALSE;
+ DWORD osError = 0;
+ BOOL found = errorMonitor->GetError(&tcfError, &osErrorUsed, &osError);
+ if (found)
+ {
+ foundError = true;
+ *outErrorCode = (int)tcfError;
+ *outHasOSErrorCode = osErrorUsed;
+ *outOSErrorCode = osError;
+ }
+ }
+ }
+ gManager->ReleaseErrorMonitorListAccess();
+
+ return foundError;
+}
+
+long CheckClient(long id)
+{
+ long ret = TCAPI_ERR_NONE;
+ BOOL found = FALSE;
+
+ if (id <= 0)
+ {
+ ret = TCAPI_ERR_INVALID_HANDLE;
+ }
+ else if (gManager->IsServerRunning() == FALSE)
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else
+ {
+ if (pcppClientIds == NULL)
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else
+ {
+ std::vector<long>::iterator idIter;
+ for (idIter = pcppClientIds->begin(); idIter != pcppClientIds->end(); idIter++)
+ {
+ if (*idIter == id)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ if (!found)
+ {
+ ret = TCAPI_ERR_INVALID_HANDLE;
+ }
+ }
+ }
+
+ return ret;
+}
+long CheckConnection(pTCFCppConnectData inConnection)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (inConnection == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_CONNECTION_SPEC;
+ }
+ else
+ {
+ long retryI = inConnection->retryInterval;
+ long retryT = inConnection->retryTimeout;
+ if (retryI == 0 || retryT == 0 || retryI > retryT)
+ ret = TCAPI_ERR_INVALID_RETRY_PERIODS;
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ if (strcmp(inConnection->connectType, "tcp") == 0)
+ {
+ if (inConnection->tcpSettings.ipAddress == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+ }
+ else if (inConnection->tcpSettings.ipPort == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+ }
+ }
+ else if (strcmp(inConnection->connectType, "virtualserial") == 0)
+ {
+ if (inConnection->virtualSerialSettings.comPort == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+ }
+ }
+ else if (strcmp(inConnection->connectType, "serial") == 0)
+ {
+ ret = CheckRealSerialSettings(inConnection);
+ }
+ else
+ {
+ }
+ }
+
+ return ret;
+}
+
+long CheckRealSerialSettings(pTCFCppConnectData inConnection)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (inConnection->realSerialSettings.comPort == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+ }
+ else if (inConnection->realSerialSettings.dataBits < 4 || inConnection->realSerialSettings.dataBits > 8)
+ {
+ ret = TCAPI_ERR_COMM_INVALID_DATABITS;
+ }
+ else if (inConnection->realSerialSettings.baudRate < 110UL || inConnection->realSerialSettings.baudRate > 256000UL)
+ {
+ ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+ }
+ else
+ {
+ switch(inConnection->realSerialSettings.stopBits)
+ {
+ case eTCFCppStopBits1:
+ case eTCFCppStopBits15:
+ case eTCFCppStopBits2:
+ break;
+ default:
+ ret = TCAPI_ERR_COMM_INVALID_STOPBITS;
+ break;
+ }
+
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ switch(inConnection->realSerialSettings.flowControl)
+ {
+ case eTCFCppFlowControlNone:
+ case eTCFCppFlowControlHW:
+ case eTCFCppFlowControlSW:
+ break;
+ default:
+ ret = TCAPI_ERR_COMM_INVALID_FLOWCONTROL;
+ break;
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ switch(inConnection->realSerialSettings.parity)
+ {
+ case eTCFCppParityNone:
+ case eTCFCppParityOdd:
+ case eTCFCppParityEven:
+ break;
+ default:
+ ret = TCAPI_ERR_COMM_INVALID_PARITY;
+ break;
+ }
+ }
+
+ return ret;
+}
+long CheckMessageOptions(pTCFCppMessageOptions inMessageOptions)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (inMessageOptions == NULL)
+ {
+ ret = TCAPI_ERR_MISSING_MESSAGE_OPTIONS;
+ }
+ else
+ {
+ if (ret == TCAPI_ERR_NONE)
+ {
+ if (inMessageOptions->unWrapFormat != eTCFCppNone &&
+ inMessageOptions->unWrapFormat != eTCFCppDeleteHeader)
+ {
+ ret = TCAPI_ERR_INVALID_MESSAGE_UNWRAP_OPTION;
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ if (inMessageOptions->inputStreamSize <= 0)
+ {
+ ret = TCAPI_ERR_INVALID_STREAM_BUFFER_SIZE;
+ }
+ }
+ }
+ return ret;
+}
+long CheckMessageIds(pTCFCppMessageIds inMessageIds)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (inMessageIds == NULL)
+ {
+ ret = TCAPI_ERR_NO_MESSAGESIDS_REGISTERED;
+ }
+ else if (inMessageIds->numberIds <= 0 || inMessageIds->messageIds == NULL)
+ {
+ ret = TCAPI_ERR_NO_MESSAGESIDS_REGISTERED;
+ }
+ else if (inMessageIds->numberIds > 256)
+ {
+ ret = TCAPI_ERR_MESSAGEID_MAXIMUM;
+ }
+
+ return ret;
+}
+long CheckMessage(pTCFCppMessage inMessage)
+{
+ long ret = TCAPI_ERR_NONE;
+
+ if (inMessage == NULL)
+ return TCAPI_ERR_MISSING_MESSAGE;
+
+ if (inMessage->useMyId)
+ {
+ if ((inMessage->encodeFormat != eTCFCppEncodeNone) && (inMessage->encodeFormat != eTCFCppEncode))
+ {
+ ret = TCAPI_ERR_INVALID_ENCODE_FORMAT;
+ }
+ }
+
+ return ret;
+}
+
+void ConvertRealSerialSettingsToServer(pTCFCppConnectData inConnection, pRealSerialConnectData pData)
+{
+ pData->baudRate = inConnection->realSerialSettings.baudRate;
+ pData->dataBits = inConnection->realSerialSettings.dataBits;
+ switch(inConnection->realSerialSettings.flowControl)
+ {
+ default:
+ case eTCFCppFlowControlNone:
+ pData->flowControl = eFlowControlNone;
+ break;
+ case eTCFCppFlowControlHW:
+ pData->flowControl = eFlowControlHW;
+ break;
+ case eTCFCppFlowControlSW:
+ pData->flowControl = eFlowControlSW;
+ break;
+ }
+ switch(inConnection->realSerialSettings.parity)
+ {
+ default:
+ case eTCFCppParityNone:
+ pData->parity = eParityNone;
+ break;
+ case eTCFCppParityOdd:
+ pData->parity = eParityOdd;
+ break;
+ case eTCFCppParityEven:
+ pData->parity = eParityEven;
+ break;
+ }
+ switch(inConnection->realSerialSettings.stopBits)
+ {
+ default:
+ case eTCFCppStopBits1:
+ pData->stopBits = eStopBits1;
+ break;
+ case eTCFCppStopBits15:
+ pData->stopBits = eStopBits15;
+ break;
+ case eTCFCppStopBits2:
+ pData->stopBits = eStopBits2;
+ break;
+ }
+}
+
+void ConvertRealSerialSettingsToHost(pTCFCppConnectData inConnection, pRealSerialConnectData pData)
+{
+ inConnection->realSerialSettings.baudRate = pData->baudRate;
+ inConnection->realSerialSettings.dataBits = pData->dataBits;
+ switch(pData->flowControl)
+ {
+ default:
+ case eFlowControlNone:
+ inConnection->realSerialSettings.flowControl = eTCFCppFlowControlNone;
+ break;
+ case eFlowControlHW:
+ inConnection->realSerialSettings.flowControl = eTCFCppFlowControlHW;
+ break;
+ case eFlowControlSW:
+ inConnection->realSerialSettings.flowControl = eTCFCppFlowControlSW;
+ break;
+ }
+
+ switch(pData->parity)
+ {
+ default:
+ case eParityNone:
+ inConnection->realSerialSettings.parity = eTCFCppParityNone;
+ break;
+ case eParityEven:
+ inConnection->realSerialSettings.parity = eTCFCppParityEven;
+ break;
+ case eParityOdd:
+ inConnection->realSerialSettings.parity = eTCFCppParityOdd;
+ break;
+ }
+
+ switch(pData->stopBits)
+ {
+ default:
+ case eStopBits1:
+ inConnection->realSerialSettings.stopBits = eTCFCppStopBits1;
+ break;
+ case eStopBits15:
+ inConnection->realSerialSettings.stopBits = eTCFCppStopBits15;
+ break;
+ case eStopBits2:
+ inConnection->realSerialSettings.stopBits = eTCFCppStopBits2;
+ break;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFCppApi.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __TCFCPPAPI_H__
+#define __TCFCPPAPI_H__
+
+#include "TCErrorConstants.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef TCFCLIENT_EXPORTS
+#define TCF_EXP __declspec(dllexport)
+#else
+#define TCF_EXP __declspec(dllimport)
+#endif
+
+#define TCF_CALL
+
+// TCP/IP
+#define MAX_IPADDRESS_SIZE (20)
+#define MAX_PORT_SIZE (6)
+typedef struct tagTCFCppTcpConnectData
+{
+ char ipAddress[MAX_IPADDRESS_SIZE]; // e.g., "127.0.0.1"
+ char ipPort[MAX_PORT_SIZE]; // e.g., "7654"
+} *pTCFCppTcpConnectData, TCFCppTcpConnectData;
+
+// Virtual Serial (BT and USB over Serial port)
+#define MAX_COMPORT_SIZE (20)
+typedef struct tagTCFCppVirtualSerialConnectData
+{
+ char comPort[MAX_COMPORT_SIZE]; // only COM port required: e.g. COM0
+} *pTCFCppVirtualSerialConnectData, TCFCppVirtualSerialConnectData;
+
+// Real Serial
+enum eTCFCppFlowControl
+{
+ eTCFCppFlowControlNone,
+ eTCFCppFlowControlHW,
+ eTCFCppFlowControlSW,
+};
+enum eTCFCppStopBits
+{
+ eTCFCppStopBits1,
+ eTCFCppStopBits15,
+ eTCFCppStopBits2,
+};
+enum eTCFCppParity
+{
+ eTCFCppParityNone,
+ eTCFCppParityOdd,
+ eTCFCppParityEven,
+};
+
+typedef struct tagTCFCppRealSerialConnectData
+{
+ eTCFCppFlowControl flowControl;
+ eTCFCppStopBits stopBits;
+ eTCFCppParity parity;
+ DWORD baudRate;
+ DWORD dataBits;
+ char comPort[MAX_COMPORT_SIZE];
+} *pTCFCppRealSerialConnectData, TCFCppRealSerialConnectData;
+
+// Real USB
+#define MAX_USBDEVICE_SIZE (100)
+typedef struct tagTCFCppUSBConnectData
+{
+ char device[MAX_USBDEVICE_SIZE];
+} *pTCFCppUSBConnectData, TCFCppUSBConnectData;
+
+#define MAX_DECODE_FORMAT (16)
+#define MAX_CONNECTION_TYPE (16)
+typedef struct tagTCFCppConnectData
+{
+ long retryInterval; // retry interval in seconds when port access is lost
+ long retryTimeout; // retry timeout in seconds when port access is lost
+ long traceBoxChannel; // Tracebox parameter
+ char decodeFormat[MAX_DECODE_FORMAT]; // protocol decode format on incoming messages
+ char connectType[MAX_CONNECTION_TYPE]; // connection type
+ TCFCppTcpConnectData tcpSettings; // TCP/IP
+ TCFCppVirtualSerialConnectData virtualSerialSettings; // Virtual serial
+ TCFCppRealSerialConnectData realSerialSettings; // Real Serial
+ TCFCppUSBConnectData usbSettings; // Real USB
+} *pTCFCppConnectData, TCFCppConnectData;
+
+// Various options for this client
+// Incoming message handling
+enum eTCFCppUnWrapFormat
+{
+ eTCFCppNone, // return whole message (including protocol)
+ eTCFCppDeleteHeader, // return only message data (excluding headers)
+};
+// Outgoing message encoding options for this client
+enum eTCFCppEncodeFormat
+{
+ eTCFCppEncodeNone, // leave message as-is
+ eTCFCppEncode, // encode message using decode format
+};
+// input stream overflow
+enum eTCPCppStreamOverflowOption
+{
+ eTCPCppStreamOverflowOff, // no overflow to file
+ eTCPCppStreamOverflowOn, // overflow to file
+};
+#define MAX_INPUTSTREAMPATH (2048L)
+
+typedef struct tagTCFCppMessageOptions
+{
+ long inputStreamSize; // input stream size
+// eTCPCppStreamOverflowOption streamOverflowOption; // stream overflow option
+// char overflowFile[MAX_INPUTSTREAMPATH]; // overflow file to use
+ eTCFCppUnWrapFormat unWrapFormat; // message unwrapping option
+ long ostVersion; // OST version to use for decoding messages
+} *pTCFCppMessageOptions, TCFCppMessageOptions;
+
+#define MAX_VERSION_STRING (80)
+#define MAX_MESSAGEIDS (256)
+typedef struct tagTCFCppMessageIds
+{
+ long numberIds;
+ BYTE messageIds[MAX_MESSAGEIDS];
+} *pTCFCppMessageIds, TCFCppMessageIds;
+
+#define MAX_SENDMESSAGE (64*1024L+12)
+typedef struct tagTCFCppMessage
+{
+ eTCFCppEncodeFormat encodeFormat; // encode or do not encode protocol using current protocol
+ long ostVersion; // OST version to use when above and encodeFormat = "ost"
+ BOOL useMyId; // format for protocol
+ BYTE myId; // my message ID to use (if useMyId=true)
+} *pTCFCppMessage, TCFCppMessage;
+
+// APIs
+
+TCF_EXP long TCF_CALL TCFConnect(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId);
+TCF_EXP long TCF_CALL TCFDisconnect(long inClientId);
+TCF_EXP long TCF_CALL TCFGetVersions(long inClientId, long& outNumberVersions, char** outVersions);
+TCF_EXP long TCF_CALL TCFGetConnections(long& outNumberConnections, pTCFCppConnectData* outConnections);
+TCF_EXP long TCF_CALL TCFSendMessage(long inClientId, pTCFCppMessage inMessage, long length, BYTE* data);
+TCF_EXP long TCF_CALL TCFStart(long inClientId);
+TCF_EXP long TCF_CALL TCFStop(long inClientId);
+TCF_EXP long TCF_CALL TCFSetMessageIds(long inClientId, pTCFCppMessageIds inMessageIds);
+TCF_EXP long TCF_CALL TCFPollInputStream(long inClientId, long& outLength);
+TCF_EXP long TCF_CALL TCFReadInputStream(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData);
+TCF_EXP BOOL TCF_CALL TCFPollError(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode);
+
+
+typedef long (*TCFCONNECT)(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId);
+#define TCFCONNECT_FNNAME "TCFConnect"
+
+typedef long (*TCFDISCONNECT)(long inClientId);
+#define TCFDISCONNECT_FNNAME "TCFDisconnect"
+
+typedef long (*TCFGETVERIONS)(long inClientId, long& outNumberVersions, char** outVersions);
+#define TCFGETVERIONS_FNNAME "TCFGetVersions"
+
+typedef long (*TCFGETCONNECTIONS)(long& outNumberConnections, pTCFCppConnectData* outConnections);
+#define TCFGETCONNECTIONS_FNNAME "TCFGetConnections"
+
+typedef long (*TCFSENDMESSAGE)(long inClientId, pTCFCppMessage inMessage, long length, BYTE* data);
+#define TCFSENDMESSAGE_FNNAME "TCFSendMessage"
+
+typedef long (*TCFSTART)(long inClientId);
+#define TCFSTART_FNNAME "TCFStart"
+
+typedef long (*TCFSTOP)(long inClientId);
+#define TCFSTOP_FNNAME "TCFStop"
+
+typedef long (*TCFSETMESSAGEIDS)(long inClientId, pTCFCppMessageIds inMessageIds);
+#define TCFSETMESSAGEIDS_FNNAME "TCFSetMessageIds"
+
+typedef long (*TCFPOLLINPUTSTREAM)(long inClientId, long& outLength);
+#define TCFPOLLINPUTSTREAM_FNNAME "TCFPollInputStream"
+
+typedef long (*TCFREADINPUTSTREAM)(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData);
+#define TCFREADINPUTSTREAM_FNNAME "TCFReadInputStream"
+
+typedef long (*TCFPOLLERROR)(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode);
+#define TCFPOLLERROR_FNNAME "TCFPollError"
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // __TCFCPPAPI_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFClient.dll ..\..\..\os\win32\x86
+copy /V %1\TCFClient.map ..\..\..\os\win32\x86
+copy /V %1\TCFClient.lib ..\..\..\os\win32\x86
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/copyLib.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,10 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+REM copy /V %1\TCFClient.dll ..\..\..\os\win32\x86 already done by project settings
+copy /V %1\TCFClient.map ..\..\..\os\win32\x86
+copy /V %1\TCFClient.lib ..\..\..\os\win32\x86
+echo Copy binaries to ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V ..\..\..\os\win32\x86\TCFClient.dll ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V ..\..\..\os\win32\x86\TCFClient.map ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V ..\..\..\os\win32\x86\TCFClient.lib ..\..\..\..\com.nokia.tcf\os\win32\x86
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/javah_build.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+REM echo off
+
+REM create API
+attrib -R TCAPIConnectionJni.h
+javah -classpath ..\..\..\..\com.nokia.tcf\bin -o TCAPIConnectionJni.h -jni com.nokia.tcf.impl.TCAPIConnection
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jawt.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,278 @@
+/*
+ * @(#)jawt.h 1.10 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JAWT_H_
+#define _JAVASOFT_JAWT_H_
+
+#include "jni.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * AWT native interface (new in JDK 1.3)
+ *
+ * The AWT native interface allows a native C or C++ application a means
+ * by which to access native structures in AWT. This is to facilitate moving
+ * legacy C and C++ applications to Java and to target the needs of the
+ * community who, at present, wish to do their own native rendering to canvases
+ * for performance reasons. Standard extensions such as Java3D also require a
+ * means to access the underlying native data structures of AWT.
+ *
+ * There may be future extensions to this API depending on demand.
+ *
+ * A VM does not have to implement this API in order to pass the JCK.
+ * It is recommended, however, that this API is implemented on VMs that support
+ * standard extensions, such as Java3D.
+ *
+ * Since this is a native API, any program which uses it cannot be considered
+ * 100% pure java.
+ */
+
+/*
+ * AWT Native Drawing Surface (JAWT_DrawingSurface).
+ *
+ * For each platform, there is a native drawing surface structure. This
+ * platform-specific structure can be found in jawt_md.h. It is recommended
+ * that additional platforms follow the same model. It is also recommended
+ * that VMs on Win32 and Solaris support the existing structures in jawt_md.h.
+ *
+ *******************
+ * EXAMPLE OF USAGE:
+ *******************
+ *
+ * In Win32, a programmer wishes to access the HWND of a canvas to perform
+ * native rendering into it. The programmer has declared the paint() method
+ * for their canvas subclass to be native:
+ *
+ *
+ * MyCanvas.java:
+ *
+ * import java.awt.*;
+ *
+ * public class MyCanvas extends Canvas {
+ *
+ * static {
+ * System.loadLibrary("mylib");
+ * }
+ *
+ * public native void paint(Graphics g);
+ * }
+ *
+ *
+ * myfile.c:
+ *
+ * #include "jawt_md.h"
+ * #include <assert.h>
+ *
+ * JNIEXPORT void JNICALL
+ * Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics)
+ * {
+ * JAWT awt;
+ * JAWT_DrawingSurface* ds;
+ * JAWT_DrawingSurfaceInfo* dsi;
+ * JAWT_Win32DrawingSurfaceInfo* dsi_win;
+ * jboolean result;
+ * jint lock;
+ *
+ * // Get the AWT
+ * awt.version = JAWT_VERSION_1_3;
+ * result = JAWT_GetAWT(env, &awt);
+ * assert(result != JNI_FALSE);
+ *
+ * // Get the drawing surface
+ * ds = awt.GetDrawingSurface(env, canvas);
+ * assert(ds != NULL);
+ *
+ * // Lock the drawing surface
+ * lock = ds->Lock(ds);
+ * assert((lock & JAWT_LOCK_ERROR) == 0);
+ *
+ * // Get the drawing surface info
+ * dsi = ds->GetDrawingSurfaceInfo(ds);
+ *
+ * // Get the platform-specific drawing info
+ * dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
+ *
+ * //////////////////////////////
+ * // !!! DO PAINTING HERE !!! //
+ * //////////////////////////////
+ *
+ * // Free the drawing surface info
+ * ds->FreeDrawingSurfaceInfo(dsi);
+ *
+ * // Unlock the drawing surface
+ * ds->Unlock(ds);
+ *
+ * // Free the drawing surface
+ * awt.FreeDrawingSurface(ds);
+ * }
+ *
+ */
+
+/*
+ * JAWT_Rectangle
+ * Structure for a native rectangle.
+ */
+typedef struct jawt_Rectangle {
+ jint x;
+ jint y;
+ jint width;
+ jint height;
+} JAWT_Rectangle;
+
+struct jawt_DrawingSurface;
+
+/*
+ * JAWT_DrawingSurfaceInfo
+ * Structure for containing the underlying drawing information of a component.
+ */
+typedef struct jawt_DrawingSurfaceInfo {
+ /*
+ * Pointer to the platform-specific information. This can be safely
+ * cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a
+ * JAWT_X11DrawingSurfaceInfo on Solaris. See jawt_md.h for details.
+ */
+ void* platformInfo;
+ /* Cached pointer to the underlying drawing surface */
+ struct jawt_DrawingSurface* ds;
+ /* Bounding rectangle of the drawing surface */
+ JAWT_Rectangle bounds;
+ /* Number of rectangles in the clip */
+ jint clipSize;
+ /* Clip rectangle array */
+ JAWT_Rectangle* clip;
+} JAWT_DrawingSurfaceInfo;
+
+#define JAWT_LOCK_ERROR 0x00000001
+#define JAWT_LOCK_CLIP_CHANGED 0x00000002
+#define JAWT_LOCK_BOUNDS_CHANGED 0x00000004
+#define JAWT_LOCK_SURFACE_CHANGED 0x00000008
+
+/*
+ * JAWT_DrawingSurface
+ * Structure for containing the underlying drawing information of a component.
+ * All operations on a JAWT_DrawingSurface MUST be performed from the same
+ * thread as the call to GetDrawingSurface.
+ */
+typedef struct jawt_DrawingSurface {
+ /*
+ * Cached reference to the Java environment of the calling thread.
+ * If Lock(), Unlock(), GetDrawingSurfaceInfo() or
+ * FreeDrawingSurfaceInfo() are called from a different thread,
+ * this data member should be set before calling those functions.
+ */
+ JNIEnv* env;
+ /* Cached reference to the target object */
+ jobject target;
+ /*
+ * Lock the surface of the target component for native rendering.
+ * When finished drawing, the surface must be unlocked with
+ * Unlock(). This function returns a bitmask with one or more of the
+ * following values:
+ *
+ * JAWT_LOCK_ERROR - When an error has occurred and the surface could not
+ * be locked.
+ *
+ * JAWT_LOCK_CLIP_CHANGED - When the clip region has changed.
+ *
+ * JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed.
+ *
+ * JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed
+ */
+ jint (JNICALL *Lock)
+ (struct jawt_DrawingSurface* ds);
+ /*
+ * Get the drawing surface info.
+ * The value returned may be cached, but the values may change if
+ * additional calls to Lock() or Unlock() are made.
+ * Lock() must be called before this can return a valid value.
+ * Returns NULL if an error has occurred.
+ * When finished with the returned value, FreeDrawingSurfaceInfo must be
+ * called.
+ */
+ JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo)
+ (struct jawt_DrawingSurface* ds);
+ /*
+ * Free the drawing surface info.
+ */
+ void (JNICALL *FreeDrawingSurfaceInfo)
+ (JAWT_DrawingSurfaceInfo* dsi);
+ /*
+ * Unlock the drawing surface of the target component for native rendering.
+ */
+ void (JNICALL *Unlock)
+ (struct jawt_DrawingSurface* ds);
+} JAWT_DrawingSurface;
+
+/*
+ * JAWT
+ * Structure for containing native AWT functions.
+ */
+typedef struct jawt {
+ /*
+ * Version of this structure. This must always be set before
+ * calling JAWT_GetAWT()
+ */
+ jint version;
+ /*
+ * Return a drawing surface from a target jobject. This value
+ * may be cached.
+ * Returns NULL if an error has occurred.
+ * Target must be a java.awt.Component (should be a Canvas
+ * or Window for native rendering).
+ * FreeDrawingSurface() must be called when finished with the
+ * returned JAWT_DrawingSurface.
+ */
+ JAWT_DrawingSurface* (JNICALL *GetDrawingSurface)
+ (JNIEnv* env, jobject target);
+ /*
+ * Free the drawing surface allocated in GetDrawingSurface.
+ */
+ void (JNICALL *FreeDrawingSurface)
+ (JAWT_DrawingSurface* ds);
+ /*
+ * Since 1.4
+ * Locks the entire AWT for synchronization purposes
+ */
+ void (JNICALL *Lock)(JNIEnv* env);
+ /*
+ * Since 1.4
+ * Unlocks the entire AWT for synchronization purposes
+ */
+ void (JNICALL *Unlock)(JNIEnv* env);
+ /*
+ * Since 1.4
+ * Returns a reference to a java.awt.Component from a native
+ * platform handle. On Windows, this corresponds to an HWND;
+ * on Solaris and Linux, this is a Drawable. For other platforms,
+ * see the appropriate machine-dependent header file for a description.
+ * The reference returned by this function is a local
+ * reference that is only valid in this environment.
+ * This function returns a NULL reference if no component could be
+ * found with matching platform information.
+ */
+ jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo);
+
+} JAWT;
+
+/*
+ * Get the AWT native structure. This function returns JNI_FALSE if
+ * an error occurs.
+ */
+_JNI_IMPORT_OR_EXPORT_
+jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt);
+
+#define JAWT_VERSION_1_3 0x00010003
+#define JAWT_VERSION_1_4 0x00010004
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* !_JAVASOFT_JAWT_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jdwpTransport.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,237 @@
+/*
+ * @(#)jdwpTransport.h 1.7 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ * Java Debug Wire Protocol Transport Service Provider Interface.
+ */
+
+#ifndef JDWPTRANSPORT_H
+#define JDWPTRANSPORT_H
+
+#include "jni.h"
+
+enum {
+ JDWPTRANSPORT_VERSION_1_0 = 0x00010000
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct jdwpTransportNativeInterface_;
+
+struct _jdwpTransportEnv;
+
+#ifdef __cplusplus
+typedef _jdwpTransportEnv jdwpTransportEnv;
+#else
+typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
+#endif /* __cplusplus */
+
+/*
+ * Errors. Universal errors with JVMTI/JVMDI equivalents keep the
+ * values the same.
+ */
+typedef enum {
+ JDWPTRANSPORT_ERROR_NONE = 0,
+ JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
+ JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
+ JDWPTRANSPORT_ERROR_INTERNAL = 113,
+ JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
+ JDWPTRANSPORT_ERROR_IO_ERROR = 202,
+ JDWPTRANSPORT_ERROR_TIMEOUT = 203,
+ JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
+} jdwpTransportError;
+
+
+/*
+ * Structure to define capabilities
+ */
+typedef struct {
+ unsigned int can_timeout_attach :1;
+ unsigned int can_timeout_accept :1;
+ unsigned int can_timeout_handshake :1;
+ unsigned int reserved3 :1;
+ unsigned int reserved4 :1;
+ unsigned int reserved5 :1;
+ unsigned int reserved6 :1;
+ unsigned int reserved7 :1;
+ unsigned int reserved8 :1;
+ unsigned int reserved9 :1;
+ unsigned int reserved10 :1;
+ unsigned int reserved11 :1;
+ unsigned int reserved12 :1;
+ unsigned int reserved13 :1;
+ unsigned int reserved14 :1;
+ unsigned int reserved15 :1;
+} JDWPTransportCapabilities;
+
+
+/*
+ * Structures to define packet layout.
+ *
+ * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
+ */
+
+enum {
+ JDWPTRANSPORT_FLAGS_NONE = 0x0,
+ JDWPTRANSPORT_FLAGS_REPLY = 0x80
+};
+
+typedef struct {
+ jint len;
+ jint id;
+ jbyte flags;
+ jbyte cmdSet;
+ jbyte cmd;
+ jbyte *data;
+} jdwpCmdPacket;
+
+typedef struct {
+ jint len;
+ jint id;
+ jbyte flags;
+ jshort errorCode;
+ jbyte *data;
+} jdwpReplyPacket;
+
+typedef struct {
+ union {
+ jdwpCmdPacket cmd;
+ jdwpReplyPacket reply;
+ } type;
+} jdwpPacket;
+
+/*
+ * JDWP functions called by the transport.
+ */
+typedef struct jdwpTransportCallback {
+ void *(*alloc)(jint numBytes); /* Call this for all allocations */
+ void (*free)(void *buffer); /* Call this for all deallocations */
+} jdwpTransportCallback;
+
+typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
+ jdwpTransportCallback *callback,
+ jint version,
+ jdwpTransportEnv** env);
+
+
+
+/* Function Interface */
+
+struct jdwpTransportNativeInterface_ {
+ /* 1 : RESERVED */
+ void *reserved1;
+
+ /* 2 : Get Capabilities */
+ jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
+ JDWPTransportCapabilities *capabilities_ptr);
+
+ /* 3 : Attach */
+ jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
+ const char* address,
+ jlong attach_timeout,
+ jlong handshake_timeout);
+
+ /* 4: StartListening */
+ jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
+ const char* address,
+ char** actual_address);
+
+ /* 5: StopListening */
+ jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
+
+ /* 6: Accept */
+ jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
+ jlong accept_timeout,
+ jlong handshake_timeout);
+
+ /* 7: IsOpen */
+ jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
+
+ /* 8: Close */
+ jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
+
+ /* 9: ReadPacket */
+ jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
+ jdwpPacket *pkt);
+
+ /* 10: Write Packet */
+ jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
+ const jdwpPacket* pkt);
+
+ /* 11: GetLastError */
+ jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
+ char** error);
+
+};
+
+
+/*
+ * Use inlined functions so that C++ code can use syntax such as
+ * env->Attach("mymachine:5000", 10*1000, 0);
+ *
+ * rather than using C's :-
+ *
+ * (*env)->Attach(env, "mymachine:5000", 10*1000, 0);
+ */
+struct _jdwpTransportEnv {
+ const struct jdwpTransportNativeInterface_ *functions;
+#ifdef __cplusplus
+
+ jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
+ return functions->GetCapabilities(this, capabilities_ptr);
+ }
+
+ jdwpTransportError Attach(const char* address, jlong attach_timeout,
+ jlong handshake_timeout) {
+ return functions->Attach(this, address, attach_timeout, handshake_timeout);
+ }
+
+ jdwpTransportError StartListening(const char* address,
+ char** actual_address) {
+ return functions->StartListening(this, address, actual_address);
+ }
+
+ jdwpTransportError StopListening(void) {
+ return functions->StopListening(this);
+ }
+
+ jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
+ return functions->Accept(this, accept_timeout, handshake_timeout);
+ }
+
+ jboolean IsOpen(void) {
+ return functions->IsOpen(this);
+ }
+
+ jdwpTransportError Close(void) {
+ return functions->Close(this);
+ }
+
+ jdwpTransportError ReadPacket(jdwpPacket *pkt) {
+ return functions->ReadPacket(this, pkt);
+ }
+
+ jdwpTransportError WritePacket(const jdwpPacket* pkt) {
+ return functions->WritePacket(this, pkt);
+ }
+
+ jdwpTransportError GetLastError(char** error) {
+ return functions->GetLastError(this, error);
+ }
+
+
+#endif /* __cplusplus */
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* JDWPTRANSPORT_H */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jni.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,1951 @@
+/*
+ * @(#)jni.h 1.56 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ * We used part of Netscape's Java Runtime Interface (JRI) as the starting
+ * point of our design and implementation.
+ */
+
+/******************************************************************************
+ * Java Runtime Interface
+ * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
+ *****************************************************************************/
+
+#ifndef _JAVASOFT_JNI_H_
+#define _JAVASOFT_JNI_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* jni_md.h contains the machine-dependent typedefs for jbyte, jint
+ and jlong */
+
+#include "jni_md.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * JNI Types
+ */
+
+#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
+
+typedef unsigned char jboolean;
+typedef unsigned short jchar;
+typedef short jshort;
+typedef float jfloat;
+typedef double jdouble;
+
+typedef jint jsize;
+
+#ifdef __cplusplus
+
+class _jobject {};
+class _jclass : public _jobject {};
+class _jthrowable : public _jobject {};
+class _jstring : public _jobject {};
+class _jarray : public _jobject {};
+class _jbooleanArray : public _jarray {};
+class _jbyteArray : public _jarray {};
+class _jcharArray : public _jarray {};
+class _jshortArray : public _jarray {};
+class _jintArray : public _jarray {};
+class _jlongArray : public _jarray {};
+class _jfloatArray : public _jarray {};
+class _jdoubleArray : public _jarray {};
+class _jobjectArray : public _jarray {};
+
+typedef _jobject *jobject;
+typedef _jclass *jclass;
+typedef _jthrowable *jthrowable;
+typedef _jstring *jstring;
+typedef _jarray *jarray;
+typedef _jbooleanArray *jbooleanArray;
+typedef _jbyteArray *jbyteArray;
+typedef _jcharArray *jcharArray;
+typedef _jshortArray *jshortArray;
+typedef _jintArray *jintArray;
+typedef _jlongArray *jlongArray;
+typedef _jfloatArray *jfloatArray;
+typedef _jdoubleArray *jdoubleArray;
+typedef _jobjectArray *jobjectArray;
+
+#else
+
+struct _jobject;
+
+typedef struct _jobject *jobject;
+typedef jobject jclass;
+typedef jobject jthrowable;
+typedef jobject jstring;
+typedef jobject jarray;
+typedef jarray jbooleanArray;
+typedef jarray jbyteArray;
+typedef jarray jcharArray;
+typedef jarray jshortArray;
+typedef jarray jintArray;
+typedef jarray jlongArray;
+typedef jarray jfloatArray;
+typedef jarray jdoubleArray;
+typedef jarray jobjectArray;
+
+#endif
+
+typedef jobject jweak;
+
+typedef union jvalue {
+ jboolean z;
+ jbyte b;
+ jchar c;
+ jshort s;
+ jint i;
+ jlong j;
+ jfloat f;
+ jdouble d;
+ jobject l;
+} jvalue;
+
+struct _jfieldID;
+typedef struct _jfieldID *jfieldID;
+
+struct _jmethodID;
+typedef struct _jmethodID *jmethodID;
+
+#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
+
+/*
+ * jboolean constants
+ */
+
+#define JNI_FALSE 0
+#define JNI_TRUE 1
+
+/*
+ * possible return values for JNI functions.
+ */
+
+#define JNI_OK 0 /* success */
+#define JNI_ERR (-1) /* unknown error */
+#define JNI_EDETACHED (-2) /* thread detached from the VM */
+#define JNI_EVERSION (-3) /* JNI version error */
+#define JNI_ENOMEM (-4) /* not enough memory */
+#define JNI_EEXIST (-5) /* VM already created */
+#define JNI_EINVAL (-6) /* invalid arguments */
+
+/*
+ * used in ReleaseScalarArrayElements
+ */
+
+#define JNI_COMMIT 1
+#define JNI_ABORT 2
+
+/*
+ * used in RegisterNatives to describe native method name, signature,
+ * and function pointer.
+ */
+
+typedef struct {
+ char *name;
+ char *signature;
+ void *fnPtr;
+} JNINativeMethod;
+
+/*
+ * JNI Native Method Interface.
+ */
+
+struct JNINativeInterface_;
+
+struct JNIEnv_;
+
+#ifdef __cplusplus
+typedef JNIEnv_ JNIEnv;
+#else
+typedef const struct JNINativeInterface_ *JNIEnv;
+#endif
+
+/*
+ * JNI Invocation Interface.
+ */
+
+struct JNIInvokeInterface_;
+
+struct JavaVM_;
+
+#ifdef __cplusplus
+typedef JavaVM_ JavaVM;
+#else
+typedef const struct JNIInvokeInterface_ *JavaVM;
+#endif
+
+struct JNINativeInterface_ {
+ void *reserved0;
+ void *reserved1;
+ void *reserved2;
+
+ void *reserved3;
+ jint (JNICALL *GetVersion)(JNIEnv *env);
+
+ jclass (JNICALL *DefineClass)
+ (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
+ jsize len);
+ jclass (JNICALL *FindClass)
+ (JNIEnv *env, const char *name);
+
+ jmethodID (JNICALL *FromReflectedMethod)
+ (JNIEnv *env, jobject method);
+ jfieldID (JNICALL *FromReflectedField)
+ (JNIEnv *env, jobject field);
+
+ jobject (JNICALL *ToReflectedMethod)
+ (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
+
+ jclass (JNICALL *GetSuperclass)
+ (JNIEnv *env, jclass sub);
+ jboolean (JNICALL *IsAssignableFrom)
+ (JNIEnv *env, jclass sub, jclass sup);
+
+ jobject (JNICALL *ToReflectedField)
+ (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
+
+ jint (JNICALL *Throw)
+ (JNIEnv *env, jthrowable obj);
+ jint (JNICALL *ThrowNew)
+ (JNIEnv *env, jclass clazz, const char *msg);
+ jthrowable (JNICALL *ExceptionOccurred)
+ (JNIEnv *env);
+ void (JNICALL *ExceptionDescribe)
+ (JNIEnv *env);
+ void (JNICALL *ExceptionClear)
+ (JNIEnv *env);
+ void (JNICALL *FatalError)
+ (JNIEnv *env, const char *msg);
+
+ jint (JNICALL *PushLocalFrame)
+ (JNIEnv *env, jint capacity);
+ jobject (JNICALL *PopLocalFrame)
+ (JNIEnv *env, jobject result);
+
+ jobject (JNICALL *NewGlobalRef)
+ (JNIEnv *env, jobject lobj);
+ void (JNICALL *DeleteGlobalRef)
+ (JNIEnv *env, jobject gref);
+ void (JNICALL *DeleteLocalRef)
+ (JNIEnv *env, jobject obj);
+ jboolean (JNICALL *IsSameObject)
+ (JNIEnv *env, jobject obj1, jobject obj2);
+ jobject (JNICALL *NewLocalRef)
+ (JNIEnv *env, jobject ref);
+ jint (JNICALL *EnsureLocalCapacity)
+ (JNIEnv *env, jint capacity);
+
+ jobject (JNICALL *AllocObject)
+ (JNIEnv *env, jclass clazz);
+ jobject (JNICALL *NewObject)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *NewObjectV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jobject (JNICALL *NewObjectA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jclass (JNICALL *GetObjectClass)
+ (JNIEnv *env, jobject obj);
+ jboolean (JNICALL *IsInstanceOf)
+ (JNIEnv *env, jobject obj, jclass clazz);
+
+ jmethodID (JNICALL *GetMethodID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *CallObjectMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jobject (JNICALL *CallObjectMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jobject (JNICALL *CallObjectMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+ jboolean (JNICALL *CallBooleanMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jboolean (JNICALL *CallBooleanMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jboolean (JNICALL *CallBooleanMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+ jbyte (JNICALL *CallByteMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jbyte (JNICALL *CallByteMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jbyte (JNICALL *CallByteMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jchar (JNICALL *CallCharMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jchar (JNICALL *CallCharMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jchar (JNICALL *CallCharMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jshort (JNICALL *CallShortMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jshort (JNICALL *CallShortMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jshort (JNICALL *CallShortMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jint (JNICALL *CallIntMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jint (JNICALL *CallIntMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jint (JNICALL *CallIntMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jlong (JNICALL *CallLongMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jlong (JNICALL *CallLongMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jlong (JNICALL *CallLongMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jfloat (JNICALL *CallFloatMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jfloat (JNICALL *CallFloatMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jfloat (JNICALL *CallFloatMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ jdouble (JNICALL *CallDoubleMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jdouble (JNICALL *CallDoubleMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jdouble (JNICALL *CallDoubleMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+ void (JNICALL *CallVoidMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ void (JNICALL *CallVoidMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ void (JNICALL *CallVoidMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+ jobject (JNICALL *CallNonvirtualObjectMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *CallNonvirtualObjectMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jobject (JNICALL *CallNonvirtualObjectMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue * args);
+
+ jboolean (JNICALL *CallNonvirtualBooleanMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jboolean (JNICALL *CallNonvirtualBooleanMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jboolean (JNICALL *CallNonvirtualBooleanMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue * args);
+
+ jbyte (JNICALL *CallNonvirtualByteMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jbyte (JNICALL *CallNonvirtualByteMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jbyte (JNICALL *CallNonvirtualByteMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jchar (JNICALL *CallNonvirtualCharMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jchar (JNICALL *CallNonvirtualCharMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jchar (JNICALL *CallNonvirtualCharMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jshort (JNICALL *CallNonvirtualShortMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jshort (JNICALL *CallNonvirtualShortMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jshort (JNICALL *CallNonvirtualShortMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jint (JNICALL *CallNonvirtualIntMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jint (JNICALL *CallNonvirtualIntMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jint (JNICALL *CallNonvirtualIntMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jlong (JNICALL *CallNonvirtualLongMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jlong (JNICALL *CallNonvirtualLongMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jlong (JNICALL *CallNonvirtualLongMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jfloat (JNICALL *CallNonvirtualFloatMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jfloat (JNICALL *CallNonvirtualFloatMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jfloat (JNICALL *CallNonvirtualFloatMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ jdouble (JNICALL *CallNonvirtualDoubleMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jdouble (JNICALL *CallNonvirtualDoubleMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jdouble (JNICALL *CallNonvirtualDoubleMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue *args);
+
+ void (JNICALL *CallNonvirtualVoidMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ void (JNICALL *CallNonvirtualVoidMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ void (JNICALL *CallNonvirtualVoidMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ const jvalue * args);
+
+ jfieldID (JNICALL *GetFieldID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *GetObjectField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jboolean (JNICALL *GetBooleanField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jbyte (JNICALL *GetByteField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jchar (JNICALL *GetCharField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jshort (JNICALL *GetShortField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jint (JNICALL *GetIntField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jlong (JNICALL *GetLongField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jfloat (JNICALL *GetFloatField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jdouble (JNICALL *GetDoubleField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+
+ void (JNICALL *SetObjectField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
+ void (JNICALL *SetBooleanField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
+ void (JNICALL *SetByteField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
+ void (JNICALL *SetCharField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
+ void (JNICALL *SetShortField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
+ void (JNICALL *SetIntField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
+ void (JNICALL *SetLongField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
+ void (JNICALL *SetFloatField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
+ void (JNICALL *SetDoubleField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
+
+ jmethodID (JNICALL *GetStaticMethodID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *CallStaticObjectMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *CallStaticObjectMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jobject (JNICALL *CallStaticObjectMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jboolean (JNICALL *CallStaticBooleanMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jboolean (JNICALL *CallStaticBooleanMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jboolean (JNICALL *CallStaticBooleanMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jbyte (JNICALL *CallStaticByteMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jbyte (JNICALL *CallStaticByteMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jbyte (JNICALL *CallStaticByteMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jchar (JNICALL *CallStaticCharMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jchar (JNICALL *CallStaticCharMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jchar (JNICALL *CallStaticCharMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jshort (JNICALL *CallStaticShortMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jshort (JNICALL *CallStaticShortMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jshort (JNICALL *CallStaticShortMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jint (JNICALL *CallStaticIntMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jint (JNICALL *CallStaticIntMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jint (JNICALL *CallStaticIntMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jlong (JNICALL *CallStaticLongMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jlong (JNICALL *CallStaticLongMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jlong (JNICALL *CallStaticLongMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jfloat (JNICALL *CallStaticFloatMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jfloat (JNICALL *CallStaticFloatMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jfloat (JNICALL *CallStaticFloatMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ jdouble (JNICALL *CallStaticDoubleMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jdouble (JNICALL *CallStaticDoubleMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jdouble (JNICALL *CallStaticDoubleMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+ void (JNICALL *CallStaticVoidMethod)
+ (JNIEnv *env, jclass cls, jmethodID methodID, ...);
+ void (JNICALL *CallStaticVoidMethodV)
+ (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
+ void (JNICALL *CallStaticVoidMethodA)
+ (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
+
+ jfieldID (JNICALL *GetStaticFieldID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+ jobject (JNICALL *GetStaticObjectField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jboolean (JNICALL *GetStaticBooleanField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jbyte (JNICALL *GetStaticByteField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jchar (JNICALL *GetStaticCharField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jshort (JNICALL *GetStaticShortField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jint (JNICALL *GetStaticIntField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jlong (JNICALL *GetStaticLongField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jfloat (JNICALL *GetStaticFloatField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jdouble (JNICALL *GetStaticDoubleField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+
+ void (JNICALL *SetStaticObjectField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
+ void (JNICALL *SetStaticBooleanField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
+ void (JNICALL *SetStaticByteField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
+ void (JNICALL *SetStaticCharField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
+ void (JNICALL *SetStaticShortField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
+ void (JNICALL *SetStaticIntField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
+ void (JNICALL *SetStaticLongField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
+ void (JNICALL *SetStaticFloatField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
+ void (JNICALL *SetStaticDoubleField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
+
+ jstring (JNICALL *NewString)
+ (JNIEnv *env, const jchar *unicode, jsize len);
+ jsize (JNICALL *GetStringLength)
+ (JNIEnv *env, jstring str);
+ const jchar *(JNICALL *GetStringChars)
+ (JNIEnv *env, jstring str, jboolean *isCopy);
+ void (JNICALL *ReleaseStringChars)
+ (JNIEnv *env, jstring str, const jchar *chars);
+
+ jstring (JNICALL *NewStringUTF)
+ (JNIEnv *env, const char *utf);
+ jsize (JNICALL *GetStringUTFLength)
+ (JNIEnv *env, jstring str);
+ const char* (JNICALL *GetStringUTFChars)
+ (JNIEnv *env, jstring str, jboolean *isCopy);
+ void (JNICALL *ReleaseStringUTFChars)
+ (JNIEnv *env, jstring str, const char* chars);
+
+
+ jsize (JNICALL *GetArrayLength)
+ (JNIEnv *env, jarray array);
+
+ jobjectArray (JNICALL *NewObjectArray)
+ (JNIEnv *env, jsize len, jclass clazz, jobject init);
+ jobject (JNICALL *GetObjectArrayElement)
+ (JNIEnv *env, jobjectArray array, jsize index);
+ void (JNICALL *SetObjectArrayElement)
+ (JNIEnv *env, jobjectArray array, jsize index, jobject val);
+
+ jbooleanArray (JNICALL *NewBooleanArray)
+ (JNIEnv *env, jsize len);
+ jbyteArray (JNICALL *NewByteArray)
+ (JNIEnv *env, jsize len);
+ jcharArray (JNICALL *NewCharArray)
+ (JNIEnv *env, jsize len);
+ jshortArray (JNICALL *NewShortArray)
+ (JNIEnv *env, jsize len);
+ jintArray (JNICALL *NewIntArray)
+ (JNIEnv *env, jsize len);
+ jlongArray (JNICALL *NewLongArray)
+ (JNIEnv *env, jsize len);
+ jfloatArray (JNICALL *NewFloatArray)
+ (JNIEnv *env, jsize len);
+ jdoubleArray (JNICALL *NewDoubleArray)
+ (JNIEnv *env, jsize len);
+
+ jboolean * (JNICALL *GetBooleanArrayElements)
+ (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
+ jbyte * (JNICALL *GetByteArrayElements)
+ (JNIEnv *env, jbyteArray array, jboolean *isCopy);
+ jchar * (JNICALL *GetCharArrayElements)
+ (JNIEnv *env, jcharArray array, jboolean *isCopy);
+ jshort * (JNICALL *GetShortArrayElements)
+ (JNIEnv *env, jshortArray array, jboolean *isCopy);
+ jint * (JNICALL *GetIntArrayElements)
+ (JNIEnv *env, jintArray array, jboolean *isCopy);
+ jlong * (JNICALL *GetLongArrayElements)
+ (JNIEnv *env, jlongArray array, jboolean *isCopy);
+ jfloat * (JNICALL *GetFloatArrayElements)
+ (JNIEnv *env, jfloatArray array, jboolean *isCopy);
+ jdouble * (JNICALL *GetDoubleArrayElements)
+ (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
+
+ void (JNICALL *ReleaseBooleanArrayElements)
+ (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
+ void (JNICALL *ReleaseByteArrayElements)
+ (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
+ void (JNICALL *ReleaseCharArrayElements)
+ (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
+ void (JNICALL *ReleaseShortArrayElements)
+ (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
+ void (JNICALL *ReleaseIntArrayElements)
+ (JNIEnv *env, jintArray array, jint *elems, jint mode);
+ void (JNICALL *ReleaseLongArrayElements)
+ (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
+ void (JNICALL *ReleaseFloatArrayElements)
+ (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
+ void (JNICALL *ReleaseDoubleArrayElements)
+ (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
+
+ void (JNICALL *GetBooleanArrayRegion)
+ (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
+ void (JNICALL *GetByteArrayRegion)
+ (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
+ void (JNICALL *GetCharArrayRegion)
+ (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
+ void (JNICALL *GetShortArrayRegion)
+ (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
+ void (JNICALL *GetIntArrayRegion)
+ (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
+ void (JNICALL *GetLongArrayRegion)
+ (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
+ void (JNICALL *GetFloatArrayRegion)
+ (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
+ void (JNICALL *GetDoubleArrayRegion)
+ (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
+
+ void (JNICALL *SetBooleanArrayRegion)
+ (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
+ void (JNICALL *SetByteArrayRegion)
+ (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
+ void (JNICALL *SetCharArrayRegion)
+ (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
+ void (JNICALL *SetShortArrayRegion)
+ (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
+ void (JNICALL *SetIntArrayRegion)
+ (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
+ void (JNICALL *SetLongArrayRegion)
+ (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
+ void (JNICALL *SetFloatArrayRegion)
+ (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
+ void (JNICALL *SetDoubleArrayRegion)
+ (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
+
+ jint (JNICALL *RegisterNatives)
+ (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
+ jint nMethods);
+ jint (JNICALL *UnregisterNatives)
+ (JNIEnv *env, jclass clazz);
+
+ jint (JNICALL *MonitorEnter)
+ (JNIEnv *env, jobject obj);
+ jint (JNICALL *MonitorExit)
+ (JNIEnv *env, jobject obj);
+
+ jint (JNICALL *GetJavaVM)
+ (JNIEnv *env, JavaVM **vm);
+
+ void (JNICALL *GetStringRegion)
+ (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
+ void (JNICALL *GetStringUTFRegion)
+ (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
+
+ void * (JNICALL *GetPrimitiveArrayCritical)
+ (JNIEnv *env, jarray array, jboolean *isCopy);
+ void (JNICALL *ReleasePrimitiveArrayCritical)
+ (JNIEnv *env, jarray array, void *carray, jint mode);
+
+ const jchar * (JNICALL *GetStringCritical)
+ (JNIEnv *env, jstring string, jboolean *isCopy);
+ void (JNICALL *ReleaseStringCritical)
+ (JNIEnv *env, jstring string, const jchar *cstring);
+
+ jweak (JNICALL *NewWeakGlobalRef)
+ (JNIEnv *env, jobject obj);
+ void (JNICALL *DeleteWeakGlobalRef)
+ (JNIEnv *env, jweak ref);
+
+ jboolean (JNICALL *ExceptionCheck)
+ (JNIEnv *env);
+
+ jobject (JNICALL *NewDirectByteBuffer)
+ (JNIEnv* env, void* address, jlong capacity);
+ void* (JNICALL *GetDirectBufferAddress)
+ (JNIEnv* env, jobject buf);
+ jlong (JNICALL *GetDirectBufferCapacity)
+ (JNIEnv* env, jobject buf);
+};
+
+/*
+ * We use inlined functions for C++ so that programmers can write:
+ *
+ * env->FindClass("java/lang/String")
+ *
+ * in C++ rather than:
+ *
+ * (*env)->FindClass(env, "java/lang/String")
+ *
+ * in C.
+ */
+
+struct JNIEnv_ {
+ const struct JNINativeInterface_ *functions;
+#ifdef __cplusplus
+
+ jint GetVersion() {
+ return functions->GetVersion(this);
+ }
+ jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
+ jsize len) {
+ return functions->DefineClass(this, name, loader, buf, len);
+ }
+ jclass FindClass(const char *name) {
+ return functions->FindClass(this, name);
+ }
+ jmethodID FromReflectedMethod(jobject method) {
+ return functions->FromReflectedMethod(this,method);
+ }
+ jfieldID FromReflectedField(jobject field) {
+ return functions->FromReflectedField(this,field);
+ }
+
+ jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
+ return functions->ToReflectedMethod(this, cls, methodID, isStatic);
+ }
+
+ jclass GetSuperclass(jclass sub) {
+ return functions->GetSuperclass(this, sub);
+ }
+ jboolean IsAssignableFrom(jclass sub, jclass sup) {
+ return functions->IsAssignableFrom(this, sub, sup);
+ }
+
+ jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
+ return functions->ToReflectedField(this,cls,fieldID,isStatic);
+ }
+
+ jint Throw(jthrowable obj) {
+ return functions->Throw(this, obj);
+ }
+ jint ThrowNew(jclass clazz, const char *msg) {
+ return functions->ThrowNew(this, clazz, msg);
+ }
+ jthrowable ExceptionOccurred() {
+ return functions->ExceptionOccurred(this);
+ }
+ void ExceptionDescribe() {
+ functions->ExceptionDescribe(this);
+ }
+ void ExceptionClear() {
+ functions->ExceptionClear(this);
+ }
+ void FatalError(const char *msg) {
+ functions->FatalError(this, msg);
+ }
+
+ jint PushLocalFrame(jint capacity) {
+ return functions->PushLocalFrame(this,capacity);
+ }
+ jobject PopLocalFrame(jobject result) {
+ return functions->PopLocalFrame(this,result);
+ }
+
+ jobject NewGlobalRef(jobject lobj) {
+ return functions->NewGlobalRef(this,lobj);
+ }
+ void DeleteGlobalRef(jobject gref) {
+ functions->DeleteGlobalRef(this,gref);
+ }
+ void DeleteLocalRef(jobject obj) {
+ functions->DeleteLocalRef(this, obj);
+ }
+
+ jboolean IsSameObject(jobject obj1, jobject obj2) {
+ return functions->IsSameObject(this,obj1,obj2);
+ }
+
+ jobject NewLocalRef(jobject ref) {
+ return functions->NewLocalRef(this,ref);
+ }
+ jint EnsureLocalCapacity(jint capacity) {
+ return functions->EnsureLocalCapacity(this,capacity);
+ }
+
+ jobject AllocObject(jclass clazz) {
+ return functions->AllocObject(this,clazz);
+ }
+ jobject NewObject(jclass clazz, jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args, methodID);
+ result = functions->NewObjectV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject NewObjectV(jclass clazz, jmethodID methodID,
+ va_list args) {
+ return functions->NewObjectV(this,clazz,methodID,args);
+ }
+ jobject NewObjectA(jclass clazz, jmethodID methodID,
+ const jvalue *args) {
+ return functions->NewObjectA(this,clazz,methodID,args);
+ }
+
+ jclass GetObjectClass(jobject obj) {
+ return functions->GetObjectClass(this,obj);
+ }
+ jboolean IsInstanceOf(jobject obj, jclass clazz) {
+ return functions->IsInstanceOf(this,obj,clazz);
+ }
+
+ jmethodID GetMethodID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetMethodID(this,clazz,name,sig);
+ }
+
+ jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallObjectMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallObjectMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallObjectMethodV(this,obj,methodID,args);
+ }
+ jobject CallObjectMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallObjectMethodA(this,obj,methodID,args);
+ }
+
+ jboolean CallBooleanMethod(jobject obj,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallBooleanMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallBooleanMethodV(this,obj,methodID,args);
+ }
+ jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallBooleanMethodA(this,obj,methodID, args);
+ }
+
+ jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallByteMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallByteMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallByteMethodV(this,obj,methodID,args);
+ }
+ jbyte CallByteMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallByteMethodA(this,obj,methodID,args);
+ }
+
+ jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallCharMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallCharMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallCharMethodV(this,obj,methodID,args);
+ }
+ jchar CallCharMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallCharMethodA(this,obj,methodID,args);
+ }
+
+ jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallShortMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallShortMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallShortMethodV(this,obj,methodID,args);
+ }
+ jshort CallShortMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallShortMethodA(this,obj,methodID,args);
+ }
+
+ jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallIntMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallIntMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallIntMethodV(this,obj,methodID,args);
+ }
+ jint CallIntMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallIntMethodA(this,obj,methodID,args);
+ }
+
+ jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallLongMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallLongMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallLongMethodV(this,obj,methodID,args);
+ }
+ jlong CallLongMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallLongMethodA(this,obj,methodID,args);
+ }
+
+ jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallFloatMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallFloatMethodV(this,obj,methodID,args);
+ }
+ jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallFloatMethodA(this,obj,methodID,args);
+ }
+
+ jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallDoubleMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallDoubleMethodV(this,obj,methodID,args);
+ }
+ jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallDoubleMethodA(this,obj,methodID,args);
+ }
+
+ void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallVoidMethodV(this,obj,methodID,args);
+ va_end(args);
+ }
+ void CallVoidMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ functions->CallVoidMethodV(this,obj,methodID,args);
+ }
+ void CallVoidMethodA(jobject obj, jmethodID methodID,
+ const jvalue * args) {
+ functions->CallVoidMethodA(this,obj,methodID,args);
+ }
+
+ jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
+ methodID, args);
+ }
+
+ jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualByteMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualByteMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualCharMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualCharMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualShortMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualShortMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualIntMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualIntMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualLongMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, const jvalue * args) {
+ return functions->CallNonvirtualLongMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ const jvalue * args) {
+ return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+ va_end(args);
+ }
+ void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+ }
+ void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ const jvalue * args) {
+ functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
+ }
+
+ jfieldID GetFieldID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetFieldID(this,clazz,name,sig);
+ }
+
+ jobject GetObjectField(jobject obj, jfieldID fieldID) {
+ return functions->GetObjectField(this,obj,fieldID);
+ }
+ jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
+ return functions->GetBooleanField(this,obj,fieldID);
+ }
+ jbyte GetByteField(jobject obj, jfieldID fieldID) {
+ return functions->GetByteField(this,obj,fieldID);
+ }
+ jchar GetCharField(jobject obj, jfieldID fieldID) {
+ return functions->GetCharField(this,obj,fieldID);
+ }
+ jshort GetShortField(jobject obj, jfieldID fieldID) {
+ return functions->GetShortField(this,obj,fieldID);
+ }
+ jint GetIntField(jobject obj, jfieldID fieldID) {
+ return functions->GetIntField(this,obj,fieldID);
+ }
+ jlong GetLongField(jobject obj, jfieldID fieldID) {
+ return functions->GetLongField(this,obj,fieldID);
+ }
+ jfloat GetFloatField(jobject obj, jfieldID fieldID) {
+ return functions->GetFloatField(this,obj,fieldID);
+ }
+ jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
+ return functions->GetDoubleField(this,obj,fieldID);
+ }
+
+ void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
+ functions->SetObjectField(this,obj,fieldID,val);
+ }
+ void SetBooleanField(jobject obj, jfieldID fieldID,
+ jboolean val) {
+ functions->SetBooleanField(this,obj,fieldID,val);
+ }
+ void SetByteField(jobject obj, jfieldID fieldID,
+ jbyte val) {
+ functions->SetByteField(this,obj,fieldID,val);
+ }
+ void SetCharField(jobject obj, jfieldID fieldID,
+ jchar val) {
+ functions->SetCharField(this,obj,fieldID,val);
+ }
+ void SetShortField(jobject obj, jfieldID fieldID,
+ jshort val) {
+ functions->SetShortField(this,obj,fieldID,val);
+ }
+ void SetIntField(jobject obj, jfieldID fieldID,
+ jint val) {
+ functions->SetIntField(this,obj,fieldID,val);
+ }
+ void SetLongField(jobject obj, jfieldID fieldID,
+ jlong val) {
+ functions->SetLongField(this,obj,fieldID,val);
+ }
+ void SetFloatField(jobject obj, jfieldID fieldID,
+ jfloat val) {
+ functions->SetFloatField(this,obj,fieldID,val);
+ }
+ void SetDoubleField(jobject obj, jfieldID fieldID,
+ jdouble val) {
+ functions->SetDoubleField(this,obj,fieldID,val);
+ }
+
+ jmethodID GetStaticMethodID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetStaticMethodID(this,clazz,name,sig);
+ }
+
+ jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
+ ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
+ va_list args) {
+ return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+ }
+ jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
+ const jvalue *args) {
+ return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
+ }
+
+ jboolean CallStaticBooleanMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallStaticBooleanMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+ }
+ jboolean CallStaticBooleanMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
+ }
+
+ jbyte CallStaticByteMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallStaticByteMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticByteMethodV(this,clazz,methodID,args);
+ }
+ jbyte CallStaticByteMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticByteMethodA(this,clazz,methodID,args);
+ }
+
+ jchar CallStaticCharMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallStaticCharMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticCharMethodV(this,clazz,methodID,args);
+ }
+ jchar CallStaticCharMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticCharMethodA(this,clazz,methodID,args);
+ }
+
+ jshort CallStaticShortMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallStaticShortMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticShortMethodV(this,clazz,methodID,args);
+ }
+ jshort CallStaticShortMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticShortMethodA(this,clazz,methodID,args);
+ }
+
+ jint CallStaticIntMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallStaticIntMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticIntMethodV(this,clazz,methodID,args);
+ }
+ jint CallStaticIntMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticIntMethodA(this,clazz,methodID,args);
+ }
+
+ jlong CallStaticLongMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallStaticLongMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticLongMethodV(this,clazz,methodID,args);
+ }
+ jlong CallStaticLongMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticLongMethodA(this,clazz,methodID,args);
+ }
+
+ jfloat CallStaticFloatMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallStaticFloatMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+ }
+ jfloat CallStaticFloatMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
+ }
+
+ jdouble CallStaticDoubleMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallStaticDoubleMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+ }
+ jdouble CallStaticDoubleMethodA(jclass clazz,
+ jmethodID methodID, const jvalue *args) {
+ return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
+ }
+
+ void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallStaticVoidMethodV(this,cls,methodID,args);
+ va_end(args);
+ }
+ void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
+ va_list args) {
+ functions->CallStaticVoidMethodV(this,cls,methodID,args);
+ }
+ void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
+ const jvalue * args) {
+ functions->CallStaticVoidMethodA(this,cls,methodID,args);
+ }
+
+ jfieldID GetStaticFieldID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetStaticFieldID(this,clazz,name,sig);
+ }
+ jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticObjectField(this,clazz,fieldID);
+ }
+ jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticBooleanField(this,clazz,fieldID);
+ }
+ jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticByteField(this,clazz,fieldID);
+ }
+ jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticCharField(this,clazz,fieldID);
+ }
+ jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticShortField(this,clazz,fieldID);
+ }
+ jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticIntField(this,clazz,fieldID);
+ }
+ jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticLongField(this,clazz,fieldID);
+ }
+ jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticFloatField(this,clazz,fieldID);
+ }
+ jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticDoubleField(this,clazz,fieldID);
+ }
+
+ void SetStaticObjectField(jclass clazz, jfieldID fieldID,
+ jobject value) {
+ functions->SetStaticObjectField(this,clazz,fieldID,value);
+ }
+ void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
+ jboolean value) {
+ functions->SetStaticBooleanField(this,clazz,fieldID,value);
+ }
+ void SetStaticByteField(jclass clazz, jfieldID fieldID,
+ jbyte value) {
+ functions->SetStaticByteField(this,clazz,fieldID,value);
+ }
+ void SetStaticCharField(jclass clazz, jfieldID fieldID,
+ jchar value) {
+ functions->SetStaticCharField(this,clazz,fieldID,value);
+ }
+ void SetStaticShortField(jclass clazz, jfieldID fieldID,
+ jshort value) {
+ functions->SetStaticShortField(this,clazz,fieldID,value);
+ }
+ void SetStaticIntField(jclass clazz, jfieldID fieldID,
+ jint value) {
+ functions->SetStaticIntField(this,clazz,fieldID,value);
+ }
+ void SetStaticLongField(jclass clazz, jfieldID fieldID,
+ jlong value) {
+ functions->SetStaticLongField(this,clazz,fieldID,value);
+ }
+ void SetStaticFloatField(jclass clazz, jfieldID fieldID,
+ jfloat value) {
+ functions->SetStaticFloatField(this,clazz,fieldID,value);
+ }
+ void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
+ jdouble value) {
+ functions->SetStaticDoubleField(this,clazz,fieldID,value);
+ }
+
+ jstring NewString(const jchar *unicode, jsize len) {
+ return functions->NewString(this,unicode,len);
+ }
+ jsize GetStringLength(jstring str) {
+ return functions->GetStringLength(this,str);
+ }
+ const jchar *GetStringChars(jstring str, jboolean *isCopy) {
+ return functions->GetStringChars(this,str,isCopy);
+ }
+ void ReleaseStringChars(jstring str, const jchar *chars) {
+ functions->ReleaseStringChars(this,str,chars);
+ }
+
+ jstring NewStringUTF(const char *utf) {
+ return functions->NewStringUTF(this,utf);
+ }
+ jsize GetStringUTFLength(jstring str) {
+ return functions->GetStringUTFLength(this,str);
+ }
+ const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
+ return functions->GetStringUTFChars(this,str,isCopy);
+ }
+ void ReleaseStringUTFChars(jstring str, const char* chars) {
+ functions->ReleaseStringUTFChars(this,str,chars);
+ }
+
+ jsize GetArrayLength(jarray array) {
+ return functions->GetArrayLength(this,array);
+ }
+
+ jobjectArray NewObjectArray(jsize len, jclass clazz,
+ jobject init) {
+ return functions->NewObjectArray(this,len,clazz,init);
+ }
+ jobject GetObjectArrayElement(jobjectArray array, jsize index) {
+ return functions->GetObjectArrayElement(this,array,index);
+ }
+ void SetObjectArrayElement(jobjectArray array, jsize index,
+ jobject val) {
+ functions->SetObjectArrayElement(this,array,index,val);
+ }
+
+ jbooleanArray NewBooleanArray(jsize len) {
+ return functions->NewBooleanArray(this,len);
+ }
+ jbyteArray NewByteArray(jsize len) {
+ return functions->NewByteArray(this,len);
+ }
+ jcharArray NewCharArray(jsize len) {
+ return functions->NewCharArray(this,len);
+ }
+ jshortArray NewShortArray(jsize len) {
+ return functions->NewShortArray(this,len);
+ }
+ jintArray NewIntArray(jsize len) {
+ return functions->NewIntArray(this,len);
+ }
+ jlongArray NewLongArray(jsize len) {
+ return functions->NewLongArray(this,len);
+ }
+ jfloatArray NewFloatArray(jsize len) {
+ return functions->NewFloatArray(this,len);
+ }
+ jdoubleArray NewDoubleArray(jsize len) {
+ return functions->NewDoubleArray(this,len);
+ }
+
+ jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
+ return functions->GetBooleanArrayElements(this,array,isCopy);
+ }
+ jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
+ return functions->GetByteArrayElements(this,array,isCopy);
+ }
+ jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
+ return functions->GetCharArrayElements(this,array,isCopy);
+ }
+ jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
+ return functions->GetShortArrayElements(this,array,isCopy);
+ }
+ jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
+ return functions->GetIntArrayElements(this,array,isCopy);
+ }
+ jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
+ return functions->GetLongArrayElements(this,array,isCopy);
+ }
+ jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
+ return functions->GetFloatArrayElements(this,array,isCopy);
+ }
+ jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
+ return functions->GetDoubleArrayElements(this,array,isCopy);
+ }
+
+ void ReleaseBooleanArrayElements(jbooleanArray array,
+ jboolean *elems,
+ jint mode) {
+ functions->ReleaseBooleanArrayElements(this,array,elems,mode);
+ }
+ void ReleaseByteArrayElements(jbyteArray array,
+ jbyte *elems,
+ jint mode) {
+ functions->ReleaseByteArrayElements(this,array,elems,mode);
+ }
+ void ReleaseCharArrayElements(jcharArray array,
+ jchar *elems,
+ jint mode) {
+ functions->ReleaseCharArrayElements(this,array,elems,mode);
+ }
+ void ReleaseShortArrayElements(jshortArray array,
+ jshort *elems,
+ jint mode) {
+ functions->ReleaseShortArrayElements(this,array,elems,mode);
+ }
+ void ReleaseIntArrayElements(jintArray array,
+ jint *elems,
+ jint mode) {
+ functions->ReleaseIntArrayElements(this,array,elems,mode);
+ }
+ void ReleaseLongArrayElements(jlongArray array,
+ jlong *elems,
+ jint mode) {
+ functions->ReleaseLongArrayElements(this,array,elems,mode);
+ }
+ void ReleaseFloatArrayElements(jfloatArray array,
+ jfloat *elems,
+ jint mode) {
+ functions->ReleaseFloatArrayElements(this,array,elems,mode);
+ }
+ void ReleaseDoubleArrayElements(jdoubleArray array,
+ jdouble *elems,
+ jint mode) {
+ functions->ReleaseDoubleArrayElements(this,array,elems,mode);
+ }
+
+ void GetBooleanArrayRegion(jbooleanArray array,
+ jsize start, jsize len, jboolean *buf) {
+ functions->GetBooleanArrayRegion(this,array,start,len,buf);
+ }
+ void GetByteArrayRegion(jbyteArray array,
+ jsize start, jsize len, jbyte *buf) {
+ functions->GetByteArrayRegion(this,array,start,len,buf);
+ }
+ void GetCharArrayRegion(jcharArray array,
+ jsize start, jsize len, jchar *buf) {
+ functions->GetCharArrayRegion(this,array,start,len,buf);
+ }
+ void GetShortArrayRegion(jshortArray array,
+ jsize start, jsize len, jshort *buf) {
+ functions->GetShortArrayRegion(this,array,start,len,buf);
+ }
+ void GetIntArrayRegion(jintArray array,
+ jsize start, jsize len, jint *buf) {
+ functions->GetIntArrayRegion(this,array,start,len,buf);
+ }
+ void GetLongArrayRegion(jlongArray array,
+ jsize start, jsize len, jlong *buf) {
+ functions->GetLongArrayRegion(this,array,start,len,buf);
+ }
+ void GetFloatArrayRegion(jfloatArray array,
+ jsize start, jsize len, jfloat *buf) {
+ functions->GetFloatArrayRegion(this,array,start,len,buf);
+ }
+ void GetDoubleArrayRegion(jdoubleArray array,
+ jsize start, jsize len, jdouble *buf) {
+ functions->GetDoubleArrayRegion(this,array,start,len,buf);
+ }
+
+ void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
+ const jboolean *buf) {
+ functions->SetBooleanArrayRegion(this,array,start,len,buf);
+ }
+ void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
+ const jbyte *buf) {
+ functions->SetByteArrayRegion(this,array,start,len,buf);
+ }
+ void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
+ const jchar *buf) {
+ functions->SetCharArrayRegion(this,array,start,len,buf);
+ }
+ void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
+ const jshort *buf) {
+ functions->SetShortArrayRegion(this,array,start,len,buf);
+ }
+ void SetIntArrayRegion(jintArray array, jsize start, jsize len,
+ const jint *buf) {
+ functions->SetIntArrayRegion(this,array,start,len,buf);
+ }
+ void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
+ const jlong *buf) {
+ functions->SetLongArrayRegion(this,array,start,len,buf);
+ }
+ void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
+ const jfloat *buf) {
+ functions->SetFloatArrayRegion(this,array,start,len,buf);
+ }
+ void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
+ const jdouble *buf) {
+ functions->SetDoubleArrayRegion(this,array,start,len,buf);
+ }
+
+ jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
+ jint nMethods) {
+ return functions->RegisterNatives(this,clazz,methods,nMethods);
+ }
+ jint UnregisterNatives(jclass clazz) {
+ return functions->UnregisterNatives(this,clazz);
+ }
+
+ jint MonitorEnter(jobject obj) {
+ return functions->MonitorEnter(this,obj);
+ }
+ jint MonitorExit(jobject obj) {
+ return functions->MonitorExit(this,obj);
+ }
+
+ jint GetJavaVM(JavaVM **vm) {
+ return functions->GetJavaVM(this,vm);
+ }
+
+ void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
+ functions->GetStringRegion(this,str,start,len,buf);
+ }
+ void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
+ functions->GetStringUTFRegion(this,str,start,len,buf);
+ }
+
+ void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
+ return functions->GetPrimitiveArrayCritical(this,array,isCopy);
+ }
+ void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
+ functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
+ }
+
+ const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
+ return functions->GetStringCritical(this,string,isCopy);
+ }
+ void ReleaseStringCritical(jstring string, const jchar *cstring) {
+ functions->ReleaseStringCritical(this,string,cstring);
+ }
+
+ jweak NewWeakGlobalRef(jobject obj) {
+ return functions->NewWeakGlobalRef(this,obj);
+ }
+ void DeleteWeakGlobalRef(jweak ref) {
+ functions->DeleteWeakGlobalRef(this,ref);
+ }
+
+ jboolean ExceptionCheck() {
+ return functions->ExceptionCheck(this);
+ }
+
+ jobject NewDirectByteBuffer(void* address, jlong capacity) {
+ return functions->NewDirectByteBuffer(this, address, capacity);
+ }
+ void* GetDirectBufferAddress(jobject buf) {
+ return functions->GetDirectBufferAddress(this, buf);
+ }
+ jlong GetDirectBufferCapacity(jobject buf) {
+ return functions->GetDirectBufferCapacity(this, buf);
+ }
+
+#endif /* __cplusplus */
+};
+
+typedef struct JavaVMOption {
+ char *optionString;
+ void *extraInfo;
+} JavaVMOption;
+
+typedef struct JavaVMInitArgs {
+ jint version;
+
+ jint nOptions;
+ JavaVMOption *options;
+ jboolean ignoreUnrecognized;
+} JavaVMInitArgs;
+
+typedef struct JavaVMAttachArgs {
+ jint version;
+
+ char *name;
+ jobject group;
+} JavaVMAttachArgs;
+
+/* These structures will be VM-specific. */
+
+typedef struct JDK1_1InitArgs {
+ jint version;
+
+ char **properties;
+ jint checkSource;
+ jint nativeStackSize;
+ jint javaStackSize;
+ jint minHeapSize;
+ jint maxHeapSize;
+ jint verifyMode;
+ char *classpath;
+
+ jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
+ void (JNICALL *exit)(jint code);
+ void (JNICALL *abort)(void);
+
+ jint enableClassGC;
+ jint enableVerboseGC;
+ jint disableAsyncGC;
+ jint verbose;
+ jboolean debugging;
+ jint debugPort;
+} JDK1_1InitArgs;
+
+typedef struct JDK1_1AttachArgs {
+ void * __padding; /* C compilers don't allow empty structures. */
+} JDK1_1AttachArgs;
+
+#define JDK1_2
+#define JDK1_4
+
+/* End VM-specific. */
+
+struct JNIInvokeInterface_ {
+ void *reserved0;
+ void *reserved1;
+ void *reserved2;
+
+ jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
+
+ jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
+
+ jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
+
+ jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
+
+ jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
+};
+
+struct JavaVM_ {
+ const struct JNIInvokeInterface_ *functions;
+#ifdef __cplusplus
+
+ jint DestroyJavaVM() {
+ return functions->DestroyJavaVM(this);
+ }
+ jint AttachCurrentThread(void **penv, void *args) {
+ return functions->AttachCurrentThread(this, penv, args);
+ }
+ jint DetachCurrentThread() {
+ return functions->DetachCurrentThread(this);
+ }
+
+ jint GetEnv(void **penv, jint version) {
+ return functions->GetEnv(this, penv, version);
+ }
+ jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
+ return functions->AttachCurrentThreadAsDaemon(this, penv, args);
+ }
+#endif
+};
+
+#ifdef _JNI_IMPLEMENTATION_
+#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
+#else
+#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
+#endif
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_GetDefaultJavaVMInitArgs(void *args);
+
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
+
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
+
+/* Defined by native libraries. */
+JNIEXPORT jint JNICALL
+JNI_OnLoad(JavaVM *vm, void *reserved);
+
+JNIEXPORT void JNICALL
+JNI_OnUnload(JavaVM *vm, void *reserved);
+
+#define JNI_VERSION_1_1 0x00010001
+#define JNI_VERSION_1_2 0x00010002
+#define JNI_VERSION_1_4 0x00010004
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVASOFT_JNI_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmdi.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,1012 @@
+/*
+ * @(#)jvmdi.h 1.48 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ * Java Virtual Machine Debug Interface
+ *
+ * Defines debugging functionality that a VM should provide.
+ *
+ * Should not overlap functionality in jni.h
+ */
+
+#ifndef _JAVASOFT_JVMDI_H_
+#define _JAVASOFT_JVMDI_H_
+
+#include "jni.h"
+
+#define JVMDI_VERSION_1 0x20010000
+#define JVMDI_VERSION_1_1 0x20010001
+#define JVMDI_VERSION_1_2 0x20010002
+#define JVMDI_VERSION_1_3 0x20010003
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef jobject jthread;
+
+typedef jobject jthreadGroup;
+
+struct _jframeID;
+typedef struct _jframeID *jframeID;
+
+ /* specifies program location "pc" - often byte code index */
+typedef jlong jlocation;
+
+ /* The jmethodID for methods that have been replaced */
+ /* via RedefineClasses - used when the implementation */
+ /* does not wish to retain replaced jmethodIDs */
+#define OBSOLETE_METHOD_ID ((jmethodID)(NULL))
+
+ /*
+ * Errors
+ */
+
+typedef jint jvmdiError;
+
+ /* no error */
+#define JVMDI_ERROR_NONE ((jvmdiError)0)
+
+ /*
+ * Errors on thread operations
+ */
+
+ /* invalid thread */
+#define JVMDI_ERROR_INVALID_THREAD ((jvmdiError)10)
+ /* invalid thread group */
+#define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11)
+ /* invalid thread priority */
+#define JVMDI_ERROR_INVALID_PRIORITY ((jvmdiError)12)
+ /* thread not suspended */
+#define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13)
+ /* thread already suspended */
+#define JVMDI_ERROR_THREAD_SUSPENDED ((jvmdiError)14)
+
+ /*
+ * Errors on object and class operations
+ */
+
+ /* invalid object (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_OBJECT ((jvmdiError)20)
+ /* invalid class (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_CLASS ((jvmdiError)21)
+ /* class not prepared */
+#define JVMDI_ERROR_CLASS_NOT_PREPARED ((jvmdiError)22)
+ /* invalid methodID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_METHODID ((jvmdiError)23)
+ /* invalid location */
+#define JVMDI_ERROR_INVALID_LOCATION ((jvmdiError)24)
+ /* invalid fieldID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_FIELDID ((jvmdiError)25)
+
+ /*
+ * Errors on frame operations
+ */
+
+ /* invalid frameID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_FRAMEID ((jvmdiError)30)
+ /* there are no more frames on the stack */
+#define JVMDI_ERROR_NO_MORE_FRAMES ((jvmdiError)31)
+ /* operation cannot be performed on this frame */
+#define JVMDI_ERROR_OPAQUE_FRAME ((jvmdiError)32)
+ /* operation can only be performed on current frame */
+#define JVMDI_ERROR_NOT_CURRENT_FRAME ((jvmdiError)33)
+ /* type mismatch (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_TYPE_MISMATCH ((jvmdiError)34)
+ /* invalid slot */
+#define JVMDI_ERROR_INVALID_SLOT ((jvmdiError)35)
+
+ /*
+ * Errors on set/clear/find operations
+ */
+
+ /* item already present */
+#define JVMDI_ERROR_DUPLICATE ((jvmdiError)40)
+ /* item not found */
+#define JVMDI_ERROR_NOT_FOUND ((jvmdiError)41)
+
+ /*
+ * Errors on monitor operations
+ */
+
+ /* invalid monitor */
+#define JVMDI_ERROR_INVALID_MONITOR ((jvmdiError)50)
+ /* wait, notify, notify all tried without entering monitor */
+#define JVMDI_ERROR_NOT_MONITOR_OWNER ((jvmdiError)51)
+ /* waiting thread interrupted */
+#define JVMDI_ERROR_INTERRUPT ((jvmdiError)52)
+
+ /*
+ * Class redefinition / operand stack errors
+ */
+
+ /* The equivalent of ClassFormatError */
+#define JVMDI_ERROR_INVALID_CLASS_FORMAT ((jvmdiError)60)
+ /* The equivalent of ClassCircularityError */
+#define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION ((jvmdiError)61)
+ /* The class bytes fail verification */
+#define JVMDI_ERROR_FAILS_VERIFICATION ((jvmdiError)62)
+ /* The new class version adds new methods */
+ /* and can_add_method is false */
+#define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED ((jvmdiError)63)
+ /* The new class version changes fields */
+ /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64)
+ /* bci/operand stack/local var combination is not verifiably */
+ /* type safe */
+#define JVMDI_ERROR_INVALID_TYPESTATE ((jvmdiError)65)
+ /* A direct superclass is different for the new class */
+ /* version, or the set of directly implemented */
+ /* interfaces is different */
+ /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED ((jvmdiError)66)
+ /* The new class version does not declare a method */
+ /* declared in the old class version */
+ /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_DELETE_METHOD_NOT_IMPLEMENTED ((jvmdiError)67)
+ /* A class file has a version number not supported */
+ /* by this VM. */
+#define JVMDI_ERROR_UNSUPPORTED_VERSION ((jvmdiError)68)
+ /* The class name defined in the new class file is */
+ /* different from the name in the old class object */
+#define JVMDI_ERROR_NAMES_DONT_MATCH ((jvmdiError)69)
+ /* The new class version has different modifiers and */
+ /* can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)70)
+ /* A method in the new class version has different modifiers */
+ /* than its counterpart in the old class version */
+ /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)71)
+
+ /*
+ * Miscellaneous errors
+ */
+
+ /* Not yet implemented */
+#define JVMDI_ERROR_NOT_IMPLEMENTED ((jvmdiError)99)
+ /* null pointer */
+#define JVMDI_ERROR_NULL_POINTER ((jvmdiError)100)
+ /* information is absent */
+#define JVMDI_ERROR_ABSENT_INFORMATION ((jvmdiError)101)
+ /* invalid event type */
+#define JVMDI_ERROR_INVALID_EVENT_TYPE ((jvmdiError)102)
+ /* invalid argument */
+#define JVMDI_ERROR_ILLEGAL_ARGUMENT ((jvmdiError)103)
+
+ /*
+ * Universal errors. These errors may be returned by
+ * any JVMDI function, not just the ones for which they are listed
+ * below.
+ */
+
+ /* no more memory available for allocation */
+#define JVMDI_ERROR_OUT_OF_MEMORY ((jvmdiError)110)
+ /* debugging has not been enabled in this VM */
+#define JVMDI_ERROR_ACCESS_DENIED ((jvmdiError)111)
+ /* VM is dead (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_VM_DEAD ((jvmdiError)112)
+ /* internal error */
+#define JVMDI_ERROR_INTERNAL ((jvmdiError)113)
+ /* Thread calling JVMDI function not attached to VM */
+#define JVMDI_ERROR_UNATTACHED_THREAD ((jvmdiError)115)
+
+
+ /*
+ * Threads
+ */
+
+ /* Thread status is unknown */
+#define JVMDI_THREAD_STATUS_UNKNOWN ((jint)-1)
+ /* Thread is waiting to die */
+#define JVMDI_THREAD_STATUS_ZOMBIE ((jint)0)
+ /* Thread is runnable */
+#define JVMDI_THREAD_STATUS_RUNNING ((jint)1)
+ /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */
+#define JVMDI_THREAD_STATUS_SLEEPING ((jint)2)
+ /* Thread is waiting on a java monitor */
+#define JVMDI_THREAD_STATUS_MONITOR ((jint)3)
+ /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */
+#define JVMDI_THREAD_STATUS_WAIT ((jint)4)
+
+ /* Thread is suspended - Thread.suspend(), JVM_Suspend() or
+ * JVMDI_Suspend was called */
+#define JVMDI_SUSPEND_STATUS_SUSPENDED ((jint)0x1)
+ /* Thread is at a breakpoint */
+#define JVMDI_SUSPEND_STATUS_BREAK ((jint)0x2)
+
+
+ /* Thread priority constants */
+#define JVMDI_THREAD_MIN_PRIORITY ((jint)1)
+#define JVMDI_THREAD_NORM_PRIORITY ((jint)5)
+#define JVMDI_THREAD_MAX_PRIORITY ((jint)10)
+
+typedef struct {
+ char *name;
+ jint priority;
+ jboolean is_daemon;
+ jthreadGroup thread_group;
+ jobject context_class_loader;
+} JVMDI_thread_info;
+
+typedef struct {
+ jthreadGroup parent;
+ char *name;
+ jint max_priority;
+ jboolean is_daemon;
+} JVMDI_thread_group_info;
+
+#define JVMDI_DISABLE ((jint) 0)
+#define JVMDI_ENABLE ((jint) 1)
+
+/*
+ * Initial function for debug threads created through JVMDI
+ */
+typedef void (*JVMDI_StartFunction)(void *);
+
+/*
+ * Type for debug monitors created through JVMDI
+ */
+typedef void *JVMDI_RawMonitor;
+
+#define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1))
+
+/*
+ * Monitor information
+ */
+typedef struct {
+ jthread owner;
+ jint entry_count;
+ jint waiter_count;
+ jthread *waiters;
+} JVMDI_monitor_info;
+
+typedef struct {
+ jint owned_monitor_count;
+ jobject *owned_monitors;
+} JVMDI_owned_monitor_info;
+
+ /*
+ * Events
+ */
+
+ /* kind = JVMDI_EVENT_SINGLE_STEP */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ } JVMDI_single_step_event_data;
+
+ /* kind = JVMDI_EVENT_BREAKPOINT */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ } JVMDI_breakpoint_event_data;
+
+ /* kind = JVMDI_EVENT_FIELD_ACCESS */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ jclass field_clazz;
+ jobject object;
+ jfieldID field;
+ } JVMDI_field_access_event_data;
+
+ /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ jclass field_clazz;
+ jobject object;
+ jfieldID field;
+ char signature_type;
+ jvalue new_value;
+ } JVMDI_field_modification_event_data;
+
+ /* kind = JVMDI_EVENT_FRAME_POP */
+ /* kind = JVMDI_EVENT_METHOD_ENTRY */
+ /* kind = JVMDI_EVENT_METHOD_EXIT */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jframeID frame;
+ } JVMDI_frame_event_data;
+
+ /* kind = JVMDI_EVENT_EXCEPTION */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ jobject exception;
+ jclass catch_clazz;
+ jmethodID catch_method;
+ jlocation catch_location;
+ } JVMDI_exception_event_data;
+
+ /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ jmethodID method;
+ jlocation location;
+ jobject exception;
+ } JVMDI_exception_catch_event_data;
+
+ /* kind = JVMDI_EVENT_USER_DEFINED */
+ typedef struct {
+ jobject object;
+ jint key;
+ } JVMDI_user_event_data;
+
+ /* kind = JVMDI_EVENT_THREAD_END or */
+ /* JVMDI_EVENT_THREAD_START */
+ typedef struct {
+ jthread thread;
+ } JVMDI_thread_change_event_data;
+
+ /* kind = JVMDI_EVENT_CLASS_LOAD, */
+ /* JVMDI_EVENT_CLASS_UNLOAD, or */
+ /* JVMDI_EVENT_CLASS_PREPARE */
+ typedef struct {
+ jthread thread;
+ jclass clazz;
+ } JVMDI_class_event_data;
+
+/* This stucture passes information about the event.
+ * location is the index of the last instruction executed.
+ */
+typedef struct {
+ jint kind; /* the discriminant */
+
+ union {
+ /* kind = JVMDI_EVENT_SINGLE_STEP */
+ JVMDI_single_step_event_data single_step;
+
+ /* kind = JVMDI_EVENT_BREAKPOINT */
+ JVMDI_breakpoint_event_data breakpoint;
+
+ /* kind = JVMDI_EVENT_FRAME_POP */
+ /* kind = JVMDI_EVENT_METHOD_ENTRY */
+ /* kind = JVMDI_EVENT_METHOD_EXIT */
+ JVMDI_frame_event_data frame;
+
+ /* kind = JVMDI_EVENT_FIELD_ACCESS */
+ JVMDI_field_access_event_data field_access;
+
+ /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
+ JVMDI_field_modification_event_data field_modification;
+
+ /* kind = JVMDI_EVENT_EXCEPTION */
+ JVMDI_exception_event_data exception;
+
+ /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
+ JVMDI_exception_catch_event_data exception_catch;
+
+ /* kind = JVMDI_EVENT_USER_DEFINED */
+ JVMDI_user_event_data user;
+
+ /* kind = JVMDI_EVENT_THREAD_END or */
+ /* JVMDI_EVENT_THREAD_START */
+ JVMDI_thread_change_event_data thread_change;
+
+ /* kind = JVMDI_EVENT_CLASS_LOAD, */
+ /* JVMDI_EVENT_CLASS_UNLOAD, or */
+ /* JVMDI_EVENT_CLASS_PREPARE */
+ JVMDI_class_event_data class_event;
+
+ /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */
+ /* no additional fields */
+ } u;
+} JVMDI_Event;
+
+ /*** event kinds ***/
+#define JVMDI_EVENT_SINGLE_STEP ((jint)1)
+#define JVMDI_EVENT_BREAKPOINT ((jint)2)
+#define JVMDI_EVENT_FRAME_POP ((jint)3)
+#define JVMDI_EVENT_EXCEPTION ((jint)4)
+#define JVMDI_EVENT_USER_DEFINED ((jint)5)
+#define JVMDI_EVENT_THREAD_START ((jint)6)
+#define JVMDI_EVENT_THREAD_END ((jint)7)
+#define JVMDI_EVENT_CLASS_PREPARE ((jint)8)
+#define JVMDI_EVENT_CLASS_UNLOAD ((jint)9)
+#define JVMDI_EVENT_CLASS_LOAD ((jint)10)
+#define JVMDI_EVENT_FIELD_ACCESS ((jint)20)
+#define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21)
+#define JVMDI_EVENT_EXCEPTION_CATCH ((jint)30)
+#define JVMDI_EVENT_METHOD_ENTRY ((jint)40)
+#define JVMDI_EVENT_METHOD_EXIT ((jint)41)
+#define JVMDI_EVENT_VM_INIT ((jint)90)
+#define JVMDI_EVENT_VM_DEATH ((jint)99)
+
+#define JVMDI_MAX_EVENT_TYPE_VAL ((jint)99)
+
+
+
+/* event handler hook */
+typedef void (*JVMDI_EventHook)(JNIEnv *env, JVMDI_Event *event);
+
+typedef jvmdiError (*JVMDI_AllocHook) (jlong size, jbyte** memPtr);
+typedef jvmdiError (*JVMDI_DeallocHook) (jbyte* buffer);
+
+/*
+ * Class states used in JVMDI_GetClassStatus
+ */
+#define JVMDI_CLASS_STATUS_VERIFIED ((jint)0x01)
+#define JVMDI_CLASS_STATUS_PREPARED ((jint)0x02)
+#define JVMDI_CLASS_STATUS_INITIALIZED ((jint)0x04)
+ /* Error prevents initialization */
+#define JVMDI_CLASS_STATUS_ERROR ((jint)0x08)
+
+/* structure for returning line number information
+ */
+typedef struct {
+ jlocation start_location;
+ jint line_number;
+} JVMDI_line_number_entry;
+
+
+/* structure for returning local variable information
+ */
+typedef struct {
+ jlocation start_location; /* variable valid start_location */
+ jint length; /* upto start_location+length */
+ char *name; /* name in UTF8 */
+ char *signature; /* type signature in UTF8 */
+ jint slot; /* variable slot, see JVMDI_GetLocal*() */
+} JVMDI_local_variable_entry;
+
+/* structure for returning exception handler information
+ */
+typedef struct {
+ jlocation start_location;
+ jlocation end_location;
+ jlocation handler_location;
+ jclass exception; /* if null, all exceptions */
+} JVMDI_exception_handler_entry;
+
+#define JVMDI_OPERAND_TYPE_REFERENCE ((jint)1)
+#define JVMDI_OPERAND_TYPE_INT ((jint)2)
+#define JVMDI_OPERAND_TYPE_FLOAT ((jint)3)
+#define JVMDI_OPERAND_TYPE_LONG0 ((jint)4) /* least sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_LONG1 ((jint)5) /* most sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_DOUBLE0 ((jint)6) /* least sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_DOUBLE1 ((jint)7) /* most sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8)
+
+typedef struct {
+ jint word; /* 32 bit operand stack quantities */
+ jint type; /* type encoding of the operand word */
+ /* one of JVMDI_OPERAND_TYPE_* */
+} JVMDI_operand_stack_element;
+
+typedef struct {
+ jint instance_field_count; /* number of instance fields referencing obj */
+ struct JVMDI_instance_field {
+ jobject instance; /* instance referencing obj */
+ jfieldID field; /* field holding reference */
+ } *instance_fields; /* instanceField_count of them */
+
+ jint static_field_count; /* number of static fields referencing obj */
+ struct JVMDI_static_field {
+ jclass clazz; /* class referencing obj */
+ jfieldID static_field; /* field holding reference */
+ } *static_fields; /* static_field_count of them */
+
+ jint array_element_count; /* number of array elements referencing obj */
+ struct JVMDI_array_element {
+ jobjectArray array; /* array referencing obj */
+ jint index; /* index holding reference */
+ } *array_elements; /* array_element_count of them */
+
+ jint frame_slot_count; /* number of frame slots referencing obj */
+ struct JVMDI_frame_slot {
+ jthread thread; /* thread of the frame */
+ jframeID frame; /* frame referencing obj */
+ jint slot; /* slot holding reference */
+ } *frame_slots; /* frame_slot_count of them */
+} JVMDI_object_reference_info;
+
+/* structure for defining a class
+*/
+typedef struct {
+ jclass clazz; /* Class object for this class */
+ jint class_byte_count; /* number of bytes defining class (below) */
+ jbyte *class_bytes; /* bytes defining class (in JVM spec */
+ /* Class File Format) */
+} JVMDI_class_definition;
+
+ /* For backwards compatibility */
+#define can_change_schema can_unrestrictedly_redefine_classes
+
+typedef struct {
+ unsigned int can_watch_field_modification : 1;
+ unsigned int can_watch_field_access : 1;
+ unsigned int can_get_bytecodes : 1;
+ unsigned int can_get_synthetic_attribute : 1;
+ unsigned int can_get_owned_monitor_info : 1;
+ unsigned int can_get_current_contended_monitor : 1;
+ unsigned int can_get_monitor_info : 1;
+ unsigned int can_get_heap_info : 1;
+ unsigned int can_get_operand_stack : 1;
+ unsigned int can_set_operand_stack : 1;
+ unsigned int can_pop_frame : 1;
+ unsigned int can_get_class_definition : 1;
+ unsigned int can_redefine_classes : 1;
+ unsigned int can_add_method : 1;
+ unsigned int can_unrestrictedly_redefine_classes : 1;
+ unsigned int can_suspend_resume_thread_lists : 1;
+} JVMDI_capabilities;
+
+typedef struct JVMDI_Interface_1_ {
+ jvmdiError (JNICALL *SetEventHook)
+ (JVMDI_EventHook hook);
+ jvmdiError (JNICALL *SetEventNotificationMode)
+ (jint mode, jint eventType, jthread thread, ...);
+
+ jvmdiError (JNICALL *GetThreadStatus)
+ (jthread thread,
+ jint *threadStatusPtr, jint *suspendStatusPtr);
+ jvmdiError (JNICALL *GetAllThreads)
+ (jint *threadsCountPtr, jthread **threadsPtr);
+ jvmdiError (JNICALL *SuspendThread)
+ (jthread thread);
+ jvmdiError (JNICALL *ResumeThread)
+ (jthread thread);
+ jvmdiError (JNICALL *StopThread)
+ (jthread thread, jobject exception);
+ jvmdiError (JNICALL *InterruptThread)
+ (jthread thread);
+ jvmdiError (JNICALL *GetThreadInfo)
+ (jthread thread, JVMDI_thread_info *infoPtr);
+ jvmdiError (JNICALL *GetOwnedMonitorInfo)
+ (jthread thread, JVMDI_owned_monitor_info *infoPtr);
+ jvmdiError (JNICALL *GetCurrentContendedMonitor)
+ (jthread thread, jobject *monitor);
+ jvmdiError (JNICALL *RunDebugThread)
+ (jthread thread, JVMDI_StartFunction proc, void *arg,
+ int priority);
+
+ jvmdiError (JNICALL *GetTopThreadGroups)
+ (jint *groupCountPtr, jthreadGroup **groupsPtr);
+ jvmdiError (JNICALL *GetThreadGroupInfo)
+ (jthreadGroup group, JVMDI_thread_group_info *infoPtr);
+ jvmdiError (JNICALL *GetThreadGroupChildren)
+ (jthreadGroup group,
+ jint *threadCountPtr, jthread **threadsPtr,
+ jint *groupCountPtr, jthreadGroup **groupsPtr);
+
+ jvmdiError (JNICALL *GetFrameCount)
+ (jthread thread, jint *countPtr);
+ jvmdiError (JNICALL *GetCurrentFrame)
+ (jthread thread, jframeID *framePtr);
+ jvmdiError (JNICALL *GetCallerFrame)
+ (jframeID called, jframeID *framePtr);
+ jvmdiError (JNICALL *GetFrameLocation)
+ (jframeID frame, jclass *classPtr, jmethodID *methodPtr,
+ jlocation *locationPtr);
+ jvmdiError (JNICALL *NotifyFramePop)
+ (jframeID frame);
+ jvmdiError (JNICALL *GetLocalObject)
+ (jframeID frame, jint slot, jobject *valuePtr);
+ jvmdiError (JNICALL *GetLocalInt)
+ (jframeID frame, jint slot, jint *valuePtr);
+ jvmdiError (JNICALL *GetLocalLong)
+ (jframeID frame, jint slot, jlong *valuePtr);
+ jvmdiError (JNICALL *GetLocalFloat)
+ (jframeID frame, jint slot, jfloat *valuePtr);
+ jvmdiError (JNICALL *GetLocalDouble)
+ (jframeID frame, jint slot, jdouble *valuePtr);
+ jvmdiError (JNICALL *SetLocalObject)
+ (jframeID frame, jint slot, jobject value);
+ jvmdiError (JNICALL *SetLocalInt)
+ (jframeID frame, jint slot, jint value);
+ jvmdiError (JNICALL *SetLocalLong)
+ (jframeID frame, jint slot, jlong value);
+ jvmdiError (JNICALL *SetLocalFloat)
+ (jframeID frame, jint slot, jfloat value);
+ jvmdiError (JNICALL *SetLocalDouble)
+ (jframeID frame, jint slot, jdouble value);
+
+ jvmdiError (JNICALL *CreateRawMonitor)
+ (char *name, JVMDI_RawMonitor *monitorPtr);
+ jvmdiError (JNICALL *DestroyRawMonitor)
+ (JVMDI_RawMonitor monitor);
+ jvmdiError (JNICALL *RawMonitorEnter)
+ (JVMDI_RawMonitor monitor);
+ jvmdiError (JNICALL *RawMonitorExit)
+ (JVMDI_RawMonitor monitor);
+ jvmdiError (JNICALL *RawMonitorWait)
+ (JVMDI_RawMonitor monitor, jlong millis);
+ jvmdiError (JNICALL *RawMonitorNotify)
+ (JVMDI_RawMonitor monitor);
+ jvmdiError (JNICALL *RawMonitorNotifyAll)
+ (JVMDI_RawMonitor monitor);
+
+ jvmdiError (JNICALL *SetBreakpoint)
+ (jclass clazz, jmethodID method, jlocation location);
+ jvmdiError (JNICALL *ClearBreakpoint)
+ (jclass clazz, jmethodID method, jlocation location);
+ jvmdiError (JNICALL *ClearAllBreakpoints)
+ ();
+
+ jvmdiError (JNICALL *SetFieldAccessWatch)
+ (jclass clazz, jfieldID field);
+ jvmdiError (JNICALL *ClearFieldAccessWatch)
+ (jclass clazz, jfieldID field);
+ jvmdiError (JNICALL *SetFieldModificationWatch)
+ (jclass clazz, jfieldID field);
+ jvmdiError (JNICALL *ClearFieldModificationWatch)
+ (jclass clazz, jfieldID field);
+
+ jvmdiError (JNICALL *SetAllocationHooks)
+ (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook);
+ jvmdiError (JNICALL *Allocate)
+ (jlong size, jbyte** memPtr);
+ jvmdiError (JNICALL *Deallocate)
+ (jbyte* mem);
+
+ jvmdiError (JNICALL *GetClassSignature)
+ (jclass clazz, char **sigPtr);
+ jvmdiError (JNICALL *GetClassStatus)
+ (jclass clazz, jint *statusPtr);
+ jvmdiError (JNICALL *GetSourceFileName)
+ (jclass clazz, char **sourceNamePtr);
+ jvmdiError (JNICALL *GetClassModifiers)
+ (jclass clazz, jint *modifiersPtr);
+ jvmdiError (JNICALL *GetClassMethods)
+ (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr);
+ jvmdiError (JNICALL *GetClassFields)
+ (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr);
+ jvmdiError (JNICALL *GetImplementedInterfaces)
+ (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr);
+ jvmdiError (JNICALL *IsInterface)
+ (jclass clazz, jboolean *isInterfacePtr);
+ jvmdiError (JNICALL *IsArrayClass)
+ (jclass clazz, jboolean *isArrayClassPtr);
+ jvmdiError (JNICALL *GetClassLoader)
+ (jclass clazz, jobject *classloaderPtr);
+
+ jvmdiError (JNICALL *GetObjectHashCode)
+ (jobject object, jint *hashCodePtr);
+ jvmdiError (JNICALL *GetMonitorInfo)
+ (jobject object, JVMDI_monitor_info *infoPtr);
+
+ jvmdiError (JNICALL *GetFieldName)
+ (jclass clazz, jfieldID field, char **namePtr, char **signaturePtr);
+ jvmdiError (JNICALL *GetFieldDeclaringClass)
+ (jclass clazz, jfieldID field, jclass *declaringClassPtr);
+ jvmdiError (JNICALL *GetFieldModifiers)
+ (jclass clazz, jfieldID field, jint *modifiersPtr);
+ jvmdiError (JNICALL *IsFieldSynthetic)
+ (jclass clazz, jfieldID field, jboolean *isSyntheticPtr);
+
+ jvmdiError (JNICALL *GetMethodName)
+ (jclass clazz, jmethodID method,
+ char **namePtr, char **signaturePtr);
+ jvmdiError (JNICALL *GetMethodDeclaringClass)
+ (jclass clazz, jmethodID method, jclass *declaringClassPtr);
+ jvmdiError (JNICALL *GetMethodModifiers)
+ (jclass clazz, jmethodID method, jint *modifiersPtr);
+ jvmdiError (JNICALL *GetMaxStack)
+ (jclass clazz, jmethodID method, jint *maxPtr);
+ jvmdiError (JNICALL *GetMaxLocals)
+ (jclass clazz, jmethodID method, jint *maxPtr);
+ jvmdiError (JNICALL *GetArgumentsSize)
+ (jclass clazz, jmethodID method, jint *sizePtr);
+ jvmdiError (JNICALL *GetLineNumberTable)
+ (jclass clazz, jmethodID method,
+ jint *entryCountPtr, JVMDI_line_number_entry **tablePtr);
+ jvmdiError (JNICALL *GetMethodLocation)
+ (jclass clazz, jmethodID method,
+ jlocation *startLocationPtr, jlocation *endLocationPtr);
+ jvmdiError (JNICALL *GetLocalVariableTable)
+ (jclass clazz, jmethodID method,
+ jint *entryCountPtr, JVMDI_local_variable_entry **tablePtr);
+ jvmdiError (JNICALL *GetExceptionHandlerTable)
+ (jclass clazz, jmethodID method,
+ jint *entryCountPtr, JVMDI_exception_handler_entry **tablePtr);
+ jvmdiError (JNICALL *GetThrownExceptions)
+ (jclass clazz, jmethodID method,
+ jint *exceptionCountPtr, jclass **exceptionsPtr);
+ jvmdiError (JNICALL *GetBytecodes)
+ (jclass clazz, jmethodID method,
+ jint *bytecodeCountPtr, jbyte **bytecodesPtr);
+ jvmdiError (JNICALL *IsMethodNative)
+ (jclass clazz, jmethodID method, jboolean *isNativePtr);
+ jvmdiError (JNICALL *IsMethodSynthetic)
+ (jclass clazz, jmethodID method, jboolean *isSyntheticPtr);
+
+ jvmdiError (JNICALL *GetLoadedClasses)
+ (jint *classCountPtr, jclass **classesPtr);
+ jvmdiError (JNICALL *GetClassLoaderClasses)
+ (jobject initiatingLoader, jint *classesCountPtr,
+ jclass **classesPtr);
+
+ jvmdiError (JNICALL *PopFrame)
+ (jthread thread);
+ jvmdiError (JNICALL *SetFrameLocation)
+ (jframeID frame, jlocation location);
+ jvmdiError (JNICALL *GetOperandStack)
+ (jframeID frame, jint *operandStackSizePtr,
+ JVMDI_operand_stack_element **operandStackPtr);
+ jvmdiError (JNICALL *SetOperandStack)
+ (jframeID frame, jint operandStackSize,
+ JVMDI_operand_stack_element *operandStack);
+ jvmdiError (JNICALL *AllInstances)
+ (jclass clazz, jint *instanceCountPtr, jobject **instancesPtr);
+ jvmdiError (JNICALL *References)
+ (jobject obj, JVMDI_object_reference_info *refs);
+ jvmdiError (JNICALL *GetClassDefinition)
+ (jclass clazz, JVMDI_class_definition *classDefPtr);
+ jvmdiError (JNICALL *RedefineClasses)
+ (jint classCount, JVMDI_class_definition *classDefs);
+
+ jvmdiError (JNICALL *GetVersionNumber)
+ (jint *versionPtr);
+ jvmdiError (JNICALL *GetCapabilities)
+ (JVMDI_capabilities *capabilitiesPtr);
+
+ jvmdiError (JNICALL *GetSourceDebugExtension)
+ (jclass clazz, char **sourceDebugExtension);
+ jvmdiError (JNICALL *IsMethodObsolete)
+ (jclass clazz, jmethodID method, jboolean *isObsoletePtr);
+
+ jvmdiError (JNICALL *SuspendThreadList)
+ (jint reqCount, jthread *reqList, jvmdiError *results);
+ jvmdiError (JNICALL *ResumeThreadList)
+ (jint reqCount, jthread *reqList, jvmdiError *results);
+} JVMDI_Interface_1;
+
+#ifndef NO_JVMDI_MACROS
+
+#define JVMDI_ERROR_DUPLICATE_BREAKPOINT JVMDI_ERROR_DUPLICATE
+#define JVMDI_ERROR_NO_SUCH_BREAKPOINT JVMDI_ERROR_NOT_FOUND
+#define JVMDI_ERROR_DUPLICATE_FRAME_POP JVMDI_ERROR_DUPLICATE
+
+
+static JVMDI_Interface_1 *jvmdi_interface = NULL;
+static JavaVM *j_vm;
+
+#ifdef __cplusplus
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)? \
+ ((a_env)->GetJavaVM(&j_vm), \
+ (j_vm)->GetEnv((void **)&jvmdi_interface, \
+ JVMDI_VERSION_1)):0)
+#else
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)? \
+ ((*a_env)->GetJavaVM(a_env, &j_vm), \
+ (*j_vm)->GetEnv(j_vm, (void **)&jvmdi_interface, \
+ JVMDI_VERSION_1)):0)
+#endif
+
+#define JVMDI_SetEventHook(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetEventHook(a1) )
+#define JVMDI_GetThreadStatus(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetThreadStatus(a1, a2, a3) )
+#define JVMDI_GetAllThreads(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetAllThreads(a1, a2) )
+#define JVMDI_SuspendThread(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SuspendThread(a1) )
+#define JVMDI_ResumeThread(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->ResumeThread(a1) )
+#define JVMDI_StopThread(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->StopThread(a1, a2) )
+#define JVMDI_InterruptThread(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->InterruptThread(a1) )
+#define JVMDI_SetSingleStep(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetEventNotificationMode( \
+ (a2) ? JVMDI_ENABLE : JVMDI_DISABLE, \
+ JVMDI_EVENT_SINGLE_STEP, a1) )
+#define JVMDI_GetThreadInfo(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetThreadInfo(a1, a2) )
+#define JVMDI_RunDebugThread(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RunDebugThread(a1, a2, a3, a4) )
+#define JVMDI_GetTopThreadGroups(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetTopThreadGroups(a1, a2) )
+#define JVMDI_GetThreadGroupInfo(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetThreadGroupInfo(a1, a2) )
+#define JVMDI_GetThreadGroupChildren(a_env, a1, a2, a3, a4, a5) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetThreadGroupChildren(a1, a2, a3, a4, a5) )
+#define JVMDI_GetCurrentFrame(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetCurrentFrame(a1, a2) )
+#define JVMDI_GetCallerFrame(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetCallerFrame(a1, a2) )
+#define JVMDI_GetFrameLocation(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetFrameLocation(a1, a2, a3, a4) )
+#define JVMDI_NotifyFramePop(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->NotifyFramePop(a1) )
+#define JVMDI_GetLocalObject(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalObject(a1, a2, a3) )
+#define JVMDI_GetLocalInt(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalInt(a1, a2, a3) )
+#define JVMDI_GetLocalLong(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalLong(a1, a2, a3) )
+#define JVMDI_GetLocalFloat(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalFloat(a1, a2, a3) )
+#define JVMDI_GetLocalDouble(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalDouble(a1, a2, a3) )
+#define JVMDI_SetLocalObject(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetLocalObject(a1, a2, a3) )
+#define JVMDI_SetLocalInt(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetLocalInt(a1, a2, a3) )
+#define JVMDI_SetLocalLong(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetLocalLong(a1, a2, a3) )
+#define JVMDI_SetLocalFloat(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetLocalFloat(a1, a2, a3) )
+#define JVMDI_SetLocalDouble(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetLocalDouble(a1, a2, a3) )
+#define JVMDI_CreateRawMonitor(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->CreateRawMonitor(a1, a2) )
+#define JVMDI_DestroyRawMonitor(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->DestroyRawMonitor(a1) )
+#define JVMDI_RawMonitorEnter(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RawMonitorEnter(a1) )
+#define JVMDI_RawMonitorExit(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RawMonitorExit(a1) )
+#define JVMDI_RawMonitorWait(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RawMonitorWait(a1, a2) )
+#define JVMDI_RawMonitorNotify(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RawMonitorNotify(a1) )
+#define JVMDI_RawMonitorNotifyAll(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->RawMonitorNotifyAll(a1) )
+#define JVMDI_SetBreakpoint(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetBreakpoint(a1, a2, a3) )
+#define JVMDI_ClearBreakpoint(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->ClearBreakpoint(a1, a2, a3) )
+#define JVMDI_ClearAllBreakpoints(a_env) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->ClearAllBreakpoints() )
+#define JVMDI_SetAllocationHooks(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->SetAllocationHooks(a1, a2) )
+#define JVMDI_Allocate(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->Allocate(a1, a2) )
+#define JVMDI_Deallocate(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->Deallocate(a1) )
+#define JVMDI_GetClassSignature(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassSignature(a1, a2) )
+#define JVMDI_GetClassStatus(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassStatus(a1, a2) )
+#define JVMDI_GetSourceFileName(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetSourceFileName(a1, a2) )
+#define JVMDI_GetClassModifiers(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassModifiers(a1, a2) )
+#define JVMDI_GetClassMethods(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassMethods(a1, a2, a3) )
+#define JVMDI_GetClassFields(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassFields(a1, a2, a3) )
+#define JVMDI_GetImplementedInterfaces(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetImplementedInterfaces(a1, a2, a3) )
+#define JVMDI_IsInterface(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->IsInterface(a1, a2) )
+#define JVMDI_IsArrayClass(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->IsArrayClass(a1, a2) )
+#define JVMDI_ClassLoader(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassLoader(a1, a2) )
+#define JVMDI_GetFieldName(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetFieldName(a1, a2, a3, a4) )
+#define JVMDI_GetFieldDeclaringClass(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetFieldDeclaringClass(a1, a2, a3) )
+#define JVMDI_GetFieldModifiers(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetFieldModifiers(a1, a2, a3) )
+#define JVMDI_GetMethodName(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMethodName(a1, a2, a3, a4) )
+#define JVMDI_GetMethodDeclaringClass(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMethodDeclaringClass(a1, a2, a3) )
+#define JVMDI_GetMethodModifiers(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMethodModifiers(a1, a2, a3) )
+#define JVMDI_GetMaxStack(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMaxStack(a1, a2, a3) )
+#define JVMDI_GetMaxLocals(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMaxLocals(a1, a2, a3) )
+#define JVMDI_GetArgumentsSize(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetArgumentsSize(a1, a2, a3) )
+#define JVMDI_GetLineNumberTable(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLineNumberTable(a1, a2, a3, a4) )
+#define JVMDI_GetMethodLocation(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetMethodLocation(a1, a2, a3, a4) )
+#define JVMDI_GetLocalVariableTable(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLocalVariableTable(a1, a2, a3, a4) )
+#define JVMDI_GetExceptionHandlerTable(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetExceptionHandlerTable(a1, a2, a3, a4) )
+#define JVMDI_GetThrownExceptions(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetThrownExceptions(a1, a2, a3, a4) )
+#define JVMDI_GetBytecodes(a_env, a1, a2, a3, a4) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetBytecodes(a1, a2, a3, a4) )
+#define JVMDI_IsMethodNative(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->IsMethodNative(a1, a2, a3) )
+#define JVMDI_GetLoadedClasses(a_env, a1, a2) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetLoadedClasses(a1, a2) )
+#define JVMDI_GetClassLoaderClasses(a_env, a1, a2, a3) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetClassLoaderClasses(a1, a2, a3) )
+#define JVMDI_GetVersionNumber(a_env, a1) ( \
+ SetJVMDIfromJNIEnv(a_env), \
+ jvmdi_interface->GetVersionNumber(a1) )
+
+#endif /* !NO_JVMDI_MACROS */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVASOFT_JVMDI_H_ */
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmpi.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,642 @@
+/*
+ * @(#)jvmpi.h 1.28 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JVMPI_H_
+#define _JAVASOFT_JVMPI_H_
+
+#include "jni.h"
+
+#define JVMPI_VERSION_1 ((jint)0x10000001) /* implied 0 for minor version */
+#define JVMPI_VERSION_1_1 ((jint)0x10000002)
+#define JVMPI_VERSION_1_2 ((jint)0x10000003)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ typedef void (*jvmpi_void_function_of_void)(void *);
+#ifdef __cplusplus
+}
+#endif
+
+/****************************************************************
+ * Profiler interface data structures.
+ ****************************************************************/
+/* identifier types. */
+struct _jobjectID;
+typedef struct _jobjectID * jobjectID; /* type of object ids */
+
+/* raw monitors */
+struct _JVMPI_RawMonitor;
+typedef struct _JVMPI_RawMonitor * JVMPI_RawMonitor;
+
+/* call frame */
+typedef struct {
+ jint lineno; /* line number in the source file */
+ jmethodID method_id; /* method executed in this frame */
+} JVMPI_CallFrame;
+
+/* call trace */
+typedef struct {
+ JNIEnv *env_id; /* Env where trace was recorded */
+ jint num_frames; /* number of frames in this trace */
+ JVMPI_CallFrame *frames; /* frames */
+} JVMPI_CallTrace;
+
+/* method */
+typedef struct {
+ char *method_name; /* name of method */
+ char *method_signature; /* signature of method */
+ jint start_lineno; /* -1 if native, abstract .. */
+ jint end_lineno; /* -1 if native, abstract .. */
+ jmethodID method_id; /* id assigned to this method */
+} JVMPI_Method;
+
+/* Field */
+typedef struct {
+ char *field_name; /* name of field */
+ char *field_signature; /* signature of field */
+} JVMPI_Field;
+
+/* line number info for a compiled method */
+typedef struct {
+ jint offset; /* offset from beginning of method */
+ jint lineno; /* lineno from beginning of src file */
+} JVMPI_Lineno;
+
+/* event */
+typedef struct {
+ jint event_type; /* event_type */
+ JNIEnv *env_id; /* env where this event occured */
+
+ union {
+ struct {
+ const char *class_name; /* class name */
+ char *source_name; /* name of source file */
+ jint num_interfaces; /* number of interfaces implemented */
+ jint num_methods; /* number of methods in the class */
+ JVMPI_Method *methods; /* methods */
+ jint num_static_fields; /* number of static fields */
+ JVMPI_Field *statics; /* static fields */
+ jint num_instance_fields; /* number of instance fields */
+ JVMPI_Field *instances; /* instance fields */
+ jobjectID class_id; /* id of the class object */
+ } class_load;
+
+ struct {
+ jobjectID class_id; /* id of the class object */
+ } class_unload;
+
+ struct {
+ unsigned char *class_data; /* content of class file */
+ jint class_data_len; /* class file length */
+ unsigned char *new_class_data; /* instrumented class file */
+ jint new_class_data_len; /* new class file length */
+ void * (*malloc_f)(unsigned int); /* memory allocation function */
+ } class_load_hook;
+
+ struct {
+ jint arena_id;
+ jobjectID class_id; /* id of object class */
+ jint is_array; /* JVMPI_NORMAL_OBJECT, ... */
+ jint size; /* size in number of bytes */
+ jobjectID obj_id; /* id assigned to this object */
+ } obj_alloc;
+
+ struct {
+ jobjectID obj_id; /* id of the object */
+ } obj_free;
+
+ struct {
+ jint arena_id; /* cur arena id */
+ jobjectID obj_id; /* cur object id */
+ jint new_arena_id; /* new arena id */
+ jobjectID new_obj_id; /* new object id */
+ } obj_move;
+
+ struct {
+ jint arena_id; /* id of arena */
+ const char *arena_name; /* name of arena */
+ } new_arena;
+
+ struct {
+ jint arena_id; /* id of arena */
+ } delete_arena;
+
+ struct {
+ char *thread_name; /* name of thread */
+ char *group_name; /* name of group */
+ char *parent_name; /* name of parent */
+ jobjectID thread_id; /* id of the thread object */
+ JNIEnv *thread_env_id;
+ } thread_start;
+
+ struct {
+ int dump_level; /* level of the heap dump info */
+ char *begin; /* where all the root records begin,
+ please see the heap dump buffer
+ format described below */
+ char *end; /* where the object records end. */
+ jint num_traces; /* number of thread traces,
+ 0 if dump level = JVMPI_DUMP_LEVEL_0 */
+ JVMPI_CallTrace *traces; /* thread traces collected during
+ heap dump */
+ } heap_dump;
+
+ struct {
+ jobjectID obj_id; /* object id */
+ jobject ref_id; /* id assigned to the globalref */
+ } jni_globalref_alloc;
+
+ struct {
+ jobject ref_id; /* id of the global ref */
+ } jni_globalref_free;
+
+ struct {
+ jmethodID method_id; /* method */
+ } method;
+
+ struct {
+ jmethodID method_id; /* id of method */
+ jobjectID obj_id; /* id of target object */
+ } method_entry2;
+
+ struct {
+ jmethodID method_id; /* id of compiled method */
+ void *code_addr; /* code start addr. in memory */
+ jint code_size; /* code size */
+ jint lineno_table_size; /* size of lineno table */
+ JVMPI_Lineno *lineno_table; /* lineno info */
+ } compiled_method_load;
+
+ struct {
+ jmethodID method_id; /* id of unloaded compiled method */
+ } compiled_method_unload;
+
+ struct {
+ jmethodID method_id; /* id of the method the instruction belongs to */
+ jint offset; /* instruction offset in the method's bytecode */
+ union {
+ struct {
+ jboolean is_true; /* whether true or false branch is taken */
+ } if_info;
+ struct {
+ jint key; /* top stack value used as an index */
+ jint low; /* min value of the index */
+ jint hi; /* max value of the index */
+ } tableswitch_info;
+ struct {
+ jint chosen_pair_index; /* actually chosen pair index (0-based)
+ * if chosen_pair_index == pairs_total then
+ * the 'default' branch is taken
+ */
+ jint pairs_total; /* total number of lookupswitch pairs */
+ } lookupswitch_info;
+ } u;
+ } instruction;
+
+ struct {
+ char *begin; /* beginning of dump buffer,
+ see below for format */
+ char *end; /* end of dump buffer */
+ jint num_traces; /* number of traces */
+ JVMPI_CallTrace *traces; /* traces of all threads */
+ jint *threads_status; /* status of all threads */
+ } monitor_dump;
+
+ struct {
+ const char *name; /* name of raw monitor */
+ JVMPI_RawMonitor id; /* id */
+ } raw_monitor;
+
+ struct {
+ jobjectID object; /* Java object */
+ } monitor;
+
+ struct {
+ jobjectID object; /* Java object */
+ jlong timeout; /* timeout period */
+ } monitor_wait;
+
+ struct {
+ jlong used_objects;
+ jlong used_object_space;
+ jlong total_object_space;
+ } gc_info;
+
+ struct {
+ jint data_len;
+ char *data;
+ } object_dump;
+ } u;
+} JVMPI_Event;
+
+/* interface functions */
+typedef struct {
+ jint version; /* JVMPI version */
+
+ /* ------interface implemented by the profiler------ */
+
+ /**
+ * Function called by the JVM to notify an event.
+ */
+ void (*NotifyEvent)(JVMPI_Event *event);
+
+ /* ------interface implemented by the JVM------ */
+
+ /**
+ * Function called by the profiler to enable/disable/send notification
+ * for a particular event type.
+ *
+ * event_type - event_type
+ * arg - event specific arg
+ *
+ * return JVMPI_NOT_AVAILABLE, JVMPI_SUCCESS or JVMPI_FAIL
+ */
+ jint (*EnableEvent)(jint event_type, void *arg);
+ jint (*DisableEvent)(jint event_type, void *arg);
+ jint (*RequestEvent)(jint event_type, void *arg);
+
+ /**
+ * Function called by the profiler to get a stack
+ * trace from the JVM.
+ *
+ * trace - trace data structure to be filled
+ * depth - maximum depth of the trace.
+ */
+ void (*GetCallTrace)(JVMPI_CallTrace *trace, jint depth);
+
+ /**
+ * Function called by profiler when it wants to exit/stop.
+ */
+ void (*ProfilerExit)(jint);
+
+ /**
+ * Utility functions provided by the JVM.
+ */
+ JVMPI_RawMonitor (*RawMonitorCreate)(char *lock_name);
+ void (*RawMonitorEnter)(JVMPI_RawMonitor lock_id);
+ void (*RawMonitorExit)(JVMPI_RawMonitor lock_id);
+ void (*RawMonitorWait)(JVMPI_RawMonitor lock_id, jlong ms);
+ void (*RawMonitorNotifyAll)(JVMPI_RawMonitor lock_id);
+ void (*RawMonitorDestroy)(JVMPI_RawMonitor lock_id);
+
+ /**
+ * Function called by the profiler to get the current thread's CPU time.
+ *
+ * return time in nanoseconds;
+ */
+ jlong (*GetCurrentThreadCpuTime)(void);
+
+ void (*SuspendThread)(JNIEnv *env);
+ void (*ResumeThread)(JNIEnv *env);
+ jint (*GetThreadStatus)(JNIEnv *env);
+ jboolean (*ThreadHasRun)(JNIEnv *env);
+
+ /* This function can be called safely only after JVMPI_EVENT_VM_INIT_DONE
+ notification by the JVM. */
+ jint (*CreateSystemThread)(char *name, jint priority, void (*f)(void *));
+
+ /* thread local storage access functions to avoid locking in time
+ critical functions */
+ void (*SetThreadLocalStorage)(JNIEnv *env_id, void *ptr);
+ void * (*GetThreadLocalStorage)(JNIEnv *env_id);
+
+ /* control GC */
+ void (*DisableGC)(void);
+ void (*EnableGC)(void);
+ void (*RunGC)(void);
+
+ jobjectID (*GetThreadObject)(JNIEnv *env);
+ jobjectID (*GetMethodClass)(jmethodID mid);
+
+ /* JNI <-> jobject conversions */
+ jobject (*jobjectID2jobject)(jobjectID jid);
+ jobjectID (*jobject2jobjectID)(jobject jobj);
+
+ void (*SuspendThreadList)
+ (jint reqCount, JNIEnv **reqList, jint *results);
+ void (*ResumeThreadList)
+ (jint reqCount, JNIEnv **reqList, jint *results);
+} JVMPI_Interface;
+
+/* type of argument passed to RequestEvent for heap dumps */
+typedef struct {
+ jint heap_dump_level;
+} JVMPI_HeapDumpArg;
+
+/**********************************************************************
+ * Constants and formats used in JVM Profiler Interface.
+ **********************************************************************/
+/*
+ * Event type constants.
+ */
+#define JVMPI_EVENT_METHOD_ENTRY ((jint)1)
+#define JVMPI_EVENT_METHOD_ENTRY2 ((jint)2)
+#define JVMPI_EVENT_METHOD_EXIT ((jint)3)
+
+#define JVMPI_EVENT_OBJECT_ALLOC ((jint)4)
+#define JVMPI_EVENT_OBJECT_FREE ((jint)5)
+#define JVMPI_EVENT_OBJECT_MOVE ((jint)6)
+
+#define JVMPI_EVENT_COMPILED_METHOD_LOAD ((jint)7)
+#define JVMPI_EVENT_COMPILED_METHOD_UNLOAD ((jint)8)
+
+#define JVMPI_EVENT_INSTRUCTION_START ((jint)9)
+
+#define JVMPI_EVENT_THREAD_START ((jint)33)
+#define JVMPI_EVENT_THREAD_END ((jint)34)
+
+#define JVMPI_EVENT_CLASS_LOAD_HOOK ((jint)35)
+
+#define JVMPI_EVENT_HEAP_DUMP ((jint)37)
+#define JVMPI_EVENT_JNI_GLOBALREF_ALLOC ((jint)38)
+#define JVMPI_EVENT_JNI_GLOBALREF_FREE ((jint)39)
+#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC ((jint)40)
+#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE ((jint)41)
+#define JVMPI_EVENT_CLASS_LOAD ((jint)42)
+#define JVMPI_EVENT_CLASS_UNLOAD ((jint)43)
+#define JVMPI_EVENT_DATA_DUMP_REQUEST ((jint)44)
+#define JVMPI_EVENT_DATA_RESET_REQUEST ((jint)45)
+
+#define JVMPI_EVENT_JVM_INIT_DONE ((jint)46)
+#define JVMPI_EVENT_JVM_SHUT_DOWN ((jint)47)
+
+#define JVMPI_EVENT_ARENA_NEW ((jint)48)
+#define JVMPI_EVENT_ARENA_DELETE ((jint)49)
+
+#define JVMPI_EVENT_OBJECT_DUMP ((jint)50)
+
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER ((jint)51)
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED ((jint)52)
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT ((jint)53)
+#define JVMPI_EVENT_MONITOR_CONTENDED_ENTER ((jint)54)
+#define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED ((jint)55)
+#define JVMPI_EVENT_MONITOR_CONTENDED_EXIT ((jint)56)
+#define JVMPI_EVENT_MONITOR_WAIT ((jint)57)
+#define JVMPI_EVENT_MONITOR_WAITED ((jint)58)
+#define JVMPI_EVENT_MONITOR_DUMP ((jint)59)
+
+#define JVMPI_EVENT_GC_START ((jint)60)
+#define JVMPI_EVENT_GC_FINISH ((jint)61)
+
+#define JVMPI_MAX_EVENT_TYPE_VAL ((jint)61)
+
+/* old definitions, to be removed */
+#define JVMPI_EVENT_LOAD_COMPILED_METHOD ((jint)7)
+#define JVMPI_EVENT_UNLOAD_COMPILED_METHOD ((jint)8)
+#define JVMPI_EVENT_NEW_ARENA ((jint)48)
+#define JVMPI_EVENT_DELETE_ARENA ((jint)49)
+#define JVMPI_EVENT_DUMP_DATA_REQUEST ((jint)44)
+#define JVMPI_EVENT_RESET_DATA_REQUEST ((jint)45)
+#define JVMPI_EVENT_OBJ_ALLOC ((jint)4)
+#define JVMPI_EVENT_OBJ_FREE ((jint)5)
+#define JVMPI_EVENT_OBJ_MOVE ((jint)6)
+
+#define JVMPI_REQUESTED_EVENT ((jint)0x10000000)
+
+
+
+/*
+ * enabling/disabling event notification.
+ */
+/* results */
+#define JVMPI_SUCCESS ((jint)0)
+#define JVMPI_NOT_AVAILABLE ((jint)1)
+#define JVMPI_FAIL ((jint)-1)
+
+/*
+ * Thread status
+ */
+enum {
+ JVMPI_THREAD_RUNNABLE = 1,
+ JVMPI_THREAD_MONITOR_WAIT,
+ JVMPI_THREAD_CONDVAR_WAIT
+};
+
+#define JVMPI_THREAD_SUSPENDED 0x8000
+#define JVMPI_THREAD_INTERRUPTED 0x4000
+
+/*
+ * Thread priority
+ */
+#define JVMPI_MINIMUM_PRIORITY 1
+#define JVMPI_MAXIMUM_PRIORITY 10
+#define JVMPI_NORMAL_PRIORITY 5
+
+/*
+ * Object type constants.
+ */
+#define JVMPI_NORMAL_OBJECT ((jint)0)
+#define JVMPI_CLASS ((jint)2)
+#define JVMPI_BOOLEAN ((jint)4)
+#define JVMPI_CHAR ((jint)5)
+#define JVMPI_FLOAT ((jint)6)
+#define JVMPI_DOUBLE ((jint)7)
+#define JVMPI_BYTE ((jint)8)
+#define JVMPI_SHORT ((jint)9)
+#define JVMPI_INT ((jint)10)
+#define JVMPI_LONG ((jint)11)
+
+/*
+ * Monitor dump constants.
+ */
+
+#define JVMPI_MONITOR_JAVA 0x01
+#define JVMPI_MONITOR_RAW 0x02
+
+/*
+ * Heap dump constants.
+ */
+#define JVMPI_GC_ROOT_UNKNOWN 0xff
+#define JVMPI_GC_ROOT_JNI_GLOBAL 0x01
+#define JVMPI_GC_ROOT_JNI_LOCAL 0x02
+#define JVMPI_GC_ROOT_JAVA_FRAME 0x03
+#define JVMPI_GC_ROOT_NATIVE_STACK 0x04
+#define JVMPI_GC_ROOT_STICKY_CLASS 0x05
+#define JVMPI_GC_ROOT_THREAD_BLOCK 0x06
+#define JVMPI_GC_ROOT_MONITOR_USED 0x07
+#define JVMPI_GC_ROOT_THREAD_OBJ 0x08
+
+#define JVMPI_GC_CLASS_DUMP 0x20
+#define JVMPI_GC_INSTANCE_DUMP 0x21
+#define JVMPI_GC_OBJ_ARRAY_DUMP 0x22
+#define JVMPI_GC_PRIM_ARRAY_DUMP 0x23
+
+/*
+ * Dump levels
+ */
+#define JVMPI_DUMP_LEVEL_0 ((jint)0)
+#define JVMPI_DUMP_LEVEL_1 ((jint)1)
+#define JVMPI_DUMP_LEVEL_2 ((jint)2)
+
+/* Types used in dumps -
+ *
+ * u1: 1 byte
+ * u2: 2 bytes
+ * u4: 4 bytes
+ * u8: 8 bytes
+ *
+ * ty: u1 where:
+ * JVMPI_CLASS: object
+ * JVMPI_BOOLEAN: boolean
+ * JVMPI_CHAR: char
+ * JVMPI_FLOAT: float
+ * JVMPI_DOUBLE: double
+ * JVMPI_BYTE: byte
+ * JVMPI_SHORT: short
+ * JVMPI_INT: int
+ * JVMPI_LONG: long
+ *
+ * vl: values, exact type depends on the type of the value:
+ * JVMPI_BOOLEAN & JVMPI_BYTE: u1
+ * JVMPI_SHORT & JVMPI_CHAR: u2
+ * JVMPI_INT & JVMPI_FLOAT: u4
+ * JVMPI_LONG & JVMPI_DOUBLE: u8
+ * JVMPI_CLASS: jobjectID
+ */
+
+/* Format of the monitor dump buffer:
+ *
+ * u1 monitor type
+ *
+ * JVMPI_MONITOR_JAVA Java monitor
+ *
+ * jobjectID object
+ * JNIEnv * owner thread
+ * u4 entry count
+ * u4 # of threads waiting to enter
+ * [JNIEnv *]* threads waiting to enter
+ * u4 # of threads waiting to be notified
+ * [JNIEnv *]* threads waiting to be notified
+ *
+ * JVMPI_MONITOR_RAW raw monitor
+ *
+ * char * name
+ * JVMPI_RawMonitor raw monitor
+ * JNIEnv * owner thread
+ * u4 entry count
+ * u4 # of threads waiting to enter
+ * [JNIEnv *]* threads waiting to enter
+ * u4 # of threads waiting to be notified
+ * [JNIEnv *]* threads waiting to be notified
+ */
+
+/* Format of the heap dump buffer depends on the dump level
+ * specified in the JVMPI_HeapDumpArg passed to RequestEvent as arg.
+ * The default is JVMPI_DUMP_LEVEL_2.
+ *
+ * JVMPI_DUMP_LEVEL_0:
+ *
+ * u1 object type (JVMPI_CLASS ...)
+ * jobjectID object
+ *
+ * JVMPI_DUMP_LEVEL_1 and JVMPI_DUMP_LEVEL_2 use the following format:
+ * In the case of JVMPI_DUMP_LEVEL_1 the values of primitive fields in object
+ * instance dumps , the values of primitive statics in class dumps and the
+ * values of primitive arrays are excluded. JVMPI_DUMP_LEVEL_2 includes the
+ * primitive values.
+ *
+ * u1 record type
+ *
+ * JVMPI_GC_ROOT_UNKNOWN unknown root
+ *
+ * jobjectID object
+ *
+ * JVMPI_GC_ROOT_JNI_GLOBAL JNI global ref root
+ *
+ * jobjectID object
+ * jobject JNI global reference
+ *
+ * JVMPI_GC_ROOT_JNI_LOCAL JNI local ref
+ *
+ * jobjectID object
+ * JNIEnv * thread
+ * u4 frame # in stack trace (-1 for empty)
+ *
+ * JVMPI_GC_ROOT_JAVA_FRAME Java stack frame
+ *
+ * jobjectID object
+ * JNIEnv * thread
+ * u4 frame # in stack trace (-1 for empty)
+ *
+ * JVMPI_GC_ROOT_NATIVE_STACK Native stack
+ *
+ * jobjectID object
+ * JNIEnv * thread
+ *
+ * JVMPI_GC_ROOT_STICKY_CLASS System class
+ *
+ * jobjectID class object
+ *
+ * JVMPI_GC_ROOT_THREAD_BLOCK Reference from thread block
+ *
+ * jobjectID thread object
+ * JNIEnv * thread
+ *
+ * JVMPI_GC_ROOT_MONITOR_USED Busy monitor
+ *
+ * jobjectID object
+ *
+ * JVMPI_GC_CLASS_DUMP dump of a class object
+ *
+ * jobjectID class
+ * jobjectID super
+ * jobjectID class loader
+ * jobjectID signers
+ * jobjectID protection domain
+ * jobjectID class name
+ * void * reserved
+ *
+ * u4 instance size (in bytes)
+ *
+ * [jobjectID]* interfaces
+ *
+ * u2 size of constant pool
+ * [u2, constant pool index,
+ * ty, type,
+ * vl]* value
+ *
+ * [vl]* static field values
+ *
+ * JVMPI_GC_INSTANCE_DUMP dump of a normal object
+ *
+ * jobjectID object
+ * jobjectID class
+ * u4 number of bytes that follow
+ * [vl]* instance field values (class, followed
+ * by super, super's super ...)
+ *
+ * JVMPI_GC_OBJ_ARRAY_DUMP dump of an object array
+ *
+ * jobjectID array object
+ * u4 number of elements
+ * jobjectID element class
+ * [jobjectID]* elements
+ *
+ * JVMPI_GC_PRIM_ARRAY_DUMP dump of a primitive array
+ *
+ * jobjectID array object
+ * u4 number of elements
+ * ty element type
+ * [vl]* elements
+ *
+ */
+
+/* Format of the dump received in JVMPI_EVENT_OBJECT_DUMP:
+ * All the records have JVMPI_DUMP_LEVEL_2 information.
+ *
+ * u1 record type
+ *
+ * followed by a:
+ *
+ * JVMPI_GC_CLASS_DUMP,
+ * JVMPI_GC_INSTANCE_DUMP,
+ * JVMPI_GC_OBJ_ARRAY_DUMP, or
+ * JVMPI_GC_PRIM_ARRAY_DUMP record.
+ */
+
+#endif /* !_JAVASOFT_JVMPI_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmti.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,2181 @@
+#ifdef USE_PRAGMA_IDENT_HDR
+#pragma ident "@(#)jvmtiLib.xsl 1.32 04/06/01 20:19:53 JVM"
+#endif
+/*
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+ /* AUTOMATICALLY GENERATED FILE - DO NOT EDIT */
+
+
+ /* Include file for the Java(tm) Virtual Machine Tool Interface */
+
+#ifndef _JAVA_JVMTI_H_
+#define _JAVA_JVMTI_H_
+
+#include "jni.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+ JVMTI_VERSION_1 = 0x30010000,
+ JVMTI_VERSION_1_0 = 0x30010000,
+
+ JVMTI_VERSION = 0x30000000 + (1 * 0x10000) + (0 * 0x100) + 33 /* version: 1.0.33 */
+};
+
+JNIEXPORT jint JNICALL
+Agent_OnLoad(JavaVM *vm, char *options, void *reserved);
+
+JNIEXPORT void JNICALL
+Agent_OnUnload(JavaVM *vm);
+
+ /* Forward declaration of the environment */
+
+struct _jvmtiEnv;
+
+struct jvmtiInterface_1_;
+
+#ifdef __cplusplus
+typedef _jvmtiEnv jvmtiEnv;
+#else
+typedef const struct jvmtiInterface_1_ *jvmtiEnv;
+#endif /* __cplusplus */
+
+/* Derived Base Types */
+
+typedef jobject jthread;
+typedef jobject jthreadGroup;
+typedef jlong jlocation;
+struct _jrawMonitorID;
+typedef struct _jrawMonitorID *jrawMonitorID;
+typedef struct JNINativeInterface_ jniNativeInterface;
+
+ /* Constants */
+
+
+ /* Thread State Flags */
+
+enum {
+ JVMTI_THREAD_STATE_ALIVE = 0x0001,
+ JVMTI_THREAD_STATE_TERMINATED = 0x0002,
+ JVMTI_THREAD_STATE_RUNNABLE = 0x0004,
+ JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400,
+ JVMTI_THREAD_STATE_WAITING = 0x0080,
+ JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010,
+ JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020,
+ JVMTI_THREAD_STATE_SLEEPING = 0x0040,
+ JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100,
+ JVMTI_THREAD_STATE_PARKED = 0x0200,
+ JVMTI_THREAD_STATE_SUSPENDED = 0x100000,
+ JVMTI_THREAD_STATE_INTERRUPTED = 0x200000,
+ JVMTI_THREAD_STATE_IN_NATIVE = 0x400000,
+ JVMTI_THREAD_STATE_VENDOR_1 = 0x10000000,
+ JVMTI_THREAD_STATE_VENDOR_2 = 0x20000000,
+ JVMTI_THREAD_STATE_VENDOR_3 = 0x40000000
+};
+
+ /* java.lang.Thread.State Conversion Masks */
+
+enum {
+ JVMTI_JAVA_LANG_THREAD_STATE_MASK = JVMTI_THREAD_STATE_TERMINATED | JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT,
+ JVMTI_JAVA_LANG_THREAD_STATE_NEW = 0,
+ JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED = JVMTI_THREAD_STATE_TERMINATED,
+ JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE,
+ JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER,
+ JVMTI_JAVA_LANG_THREAD_STATE_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY,
+ JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT
+};
+
+ /* Thread Priority Constants */
+
+enum {
+ JVMTI_THREAD_MIN_PRIORITY = 1,
+ JVMTI_THREAD_NORM_PRIORITY = 5,
+ JVMTI_THREAD_MAX_PRIORITY = 10
+};
+
+ /* Heap Object Filter Enumeration */
+
+typedef enum {
+ JVMTI_HEAP_OBJECT_TAGGED = 1,
+ JVMTI_HEAP_OBJECT_UNTAGGED = 2,
+ JVMTI_HEAP_OBJECT_EITHER = 3
+} jvmtiHeapObjectFilter;
+
+ /* Heap Root Kind Enumeration */
+
+typedef enum {
+ JVMTI_HEAP_ROOT_JNI_GLOBAL = 1,
+ JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2,
+ JVMTI_HEAP_ROOT_MONITOR = 3,
+ JVMTI_HEAP_ROOT_STACK_LOCAL = 4,
+ JVMTI_HEAP_ROOT_JNI_LOCAL = 5,
+ JVMTI_HEAP_ROOT_THREAD = 6,
+ JVMTI_HEAP_ROOT_OTHER = 7
+} jvmtiHeapRootKind;
+
+ /* Object Reference Enumeration */
+
+typedef enum {
+ JVMTI_REFERENCE_CLASS = 1,
+ JVMTI_REFERENCE_FIELD = 2,
+ JVMTI_REFERENCE_ARRAY_ELEMENT = 3,
+ JVMTI_REFERENCE_CLASS_LOADER = 4,
+ JVMTI_REFERENCE_SIGNERS = 5,
+ JVMTI_REFERENCE_PROTECTION_DOMAIN = 6,
+ JVMTI_REFERENCE_INTERFACE = 7,
+ JVMTI_REFERENCE_STATIC_FIELD = 8,
+ JVMTI_REFERENCE_CONSTANT_POOL = 9
+} jvmtiObjectReferenceKind;
+
+ /* Iteration Control Enumeration */
+
+typedef enum {
+ JVMTI_ITERATION_CONTINUE = 1,
+ JVMTI_ITERATION_IGNORE = 2,
+ JVMTI_ITERATION_ABORT = 0
+} jvmtiIterationControl;
+
+ /* Class Status Flags */
+
+enum {
+ JVMTI_CLASS_STATUS_VERIFIED = 1,
+ JVMTI_CLASS_STATUS_PREPARED = 2,
+ JVMTI_CLASS_STATUS_INITIALIZED = 4,
+ JVMTI_CLASS_STATUS_ERROR = 8,
+ JVMTI_CLASS_STATUS_ARRAY = 16,
+ JVMTI_CLASS_STATUS_PRIMITIVE = 32
+};
+
+ /* Event Enable/Disable */
+
+typedef enum {
+ JVMTI_ENABLE = 1,
+ JVMTI_DISABLE = 0
+} jvmtiEventMode;
+
+ /* Extension Function/Event Parameter Types */
+
+typedef enum {
+ JVMTI_TYPE_JBYTE = 101,
+ JVMTI_TYPE_JCHAR = 102,
+ JVMTI_TYPE_JSHORT = 103,
+ JVMTI_TYPE_JINT = 104,
+ JVMTI_TYPE_JLONG = 105,
+ JVMTI_TYPE_JFLOAT = 106,
+ JVMTI_TYPE_JDOUBLE = 107,
+ JVMTI_TYPE_JBOOLEAN = 108,
+ JVMTI_TYPE_JOBJECT = 109,
+ JVMTI_TYPE_JTHREAD = 110,
+ JVMTI_TYPE_JCLASS = 111,
+ JVMTI_TYPE_JVALUE = 112,
+ JVMTI_TYPE_JFIELDID = 113,
+ JVMTI_TYPE_JMETHODID = 114,
+ JVMTI_TYPE_CCHAR = 115,
+ JVMTI_TYPE_CVOID = 116,
+ JVMTI_TYPE_JNIENV = 117
+} jvmtiParamTypes;
+
+ /* Extension Function/Event Parameter Kinds */
+
+typedef enum {
+ JVMTI_KIND_IN = 91,
+ JVMTI_KIND_IN_PTR = 92,
+ JVMTI_KIND_IN_BUF = 93,
+ JVMTI_KIND_ALLOC_BUF = 94,
+ JVMTI_KIND_ALLOC_ALLOC_BUF = 95,
+ JVMTI_KIND_OUT = 96,
+ JVMTI_KIND_OUT_BUF = 97
+} jvmtiParamKind;
+
+ /* Timer Kinds */
+
+typedef enum {
+ JVMTI_TIMER_USER_CPU = 30,
+ JVMTI_TIMER_TOTAL_CPU = 31,
+ JVMTI_TIMER_ELAPSED = 32
+} jvmtiTimerKind;
+
+ /* Phases of execution */
+
+typedef enum {
+ JVMTI_PHASE_ONLOAD = 1,
+ JVMTI_PHASE_PRIMORDIAL = 2,
+ JVMTI_PHASE_START = 6,
+ JVMTI_PHASE_LIVE = 4,
+ JVMTI_PHASE_DEAD = 8
+} jvmtiPhase;
+
+ /* Version Interface Types */
+
+enum {
+ JVMTI_VERSION_INTERFACE_JNI = 0x00000000,
+ JVMTI_VERSION_INTERFACE_JVMTI = 0x30000000
+};
+
+ /* Version Masks */
+
+enum {
+ JVMTI_VERSION_MASK_INTERFACE_TYPE = 0x70000000,
+ JVMTI_VERSION_MASK_MAJOR = 0x0FFF0000,
+ JVMTI_VERSION_MASK_MINOR = 0x0000FF00,
+ JVMTI_VERSION_MASK_MICRO = 0x000000FF
+};
+
+ /* Version Shifts */
+
+enum {
+ JVMTI_VERSION_SHIFT_MAJOR = 16,
+ JVMTI_VERSION_SHIFT_MINOR = 8,
+ JVMTI_VERSION_SHIFT_MICRO = 0
+};
+
+ /* Verbose Flag Enumeration */
+
+typedef enum {
+ JVMTI_VERBOSE_OTHER = 0,
+ JVMTI_VERBOSE_GC = 1,
+ JVMTI_VERBOSE_CLASS = 2,
+ JVMTI_VERBOSE_JNI = 4
+} jvmtiVerboseFlag;
+
+ /* JLocation Format Enumeration */
+
+typedef enum {
+ JVMTI_JLOCATION_JVMBCI = 1,
+ JVMTI_JLOCATION_MACHINEPC = 2,
+ JVMTI_JLOCATION_OTHER = 0
+} jvmtiJlocationFormat;
+
+ /* Errors */
+
+typedef enum {
+ JVMTI_ERROR_NONE = 0,
+ JVMTI_ERROR_INVALID_THREAD = 10,
+ JVMTI_ERROR_INVALID_THREAD_GROUP = 11,
+ JVMTI_ERROR_INVALID_PRIORITY = 12,
+ JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13,
+ JVMTI_ERROR_THREAD_SUSPENDED = 14,
+ JVMTI_ERROR_THREAD_NOT_ALIVE = 15,
+ JVMTI_ERROR_INVALID_OBJECT = 20,
+ JVMTI_ERROR_INVALID_CLASS = 21,
+ JVMTI_ERROR_CLASS_NOT_PREPARED = 22,
+ JVMTI_ERROR_INVALID_METHODID = 23,
+ JVMTI_ERROR_INVALID_LOCATION = 24,
+ JVMTI_ERROR_INVALID_FIELDID = 25,
+ JVMTI_ERROR_NO_MORE_FRAMES = 31,
+ JVMTI_ERROR_OPAQUE_FRAME = 32,
+ JVMTI_ERROR_TYPE_MISMATCH = 34,
+ JVMTI_ERROR_INVALID_SLOT = 35,
+ JVMTI_ERROR_DUPLICATE = 40,
+ JVMTI_ERROR_NOT_FOUND = 41,
+ JVMTI_ERROR_INVALID_MONITOR = 50,
+ JVMTI_ERROR_NOT_MONITOR_OWNER = 51,
+ JVMTI_ERROR_INTERRUPT = 52,
+ JVMTI_ERROR_INVALID_CLASS_FORMAT = 60,
+ JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
+ JVMTI_ERROR_FAILS_VERIFICATION = 62,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64,
+ JVMTI_ERROR_INVALID_TYPESTATE = 65,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67,
+ JVMTI_ERROR_UNSUPPORTED_VERSION = 68,
+ JVMTI_ERROR_NAMES_DONT_MATCH = 69,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70,
+ JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71,
+ JVMTI_ERROR_UNMODIFIABLE_CLASS = 79,
+ JVMTI_ERROR_NOT_AVAILABLE = 98,
+ JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99,
+ JVMTI_ERROR_NULL_POINTER = 100,
+ JVMTI_ERROR_ABSENT_INFORMATION = 101,
+ JVMTI_ERROR_INVALID_EVENT_TYPE = 102,
+ JVMTI_ERROR_ILLEGAL_ARGUMENT = 103,
+ JVMTI_ERROR_NATIVE_METHOD = 104,
+ JVMTI_ERROR_OUT_OF_MEMORY = 110,
+ JVMTI_ERROR_ACCESS_DENIED = 111,
+ JVMTI_ERROR_WRONG_PHASE = 112,
+ JVMTI_ERROR_INTERNAL = 113,
+ JVMTI_ERROR_UNATTACHED_THREAD = 115,
+ JVMTI_ERROR_INVALID_ENVIRONMENT = 116,
+ JVMTI_ERROR_MAX = 116
+} jvmtiError;
+
+ /* Event IDs */
+
+typedef enum {
+ JVMTI_MIN_EVENT_TYPE_VAL = 50,
+ JVMTI_EVENT_VM_INIT = 50,
+ JVMTI_EVENT_VM_DEATH = 51,
+ JVMTI_EVENT_THREAD_START = 52,
+ JVMTI_EVENT_THREAD_END = 53,
+ JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54,
+ JVMTI_EVENT_CLASS_LOAD = 55,
+ JVMTI_EVENT_CLASS_PREPARE = 56,
+ JVMTI_EVENT_VM_START = 57,
+ JVMTI_EVENT_EXCEPTION = 58,
+ JVMTI_EVENT_EXCEPTION_CATCH = 59,
+ JVMTI_EVENT_SINGLE_STEP = 60,
+ JVMTI_EVENT_FRAME_POP = 61,
+ JVMTI_EVENT_BREAKPOINT = 62,
+ JVMTI_EVENT_FIELD_ACCESS = 63,
+ JVMTI_EVENT_FIELD_MODIFICATION = 64,
+ JVMTI_EVENT_METHOD_ENTRY = 65,
+ JVMTI_EVENT_METHOD_EXIT = 66,
+ JVMTI_EVENT_NATIVE_METHOD_BIND = 67,
+ JVMTI_EVENT_COMPILED_METHOD_LOAD = 68,
+ JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69,
+ JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70,
+ JVMTI_EVENT_DATA_DUMP_REQUEST = 71,
+ JVMTI_EVENT_MONITOR_WAIT = 73,
+ JVMTI_EVENT_MONITOR_WAITED = 74,
+ JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75,
+ JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76,
+ JVMTI_EVENT_GARBAGE_COLLECTION_START = 81,
+ JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82,
+ JVMTI_EVENT_OBJECT_FREE = 83,
+ JVMTI_EVENT_VM_OBJECT_ALLOC = 84,
+ JVMTI_MAX_EVENT_TYPE_VAL = 84
+} jvmtiEvent;
+
+
+ /* Function Types */
+
+typedef void (JNICALL *jvmtiStartFunction)
+ (jvmtiEnv* jvmti_env, JNIEnv* jni_env, void* arg);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiHeapObjectCallback)
+ (jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiHeapRootCallback)
+ (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiStackReferenceCallback)
+ (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong thread_tag, jint depth, jmethodID method, jint slot, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiObjectReferenceCallback)
+ (jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong referrer_tag, jint referrer_index, void* user_data);
+
+typedef jvmtiError (JNICALL *jvmtiExtensionFunction)
+ (jvmtiEnv* jvmti_env, ...);
+
+typedef void (JNICALL *jvmtiExtensionEvent)
+ (jvmtiEnv* jvmti_env, ...);
+
+
+ /* Structure Types */
+
+typedef struct {
+ char* name;
+ jint priority;
+ jboolean is_daemon;
+ jthreadGroup thread_group;
+ jobject context_class_loader;
+} jvmtiThreadInfo;
+
+typedef struct {
+ jthreadGroup parent;
+ char* name;
+ jint max_priority;
+ jboolean is_daemon;
+} jvmtiThreadGroupInfo;
+
+typedef struct {
+ jmethodID method;
+ jlocation location;
+} jvmtiFrameInfo;
+
+typedef struct {
+ jthread thread;
+ jint state;
+ jvmtiFrameInfo* frame_buffer;
+ jint frame_count;
+} jvmtiStackInfo;
+
+typedef struct {
+ jclass klass;
+ jint class_byte_count;
+ const unsigned char* class_bytes;
+} jvmtiClassDefinition;
+
+typedef struct {
+ jthread owner;
+ jint entry_count;
+ jint waiter_count;
+ jthread* waiters;
+ jint notify_waiter_count;
+ jthread* notify_waiters;
+} jvmtiMonitorUsage;
+
+typedef struct {
+ jlocation start_location;
+ jint line_number;
+} jvmtiLineNumberEntry;
+
+typedef struct {
+ jlocation start_location;
+ jint length;
+ char* name;
+ char* signature;
+ char* generic_signature;
+ jint slot;
+} jvmtiLocalVariableEntry;
+
+typedef struct {
+ char* name;
+ jvmtiParamKind kind;
+ jvmtiParamTypes base_type;
+ jboolean null_ok;
+} jvmtiParamInfo;
+
+typedef struct {
+ jvmtiExtensionFunction func;
+ char* id;
+ char* short_description;
+ jint param_count;
+ jvmtiParamInfo* params;
+ jint error_count;
+ jvmtiError* errors;
+} jvmtiExtensionFunctionInfo;
+
+typedef struct {
+ jint extension_event_index;
+ char* id;
+ char* short_description;
+ jint param_count;
+ jvmtiParamInfo* params;
+} jvmtiExtensionEventInfo;
+
+typedef struct {
+ jlong max_value;
+ jboolean may_skip_forward;
+ jboolean may_skip_backward;
+ jvmtiTimerKind kind;
+ jlong reserved1;
+ jlong reserved2;
+} jvmtiTimerInfo;
+
+typedef struct {
+ const void* start_address;
+ jlocation location;
+} jvmtiAddrLocationMap;
+
+typedef struct {
+ unsigned int can_tag_objects : 1;
+ unsigned int can_generate_field_modification_events : 1;
+ unsigned int can_generate_field_access_events : 1;
+ unsigned int can_get_bytecodes : 1;
+ unsigned int can_get_synthetic_attribute : 1;
+ unsigned int can_get_owned_monitor_info : 1;
+ unsigned int can_get_current_contended_monitor : 1;
+ unsigned int can_get_monitor_info : 1;
+ unsigned int can_pop_frame : 1;
+ unsigned int can_redefine_classes : 1;
+ unsigned int can_signal_thread : 1;
+ unsigned int can_get_source_file_name : 1;
+ unsigned int can_get_line_numbers : 1;
+ unsigned int can_get_source_debug_extension : 1;
+ unsigned int can_access_local_variables : 1;
+ unsigned int can_maintain_original_method_order : 1;
+ unsigned int can_generate_single_step_events : 1;
+ unsigned int can_generate_exception_events : 1;
+ unsigned int can_generate_frame_pop_events : 1;
+ unsigned int can_generate_breakpoint_events : 1;
+ unsigned int can_suspend : 1;
+ unsigned int can_redefine_any_class : 1;
+ unsigned int can_get_current_thread_cpu_time : 1;
+ unsigned int can_get_thread_cpu_time : 1;
+ unsigned int can_generate_method_entry_events : 1;
+ unsigned int can_generate_method_exit_events : 1;
+ unsigned int can_generate_all_class_hook_events : 1;
+ unsigned int can_generate_compiled_method_load_events : 1;
+ unsigned int can_generate_monitor_events : 1;
+ unsigned int can_generate_vm_object_alloc_events : 1;
+ unsigned int can_generate_native_method_bind_events : 1;
+ unsigned int can_generate_garbage_collection_events : 1;
+ unsigned int can_generate_object_free_events : 1;
+ unsigned int : 15;
+ unsigned int : 16;
+ unsigned int : 16;
+ unsigned int : 16;
+ unsigned int : 16;
+ unsigned int : 16;
+} jvmtiCapabilities;
+
+
+ /* Event Definitions */
+
+typedef void (JNICALL *jvmtiEventReserved)(void);
+
+
+typedef void (JNICALL *jvmtiEventBreakpoint)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location);
+
+typedef void (JNICALL *jvmtiEventClassFileLoadHook)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jclass class_being_redefined,
+ jobject loader,
+ const char* name,
+ jobject protection_domain,
+ jint class_data_len,
+ const unsigned char* class_data,
+ jint* new_class_data_len,
+ unsigned char** new_class_data);
+
+typedef void (JNICALL *jvmtiEventClassLoad)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jclass klass);
+
+typedef void (JNICALL *jvmtiEventClassPrepare)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jclass klass);
+
+typedef void (JNICALL *jvmtiEventCompiledMethodLoad)
+ (jvmtiEnv *jvmti_env,
+ jmethodID method,
+ jint code_size,
+ const void* code_addr,
+ jint map_length,
+ const jvmtiAddrLocationMap* map,
+ const void* compile_info);
+
+typedef void (JNICALL *jvmtiEventCompiledMethodUnload)
+ (jvmtiEnv *jvmti_env,
+ jmethodID method,
+ const void* code_addr);
+
+typedef void (JNICALL *jvmtiEventDataDumpRequest)
+ (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventDynamicCodeGenerated)
+ (jvmtiEnv *jvmti_env,
+ const char* name,
+ const void* address,
+ jint length);
+
+typedef void (JNICALL *jvmtiEventException)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location,
+ jobject exception,
+ jmethodID catch_method,
+ jlocation catch_location);
+
+typedef void (JNICALL *jvmtiEventExceptionCatch)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location,
+ jobject exception);
+
+typedef void (JNICALL *jvmtiEventFieldAccess)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location,
+ jclass field_klass,
+ jobject object,
+ jfieldID field);
+
+typedef void (JNICALL *jvmtiEventFieldModification)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location,
+ jclass field_klass,
+ jobject object,
+ jfieldID field,
+ char signature_type,
+ jvalue new_value);
+
+typedef void (JNICALL *jvmtiEventFramePop)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jboolean was_popped_by_exception);
+
+typedef void (JNICALL *jvmtiEventGarbageCollectionFinish)
+ (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventGarbageCollectionStart)
+ (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventMethodEntry)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method);
+
+typedef void (JNICALL *jvmtiEventMethodExit)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jboolean was_popped_by_exception,
+ jvalue return_value);
+
+typedef void (JNICALL *jvmtiEventMonitorContendedEnter)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jobject object);
+
+typedef void (JNICALL *jvmtiEventMonitorContendedEntered)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jobject object);
+
+typedef void (JNICALL *jvmtiEventMonitorWait)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jobject object,
+ jlong timeout);
+
+typedef void (JNICALL *jvmtiEventMonitorWaited)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jobject object,
+ jboolean timed_out);
+
+typedef void (JNICALL *jvmtiEventNativeMethodBind)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ void* address,
+ void** new_address_ptr);
+
+typedef void (JNICALL *jvmtiEventObjectFree)
+ (jvmtiEnv *jvmti_env,
+ jlong tag);
+
+typedef void (JNICALL *jvmtiEventSingleStep)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jmethodID method,
+ jlocation location);
+
+typedef void (JNICALL *jvmtiEventThreadEnd)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread);
+
+typedef void (JNICALL *jvmtiEventThreadStart)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread);
+
+typedef void (JNICALL *jvmtiEventVMDeath)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env);
+
+typedef void (JNICALL *jvmtiEventVMInit)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread);
+
+typedef void (JNICALL *jvmtiEventVMObjectAlloc)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env,
+ jthread thread,
+ jobject object,
+ jclass object_klass,
+ jlong size);
+
+typedef void (JNICALL *jvmtiEventVMStart)
+ (jvmtiEnv *jvmti_env,
+ JNIEnv* jni_env);
+
+ /* Event Callback Structure */
+
+typedef struct {
+ /* 50 : VM Initialization Event */
+ jvmtiEventVMInit VMInit;
+ /* 51 : VM Death Event */
+ jvmtiEventVMDeath VMDeath;
+ /* 52 : Thread Start */
+ jvmtiEventThreadStart ThreadStart;
+ /* 53 : Thread End */
+ jvmtiEventThreadEnd ThreadEnd;
+ /* 54 : Class File Load Hook */
+ jvmtiEventClassFileLoadHook ClassFileLoadHook;
+ /* 55 : Class Load */
+ jvmtiEventClassLoad ClassLoad;
+ /* 56 : Class Prepare */
+ jvmtiEventClassPrepare ClassPrepare;
+ /* 57 : VM Start Event */
+ jvmtiEventVMStart VMStart;
+ /* 58 : Exception */
+ jvmtiEventException Exception;
+ /* 59 : Exception Catch */
+ jvmtiEventExceptionCatch ExceptionCatch;
+ /* 60 : Single Step */
+ jvmtiEventSingleStep SingleStep;
+ /* 61 : Frame Pop */
+ jvmtiEventFramePop FramePop;
+ /* 62 : Breakpoint */
+ jvmtiEventBreakpoint Breakpoint;
+ /* 63 : Field Access */
+ jvmtiEventFieldAccess FieldAccess;
+ /* 64 : Field Modification */
+ jvmtiEventFieldModification FieldModification;
+ /* 65 : Method Entry */
+ jvmtiEventMethodEntry MethodEntry;
+ /* 66 : Method Exit */
+ jvmtiEventMethodExit MethodExit;
+ /* 67 : Native Method Bind */
+ jvmtiEventNativeMethodBind NativeMethodBind;
+ /* 68 : Compiled Method Load */
+ jvmtiEventCompiledMethodLoad CompiledMethodLoad;
+ /* 69 : Compiled Method Unload */
+ jvmtiEventCompiledMethodUnload CompiledMethodUnload;
+ /* 70 : Dynamic Code Generated */
+ jvmtiEventDynamicCodeGenerated DynamicCodeGenerated;
+ /* 71 : Data Dump Request */
+ jvmtiEventDataDumpRequest DataDumpRequest;
+ /* 72 */
+ jvmtiEventReserved reserved72;
+ /* 73 : Monitor Wait */
+ jvmtiEventMonitorWait MonitorWait;
+ /* 74 : Monitor Waited */
+ jvmtiEventMonitorWaited MonitorWaited;
+ /* 75 : Monitor Contended Enter */
+ jvmtiEventMonitorContendedEnter MonitorContendedEnter;
+ /* 76 : Monitor Contended Entered */
+ jvmtiEventMonitorContendedEntered MonitorContendedEntered;
+ /* 77 */
+ jvmtiEventReserved reserved77;
+ /* 78 */
+ jvmtiEventReserved reserved78;
+ /* 79 */
+ jvmtiEventReserved reserved79;
+ /* 80 */
+ jvmtiEventReserved reserved80;
+ /* 81 : Garbage Collection Start */
+ jvmtiEventGarbageCollectionStart GarbageCollectionStart;
+ /* 82 : Garbage Collection Finish */
+ jvmtiEventGarbageCollectionFinish GarbageCollectionFinish;
+ /* 83 : Object Free */
+ jvmtiEventObjectFree ObjectFree;
+ /* 84 : VM Object Allocation */
+ jvmtiEventVMObjectAlloc VMObjectAlloc;
+} jvmtiEventCallbacks;
+
+
+ /* Function Interface */
+
+typedef struct jvmtiInterface_1_ {
+
+ /* 1 : RESERVED */
+ void *reserved1;
+
+ /* 2 : Set Event Notification Mode */
+ jvmtiError (JNICALL *SetEventNotificationMode) (jvmtiEnv* env,
+ jvmtiEventMode mode,
+ jvmtiEvent event_type,
+ jthread event_thread,
+ ...);
+
+ /* 3 : RESERVED */
+ void *reserved3;
+
+ /* 4 : Get All Threads */
+ jvmtiError (JNICALL *GetAllThreads) (jvmtiEnv* env,
+ jint* threads_count_ptr,
+ jthread** threads_ptr);
+
+ /* 5 : Suspend Thread */
+ jvmtiError (JNICALL *SuspendThread) (jvmtiEnv* env,
+ jthread thread);
+
+ /* 6 : Resume Thread */
+ jvmtiError (JNICALL *ResumeThread) (jvmtiEnv* env,
+ jthread thread);
+
+ /* 7 : Stop Thread */
+ jvmtiError (JNICALL *StopThread) (jvmtiEnv* env,
+ jthread thread,
+ jobject exception);
+
+ /* 8 : Interrupt Thread */
+ jvmtiError (JNICALL *InterruptThread) (jvmtiEnv* env,
+ jthread thread);
+
+ /* 9 : Get Thread Info */
+ jvmtiError (JNICALL *GetThreadInfo) (jvmtiEnv* env,
+ jthread thread,
+ jvmtiThreadInfo* info_ptr);
+
+ /* 10 : Get Owned Monitor Info */
+ jvmtiError (JNICALL *GetOwnedMonitorInfo) (jvmtiEnv* env,
+ jthread thread,
+ jint* owned_monitor_count_ptr,
+ jobject** owned_monitors_ptr);
+
+ /* 11 : Get Current Contended Monitor */
+ jvmtiError (JNICALL *GetCurrentContendedMonitor) (jvmtiEnv* env,
+ jthread thread,
+ jobject* monitor_ptr);
+
+ /* 12 : Run Agent Thread */
+ jvmtiError (JNICALL *RunAgentThread) (jvmtiEnv* env,
+ jthread thread,
+ jvmtiStartFunction proc,
+ const void* arg,
+ jint priority);
+
+ /* 13 : Get Top Thread Groups */
+ jvmtiError (JNICALL *GetTopThreadGroups) (jvmtiEnv* env,
+ jint* group_count_ptr,
+ jthreadGroup** groups_ptr);
+
+ /* 14 : Get Thread Group Info */
+ jvmtiError (JNICALL *GetThreadGroupInfo) (jvmtiEnv* env,
+ jthreadGroup group,
+ jvmtiThreadGroupInfo* info_ptr);
+
+ /* 15 : Get Thread Group Children */
+ jvmtiError (JNICALL *GetThreadGroupChildren) (jvmtiEnv* env,
+ jthreadGroup group,
+ jint* thread_count_ptr,
+ jthread** threads_ptr,
+ jint* group_count_ptr,
+ jthreadGroup** groups_ptr);
+
+ /* 16 : Get Frame Count */
+ jvmtiError (JNICALL *GetFrameCount) (jvmtiEnv* env,
+ jthread thread,
+ jint* count_ptr);
+
+ /* 17 : Get Thread State */
+ jvmtiError (JNICALL *GetThreadState) (jvmtiEnv* env,
+ jthread thread,
+ jint* thread_state_ptr);
+
+ /* 18 : RESERVED */
+ void *reserved18;
+
+ /* 19 : Get Frame Location */
+ jvmtiError (JNICALL *GetFrameLocation) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jmethodID* method_ptr,
+ jlocation* location_ptr);
+
+ /* 20 : Notify Frame Pop */
+ jvmtiError (JNICALL *NotifyFramePop) (jvmtiEnv* env,
+ jthread thread,
+ jint depth);
+
+ /* 21 : Get Local Variable - Object */
+ jvmtiError (JNICALL *GetLocalObject) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jobject* value_ptr);
+
+ /* 22 : Get Local Variable - Int */
+ jvmtiError (JNICALL *GetLocalInt) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jint* value_ptr);
+
+ /* 23 : Get Local Variable - Long */
+ jvmtiError (JNICALL *GetLocalLong) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jlong* value_ptr);
+
+ /* 24 : Get Local Variable - Float */
+ jvmtiError (JNICALL *GetLocalFloat) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jfloat* value_ptr);
+
+ /* 25 : Get Local Variable - Double */
+ jvmtiError (JNICALL *GetLocalDouble) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jdouble* value_ptr);
+
+ /* 26 : Set Local Variable - Object */
+ jvmtiError (JNICALL *SetLocalObject) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jobject value);
+
+ /* 27 : Set Local Variable - Int */
+ jvmtiError (JNICALL *SetLocalInt) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jint value);
+
+ /* 28 : Set Local Variable - Long */
+ jvmtiError (JNICALL *SetLocalLong) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jlong value);
+
+ /* 29 : Set Local Variable - Float */
+ jvmtiError (JNICALL *SetLocalFloat) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jfloat value);
+
+ /* 30 : Set Local Variable - Double */
+ jvmtiError (JNICALL *SetLocalDouble) (jvmtiEnv* env,
+ jthread thread,
+ jint depth,
+ jint slot,
+ jdouble value);
+
+ /* 31 : Create Raw Monitor */
+ jvmtiError (JNICALL *CreateRawMonitor) (jvmtiEnv* env,
+ const char* name,
+ jrawMonitorID* monitor_ptr);
+
+ /* 32 : Destroy Raw Monitor */
+ jvmtiError (JNICALL *DestroyRawMonitor) (jvmtiEnv* env,
+ jrawMonitorID monitor);
+
+ /* 33 : Raw Monitor Enter */
+ jvmtiError (JNICALL *RawMonitorEnter) (jvmtiEnv* env,
+ jrawMonitorID monitor);
+
+ /* 34 : Raw Monitor Exit */
+ jvmtiError (JNICALL *RawMonitorExit) (jvmtiEnv* env,
+ jrawMonitorID monitor);
+
+ /* 35 : Raw Monitor Wait */
+ jvmtiError (JNICALL *RawMonitorWait) (jvmtiEnv* env,
+ jrawMonitorID monitor,
+ jlong millis);
+
+ /* 36 : Raw Monitor Notify */
+ jvmtiError (JNICALL *RawMonitorNotify) (jvmtiEnv* env,
+ jrawMonitorID monitor);
+
+ /* 37 : Raw Monitor Notify All */
+ jvmtiError (JNICALL *RawMonitorNotifyAll) (jvmtiEnv* env,
+ jrawMonitorID monitor);
+
+ /* 38 : Set Breakpoint */
+ jvmtiError (JNICALL *SetBreakpoint) (jvmtiEnv* env,
+ jmethodID method,
+ jlocation location);
+
+ /* 39 : Clear Breakpoint */
+ jvmtiError (JNICALL *ClearBreakpoint) (jvmtiEnv* env,
+ jmethodID method,
+ jlocation location);
+
+ /* 40 : RESERVED */
+ void *reserved40;
+
+ /* 41 : Set Field Access Watch */
+ jvmtiError (JNICALL *SetFieldAccessWatch) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field);
+
+ /* 42 : Clear Field Access Watch */
+ jvmtiError (JNICALL *ClearFieldAccessWatch) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field);
+
+ /* 43 : Set Field Modification Watch */
+ jvmtiError (JNICALL *SetFieldModificationWatch) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field);
+
+ /* 44 : Clear Field Modification Watch */
+ jvmtiError (JNICALL *ClearFieldModificationWatch) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field);
+
+ /* 45 : RESERVED */
+ void *reserved45;
+
+ /* 46 : Allocate */
+ jvmtiError (JNICALL *Allocate) (jvmtiEnv* env,
+ jlong size,
+ unsigned char** mem_ptr);
+
+ /* 47 : Deallocate */
+ jvmtiError (JNICALL *Deallocate) (jvmtiEnv* env,
+ unsigned char* mem);
+
+ /* 48 : Get Class Signature */
+ jvmtiError (JNICALL *GetClassSignature) (jvmtiEnv* env,
+ jclass klass,
+ char** signature_ptr,
+ char** generic_ptr);
+
+ /* 49 : Get Class Status */
+ jvmtiError (JNICALL *GetClassStatus) (jvmtiEnv* env,
+ jclass klass,
+ jint* status_ptr);
+
+ /* 50 : Get Source File Name */
+ jvmtiError (JNICALL *GetSourceFileName) (jvmtiEnv* env,
+ jclass klass,
+ char** source_name_ptr);
+
+ /* 51 : Get Class Modifiers */
+ jvmtiError (JNICALL *GetClassModifiers) (jvmtiEnv* env,
+ jclass klass,
+ jint* modifiers_ptr);
+
+ /* 52 : Get Class Methods */
+ jvmtiError (JNICALL *GetClassMethods) (jvmtiEnv* env,
+ jclass klass,
+ jint* method_count_ptr,
+ jmethodID** methods_ptr);
+
+ /* 53 : Get Class Fields */
+ jvmtiError (JNICALL *GetClassFields) (jvmtiEnv* env,
+ jclass klass,
+ jint* field_count_ptr,
+ jfieldID** fields_ptr);
+
+ /* 54 : Get Implemented Interfaces */
+ jvmtiError (JNICALL *GetImplementedInterfaces) (jvmtiEnv* env,
+ jclass klass,
+ jint* interface_count_ptr,
+ jclass** interfaces_ptr);
+
+ /* 55 : Is Interface */
+ jvmtiError (JNICALL *IsInterface) (jvmtiEnv* env,
+ jclass klass,
+ jboolean* is_interface_ptr);
+
+ /* 56 : Is Array Class */
+ jvmtiError (JNICALL *IsArrayClass) (jvmtiEnv* env,
+ jclass klass,
+ jboolean* is_array_class_ptr);
+
+ /* 57 : Get Class Loader */
+ jvmtiError (JNICALL *GetClassLoader) (jvmtiEnv* env,
+ jclass klass,
+ jobject* classloader_ptr);
+
+ /* 58 : Get Object Hash Code */
+ jvmtiError (JNICALL *GetObjectHashCode) (jvmtiEnv* env,
+ jobject object,
+ jint* hash_code_ptr);
+
+ /* 59 : Get Object Monitor Usage */
+ jvmtiError (JNICALL *GetObjectMonitorUsage) (jvmtiEnv* env,
+ jobject object,
+ jvmtiMonitorUsage* info_ptr);
+
+ /* 60 : Get Field Name (and Signature) */
+ jvmtiError (JNICALL *GetFieldName) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field,
+ char** name_ptr,
+ char** signature_ptr,
+ char** generic_ptr);
+
+ /* 61 : Get Field Declaring Class */
+ jvmtiError (JNICALL *GetFieldDeclaringClass) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field,
+ jclass* declaring_class_ptr);
+
+ /* 62 : Get Field Modifiers */
+ jvmtiError (JNICALL *GetFieldModifiers) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field,
+ jint* modifiers_ptr);
+
+ /* 63 : Is Field Synthetic */
+ jvmtiError (JNICALL *IsFieldSynthetic) (jvmtiEnv* env,
+ jclass klass,
+ jfieldID field,
+ jboolean* is_synthetic_ptr);
+
+ /* 64 : Get Method Name (and Signature) */
+ jvmtiError (JNICALL *GetMethodName) (jvmtiEnv* env,
+ jmethodID method,
+ char** name_ptr,
+ char** signature_ptr,
+ char** generic_ptr);
+
+ /* 65 : Get Method Declaring Class */
+ jvmtiError (JNICALL *GetMethodDeclaringClass) (jvmtiEnv* env,
+ jmethodID method,
+ jclass* declaring_class_ptr);
+
+ /* 66 : Get Method Modifiers */
+ jvmtiError (JNICALL *GetMethodModifiers) (jvmtiEnv* env,
+ jmethodID method,
+ jint* modifiers_ptr);
+
+ /* 67 : RESERVED */
+ void *reserved67;
+
+ /* 68 : Get Max Locals */
+ jvmtiError (JNICALL *GetMaxLocals) (jvmtiEnv* env,
+ jmethodID method,
+ jint* max_ptr);
+
+ /* 69 : Get Arguments Size */
+ jvmtiError (JNICALL *GetArgumentsSize) (jvmtiEnv* env,
+ jmethodID method,
+ jint* size_ptr);
+
+ /* 70 : Get Line Number Table */
+ jvmtiError (JNICALL *GetLineNumberTable) (jvmtiEnv* env,
+ jmethodID method,
+ jint* entry_count_ptr,
+ jvmtiLineNumberEntry** table_ptr);
+
+ /* 71 : Get Method Location */
+ jvmtiError (JNICALL *GetMethodLocation) (jvmtiEnv* env,
+ jmethodID method,
+ jlocation* start_location_ptr,
+ jlocation* end_location_ptr);
+
+ /* 72 : Get Local Variable Table */
+ jvmtiError (JNICALL *GetLocalVariableTable) (jvmtiEnv* env,
+ jmethodID method,
+ jint* entry_count_ptr,
+ jvmtiLocalVariableEntry** table_ptr);
+
+ /* 73 : RESERVED */
+ void *reserved73;
+
+ /* 74 : RESERVED */
+ void *reserved74;
+
+ /* 75 : Get Bytecodes */
+ jvmtiError (JNICALL *GetBytecodes) (jvmtiEnv* env,
+ jmethodID method,
+ jint* bytecode_count_ptr,
+ unsigned char** bytecodes_ptr);
+
+ /* 76 : Is Method Native */
+ jvmtiError (JNICALL *IsMethodNative) (jvmtiEnv* env,
+ jmethodID method,
+ jboolean* is_native_ptr);
+
+ /* 77 : Is Method Synthetic */
+ jvmtiError (JNICALL *IsMethodSynthetic) (jvmtiEnv* env,
+ jmethodID method,
+ jboolean* is_synthetic_ptr);
+
+ /* 78 : Get Loaded Classes */
+ jvmtiError (JNICALL *GetLoadedClasses) (jvmtiEnv* env,
+ jint* class_count_ptr,
+ jclass** classes_ptr);
+
+ /* 79 : Get Classloader Classes */
+ jvmtiError (JNICALL *GetClassLoaderClasses) (jvmtiEnv* env,
+ jobject initiating_loader,
+ jint* class_count_ptr,
+ jclass** classes_ptr);
+
+ /* 80 : Pop Frame */
+ jvmtiError (JNICALL *PopFrame) (jvmtiEnv* env,
+ jthread thread);
+
+ /* 81 : RESERVED */
+ void *reserved81;
+
+ /* 82 : RESERVED */
+ void *reserved82;
+
+ /* 83 : RESERVED */
+ void *reserved83;
+
+ /* 84 : RESERVED */
+ void *reserved84;
+
+ /* 85 : RESERVED */
+ void *reserved85;
+
+ /* 86 : RESERVED */
+ void *reserved86;
+
+ /* 87 : Redefine Classes */
+ jvmtiError (JNICALL *RedefineClasses) (jvmtiEnv* env,
+ jint class_count,
+ const jvmtiClassDefinition* class_definitions);
+
+ /* 88 : Get Version Number */
+ jvmtiError (JNICALL *GetVersionNumber) (jvmtiEnv* env,
+ jint* version_ptr);
+
+ /* 89 : Get Capabilities */
+ jvmtiError (JNICALL *GetCapabilities) (jvmtiEnv* env,
+ jvmtiCapabilities* capabilities_ptr);
+
+ /* 90 : Get Source Debug Extension */
+ jvmtiError (JNICALL *GetSourceDebugExtension) (jvmtiEnv* env,
+ jclass klass,
+ char** source_debug_extension_ptr);
+
+ /* 91 : Is Method Obsolete */
+ jvmtiError (JNICALL *IsMethodObsolete) (jvmtiEnv* env,
+ jmethodID method,
+ jboolean* is_obsolete_ptr);
+
+ /* 92 : Suspend Thread List */
+ jvmtiError (JNICALL *SuspendThreadList) (jvmtiEnv* env,
+ jint request_count,
+ const jthread* request_list,
+ jvmtiError* results);
+
+ /* 93 : Resume Thread List */
+ jvmtiError (JNICALL *ResumeThreadList) (jvmtiEnv* env,
+ jint request_count,
+ const jthread* request_list,
+ jvmtiError* results);
+
+ /* 94 : RESERVED */
+ void *reserved94;
+
+ /* 95 : RESERVED */
+ void *reserved95;
+
+ /* 96 : RESERVED */
+ void *reserved96;
+
+ /* 97 : RESERVED */
+ void *reserved97;
+
+ /* 98 : RESERVED */
+ void *reserved98;
+
+ /* 99 : RESERVED */
+ void *reserved99;
+
+ /* 100 : Get All Stack Traces */
+ jvmtiError (JNICALL *GetAllStackTraces) (jvmtiEnv* env,
+ jint max_frame_count,
+ jvmtiStackInfo** stack_info_ptr,
+ jint* thread_count_ptr);
+
+ /* 101 : Get Thread List Stack Traces */
+ jvmtiError (JNICALL *GetThreadListStackTraces) (jvmtiEnv* env,
+ jint thread_count,
+ const jthread* thread_list,
+ jint max_frame_count,
+ jvmtiStackInfo** stack_info_ptr);
+
+ /* 102 : Get Thread Local Storage */
+ jvmtiError (JNICALL *GetThreadLocalStorage) (jvmtiEnv* env,
+ jthread thread,
+ void** data_ptr);
+
+ /* 103 : Set Thread Local Storage */
+ jvmtiError (JNICALL *SetThreadLocalStorage) (jvmtiEnv* env,
+ jthread thread,
+ const void* data);
+
+ /* 104 : Get Stack Trace */
+ jvmtiError (JNICALL *GetStackTrace) (jvmtiEnv* env,
+ jthread thread,
+ jint start_depth,
+ jint max_frame_count,
+ jvmtiFrameInfo* frame_buffer,
+ jint* count_ptr);
+
+ /* 105 : RESERVED */
+ void *reserved105;
+
+ /* 106 : Get Tag */
+ jvmtiError (JNICALL *GetTag) (jvmtiEnv* env,
+ jobject object,
+ jlong* tag_ptr);
+
+ /* 107 : Set Tag */
+ jvmtiError (JNICALL *SetTag) (jvmtiEnv* env,
+ jobject object,
+ jlong tag);
+
+ /* 108 : Force Garbage Collection */
+ jvmtiError (JNICALL *ForceGarbageCollection) (jvmtiEnv* env);
+
+ /* 109 : Iterate Over Objects Reachable From Object */
+ jvmtiError (JNICALL *IterateOverObjectsReachableFromObject) (jvmtiEnv* env,
+ jobject object,
+ jvmtiObjectReferenceCallback object_reference_callback,
+ void* user_data);
+
+ /* 110 : Iterate Over Reachable Objects */
+ jvmtiError (JNICALL *IterateOverReachableObjects) (jvmtiEnv* env,
+ jvmtiHeapRootCallback heap_root_callback,
+ jvmtiStackReferenceCallback stack_ref_callback,
+ jvmtiObjectReferenceCallback object_ref_callback,
+ void* user_data);
+
+ /* 111 : Iterate Over Heap */
+ jvmtiError (JNICALL *IterateOverHeap) (jvmtiEnv* env,
+ jvmtiHeapObjectFilter object_filter,
+ jvmtiHeapObjectCallback heap_object_callback,
+ void* user_data);
+
+ /* 112 : Iterate Over Instances Of Class */
+ jvmtiError (JNICALL *IterateOverInstancesOfClass) (jvmtiEnv* env,
+ jclass klass,
+ jvmtiHeapObjectFilter object_filter,
+ jvmtiHeapObjectCallback heap_object_callback,
+ void* user_data);
+
+ /* 113 : RESERVED */
+ void *reserved113;
+
+ /* 114 : Get Objects With Tags */
+ jvmtiError (JNICALL *GetObjectsWithTags) (jvmtiEnv* env,
+ jint tag_count,
+ const jlong* tags,
+ jint* count_ptr,
+ jobject** object_result_ptr,
+ jlong** tag_result_ptr);
+
+ /* 115 : RESERVED */
+ void *reserved115;
+
+ /* 116 : RESERVED */
+ void *reserved116;
+
+ /* 117 : RESERVED */
+ void *reserved117;
+
+ /* 118 : RESERVED */
+ void *reserved118;
+
+ /* 119 : RESERVED */
+ void *reserved119;
+
+ /* 120 : Set JNI Function Table */
+ jvmtiError (JNICALL *SetJNIFunctionTable) (jvmtiEnv* env,
+ const jniNativeInterface* function_table);
+
+ /* 121 : Get JNI Function Table */
+ jvmtiError (JNICALL *GetJNIFunctionTable) (jvmtiEnv* env,
+ jniNativeInterface** function_table);
+
+ /* 122 : Set Event Callbacks */
+ jvmtiError (JNICALL *SetEventCallbacks) (jvmtiEnv* env,
+ const jvmtiEventCallbacks* callbacks,
+ jint size_of_callbacks);
+
+ /* 123 : Generate Events */
+ jvmtiError (JNICALL *GenerateEvents) (jvmtiEnv* env,
+ jvmtiEvent event_type);
+
+ /* 124 : Get Extension Functions */
+ jvmtiError (JNICALL *GetExtensionFunctions) (jvmtiEnv* env,
+ jint* extension_count_ptr,
+ jvmtiExtensionFunctionInfo** extensions);
+
+ /* 125 : Get Extension Events */
+ jvmtiError (JNICALL *GetExtensionEvents) (jvmtiEnv* env,
+ jint* extension_count_ptr,
+ jvmtiExtensionEventInfo** extensions);
+
+ /* 126 : Set Extension Event Callback */
+ jvmtiError (JNICALL *SetExtensionEventCallback) (jvmtiEnv* env,
+ jint extension_event_index,
+ jvmtiExtensionEvent callback);
+
+ /* 127 : Dispose Environment */
+ jvmtiError (JNICALL *DisposeEnvironment) (jvmtiEnv* env);
+
+ /* 128 : Get Error Name */
+ jvmtiError (JNICALL *GetErrorName) (jvmtiEnv* env,
+ jvmtiError error,
+ char** name_ptr);
+
+ /* 129 : Get JLocation Format */
+ jvmtiError (JNICALL *GetJLocationFormat) (jvmtiEnv* env,
+ jvmtiJlocationFormat* format_ptr);
+
+ /* 130 : Get System Properties */
+ jvmtiError (JNICALL *GetSystemProperties) (jvmtiEnv* env,
+ jint* count_ptr,
+ char*** property_ptr);
+
+ /* 131 : Get System Property */
+ jvmtiError (JNICALL *GetSystemProperty) (jvmtiEnv* env,
+ const char* property,
+ char** value_ptr);
+
+ /* 132 : Set System Property */
+ jvmtiError (JNICALL *SetSystemProperty) (jvmtiEnv* env,
+ const char* property,
+ const char* value);
+
+ /* 133 : Get Phase */
+ jvmtiError (JNICALL *GetPhase) (jvmtiEnv* env,
+ jvmtiPhase* phase_ptr);
+
+ /* 134 : Get Current Thread CPU Timer Information */
+ jvmtiError (JNICALL *GetCurrentThreadCpuTimerInfo) (jvmtiEnv* env,
+ jvmtiTimerInfo* info_ptr);
+
+ /* 135 : Get Current Thread CPU Time */
+ jvmtiError (JNICALL *GetCurrentThreadCpuTime) (jvmtiEnv* env,
+ jlong* nanos_ptr);
+
+ /* 136 : Get Thread CPU Timer Information */
+ jvmtiError (JNICALL *GetThreadCpuTimerInfo) (jvmtiEnv* env,
+ jvmtiTimerInfo* info_ptr);
+
+ /* 137 : Get Thread CPU Time */
+ jvmtiError (JNICALL *GetThreadCpuTime) (jvmtiEnv* env,
+ jthread thread,
+ jlong* nanos_ptr);
+
+ /* 138 : Get Timer Information */
+ jvmtiError (JNICALL *GetTimerInfo) (jvmtiEnv* env,
+ jvmtiTimerInfo* info_ptr);
+
+ /* 139 : Get Time */
+ jvmtiError (JNICALL *GetTime) (jvmtiEnv* env,
+ jlong* nanos_ptr);
+
+ /* 140 : Get Potential Capabilities */
+ jvmtiError (JNICALL *GetPotentialCapabilities) (jvmtiEnv* env,
+ jvmtiCapabilities* capabilities_ptr);
+
+ /* 141 : RESERVED */
+ void *reserved141;
+
+ /* 142 : Add Capabilities */
+ jvmtiError (JNICALL *AddCapabilities) (jvmtiEnv* env,
+ const jvmtiCapabilities* capabilities_ptr);
+
+ /* 143 : Relinquish Capabilities */
+ jvmtiError (JNICALL *RelinquishCapabilities) (jvmtiEnv* env,
+ const jvmtiCapabilities* capabilities_ptr);
+
+ /* 144 : Get Available Processors */
+ jvmtiError (JNICALL *GetAvailableProcessors) (jvmtiEnv* env,
+ jint* processor_count_ptr);
+
+ /* 145 : RESERVED */
+ void *reserved145;
+
+ /* 146 : RESERVED */
+ void *reserved146;
+
+ /* 147 : Get Environment Local Storage */
+ jvmtiError (JNICALL *GetEnvironmentLocalStorage) (jvmtiEnv* env,
+ void** data_ptr);
+
+ /* 148 : Set Environment Local Storage */
+ jvmtiError (JNICALL *SetEnvironmentLocalStorage) (jvmtiEnv* env,
+ const void* data);
+
+ /* 149 : Add To Bootstrap Class Loader Search */
+ jvmtiError (JNICALL *AddToBootstrapClassLoaderSearch) (jvmtiEnv* env,
+ const char* segment);
+
+ /* 150 : Set Verbose Flag */
+ jvmtiError (JNICALL *SetVerboseFlag) (jvmtiEnv* env,
+ jvmtiVerboseFlag flag,
+ jboolean value);
+
+ /* 151 : RESERVED */
+ void *reserved151;
+
+ /* 152 : RESERVED */
+ void *reserved152;
+
+ /* 153 : RESERVED */
+ void *reserved153;
+
+ /* 154 : Get Object Size */
+ jvmtiError (JNICALL *GetObjectSize) (jvmtiEnv* env,
+ jobject object,
+ jlong* size_ptr);
+
+} jvmtiInterface_1;
+
+struct _jvmtiEnv {
+ const struct jvmtiInterface_1_ *functions;
+#ifdef __cplusplus
+
+
+ jvmtiError Allocate(jlong size,
+ unsigned char** mem_ptr) {
+ return functions->Allocate(this, size, mem_ptr);
+ }
+
+ jvmtiError Deallocate(unsigned char* mem) {
+ return functions->Deallocate(this, mem);
+ }
+
+ jvmtiError GetThreadState(jthread thread,
+ jint* thread_state_ptr) {
+ return functions->GetThreadState(this, thread, thread_state_ptr);
+ }
+
+ jvmtiError GetAllThreads(jint* threads_count_ptr,
+ jthread** threads_ptr) {
+ return functions->GetAllThreads(this, threads_count_ptr, threads_ptr);
+ }
+
+ jvmtiError SuspendThread(jthread thread) {
+ return functions->SuspendThread(this, thread);
+ }
+
+ jvmtiError SuspendThreadList(jint request_count,
+ const jthread* request_list,
+ jvmtiError* results) {
+ return functions->SuspendThreadList(this, request_count, request_list, results);
+ }
+
+ jvmtiError ResumeThread(jthread thread) {
+ return functions->ResumeThread(this, thread);
+ }
+
+ jvmtiError ResumeThreadList(jint request_count,
+ const jthread* request_list,
+ jvmtiError* results) {
+ return functions->ResumeThreadList(this, request_count, request_list, results);
+ }
+
+ jvmtiError StopThread(jthread thread,
+ jobject exception) {
+ return functions->StopThread(this, thread, exception);
+ }
+
+ jvmtiError InterruptThread(jthread thread) {
+ return functions->InterruptThread(this, thread);
+ }
+
+ jvmtiError GetThreadInfo(jthread thread,
+ jvmtiThreadInfo* info_ptr) {
+ return functions->GetThreadInfo(this, thread, info_ptr);
+ }
+
+ jvmtiError GetOwnedMonitorInfo(jthread thread,
+ jint* owned_monitor_count_ptr,
+ jobject** owned_monitors_ptr) {
+ return functions->GetOwnedMonitorInfo(this, thread, owned_monitor_count_ptr, owned_monitors_ptr);
+ }
+
+ jvmtiError GetCurrentContendedMonitor(jthread thread,
+ jobject* monitor_ptr) {
+ return functions->GetCurrentContendedMonitor(this, thread, monitor_ptr);
+ }
+
+ jvmtiError RunAgentThread(jthread thread,
+ jvmtiStartFunction proc,
+ const void* arg,
+ jint priority) {
+ return functions->RunAgentThread(this, thread, proc, arg, priority);
+ }
+
+ jvmtiError SetThreadLocalStorage(jthread thread,
+ const void* data) {
+ return functions->SetThreadLocalStorage(this, thread, data);
+ }
+
+ jvmtiError GetThreadLocalStorage(jthread thread,
+ void** data_ptr) {
+ return functions->GetThreadLocalStorage(this, thread, data_ptr);
+ }
+
+ jvmtiError GetTopThreadGroups(jint* group_count_ptr,
+ jthreadGroup** groups_ptr) {
+ return functions->GetTopThreadGroups(this, group_count_ptr, groups_ptr);
+ }
+
+ jvmtiError GetThreadGroupInfo(jthreadGroup group,
+ jvmtiThreadGroupInfo* info_ptr) {
+ return functions->GetThreadGroupInfo(this, group, info_ptr);
+ }
+
+ jvmtiError GetThreadGroupChildren(jthreadGroup group,
+ jint* thread_count_ptr,
+ jthread** threads_ptr,
+ jint* group_count_ptr,
+ jthreadGroup** groups_ptr) {
+ return functions->GetThreadGroupChildren(this, group, thread_count_ptr, threads_ptr, group_count_ptr, groups_ptr);
+ }
+
+ jvmtiError GetStackTrace(jthread thread,
+ jint start_depth,
+ jint max_frame_count,
+ jvmtiFrameInfo* frame_buffer,
+ jint* count_ptr) {
+ return functions->GetStackTrace(this, thread, start_depth, max_frame_count, frame_buffer, count_ptr);
+ }
+
+ jvmtiError GetAllStackTraces(jint max_frame_count,
+ jvmtiStackInfo** stack_info_ptr,
+ jint* thread_count_ptr) {
+ return functions->GetAllStackTraces(this, max_frame_count, stack_info_ptr, thread_count_ptr);
+ }
+
+ jvmtiError GetThreadListStackTraces(jint thread_count,
+ const jthread* thread_list,
+ jint max_frame_count,
+ jvmtiStackInfo** stack_info_ptr) {
+ return functions->GetThreadListStackTraces(this, thread_count, thread_list, max_frame_count, stack_info_ptr);
+ }
+
+ jvmtiError GetFrameCount(jthread thread,
+ jint* count_ptr) {
+ return functions->GetFrameCount(this, thread, count_ptr);
+ }
+
+ jvmtiError PopFrame(jthread thread) {
+ return functions->PopFrame(this, thread);
+ }
+
+ jvmtiError GetFrameLocation(jthread thread,
+ jint depth,
+ jmethodID* method_ptr,
+ jlocation* location_ptr) {
+ return functions->GetFrameLocation(this, thread, depth, method_ptr, location_ptr);
+ }
+
+ jvmtiError NotifyFramePop(jthread thread,
+ jint depth) {
+ return functions->NotifyFramePop(this, thread, depth);
+ }
+
+ jvmtiError GetTag(jobject object,
+ jlong* tag_ptr) {
+ return functions->GetTag(this, object, tag_ptr);
+ }
+
+ jvmtiError SetTag(jobject object,
+ jlong tag) {
+ return functions->SetTag(this, object, tag);
+ }
+
+ jvmtiError ForceGarbageCollection() {
+ return functions->ForceGarbageCollection(this);
+ }
+
+ jvmtiError IterateOverObjectsReachableFromObject(jobject object,
+ jvmtiObjectReferenceCallback object_reference_callback,
+ void* user_data) {
+ return functions->IterateOverObjectsReachableFromObject(this, object, object_reference_callback, user_data);
+ }
+
+ jvmtiError IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback,
+ jvmtiStackReferenceCallback stack_ref_callback,
+ jvmtiObjectReferenceCallback object_ref_callback,
+ void* user_data) {
+ return functions->IterateOverReachableObjects(this, heap_root_callback, stack_ref_callback, object_ref_callback, user_data);
+ }
+
+ jvmtiError IterateOverHeap(jvmtiHeapObjectFilter object_filter,
+ jvmtiHeapObjectCallback heap_object_callback,
+ void* user_data) {
+ return functions->IterateOverHeap(this, object_filter, heap_object_callback, user_data);
+ }
+
+ jvmtiError IterateOverInstancesOfClass(jclass klass,
+ jvmtiHeapObjectFilter object_filter,
+ jvmtiHeapObjectCallback heap_object_callback,
+ void* user_data) {
+ return functions->IterateOverInstancesOfClass(this, klass, object_filter, heap_object_callback, user_data);
+ }
+
+ jvmtiError GetObjectsWithTags(jint tag_count,
+ const jlong* tags,
+ jint* count_ptr,
+ jobject** object_result_ptr,
+ jlong** tag_result_ptr) {
+ return functions->GetObjectsWithTags(this, tag_count, tags, count_ptr, object_result_ptr, tag_result_ptr);
+ }
+
+ jvmtiError GetLocalObject(jthread thread,
+ jint depth,
+ jint slot,
+ jobject* value_ptr) {
+ return functions->GetLocalObject(this, thread, depth, slot, value_ptr);
+ }
+
+ jvmtiError GetLocalInt(jthread thread,
+ jint depth,
+ jint slot,
+ jint* value_ptr) {
+ return functions->GetLocalInt(this, thread, depth, slot, value_ptr);
+ }
+
+ jvmtiError GetLocalLong(jthread thread,
+ jint depth,
+ jint slot,
+ jlong* value_ptr) {
+ return functions->GetLocalLong(this, thread, depth, slot, value_ptr);
+ }
+
+ jvmtiError GetLocalFloat(jthread thread,
+ jint depth,
+ jint slot,
+ jfloat* value_ptr) {
+ return functions->GetLocalFloat(this, thread, depth, slot, value_ptr);
+ }
+
+ jvmtiError GetLocalDouble(jthread thread,
+ jint depth,
+ jint slot,
+ jdouble* value_ptr) {
+ return functions->GetLocalDouble(this, thread, depth, slot, value_ptr);
+ }
+
+ jvmtiError SetLocalObject(jthread thread,
+ jint depth,
+ jint slot,
+ jobject value) {
+ return functions->SetLocalObject(this, thread, depth, slot, value);
+ }
+
+ jvmtiError SetLocalInt(jthread thread,
+ jint depth,
+ jint slot,
+ jint value) {
+ return functions->SetLocalInt(this, thread, depth, slot, value);
+ }
+
+ jvmtiError SetLocalLong(jthread thread,
+ jint depth,
+ jint slot,
+ jlong value) {
+ return functions->SetLocalLong(this, thread, depth, slot, value);
+ }
+
+ jvmtiError SetLocalFloat(jthread thread,
+ jint depth,
+ jint slot,
+ jfloat value) {
+ return functions->SetLocalFloat(this, thread, depth, slot, value);
+ }
+
+ jvmtiError SetLocalDouble(jthread thread,
+ jint depth,
+ jint slot,
+ jdouble value) {
+ return functions->SetLocalDouble(this, thread, depth, slot, value);
+ }
+
+ jvmtiError SetBreakpoint(jmethodID method,
+ jlocation location) {
+ return functions->SetBreakpoint(this, method, location);
+ }
+
+ jvmtiError ClearBreakpoint(jmethodID method,
+ jlocation location) {
+ return functions->ClearBreakpoint(this, method, location);
+ }
+
+ jvmtiError SetFieldAccessWatch(jclass klass,
+ jfieldID field) {
+ return functions->SetFieldAccessWatch(this, klass, field);
+ }
+
+ jvmtiError ClearFieldAccessWatch(jclass klass,
+ jfieldID field) {
+ return functions->ClearFieldAccessWatch(this, klass, field);
+ }
+
+ jvmtiError SetFieldModificationWatch(jclass klass,
+ jfieldID field) {
+ return functions->SetFieldModificationWatch(this, klass, field);
+ }
+
+ jvmtiError ClearFieldModificationWatch(jclass klass,
+ jfieldID field) {
+ return functions->ClearFieldModificationWatch(this, klass, field);
+ }
+
+ jvmtiError GetLoadedClasses(jint* class_count_ptr,
+ jclass** classes_ptr) {
+ return functions->GetLoadedClasses(this, class_count_ptr, classes_ptr);
+ }
+
+ jvmtiError GetClassLoaderClasses(jobject initiating_loader,
+ jint* class_count_ptr,
+ jclass** classes_ptr) {
+ return functions->GetClassLoaderClasses(this, initiating_loader, class_count_ptr, classes_ptr);
+ }
+
+ jvmtiError GetClassSignature(jclass klass,
+ char** signature_ptr,
+ char** generic_ptr) {
+ return functions->GetClassSignature(this, klass, signature_ptr, generic_ptr);
+ }
+
+ jvmtiError GetClassStatus(jclass klass,
+ jint* status_ptr) {
+ return functions->GetClassStatus(this, klass, status_ptr);
+ }
+
+ jvmtiError GetSourceFileName(jclass klass,
+ char** source_name_ptr) {
+ return functions->GetSourceFileName(this, klass, source_name_ptr);
+ }
+
+ jvmtiError GetClassModifiers(jclass klass,
+ jint* modifiers_ptr) {
+ return functions->GetClassModifiers(this, klass, modifiers_ptr);
+ }
+
+ jvmtiError GetClassMethods(jclass klass,
+ jint* method_count_ptr,
+ jmethodID** methods_ptr) {
+ return functions->GetClassMethods(this, klass, method_count_ptr, methods_ptr);
+ }
+
+ jvmtiError GetClassFields(jclass klass,
+ jint* field_count_ptr,
+ jfieldID** fields_ptr) {
+ return functions->GetClassFields(this, klass, field_count_ptr, fields_ptr);
+ }
+
+ jvmtiError GetImplementedInterfaces(jclass klass,
+ jint* interface_count_ptr,
+ jclass** interfaces_ptr) {
+ return functions->GetImplementedInterfaces(this, klass, interface_count_ptr, interfaces_ptr);
+ }
+
+ jvmtiError IsInterface(jclass klass,
+ jboolean* is_interface_ptr) {
+ return functions->IsInterface(this, klass, is_interface_ptr);
+ }
+
+ jvmtiError IsArrayClass(jclass klass,
+ jboolean* is_array_class_ptr) {
+ return functions->IsArrayClass(this, klass, is_array_class_ptr);
+ }
+
+ jvmtiError GetClassLoader(jclass klass,
+ jobject* classloader_ptr) {
+ return functions->GetClassLoader(this, klass, classloader_ptr);
+ }
+
+ jvmtiError GetSourceDebugExtension(jclass klass,
+ char** source_debug_extension_ptr) {
+ return functions->GetSourceDebugExtension(this, klass, source_debug_extension_ptr);
+ }
+
+ jvmtiError RedefineClasses(jint class_count,
+ const jvmtiClassDefinition* class_definitions) {
+ return functions->RedefineClasses(this, class_count, class_definitions);
+ }
+
+ jvmtiError GetObjectSize(jobject object,
+ jlong* size_ptr) {
+ return functions->GetObjectSize(this, object, size_ptr);
+ }
+
+ jvmtiError GetObjectHashCode(jobject object,
+ jint* hash_code_ptr) {
+ return functions->GetObjectHashCode(this, object, hash_code_ptr);
+ }
+
+ jvmtiError GetObjectMonitorUsage(jobject object,
+ jvmtiMonitorUsage* info_ptr) {
+ return functions->GetObjectMonitorUsage(this, object, info_ptr);
+ }
+
+ jvmtiError GetFieldName(jclass klass,
+ jfieldID field,
+ char** name_ptr,
+ char** signature_ptr,
+ char** generic_ptr) {
+ return functions->GetFieldName(this, klass, field, name_ptr, signature_ptr, generic_ptr);
+ }
+
+ jvmtiError GetFieldDeclaringClass(jclass klass,
+ jfieldID field,
+ jclass* declaring_class_ptr) {
+ return functions->GetFieldDeclaringClass(this, klass, field, declaring_class_ptr);
+ }
+
+ jvmtiError GetFieldModifiers(jclass klass,
+ jfieldID field,
+ jint* modifiers_ptr) {
+ return functions->GetFieldModifiers(this, klass, field, modifiers_ptr);
+ }
+
+ jvmtiError IsFieldSynthetic(jclass klass,
+ jfieldID field,
+ jboolean* is_synthetic_ptr) {
+ return functions->IsFieldSynthetic(this, klass, field, is_synthetic_ptr);
+ }
+
+ jvmtiError GetMethodName(jmethodID method,
+ char** name_ptr,
+ char** signature_ptr,
+ char** generic_ptr) {
+ return functions->GetMethodName(this, method, name_ptr, signature_ptr, generic_ptr);
+ }
+
+ jvmtiError GetMethodDeclaringClass(jmethodID method,
+ jclass* declaring_class_ptr) {
+ return functions->GetMethodDeclaringClass(this, method, declaring_class_ptr);
+ }
+
+ jvmtiError GetMethodModifiers(jmethodID method,
+ jint* modifiers_ptr) {
+ return functions->GetMethodModifiers(this, method, modifiers_ptr);
+ }
+
+ jvmtiError GetMaxLocals(jmethodID method,
+ jint* max_ptr) {
+ return functions->GetMaxLocals(this, method, max_ptr);
+ }
+
+ jvmtiError GetArgumentsSize(jmethodID method,
+ jint* size_ptr) {
+ return functions->GetArgumentsSize(this, method, size_ptr);
+ }
+
+ jvmtiError GetLineNumberTable(jmethodID method,
+ jint* entry_count_ptr,
+ jvmtiLineNumberEntry** table_ptr) {
+ return functions->GetLineNumberTable(this, method, entry_count_ptr, table_ptr);
+ }
+
+ jvmtiError GetMethodLocation(jmethodID method,
+ jlocation* start_location_ptr,
+ jlocation* end_location_ptr) {
+ return functions->GetMethodLocation(this, method, start_location_ptr, end_location_ptr);
+ }
+
+ jvmtiError GetLocalVariableTable(jmethodID method,
+ jint* entry_count_ptr,
+ jvmtiLocalVariableEntry** table_ptr) {
+ return functions->GetLocalVariableTable(this, method, entry_count_ptr, table_ptr);
+ }
+
+ jvmtiError GetBytecodes(jmethodID method,
+ jint* bytecode_count_ptr,
+ unsigned char** bytecodes_ptr) {
+ return functions->GetBytecodes(this, method, bytecode_count_ptr, bytecodes_ptr);
+ }
+
+ jvmtiError IsMethodNative(jmethodID method,
+ jboolean* is_native_ptr) {
+ return functions->IsMethodNative(this, method, is_native_ptr);
+ }
+
+ jvmtiError IsMethodSynthetic(jmethodID method,
+ jboolean* is_synthetic_ptr) {
+ return functions->IsMethodSynthetic(this, method, is_synthetic_ptr);
+ }
+
+ jvmtiError IsMethodObsolete(jmethodID method,
+ jboolean* is_obsolete_ptr) {
+ return functions->IsMethodObsolete(this, method, is_obsolete_ptr);
+ }
+
+ jvmtiError CreateRawMonitor(const char* name,
+ jrawMonitorID* monitor_ptr) {
+ return functions->CreateRawMonitor(this, name, monitor_ptr);
+ }
+
+ jvmtiError DestroyRawMonitor(jrawMonitorID monitor) {
+ return functions->DestroyRawMonitor(this, monitor);
+ }
+
+ jvmtiError RawMonitorEnter(jrawMonitorID monitor) {
+ return functions->RawMonitorEnter(this, monitor);
+ }
+
+ jvmtiError RawMonitorExit(jrawMonitorID monitor) {
+ return functions->RawMonitorExit(this, monitor);
+ }
+
+ jvmtiError RawMonitorWait(jrawMonitorID monitor,
+ jlong millis) {
+ return functions->RawMonitorWait(this, monitor, millis);
+ }
+
+ jvmtiError RawMonitorNotify(jrawMonitorID monitor) {
+ return functions->RawMonitorNotify(this, monitor);
+ }
+
+ jvmtiError RawMonitorNotifyAll(jrawMonitorID monitor) {
+ return functions->RawMonitorNotifyAll(this, monitor);
+ }
+
+ jvmtiError SetJNIFunctionTable(const jniNativeInterface* function_table) {
+ return functions->SetJNIFunctionTable(this, function_table);
+ }
+
+ jvmtiError GetJNIFunctionTable(jniNativeInterface** function_table) {
+ return functions->GetJNIFunctionTable(this, function_table);
+ }
+
+ jvmtiError SetEventCallbacks(const jvmtiEventCallbacks* callbacks,
+ jint size_of_callbacks) {
+ return functions->SetEventCallbacks(this, callbacks, size_of_callbacks);
+ }
+
+ jvmtiError SetEventNotificationMode(jvmtiEventMode mode,
+ jvmtiEvent event_type,
+ jthread event_thread,
+ ...) {
+ return functions->SetEventNotificationMode(this, mode, event_type, event_thread);
+ }
+
+ jvmtiError GenerateEvents(jvmtiEvent event_type) {
+ return functions->GenerateEvents(this, event_type);
+ }
+
+ jvmtiError GetExtensionFunctions(jint* extension_count_ptr,
+ jvmtiExtensionFunctionInfo** extensions) {
+ return functions->GetExtensionFunctions(this, extension_count_ptr, extensions);
+ }
+
+ jvmtiError GetExtensionEvents(jint* extension_count_ptr,
+ jvmtiExtensionEventInfo** extensions) {
+ return functions->GetExtensionEvents(this, extension_count_ptr, extensions);
+ }
+
+ jvmtiError SetExtensionEventCallback(jint extension_event_index,
+ jvmtiExtensionEvent callback) {
+ return functions->SetExtensionEventCallback(this, extension_event_index, callback);
+ }
+
+ jvmtiError GetPotentialCapabilities(jvmtiCapabilities* capabilities_ptr) {
+ return functions->GetPotentialCapabilities(this, capabilities_ptr);
+ }
+
+ jvmtiError AddCapabilities(const jvmtiCapabilities* capabilities_ptr) {
+ return functions->AddCapabilities(this, capabilities_ptr);
+ }
+
+ jvmtiError RelinquishCapabilities(const jvmtiCapabilities* capabilities_ptr) {
+ return functions->RelinquishCapabilities(this, capabilities_ptr);
+ }
+
+ jvmtiError GetCapabilities(jvmtiCapabilities* capabilities_ptr) {
+ return functions->GetCapabilities(this, capabilities_ptr);
+ }
+
+ jvmtiError GetCurrentThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
+ return functions->GetCurrentThreadCpuTimerInfo(this, info_ptr);
+ }
+
+ jvmtiError GetCurrentThreadCpuTime(jlong* nanos_ptr) {
+ return functions->GetCurrentThreadCpuTime(this, nanos_ptr);
+ }
+
+ jvmtiError GetThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
+ return functions->GetThreadCpuTimerInfo(this, info_ptr);
+ }
+
+ jvmtiError GetThreadCpuTime(jthread thread,
+ jlong* nanos_ptr) {
+ return functions->GetThreadCpuTime(this, thread, nanos_ptr);
+ }
+
+ jvmtiError GetTimerInfo(jvmtiTimerInfo* info_ptr) {
+ return functions->GetTimerInfo(this, info_ptr);
+ }
+
+ jvmtiError GetTime(jlong* nanos_ptr) {
+ return functions->GetTime(this, nanos_ptr);
+ }
+
+ jvmtiError GetAvailableProcessors(jint* processor_count_ptr) {
+ return functions->GetAvailableProcessors(this, processor_count_ptr);
+ }
+
+ jvmtiError AddToBootstrapClassLoaderSearch(const char* segment) {
+ return functions->AddToBootstrapClassLoaderSearch(this, segment);
+ }
+
+ jvmtiError GetSystemProperties(jint* count_ptr,
+ char*** property_ptr) {
+ return functions->GetSystemProperties(this, count_ptr, property_ptr);
+ }
+
+ jvmtiError GetSystemProperty(const char* property,
+ char** value_ptr) {
+ return functions->GetSystemProperty(this, property, value_ptr);
+ }
+
+ jvmtiError SetSystemProperty(const char* property,
+ const char* value) {
+ return functions->SetSystemProperty(this, property, value);
+ }
+
+ jvmtiError GetPhase(jvmtiPhase* phase_ptr) {
+ return functions->GetPhase(this, phase_ptr);
+ }
+
+ jvmtiError DisposeEnvironment() {
+ return functions->DisposeEnvironment(this);
+ }
+
+ jvmtiError SetEnvironmentLocalStorage(const void* data) {
+ return functions->SetEnvironmentLocalStorage(this, data);
+ }
+
+ jvmtiError GetEnvironmentLocalStorage(void** data_ptr) {
+ return functions->GetEnvironmentLocalStorage(this, data_ptr);
+ }
+
+ jvmtiError GetVersionNumber(jint* version_ptr) {
+ return functions->GetVersionNumber(this, version_ptr);
+ }
+
+ jvmtiError GetErrorName(jvmtiError error,
+ char** name_ptr) {
+ return functions->GetErrorName(this, error, name_ptr);
+ }
+
+ jvmtiError SetVerboseFlag(jvmtiVerboseFlag flag,
+ jboolean value) {
+ return functions->SetVerboseFlag(this, flag, value);
+ }
+
+ jvmtiError GetJLocationFormat(jvmtiJlocationFormat* format_ptr) {
+ return functions->GetJLocationFormat(this, format_ptr);
+ }
+
+#endif /* __cplusplus */
+};
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVA_JVMTI_H_ */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/win32/jawt_md.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+ * @(#)jawt_md.h 1.7 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JAWT_MD_H_
+#define _JAVASOFT_JAWT_MD_H_
+
+#include <windows.h>
+#include "jawt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Win32-specific declarations for AWT native interface.
+ * See notes in jawt.h for an example of use.
+ */
+typedef struct jawt_Win32DrawingSurfaceInfo {
+ /* Native window, DDB, or DIB handle */
+ union {
+ HWND hwnd;
+ HBITMAP hbitmap;
+ void* pbits;
+ };
+ /*
+ * This HDC should always be used instead of the HDC returned from
+ * BeginPaint() or any calls to GetDC().
+ */
+ HDC hdc;
+ HPALETTE hpalette;
+} JAWT_Win32DrawingSurfaceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_JAVASOFT_JAWT_MD_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/win32/jni_md.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,19 @@
+/*
+ * @(#)jni_md.h 1.14 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JNI_MD_H_
+#define _JAVASOFT_JNI_MD_H_
+
+#define JNIEXPORT __declspec(dllexport)
+#define JNIIMPORT __declspec(dllimport)
+#define JNICALL __stdcall
+
+typedef long jint;
+typedef __int64 jlong;
+typedef signed char jbyte;
+
+#endif /* !_JAVASOFT_JNI_MD_H_ */
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.aps has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDS_VERSION 1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.rc Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,120 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,0,0
+ PRODUCTVERSION 2,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "Comments", "\0"
+ VALUE "CompanyName", "Nokia\0"
+ VALUE "FileDescription", "Target Communication Framework Client\0"
+ VALUE "FileVersion", "2, 0, 0, 0\0"
+ VALUE "InternalName", "TCFClient\0"
+ VALUE "LegalCopyright", "Copyright © 2008\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "TCFClient.dll\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "Nokia TCFClient\0"
+ VALUE "ProductVersion", "2, 0, 0, 0\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_VERSION "2.0.0.0"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : TCFCommSerial
+========================================================================
+
+
+AppWizard has created this TCFCommSerial DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommSerial application.
+
+TCFCommSerial.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommSerial.cpp
+ This is the main DLL source file.
+
+TCFCommSerial.h
+ This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFCommSerial.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/RealSerialComm.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,886 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// RealSerialComm.cpp: implementation of the CRealSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "RealSerialComm.h"
+//#include "pn_const.h"
+//#include "OSTConstants.h"
+#include "Connection.h"
+
+#ifdef _DEBUG
+static char sLogMsg[3000];
+#endif
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+#ifdef _DEBUG
+#define LogErrorText(err) { if (err > 0) GetErrorText(err); }
+#define LogErrorText2(err) { if (err > 0) GetErrorText2(err); }
+#else
+#define LogErrorText(err) {}
+#define LogErrorText2(err) {}
+#endif
+
+#ifdef _DEBUG
+#define DUMPCOMSTAT(x) DumpComStat(x)
+#define DUMPCOMSTATP(x) DumpComStatP(x)
+#else
+#define DUMPCOMSTAT(x)
+#define DUMPCOMSTATP(x)
+#endif
+
+CRealSerialComm::CRealSerialComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+ fprintf(f, "CRealSerialComm::CRealSerialComm() (default constructor)\n");
+ fclose(f);
+ }
+#endif
+ m_hSerial = INVALID_HANDLE_VALUE;
+ m_serialPortName[0] = 0;
+ m_pBuffer = NULL;
+ m_ProcDebugLog = NULL;
+
+}
+CRealSerialComm::CRealSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+ fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+ fclose(f);
+ }
+#endif
+ m_hSerial = INVALID_HANDLE_VALUE;
+ m_serialPortName[0] = 0;
+ m_pBuffer = NULL;
+
+ m_connId = connectionId;
+ m_Protocol = protocol;
+
+ m_ConnectSettings = new ConnectData();
+ memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+ if (gDoLogging)
+ {
+ m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+ m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+ }
+#endif
+}
+CRealSerialComm::~CRealSerialComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+ fprintf(f, "CRealSerialComm::~CRealSerialComm()\n");
+ fclose(f);
+ }
+#endif
+ if (m_hSerial != INVALID_HANDLE_VALUE)
+ ::CloseHandle(m_hSerial);
+
+ if (m_pBuffer)
+ delete[] m_pBuffer;
+
+}
+
+long CRealSerialComm::OpenPort()
+{
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::OpenPort\n");
+
+ long err = TCAPI_ERR_NONE;
+
+ char* comPort = m_ConnectSettings->realSerialSettings.comPort;
+ DWORD baudRate = m_ConnectSettings->realSerialSettings.baudRate;
+ DWORD dataBits = m_ConnectSettings->realSerialSettings.dataBits;
+ eParity parity = m_ConnectSettings->realSerialSettings.parity;
+ eStopBits stopBits = m_ConnectSettings->realSerialSettings.stopBits;
+ eFlowControl flow = m_ConnectSettings->realSerialSettings.flowControl;
+
+ COMMLOGA2("CRealSerialComm::OpenPort comPort=%s baudRate=%d\n", comPort, baudRate);
+ COMMLOGA2("CRealSerialComm::OpenPort dataBits=%d parity=%d\n", dataBits, parity);
+ COMMLOGA2("CRealSerialComm::OpenPort stopBits=%d flow=%d\n", stopBits, flow);
+
+ // fill in DCB
+ m_dcb.DCBlength = sizeof(DCB);
+ m_dcb.BaudRate = baudRate;
+ m_dcb.ByteSize = dataBits;
+
+ // parity
+ switch(parity)
+ {
+ default:
+ case eParityNone:
+ m_dcb.fParity = FALSE;
+ m_dcb.Parity = NOPARITY;
+ break;
+ case eParityEven:
+ m_dcb.fParity = TRUE;
+ m_dcb.Parity = EVENPARITY;
+ break;
+ case eParityOdd:
+ m_dcb.fParity = TRUE;
+ m_dcb.Parity = ODDPARITY;
+ break;
+ }
+
+ // stop bits
+ switch(stopBits)
+ {
+ default:
+ case eStopBits1:
+ m_dcb.StopBits = ONESTOPBIT;
+ break;
+ case eStopBits15:
+ m_dcb.StopBits = ONE5STOPBITS;
+ break;
+ case eStopBits2:
+ m_dcb.StopBits = TWOSTOPBITS;
+ break;
+ }
+
+ // flow control
+ switch(flow)
+ {
+ default:
+ case eFlowControlNone:
+ m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ m_dcb.fOutxCtsFlow = FALSE;
+ m_dcb.fInX = m_dcb.fOutX = FALSE;
+ break;
+ case eFlowControlHW:
+ m_dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
+ m_dcb.fOutxCtsFlow = TRUE;
+ m_dcb.fInX = m_dcb.fOutX = FALSE;
+ break;
+ case eFlowControlSW:
+ m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ m_dcb.fOutxCtsFlow = FALSE;
+ m_dcb.fInX = m_dcb.fOutX = TRUE;
+ m_dcb.XonChar = '\021'; // Ctrl-Q;
+ m_dcb.XoffChar = '\023'; // Ctrl-S;
+ m_dcb.XonLim = 100;
+ m_dcb.XoffLim = 100;
+ break;
+ }
+
+ // other things in DCB
+ m_dcb.fDtrControl = DTR_CONTROL_ENABLE;
+ m_dcb.fDsrSensitivity = FALSE;
+ m_dcb.fBinary = TRUE;
+ m_dcb.fNull = FALSE;
+ m_dcb.fAbortOnError = TRUE; // reads & writes will terminate with errors if one occurs
+
+ // translate serial port
+ char p[20]; char* pp = p;
+ strncpy(p, comPort, 20);
+ int len = (int)strlen(p);
+ for (int i = 0; i < len; i++)
+ {
+ p[i] = toupper(p[i]);
+ }
+ if (strncmp(p, "COM", 3) == 0)
+ {
+ pp+=3;
+ }
+ int val = atoi((const char*)pp);
+ if (val == INT_MIN || val == INT_MAX)
+ {
+ err = TCAPI_ERR_INVALID_MEDIA_DATA;
+ }
+ else
+ {
+ // must translate for CreatFile
+ _snprintf(m_serialPortName, MAX_COMPORT_SIZE, "\\\\.\\COM%d", val);
+ }
+
+
+ if (err == TCAPI_ERR_NONE)
+ {
+ m_hSerial = CreateFile(m_serialPortName,
+ GENERIC_READ|GENERIC_WRITE, // dwDesiredAccess = read & write
+ 0, // dwSharedMode = 0 ==> device not shared
+ NULL, // lpSecurityAttributes = NULL ==> not inheritable
+ OPEN_EXISTING, // dwCreationDisposition ==> required for devices
+ 0, // dwFlagsAndAttributes ==> no special flags or attributes (not overlapped)
+ NULL ); // hTemplateFile = NULL ==> required for devices
+
+ if (m_hSerial != INVALID_HANDLE_VALUE)
+ {
+ // TODO: this is really not needed as we're not doing overlapped IO
+ // and we're not creating an event nor waiting on that event
+ if (!SetCommMask(m_hSerial, EV_RXCHAR))
+ {
+ ::CloseHandle(m_hSerial);
+ m_hSerial = INVALID_HANDLE_VALUE;
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else
+ {
+ // no error from SetCommMask
+ if (!SetupComm(m_hSerial,MAX_MESSAGE_LENGTH,MAX_SERIAL_MESSAGE_BUFFER_LENGTH))
+ {
+ CloseHandle(m_hSerial);
+ m_hSerial = INVALID_HANDLE_VALUE;
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else
+ {
+ // no error from SetupComm
+ // Get rid of any junk that might be sitting there.
+ PurgeComm( m_hSerial, PURGE_TXABORT | PURGE_RXABORT |
+ PURGE_TXCLEAR | PURGE_RXCLEAR );
+
+ // Using these settings, the ReadFile command will return immediately
+ // rather than waiting for a timeout.
+ COMMTIMEOUTS lclCommTimeOuts;
+
+ lclCommTimeOuts.ReadIntervalTimeout = MAXDWORD; // we don't care about time between chars
+ lclCommTimeOuts.ReadTotalTimeoutMultiplier = 100;
+ lclCommTimeOuts.ReadTotalTimeoutConstant = 0;
+ lclCommTimeOuts.WriteTotalTimeoutMultiplier = 100;
+ lclCommTimeOuts.WriteTotalTimeoutConstant = 0;
+
+ if (!SetCommTimeouts( m_hSerial, &lclCommTimeOuts ))
+ {
+ CloseHandle(m_hSerial);
+ m_hSerial = INVALID_HANDLE_VALUE;
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else
+ {
+ // no error from SetCommTimeouts
+ err = SetDCB();
+ if (err != TCAPI_ERR_NONE)
+ {
+ CloseHandle(m_hSerial);
+ m_hSerial = INVALID_HANDLE_VALUE;
+ }
+ else
+ {
+ // no error from SetDCB
+ err = TCAPI_ERR_NONE;
+ m_numberBytes = 0;
+ m_lastCommError = 0;
+ m_isConnected = true;
+ m_pBuffer = new BYTE[MAX_SERIAL_MESSAGE_BUFFER_LENGTH];
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ // error from CreateFile
+ // couldn't open serial port
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ }
+
+ COMMLOGA2("CRealSerialComm::OpenPort err=%d osError=%d\n", err, m_lastCommError);
+ LogErrorText(m_lastCommError);
+// if (m_lastCommError > 0)
+// LogErrorText(m_lastCommError);
+ COMMLOGCLOSE();
+ return err;
+}
+
+long CRealSerialComm::SetDCB()
+{
+ // assumes serial port is open
+ long err = TCAPI_ERR_NONE;
+ if (m_hSerial == INVALID_HANDLE_VALUE)
+ return err;
+
+ // setup DCB
+ DCB lcldcb;
+ lcldcb.DCBlength = sizeof(DCB);
+
+ if (!GetCommState( m_hSerial, &lcldcb ))
+ {
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+
+// LogDCB(pInfo);
+ // copy only the ones that Connect() set initially
+ lcldcb.BaudRate = m_dcb.BaudRate;
+ lcldcb.ByteSize = m_dcb.ByteSize;
+ lcldcb.Parity = m_dcb.Parity;
+ lcldcb.StopBits = m_dcb.StopBits;
+ lcldcb.fRtsControl = m_dcb.fRtsControl;
+ lcldcb.fOutxCtsFlow = m_dcb.fOutxCtsFlow;
+ lcldcb.fDtrControl = m_dcb.fDtrControl;
+ lcldcb.fDsrSensitivity = m_dcb.fDsrSensitivity;
+ lcldcb.fInX = m_dcb.fInX;
+ lcldcb.fOutX = m_dcb.fOutX;
+ lcldcb.XonChar = m_dcb.XonChar;
+ lcldcb.XoffChar = m_dcb.XoffChar;
+ lcldcb.XonLim = m_dcb.XonLim;
+ lcldcb.XoffLim = m_dcb.XoffLim;
+ lcldcb.fBinary = m_dcb.fBinary;
+ lcldcb.fParity = m_dcb.fParity;
+ lcldcb.fNull = m_dcb.fNull;
+ lcldcb.fAbortOnError = m_dcb.fAbortOnError;
+
+ // DCB has been changed
+ // If setting the port went well then we are connected properly!
+ if (!SetCommState( m_hSerial, &lcldcb))
+ {
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+
+ return err;
+}
+
+long CRealSerialComm::ClosePort()
+{
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::ClosePort\n");
+
+ long err = TCAPI_ERR_NONE;
+
+ if (!IsConnected())
+ {
+
+ err = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (m_hSerial != INVALID_HANDLE_VALUE)
+ {
+ // disable event notification
+ SetCommMask( m_hSerial, 0 );
+
+ // drop DTR
+ EscapeCommFunction( m_hSerial, CLRDTR );
+
+ // purge any outstanding reads/writes and close device handle
+ PurgeComm( m_hSerial,
+ PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
+
+ CloseHandle( m_hSerial );
+ m_hSerial = INVALID_HANDLE_VALUE;
+
+ if (m_pBuffer)
+ {
+ delete[] m_pBuffer;
+ m_pBuffer = NULL;
+ }
+ m_isConnected = false;
+ }
+
+ COMMLOGCLOSE();
+ return err;
+}
+
+void CRealSerialComm::DeleteMsg(DWORD inMsgLength)
+{
+ if (!IsConnected())
+ return;
+ // inMsgLength includes header
+ // delete from beginning of buffer
+ if (inMsgLength == 0)
+ return;
+ if (m_numberBytes > 0 && m_numberBytes >= inMsgLength)
+ {
+ size_t moveLen = m_numberBytes - inMsgLength;
+ if (moveLen > 0)
+ memcpy(&m_pBuffer[0], &m_pBuffer[inMsgLength], moveLen);
+ m_numberBytes -= inMsgLength;
+ }
+}
+
+long CRealSerialComm::SendDataToPort(DWORD inSize, const void *inData)
+{
+
+ long err = TCAPI_ERR_NONE;
+ DWORD lclNumBytes=0;
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::SendDataToPort\n");
+ COMMLOGCLOSE();
+ if (!IsConnected())
+ {
+
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::SendDataToPort notConnected\n");
+ COMMLOGCLOSE();
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+
+ if (WriteFile(m_hSerial, inData, inSize, &lclNumBytes, NULL))
+ {
+ // we were successful, but did we send all data? (i.e., a timeout occurred)
+ // we are not doing overlapped I/O so if not all data went, then we timed out
+ // and there was some kind of error
+ if (lclNumBytes != inSize)
+ {
+ COMMLOGOPEN();
+ COMMLOGA3("CRealSerialComm::SendDataToPort WriteFile not all bytes sent: lclNumBytes=%d inSize=%d err=%d\n", lclNumBytes, inSize, GetLastError());
+ COMMLOGCLOSE();
+
+ COMSTAT lclComStat;
+ DWORD lclErrorFlags = 0;
+ if (!ClearCommError(m_hSerial, &lclErrorFlags, &lclComStat))
+ {
+ // clear comm error returned error (this doesn't normally happen if the handle is valid and port is still open)
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ COMMLOGOPEN();
+ COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError failed=%d\n", m_lastCommError);
+ COMMLOGCLOSE();
+ }
+ else
+ {
+ // clear comm error returned OK
+ // check error flags
+ if (lclErrorFlags)
+ {
+ // there really was an error
+ m_lastCommError = lclErrorFlags;
+ err = TCAPI_ERR_COMM_ERROR;
+ COMMLOGOPEN();
+ COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=%d\n", m_lastCommError);
+ COMMLOGCLOSE();
+ }
+ else
+ {
+ // No OS error returned, but WriteFile failed to write out all bytes
+ // therefore, since we are not doing overlapped I/O, this is an error.
+ err = TCAPI_ERR_COMM_ERROR;
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=0\n");
+ COMMLOGCLOSE();
+// DUMPCOMSTAT(&lclComStat);
+ }
+ }
+ }
+ else
+ {
+ // we sent all the data we requested
+ err = TCAPI_ERR_NONE;
+#ifdef _DEBUG
+ COMMLOGOPEN();
+ COMMLOGS("CRealSerialComm::SendDataToPort WriteFile successful\n");
+ BYTE* ptr = (BYTE*)inData;
+ long numBytes = (inSize > 20) ? 20 : inSize;
+ char msg[200];
+ sprintf(msg, "CRealSerialComm::SendDataToPort = ");
+ for (int i = 0; i < numBytes; i++)
+ {
+ sprintf(msg, "%s %02.2x", msg, ptr[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ COMMLOGS(msg);
+ COMMLOGCLOSE();
+#endif
+ }
+ }
+ else
+ {
+ // write failed
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ COMMLOGOPEN();
+ COMMLOGA1("CRealSerialComm::SendDataToPort WriteFile failed = %d\n", m_lastCommError);
+ COMMLOGCLOSE();
+ }
+
+ return err;
+}
+long CRealSerialComm::PollPort(DWORD &outSize)
+{
+ long err = TCAPI_ERR_NONE;
+ outSize = 0;
+
+ COMSTAT lclComStat;
+ DWORD lclErrorFlags=0;
+
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+// Sleep(1);
+ if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+ {
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::PollPort ClearCommError failed=%d\n", m_lastCommError);
+// if (m_lastCommError > 0)
+ LogErrorText2(m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ // ClearCommError succeeded
+ if (lclErrorFlags)
+ {
+ m_lastCommError = lclErrorFlags;
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+// DUMPCOMSTATP(&lclComStat);
+// PROCLOGOPEN();
+// PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded cbInQue=%d\n", lclComStat.cbInQue);
+// PROCLOGCLOSE();
+ m_lastCommError = 0;
+ }
+ outSize = lclComStat.cbInQue;
+ }
+
+ return err;
+}
+#ifdef _DEBUG
+void CRealSerialComm::DumpComStat(COMSTAT* stat)
+{
+ COMMLOGOPEN();
+ COMMLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
+ COMMLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
+ COMMLOGA3(" comstat fTxim =%d cbInQue =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
+ COMMLOGCLOSE();
+}
+void CRealSerialComm::DumpComStatP(COMSTAT* stat)
+{
+ PROCLOGOPEN();
+ PROCLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
+ PROCLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
+ PROCLOGA3(" comstat fTxim =%d cbInQue =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
+ PROCLOGCLOSE();
+}
+#endif
+long CRealSerialComm::ReadPort(DWORD inSize, void *outData, DWORD &outSize)
+{
+ long err = TCAPI_ERR_NONE;
+ outSize = 0;
+
+ COMSTAT lclComStat;
+ DWORD lclErrorFlags=0;
+ DWORD lclLength;
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+ // clear out any errors in the channel and get the length of the buffer
+ if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+ {
+ // ClearCommError failed
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ if (lclErrorFlags)
+ {
+ m_lastCommError = lclErrorFlags;
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::ReadPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ m_lastCommError = 0;
+
+ lclLength = min( inSize, lclComStat.cbInQue );
+
+ if (lclLength > 0)
+ {
+ // Read lclLength number of bytes into outData.
+ if (!ReadFile(m_hSerial,outData,lclLength,&outSize,NULL))
+ {
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::ReadPort ReadFile failed = %d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ // ReadFile returned successful, check to see all our bytes came in
+ // If a timeout happened - we may not get all the data
+ if (lclLength != outSize)
+ {
+ lclErrorFlags = 0;
+ if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+ {
+ // ClearCommError failed
+ m_lastCommError = GetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ // ClearCommError succeeded
+ if (lclErrorFlags)
+ {
+ // there really was an error
+ m_lastCommError = lclErrorFlags;
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGA1("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=%d\n", m_lastCommError);
+ PROCLOGCLOSE();
+ }
+ else
+ {
+ // Since we are not doing overlapped I/O
+ // and our timeout values say to timeout, we should read all the bytes
+ // that the last Poll told us, if not this is an error
+ err = TCAPI_ERR_COMM_ERROR;
+ PROCLOGOPEN();
+ PROCLOGS("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=0\n");
+ PROCLOGCLOSE();
+ }
+ }
+ }
+ else
+ {
+ // all data read
+ m_lastCommError = 0;
+ PROCLOGOPEN();
+ PROCLOGS("CRealSerialComm::ReadPort ReadFile successful\n");
+ PROCLOGCLOSE();
+ }
+ }
+ }
+ }
+ }
+
+ return err;
+}
+
+long CRealSerialComm::ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)
+{
+ PROCLOGOPEN();
+ PROCLOGS("CRealSerialComm::ProcessBuffer\n");
+ PROCLOGCLOSE();
+
+ long err = TCAPI_ERR_NONE;
+ long routingErr = TCAPI_ERR_NONE;
+
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+ if (!m_Protocol)
+ return TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+
+ DWORD protocolHeaderLength = m_Protocol->GetHeaderLength();
+
+ // fill buffer
+ if (m_numberBytes < MAX_SERIAL_MESSAGE_BUFFER_LENGTH)
+ {
+ DWORD outLen = 0;
+ err = PollPort(outLen);
+ if (err == TCAPI_ERR_NONE && outLen > 0)
+ {
+ if (outLen > (MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes))
+ outLen = MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes;
+ BYTE *ptr = &m_pBuffer[m_numberBytes];
+ err = ReadPort(outLen, ptr, outLen);
+ if (err == TCAPI_ERR_NONE && outLen > 0)
+ {
+ m_numberBytes += outLen;
+ }
+ }
+ }
+ // now process buffer but only for complete messages
+ if (err == TCAPI_ERR_NONE)
+ {
+ if (m_numberBytes >= protocolHeaderLength)
+ {
+ BYTE* ptr = m_pBuffer;
+ long bytesRemaining = m_numberBytes;
+ long usedLen = 0;
+ bool done = false;
+
+ while (!done)
+ {
+ DWORD fullMessageLength = bytesRemaining;
+ DWORD rawLength = 0;
+ BYTE* fullMessage = ptr;
+ BYTE* rawMessage = ptr;
+ BYTE msgId = 0;
+ if (m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength))
+ {
+ err = PreProcessMessage(msgId, fullMessageLength, fullMessage);
+ if (err != TCAPI_ERR_NONE)
+ {
+ // notify all clients right now
+ pConn->NotifyClientsCommError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+#ifdef _DEBUG
+ int reallen = fullMessageLength;
+ if (reallen > 50) reallen = 50;
+ char msg[6];
+ msg[0] = '\0';
+
+ sLogMsg[0] = '\0';
+ if (reallen > 0)
+ {
+ sLogMsg[0] = '\0';
+ for (int i = 0; i < reallen; i++)
+ {
+ sprintf(msg, "%02.2x ", ptr[i]);
+ strcat(sLogMsg, msg);
+ }
+ }
+#endif
+ PROCLOGOPEN();
+ PROCLOGA5("CRealSerialComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d\n msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sLogMsg);
+ PROCLOGCLOSE();
+
+ err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength);
+ if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future
+
+ numberProcessed++;
+ usedLen += fullMessageLength;
+ bytesRemaining -= fullMessageLength;
+ ptr += fullMessageLength;
+ if (bytesRemaining < protocolHeaderLength)
+ done = true;
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ DeleteMsg(usedLen);
+ }
+ }
+// PROCLOGOPEN();
+// PROCLOGA1("CRealSerialComm::ProcessBuffer err = %d\n", err);
+// PROCLOGCLOSE();
+ if (routingErr == TCAPI_ERR_NONE)
+ return err;
+ else
+ return routingErr;
+}
+bool CRealSerialComm::IsConnectionEqual(ConnectData* pConn)
+{
+ bool equal = false;
+
+ // forms accepted:
+ // "comNN", "NN"
+ char* ptr1 = m_ConnectSettings->realSerialSettings.comPort;
+ char* ptr2 = pConn->realSerialSettings.comPort;
+ bool digit1found = false;
+ while(!digit1found && *ptr1 != NULL)
+ {
+ if (*ptr1 >= '0' && *ptr1 <= '9')
+ {
+ digit1found = true;
+ break;
+ }
+ ptr1++;
+ }
+ bool digit2found = false;
+ while(!digit2found && *ptr2 != NULL)
+ {
+ if (*ptr2 >= '0' && *ptr2 <= '9')
+ {
+ digit2found = true;
+ break;
+ }
+ ptr2++;
+ }
+ if (digit1found && digit2found)
+ {
+ if (strcmp(ptr1, ptr2) == 0)
+ equal = true;
+ }
+ return equal;
+}
+
+#ifdef _DEBUG
+DWORD CRealSerialComm::GetErrorText(DWORD inError)
+{
+ LPVOID lpMsgBuf;
+
+ if (inError == 0) return inError;
+
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ inError,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL );
+
+ COMMLOGA1(" -- GetErrorText=%s", lpMsgBuf);
+ // Free the buffer.
+ LocalFree( lpMsgBuf );
+
+ return inError;
+}
+DWORD CRealSerialComm::GetErrorText2(DWORD inError)
+{
+ LPVOID lpMsgBuf;
+
+ if (inError == 0) return inError;
+
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ inError,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL );
+
+ PROCLOGA1(" -- GetErrorText=%s", lpMsgBuf);
+ // Free the buffer.
+ LocalFree( lpMsgBuf );
+
+ return inError;
+}
+
+void CRealSerialComm::DumpBuffer(BYTE* ptr, long length)
+{
+ char msg[256] = {0};
+ if (length > 50) length = 50;
+ for (int i = 0; i < length; i++)
+ {
+ sprintf(msg, "%s%02.2X ", msg, ptr[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ PROCLOGS(msg);
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/RealSerialComm.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// RealSerialComm.h: interface for the CRealSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_)
+#define AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseCom.h"
+#define MAX_MESSAGE_LENGTH (64*1024L)
+#define MAX_SERIAL_MESSAGE_BUFFER_LENGTH (2*MAX_MESSAGE_LENGTH)
+
+class CRealSerialComm : public CBaseCom
+{
+public:
+ CRealSerialComm();
+ CRealSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+ virtual ~CRealSerialComm();
+
+ virtual long OpenPort();
+ long ClosePort();
+ long SendDataToPort(DWORD inSize, const void* inData);
+ long PollPort(DWORD& outSize);
+ long ReadPort(DWORD inSize, void* outData, DWORD& outSize);
+ long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed);
+ void DeleteMsg(DWORD inMsgLength);
+ bool GetVersion(char* outVersion) { return false; } // don't have enough information for this
+ bool HasVersion() { return false; } // can we have a version?
+ virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+ virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+ virtual bool IsConnectionEqual(ConnectData* pConn);
+
+#ifdef _DEBUG
+ DWORD GetErrorText(DWORD inError);
+ DWORD GetErrorText2(DWORD inError);
+ void DumpComStat(COMSTAT* stat);
+ void DumpComStatP(COMSTAT* stat);
+ void DumpBuffer(BYTE* ptr, long length);
+#endif
+
+private:
+ long SetDCB();
+ HANDLE m_hSerial;
+ DCB m_dcb;
+ char m_serialPortName[MAX_COMPORT_SIZE];
+
+};
+
+#endif // !defined(AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFCommSerial.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_)
+#define AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFCommSerial.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommSerial.h"
+#include "RealSerialComm.h"
+
+static const char* pCommType="serial";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+#ifdef _DEBUG
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ gDoLogging = TRUE;
+ }
+ else
+ {
+ gDoLogging = FALSE;
+ }
+#endif
+ }
+ break;
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+// register this connection type
+TCFCOMMSERIAL_API const char* RegisterComm()
+{
+ return pCommType;
+}
+
+// create this connection type
+TCFCOMMSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+ pCommClass = new CRealSerialComm(connectSettings, connectionId, protocol);
+
+ return pCommClass;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,66 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommSerial.mak
+
+..\TCFServer\BaseCom.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+
+
+..\Common\Source\mutex.cpp : \
+ "..\Common\Headers\mutex.h"\
+
+
+.\RealSerialComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\pn_const.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\Connection.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\RealSerialComm.h"\
+
+
+.\StdAfx.cpp : \
+ "..\..\..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
+ ".\StdAfx.h"\
+
+
+..\Common\Source\TCDebugLog.cpp : \
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+
+
+.\TCFCommSerial.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\RealSerialComm.h"\
+ ".\TCFCommSerial.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,154 @@
+# Microsoft Developer Studio Project File - Name="TCFCommSerial" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommSerial - 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 "TCFCommSerial.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 "TCFCommSerial.mak" CFG="TCFCommSerial - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommSerial - 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)" == "TCFCommSerial - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFCommSerial - Win32 Release"
+# Name "TCFCommSerial - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RealSerialComm.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommSerial.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\RealSerialComm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommSerial.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 Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMSERIAL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// TCFCOMMSERIAL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMSERIAL_EXPORTS
+#define TCFCOMMSERIAL_API __declspec(dllexport)
+#else
+#define TCFCOMMSERIAL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMSERIAL_API const char* RegisterComm();
+TCFCOMMSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,258 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommSerial.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommSerial - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommSerial - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFCommSerial - Win32 Release" && "$(CFG)" != "TCFCommSerial - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFCommSerial.mak" CFG="TCFCommSerial - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFCommSerial - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommSerial.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\RealSerialComm.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFCommSerial.obj"
+ -@erase "$(INTDIR)\TCFCommSerial.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\TCFCommSerial.dll"
+ -@erase "$(OUTDIR)\TCFCommSerial.exp"
+ -@erase "$(OUTDIR)\TCFCommSerial.lib"
+ -@erase "$(OUTDIR)\TCFCommSerial.map"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommSerial.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:no /pdb:"$(OUTDIR)\TCFCommSerial.pdb" /map:"$(INTDIR)\TCFCommSerial.map" /machine:I386 /out:"$(OUTDIR)\TCFCommSerial.dll" /implib:"$(OUTDIR)\TCFCommSerial.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\RealSerialComm.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommSerial.obj"
+
+"$(OUTDIR)\TCFCommSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommSerial.dll"
+ copyBinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommSerial.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\RealSerialComm.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFCommSerial.obj"
+ -@erase "$(INTDIR)\TCFCommSerial.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\TCFCommSerial.dll"
+ -@erase "$(OUTDIR)\TCFCommSerial.exp"
+ -@erase "$(OUTDIR)\TCFCommSerial.ilk"
+ -@erase "$(OUTDIR)\TCFCommSerial.lib"
+ -@erase "$(OUTDIR)\TCFCommSerial.map"
+ -@erase "$(OUTDIR)\TCFCommSerial.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommSerial.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:yes /pdb:"$(OUTDIR)\TCFCommSerial.pdb" /map:"$(INTDIR)\TCFCommSerial.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommSerial.dll" /implib:"$(OUTDIR)\TCFCommSerial.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\RealSerialComm.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommSerial.obj"
+
+"$(OUTDIR)\TCFCommSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommSerial.dll"
+ copyBinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommSerial.dep")
+!INCLUDE "TCFCommSerial.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFCommSerial.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFCommSerial - Win32 Release" || "$(CFG)" == "TCFCommSerial - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\Common\Source\mutex.cpp
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\RealSerialComm.cpp
+
+"$(INTDIR)\RealSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFCommSerial - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFCommSerial.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFCommSerial.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\TCFCommSerial.cpp
+
+"$(INTDIR)\TCFCommSerial.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,48 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D7.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf.legacy\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D7.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D8.tmp" with contents
+[
+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 /incremental:yes /pdb:"Debug/TCFCommSerial.pdb" /map:"Debug/TCFCommSerial.map" /debug /machine:I386 /out:"Debug/TCFCommSerial.dll" /implib:"Debug/TCFCommSerial.lib" /pdbtype:sept
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D8.tmp"
+<h3>Output Window</h3>
+Compiling...
+RealSerialComm.cpp
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D9.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D9.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.map ..\..\..\os\win32\x86
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : TCFCommTCP
+========================================================================
+
+
+AppWizard has created this TCFCommTCP DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommTCP application.
+
+TCFCommTCP.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommTCP.cpp
+ This is the main DLL source file.
+
+TCFCommTCP.h
+ This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFCommTCP.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFCommTCP.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_)
+#define AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFCommTCP.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommTCP.h"
+#include "TcpComm.h"
+
+static const char* pCommType="tcp";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+#ifdef _DEBUG
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ gDoLogging = TRUE;
+ }
+ else
+ {
+ gDoLogging = FALSE;
+ }
+#endif
+ }
+ break;
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+// register this connection type
+TCFCOMMTCP_API const char* RegisterComm()
+{
+ return pCommType;
+}
+
+// create this connection type
+TCFCOMMTCP_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+ pCommClass = new CTcpComm(connectSettings, connectionId, protocol);
+
+ return pCommClass;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,66 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommTCP.mak
+
+..\TCFServer\BaseCom.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+
+
+..\Common\Source\mutex.cpp : \
+ "..\Common\Headers\mutex.h"\
+
+
+.\StdAfx.cpp : \
+ "..\..\..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
+ ".\StdAfx.h"\
+
+
+..\Common\Source\TCDebugLog.cpp : \
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+
+
+.\TCFCommTCP.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\TCFCommTCP.h"\
+ ".\TcpComm.h"\
+
+
+.\TcpComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\pn_const.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\Connection.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\TcpComm.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,154 @@
+# Microsoft Developer Studio Project File - Name="TCFCommTCP" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommTCP - 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 "TCFCommTCP.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 "TCFCommTCP.mak" CFG="TCFCommTCP - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommTCP - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommTCP - 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)" == "TCFCommTCP - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /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 shlwapi.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR /Yu"stdafx.h" /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 shlwapi.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFCommTCP - Win32 Release"
+# Name "TCFCommTCP - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommTCP.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TcpComm.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommTCP.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TcpComm.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 Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMTCP_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// TCFCOMMTCP_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMTCP_EXPORTS
+#define TCFCOMMTCP_API __declspec(dllexport)
+#else
+#define TCFCOMMTCP_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMTCP_API const char* RegisterComm();
+TCFCOMMTCP_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,334 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommTCP.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommTCP - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommTCP - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFCommTCP - Win32 Release" && "$(CFG)" != "TCFCommTCP - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFCommTCP.mak" CFG="TCFCommTCP - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommTCP - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommTCP - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommTCP.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFCommTCP.obj"
+ -@erase "$(INTDIR)\TCFCommTCP.pch"
+ -@erase "$(INTDIR)\TcpComm.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\TCFCommTCP.dll"
+ -@erase "$(OUTDIR)\TCFCommTCP.exp"
+ -@erase "$(OUTDIR)\TCFCommTCP.lib"
+ -@erase "$(OUTDIR)\TCFCommTCP.map"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommTCP.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 shlwapi.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFCommTCP.pdb" /map:"$(INTDIR)\TCFCommTCP.map" /machine:I386 /out:"$(OUTDIR)\TCFCommTCP.dll" /implib:"$(OUTDIR)\TCFCommTCP.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommTCP.obj" \
+ "$(INTDIR)\TcpComm.obj"
+
+"$(OUTDIR)\TCFCommTCP.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommTCP.dll"
+ copybinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommTCP.dll" "$(OUTDIR)\TCFCommTCP.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\BaseCom.sbr"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\mutex.sbr"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\StdAfx.sbr"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCDebugLog.sbr"
+ -@erase "$(INTDIR)\TCFCommTCP.obj"
+ -@erase "$(INTDIR)\TCFCommTCP.pch"
+ -@erase "$(INTDIR)\TCFCommTCP.sbr"
+ -@erase "$(INTDIR)\TcpComm.obj"
+ -@erase "$(INTDIR)\TcpComm.sbr"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\TCFCommTCP.bsc"
+ -@erase "$(OUTDIR)\TCFCommTCP.dll"
+ -@erase "$(OUTDIR)\TCFCommTCP.exp"
+ -@erase "$(OUTDIR)\TCFCommTCP.ilk"
+ -@erase "$(OUTDIR)\TCFCommTCP.lib"
+ -@erase "$(OUTDIR)\TCFCommTCP.map"
+ -@erase "$(OUTDIR)\TCFCommTCP.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommTCP.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\BaseCom.sbr" \
+ "$(INTDIR)\mutex.sbr" \
+ "$(INTDIR)\StdAfx.sbr" \
+ "$(INTDIR)\TCDebugLog.sbr" \
+ "$(INTDIR)\TCFCommTCP.sbr" \
+ "$(INTDIR)\TcpComm.sbr"
+
+"$(OUTDIR)\TCFCommTCP.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=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 shlwapi.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFCommTCP.pdb" /map:"$(INTDIR)\TCFCommTCP.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommTCP.dll" /implib:"$(OUTDIR)\TCFCommTCP.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommTCP.obj" \
+ "$(INTDIR)\TcpComm.obj"
+
+"$(OUTDIR)\TCFCommTCP.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommTCP.dll" "$(OUTDIR)\TCFCommTCP.bsc"
+ copybinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommTCP.dep")
+!INCLUDE "TCFCommTCP.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFCommTCP.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release" || "$(CFG)" == "TCFCommTCP - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\BaseCom.obj" "$(INTDIR)\BaseCom.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\mutex.obj" "$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFCommTCP.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\StdAfx.sbr" "$(INTDIR)\TCFCommTCP.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TCDebugLog.obj" "$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\TCFCommTCP.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TCFCommTCP.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TCFCommTCP.obj" "$(INTDIR)\TCFCommTCP.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ENDIF
+
+SOURCE=.\TcpComm.cpp
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TcpComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TcpComm.obj" "$(INTDIR)\TcpComm.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ENDIF
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,16 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TcpComm.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,666 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TcpComm.cpp: implementation of the CTcpComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "TcpComm.h"
+//#include "pn_const.h"
+//#include "OSTConstants.h"
+#include "Connection.h"
+
+#ifdef _DEBUG
+static char sTcpLogMsg[3000];
+#endif
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CTcpComm::CTcpComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+ fprintf(f, "CTcpComm::CTcpComm() (default constructor)\n");
+ fclose(f);
+ }
+#endif
+ m_socket = INVALID_SOCKET;
+ m_timeOut.tv_sec = TIMEOUT_SEC(DEFAULT_SOCKET_TIMEOUT);
+ m_timeOut.tv_usec = TIMEOUT_USEC(DEFAULT_SOCKET_TIMEOUT);
+
+ m_hSocketEvent = WSA_INVALID_EVENT;
+}
+
+CTcpComm::CTcpComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+ fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+ fclose(f);
+ }
+#endif
+ m_connId = connectionId;
+ m_Protocol = protocol;
+
+ m_ConnectSettings = new ConnectData();
+ memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+ if (gDoLogging)
+ {
+ m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+ m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+ }
+#endif
+ m_socket = INVALID_SOCKET;
+ m_timeOut.tv_sec = TIMEOUT_SEC(DEFAULT_SOCKET_TIMEOUT);
+ m_timeOut.tv_usec = TIMEOUT_USEC(DEFAULT_SOCKET_TIMEOUT);
+
+ m_hSocketEvent = WSA_INVALID_EVENT;
+}
+CTcpComm::~CTcpComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+ fprintf(f, "CTcpComm::~CTcpComm()\n");
+ fclose(f);
+ }
+#endif
+ if (IsConnected())
+ {
+ shutdown(m_socket, SD_BOTH);
+ closesocket(m_socket);
+ WSACleanup();
+ }
+ if (m_pBuffer)
+ delete[] m_pBuffer;
+
+ if (m_hSocketEvent != WSA_INVALID_EVENT)
+ WSACloseEvent(m_hSocketEvent);
+
+}
+
+//#define USE_EVENTS
+;
+long CTcpComm::OpenPort()
+{
+ COMMLOGOPEN();
+ COMMLOGS("CTcpComm::OpenPort\n");
+
+ long err = TCAPI_ERR_NONE;
+ char* ipAddress = m_ConnectSettings->tcpSettings.ipAddress;
+ char* ipPort = m_ConnectSettings->tcpSettings.ipPort;
+ // set this to set socket to non-blocking
+ // DWORD nonblock = 1; // non-blocking
+ DWORD nonblock = 0; // blocking
+
+ COMMLOGA2("CTcpComm::OpenPort ipAddress=%s ipPort=%s\n", ipAddress, ipPort);
+
+ WSADATA wsaData;
+ int wsaErr = WSAStartup(MAKEWORD(2,2), &wsaData);
+ if (wsaErr != 0)
+ {
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+// err = -1;
+ }
+ else
+ {
+ m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ if (m_socket == INVALID_SOCKET)
+ {
+ m_lastCommError = WSAGetLastError();
+ WSACleanup();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else
+ {
+ if (ioctlsocket(m_socket, FIONBIO, &nonblock) == SOCKET_ERROR)
+ {
+ m_lastCommError = WSAGetLastError();
+ closesocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ WSACleanup();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else
+ {
+ int i = SO_MAX_MSG_SIZE;
+ // set socket options
+ BOOL keepAlive = TRUE;
+ setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (const char*)&keepAlive, sizeof(BOOL));
+ int sockRecvSize = MAX_TCP_MESSAGE_BUFFER_LENGTH;//(256*1024L);
+ setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (const char*)&sockRecvSize, sizeof(int));
+ int sockSendSize = (64*1024L);
+ setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (const char*)&sockSendSize, sizeof(int));
+ WSAGetLastError(); // ignore error for now
+ int gotsockRecvSize, optLen=sizeof(int);
+ getsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char*)&gotsockRecvSize, &optLen);
+ WSAGetLastError(); // ignore error for now
+ // connect
+ WORD wPort = atoi(ipPort);
+ m_clientService.sin_family = AF_INET;
+ m_clientService.sin_addr.S_un.S_addr = inet_addr(ipAddress);
+ m_clientService.sin_port = htons(wPort);
+ if (connect(m_socket, (SOCKADDR*)&m_clientService, sizeof(m_clientService)) == SOCKET_ERROR)
+ {
+ int wsaErr = WSAGetLastError();
+ // socket is non-blocking
+ if (wsaErr != WSAEWOULDBLOCK)
+ {
+ m_lastCommError = wsaErr;
+
+ closesocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ WSACleanup();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ else // WSAEWOULDBLOCK error returned
+ {
+ // WSAEWOULDBLOCK use select now
+ fd_set readfds, writefds, exceptfds;
+ FD_ZERO(&readfds);
+ FD_ZERO(&writefds);
+ FD_ZERO(&exceptfds);
+ FD_SET(m_socket, &readfds);
+ FD_SET(m_socket, &writefds);
+ FD_SET(m_socket, &exceptfds);
+
+ int selRes = 0;
+ while(1)
+ {
+ selRes = select(0, &readfds, &writefds, &exceptfds, &m_timeOut);
+ if (selRes == SOCKET_ERROR)
+ {
+ wsaErr = WSAGetLastError();
+ if (wsaErr != WSAEWOULDBLOCK)
+ {
+ // real error
+ m_lastCommError = wsaErr;
+ shutdown(m_socket, SD_BOTH);
+ closesocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ WSACleanup();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ // else do another select
+ }
+ else if (selRes > 0)// select OK
+ {
+ m_lastCommError = 0;
+ m_isConnected = true;
+ break; // done
+ }
+ else
+ {
+ // timed out
+ m_lastCommError = WSAGetLastError();
+ shutdown(m_socket, SD_BOTH);
+ closesocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ WSACleanup();
+ err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+ }
+ }
+ }
+ }
+ else // connect return OK
+ {
+ m_lastCommError = 0;
+ m_isConnected = true;
+ }
+ }
+ }
+ }
+ if (err == TCAPI_ERR_NONE)
+ {
+ // we are connected
+ m_numberBytes = 0;
+ m_pBuffer = new BYTE[MAX_TCP_MESSAGE_BUFFER_LENGTH];
+
+#ifdef USE_EVENTS
+ // create an event for the socket closing
+ m_hSocketEvent = WSACreateEvent();
+ ::WSAEventSelect(m_socket, m_hSocketEvent, FD_CLOSE);
+ // above call sets socket to non-blocking
+ // cannot reset to blocking after using WSAEventSelect
+ // thus this ioctlsocket call will fail
+ ioctlsocket(m_socket, FIONBIO, &nonblock);
+#endif
+ }
+
+ COMMLOGCLOSE();
+ return err;
+}
+
+long CTcpComm::ClosePort()
+{
+ COMMLOGOPEN();
+ COMMLOGS("CTcpComm::ClosePort\n");
+
+ long err = TCAPI_ERR_NONE;
+
+ if (!IsConnected())
+ {
+ err = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else
+ {
+ shutdown(m_socket, SD_BOTH);
+ closesocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ WSACleanup();
+
+ delete[] m_pBuffer;
+ m_pBuffer = NULL;
+
+ if (m_hSocketEvent != WSA_INVALID_EVENT)
+ {
+ WSACloseEvent(m_hSocketEvent);
+ m_hSocketEvent = WSA_INVALID_EVENT;
+ }
+ }
+
+ COMMLOGCLOSE();
+ return err;
+}
+
+long CTcpComm::PollPort(DWORD &outSize)
+{
+ long err = TCAPI_ERR_NONE;
+ DWORD numBytes = 0;
+ outSize = 0;
+
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+#ifdef USE_EVENTS
+ int ret = ::WSAWaitForMultipleEvents(1, &m_hSocketEvent, FALSE, 0, FALSE);
+ if (ret == WSA_WAIT_EVENT_0)
+ {
+ ::WSAResetEvent(m_hSocketEvent);
+ err = TCAPI_ERR_COMM_ERROR;
+ m_lastCommError = WSAESHUTDOWN;
+ return err;
+ }
+#endif
+ int sockErr = 0; int optLen = sizeof(int);
+ int getErr = getsockopt(m_socket, SOL_SOCKET, SO_ERROR, (char*)&sockErr, &optLen);
+ if (getErr == 0)
+ {
+ if (sockErr)
+ {
+ err = TCAPI_ERR_COMM_ERROR;
+ m_lastCommError = sockErr;
+ return err;
+ }
+ }
+
+ fd_set readfds, writefds, exceptfds;
+ FD_ZERO(&readfds);
+ FD_ZERO(&writefds);
+ FD_ZERO(&exceptfds);
+ FD_SET(m_socket, &readfds);
+ FD_SET(m_socket, &writefds);
+ FD_SET(m_socket, &exceptfds);
+
+ bool portReady = false;
+ {
+ TIMEVAL pollTimeout = {0,0}; // just poll the status
+ int selErr = select(0, &readfds, 0, 0, &pollTimeout);
+ if (selErr > 0)
+ {
+ if (FD_ISSET(m_socket, &readfds))
+ {
+ m_lastCommError = 0;
+ portReady = true;
+ }
+ }
+ else if (selErr == SOCKET_ERROR)
+ {
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ }
+
+ if (portReady)
+ {
+ // read was signaled as ready
+ int recvRet = recv(m_socket, (char*)&m_pPeekBuffer, sizeof(m_pPeekBuffer), MSG_PEEK);
+ if (recvRet > 0)
+ {
+ if (ioctlsocket(m_socket, FIONREAD, &numBytes) == 0)
+ {
+ m_lastCommError = 0;
+ outSize = numBytes;
+ }
+ else // SOCKET_ERROR
+ {
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ }
+ else if (recvRet == 0)
+ {
+ // read was signalled as ready but recv=0 signals that remote shutdown
+ m_lastCommError = WSAESHUTDOWN;
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ else
+ {
+ // SOCKET_ERROR: error on recv other than a shutdown
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ }
+ return err;
+}
+
+long CTcpComm::ReadPort(DWORD inSize, void *outData, DWORD &outSize)
+{
+ long err = TCAPI_ERR_NONE;
+ DWORD numBytes = 0;
+ outSize = 0;
+
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+ if (ioctlsocket(m_socket, FIONREAD, &numBytes) == 0)
+ {
+ if (numBytes > inSize)
+ numBytes = inSize;
+ int res = recv(m_socket, (char*)outData, numBytes, 0);
+ if (res == SOCKET_ERROR)
+ {
+ long commErr = WSAGetLastError();
+ if ((DWORD)commErr != m_lastCommError)
+ {
+ m_lastCommError = commErr;
+ }
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ else if (res == 0)
+ {
+ // recv=0 --> connection closed
+ m_lastCommError = WSAESHUTDOWN;
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ else
+ {
+ m_lastCommError = 0;
+ outSize = numBytes;
+ }
+ }
+ else
+ {
+ // SOCKET_ERROR on ioctlsocket
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ return err;
+}
+long CTcpComm::ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)
+{
+
+ long err = TCAPI_ERR_NONE;
+ long routingErr = TCAPI_ERR_NONE;
+
+ if (!IsConnected())
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+ if (!m_Protocol)
+ return TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+
+ DWORD protocolHeaderLength = m_Protocol->GetHeaderLength();
+
+ // fill buffer
+ if (m_numberBytes < MAX_TCP_MESSAGE_BUFFER_LENGTH)
+ {
+ DWORD outLen = MAX_TCP_MESSAGE_BUFFER_LENGTH - m_numberBytes;
+ BYTE* ptr = &m_pBuffer[m_numberBytes];
+ err = ReadPort(outLen, ptr, outLen);
+ if (err == TCAPI_ERR_NONE && outLen > 0)
+ {
+ m_numberBytes += outLen;
+ }
+ }
+
+ // now process buffer but only for complete messages
+ if (err == TCAPI_ERR_NONE)
+ {
+ if (m_numberBytes >= protocolHeaderLength)
+ {
+ BYTE* ptr = m_pBuffer;
+ long bytesRemaining = m_numberBytes;
+ long usedLen = 0;
+ bool done = false;
+
+ while (!done)
+ {
+ DWORD fullMessageLength = bytesRemaining;
+ DWORD rawLength = 0;
+ BYTE* fullMessage = ptr;
+ BYTE* rawMessage = ptr;
+ BYTE msgId = 0;
+ if (m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength))
+ {
+ err = PreProcessMessage(msgId, fullMessageLength, fullMessage);
+ if (err != TCAPI_ERR_NONE)
+ {
+ PROCLOGOPEN();
+ PROCLOGA1("CTcpComm::ProcessBuffer Notify err = %x\n", err);
+ PROCLOGCLOSE();
+ // notify all clients right now
+ pConn->NotifyClientsCommError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+#ifdef _DEBUG
+ int reallen = fullMessageLength;
+ if (reallen > 50) reallen = 50;
+ char msg[6];
+ msg[0] = '\0';
+
+ sTcpLogMsg[0] = '\0';
+ if (reallen > 0)
+ {
+ sTcpLogMsg[0] = '\0';
+ for (int i = 0; i < reallen; i++)
+ {
+ sprintf(msg, "%02.2x ", ptr[i]);
+ strcat(sTcpLogMsg, msg);
+ }
+ }
+#endif
+ PROCLOGOPEN();
+ PROCLOGA5("CTcpComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d\n msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sTcpLogMsg);
+ PROCLOGCLOSE();
+
+ err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength);
+ if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future
+
+ numberProcessed++;
+ usedLen += fullMessageLength;
+ bytesRemaining -= fullMessageLength;
+ ptr += fullMessageLength;
+ if (bytesRemaining < protocolHeaderLength)
+ done = true;
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ DeleteMsg(usedLen);
+ }
+ }
+
+ if (routingErr == TCAPI_ERR_NONE)
+ return err;
+ else
+ return routingErr;
+}
+
+
+long CTcpComm::SendDataToPort(DWORD inSize, const void* inData)
+{
+ COMMLOGOPEN();
+ COMMLOGS("CTcpComm::SendDataToPort\n");
+
+ long err = TCAPI_ERR_NONE;
+
+ if (!IsConnected())
+ {
+ COMMLOGCLOSE();
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+
+#ifdef USE_EVENTS
+ int ret = ::WSAWaitForMultipleEvents(1, &m_hSocketEvent, FALSE, 0, FALSE);
+ if (ret == WSA_WAIT_EVENT_0)
+ {
+ ::WSAResetEvent(m_hSocketEvent);
+ err = TCAPI_ERR_COMM_ERROR;
+ m_lastCommError = WSAESHUTDOWN;
+ COMMLOGCLOSE();
+ return err;
+ }
+#endif
+ int sockErr = 0; int optLen = sizeof(int);
+ int getErr = getsockopt(m_socket, SOL_SOCKET, SO_ERROR, (char*)&sockErr, &optLen);
+ if (getErr == 0)
+ {
+ if (sockErr)
+ {
+ err = TCAPI_ERR_COMM_ERROR;
+ m_lastCommError = sockErr;
+ COMMLOGCLOSE();
+ return err;
+ }
+ }
+
+ fd_set readfds, writefds, exceptfds;
+ FD_ZERO(&readfds);
+ FD_ZERO(&writefds);
+ FD_ZERO(&exceptfds);
+ FD_SET(m_socket, &readfds);
+ FD_SET(m_socket, &writefds);
+ FD_SET(m_socket, &exceptfds);
+
+ COMMLOGS("CTcpComm::SendDataToPort select\n");
+ bool portReady = false;
+ {
+ int selErr = select(0, &readfds, &writefds, &exceptfds, &m_timeOut);
+ if (selErr > 0)
+ {
+ if (FD_ISSET(m_socket, &writefds))
+ {
+ m_lastCommError = 0;
+ portReady = true;
+ }
+ }
+ else if (selErr == SOCKET_ERROR)
+ {
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ else if (selErr == 0) // timeout
+ {
+ m_lastCommError = WSAGetLastError();
+ err = TCAPI_ERR_COMM_ERROR;
+ }
+ }
+ COMMLOGA1("CTcpComm::SendDataToPort portReady=%d\n", portReady);
+ if (portReady)
+ {
+ COMMLOGS("CTcpComm::SendDataToPort send start\n");
+ // loop until all bytes are sent
+ DWORD bytesRemaining = inSize;
+ DWORD nSent = 0;
+ char* unsent = (char*)inData;
+ while (bytesRemaining)
+ {
+ nSent = send(m_socket, unsent, bytesRemaining, 0);
+ if (nSent == SOCKET_ERROR)
+ {
+ int wsaErr = WSAGetLastError();
+ // ignore "would block" errors
+ if (wsaErr != WSAEWOULDBLOCK)
+ {
+ // TODO: error handling
+ m_lastCommError = wsaErr;
+ err = TCAPI_ERR_COMM_ERROR;
+ break;
+ }
+ }
+ else
+ {
+ m_lastCommError = 0;
+ unsent += nSent;
+ bytesRemaining -= nSent;
+ }
+ } // end while
+ COMMLOGS("CTcpComm::SendDataToPort send done\n");
+#ifdef _DEBUG
+ BYTE* ptr = (BYTE*)inData;
+ long numBytes = (inSize > 20) ? 20 : inSize;
+ char msg[200];
+ sprintf(msg, "CTcpComm::SendDataToPort data = ");
+ for (int i = 0; i < numBytes; i++)
+ {
+ sprintf(msg, "%s %02.2x", msg, ptr[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ COMMLOGS(msg);
+#endif
+ }
+
+ COMMLOGCLOSE();
+ return err;
+}
+
+void CTcpComm::DeleteMsg(DWORD inMsgLength)
+{
+ // inMsgLength includes header
+ // delete from beginning of buffer
+ if (inMsgLength == 0)
+ return;
+ if (m_numberBytes > 0 && m_numberBytes >= inMsgLength)
+ {
+ size_t moveLen = m_numberBytes - inMsgLength;
+ if (moveLen > 0)
+ memcpy(&m_pBuffer[0], &m_pBuffer[inMsgLength], moveLen);
+ m_numberBytes -= inMsgLength;
+ }
+}
+bool CTcpComm::IsConnectionEqual(ConnectData* pConn)
+{
+ if ((strcmp(pConn->tcpSettings.ipAddress, m_ConnectSettings->tcpSettings.ipAddress) == 0) &&
+ (strcmp(pConn->tcpSettings.ipPort, m_ConnectSettings->tcpSettings.ipPort) == 0))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TcpComm.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TcpComm.h: interface for the CTcpComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_)
+#define AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseCom.h"
+#include <winsock2.h>
+
+#define MAX_MESSAGE_LENGTH (64*1024L)
+#define MAX_TCP_MESSAGE_BUFFER_LENGTH (8*MAX_MESSAGE_LENGTH)
+
+#define DEFAULT_SOCKET_TIMEOUT (2000000L) // 2 seconds
+#define TIMEOUT_SEC(x) (x/1000000L)
+#define TIMEOUT_USEC(x) (x%1000000L)
+
+class CTcpComm : public CBaseCom
+{
+public:
+ CTcpComm();
+ CTcpComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+ virtual ~CTcpComm();
+
+ virtual long OpenPort();
+ long ClosePort();
+ long SendDataToPort(DWORD inSize, const void* inData);
+ long PollPort(DWORD& outSize);
+ long ReadPort(DWORD inSize, void* outData, DWORD& outSize);
+ long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed);
+// long ProcessBuffer(NOTIFYCLIENTSCOMMERROR pNotify, ROUTEMESSAGE pRouteMessage, long& numberProcessed);
+// long ProcessBuffer(long& numberProcessed);
+ void DeleteMsg(DWORD inMsgLength);
+ bool GetVersion(char* outVersion) { return false; } // don't have enough information for this
+ bool HasVersion() { return false; } // can we have a version?
+ virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+ virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+ bool IsConnectionEqual(ConnectData* pConn);
+
+private:
+ SOCKET m_socket;
+ sockaddr_in m_clientService;
+ TIMEVAL m_timeOut;
+ WSAEVENT m_hSocketEvent;
+ DWORD m_pPeekBuffer;
+
+};
+
+#endif // !defined(AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.map ..\..\..\os\win32\x86
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : TCFCommVirtualSerial
+========================================================================
+
+
+AppWizard has created this TCFCommVirtualSerial DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommVirtualSerial application.
+
+TCFCommVirtualSerial.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommVirtualSerial.cpp
+ This is the main DLL source file.
+
+TCFCommVirtualSerial.h
+ This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFCommVirtualSerial.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFCommVirtualSerial.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_)
+#define AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFCommVirtualSerial.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommVirtualSerial.h"
+#include "VirtualSerialComm.h"
+
+static const char* pCommType="virtualserial";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+#ifdef _DEBUG
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ gDoLogging = TRUE;
+ }
+ else
+ {
+ gDoLogging = FALSE;
+ }
+#endif
+ }
+ break;
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+// register this connection type
+TCFCOMMVIRTUALSERIAL_API const char* RegisterComm()
+{
+ return pCommType;
+}
+
+// create this connection type
+TCFCOMMVIRTUALSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+ pCommClass = new VirtualSerialComm(connectSettings, connectionId, protocol);
+
+ return pCommClass;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,84 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommVirtualSerial.mak
+
+..\TCFServer\BaseCom.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+
+
+..\Common\Source\mutex.cpp : \
+ "..\Common\Headers\mutex.h"\
+
+
+..\TCFCommSerial\RealSerialComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\pn_const.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFCommSerial\RealSerialComm.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\Connection.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+
+
+.\StdAfx.cpp : \
+ "..\..\..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
+ ".\StdAfx.h"\
+
+
+..\Common\Source\TCDebugLog.cpp : \
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+
+
+.\TCFCommVirtualSerial.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFCommSerial\RealSerialComm.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\TCFCommVirtualSerial.h"\
+ ".\VirtualSerialComm.h"\
+
+
+.\VirtualSerialComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ "..\TCFCommSerial\RealSerialComm.h"\
+ "..\TCFServer\BaseCom.h"\
+ "..\TCFServer\Client.h"\
+ "..\TCFServer\MessageFile.h"\
+ "..\TCFServer\Registry.h"\
+ ".\VirtualSerialComm.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,162 @@
+# Microsoft Developer Studio Project File - Name="TCFCommVirtualSerial" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommVirtualSerial - 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 "TCFCommVirtualSerial.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 "TCFCommVirtualSerial.mak" CFG="TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommVirtualSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommVirtualSerial - 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)" == "TCFCommVirtualSerial - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFCommVirtualSerial - Win32 Release"
+# Name "TCFCommVirtualSerial - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\TCFCommSerial\RealSerialComm.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommVirtualSerial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\VirtualSerialComm.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\TCFCommSerial\RealSerialComm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommVirtualSerial.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\VirtualSerialComm.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 Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMVIRTUALSERIAL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// TCFCOMMVIRTUALSERIAL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMVIRTUALSERIAL_EXPORTS
+#define TCFCOMMVIRTUALSERIAL_API __declspec(dllexport)
+#else
+#define TCFCOMMVIRTUALSERIAL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMVIRTUALSERIAL_API const char* RegisterComm();
+TCFCOMMVIRTUALSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,268 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommVirtualSerial.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommVirtualSerial - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommVirtualSerial - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFCommVirtualSerial - Win32 Release" && "$(CFG)" != "TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFCommVirtualSerial.mak" CFG="TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFCommVirtualSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommVirtualSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFCommVirtualSerial - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\RealSerialComm.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFCommVirtualSerial.obj"
+ -@erase "$(INTDIR)\TCFCommVirtualSerial.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\VirtualSerialComm.obj"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.dll"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.exp"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.lib"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.map"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommVirtualSerial.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:no /pdb:"$(OUTDIR)\TCFCommVirtualSerial.pdb" /map:"$(INTDIR)\TCFCommVirtualSerial.map" /machine:I386 /out:"$(OUTDIR)\TCFCommVirtualSerial.dll" /implib:"$(OUTDIR)\TCFCommVirtualSerial.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\RealSerialComm.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommVirtualSerial.obj" \
+ "$(INTDIR)\VirtualSerialComm.obj"
+
+"$(OUTDIR)\TCFCommVirtualSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+ copyBinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseCom.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\RealSerialComm.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFCommVirtualSerial.obj"
+ -@erase "$(INTDIR)\TCFCommVirtualSerial.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\VirtualSerialComm.obj"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.dll"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.exp"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.ilk"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.lib"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.map"
+ -@erase "$(OUTDIR)\TCFCommVirtualSerial.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommVirtualSerial.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:yes /pdb:"$(OUTDIR)\TCFCommVirtualSerial.pdb" /map:"$(INTDIR)\TCFCommVirtualSerial.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommVirtualSerial.dll" /implib:"$(OUTDIR)\TCFCommVirtualSerial.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\BaseCom.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\RealSerialComm.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFCommVirtualSerial.obj" \
+ "$(INTDIR)\VirtualSerialComm.obj"
+
+"$(OUTDIR)\TCFCommVirtualSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+ copyBinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommVirtualSerial.dep")
+!INCLUDE "TCFCommVirtualSerial.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFCommVirtualSerial.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFCommVirtualSerial - Win32 Release" || "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\Common\Source\mutex.cpp
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\TCFCommSerial\RealSerialComm.cpp
+
+"$(INTDIR)\RealSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFCommVirtualSerial - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFCommVirtualSerial.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFCommVirtualSerial.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\TCFCommVirtualSerial.cpp
+
+"$(INTDIR)\TCFCommVirtualSerial.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+
+
+SOURCE=.\VirtualSerialComm.cpp
+
+"$(INTDIR)\VirtualSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,49 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DA.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf.legacy\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DA.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DB.tmp" with contents
+[
+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 /incremental:yes /pdb:"Debug/TCFCommVirtualSerial.pdb" /map:"Debug/TCFCommVirtualSerial.map" /debug /machine:I386 /out:"Debug/TCFCommVirtualSerial.dll" /implib:"Debug/TCFCommVirtualSerial.lib" /pdbtype:sept
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommVirtualSerial.obj
+.\Debug\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DB.tmp"
+<h3>Output Window</h3>
+Compiling...
+RealSerialComm.cpp
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DC.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DC.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/VirtualSerialComm.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// VirtualSerialComm1.cpp: implementation of the VirtualSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "VirtualSerialComm.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+VirtualSerialComm::VirtualSerialComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+ fprintf(f, "VirtualSerialComm::VirtualSerialComm() (default constructor)\n");
+ fclose(f);
+ }
+#endif
+}
+VirtualSerialComm::VirtualSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+ fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+ fprintf(f, "connectSettings->comPort=%s\n", connectSettings->virtualSerialSettings.comPort);
+ fclose(f);
+ }
+#endif
+ m_connId = connectionId;
+ m_Protocol = protocol;
+
+ m_ConnectSettings = new ConnectData();
+ memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+ if (gDoLogging)
+ {
+ m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+ m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+ }
+#endif
+ pRealSerialConnectData pR = &m_ConnectSettings->realSerialSettings;
+ pVirtualSerialConnectData pV = &m_ConnectSettings->virtualSerialSettings;
+
+ // copy com port to real settings
+ strcpy(pR->comPort, pV->comPort);
+
+ // fill in real setting defaults
+ pR->baudRate = 115200;
+ pR->dataBits = 8;
+ pR->flowControl = eFlowControlNone;
+ pR->parity = eParityNone;
+ pR->stopBits = eStopBits1;
+}
+
+VirtualSerialComm::~VirtualSerialComm()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+ fprintf(f, "VirtualSerialComm::~VirtualSerialComm()\n");
+ fclose(f);
+ }
+#endif
+}
+bool VirtualSerialComm::IsConnectionEqual(ConnectData* pConn)
+{
+ bool equal = false;
+
+ // forms accepted:
+ // "comNN", "NN"
+ char* ptr1 = m_ConnectSettings->virtualSerialSettings.comPort;
+ char* ptr2 = pConn->virtualSerialSettings.comPort;
+ bool digit1found = false;
+ while(!digit1found && *ptr1 != NULL)
+ {
+ if (*ptr1 >= '0' && *ptr1 <= '9')
+ {
+ digit1found = true;
+ break;
+ }
+ ptr1++;
+ }
+ bool digit2found = false;
+ while(!digit2found && *ptr2 != NULL)
+ {
+ if (*ptr2 >= '0' && *ptr2 <= '9')
+ {
+ digit2found = true;
+ break;
+ }
+ ptr2++;
+ }
+ if (digit1found && digit2found)
+ {
+ if (strcmp(ptr1, ptr2) == 0)
+ equal = true;
+ }
+ return equal;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/VirtualSerialComm.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// VirtualSerialComm1.h: interface for the VirtualSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_)
+#define AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "RealSerialComm.h"
+
+class VirtualSerialComm : public CRealSerialComm
+{
+public:
+ VirtualSerialComm();
+ VirtualSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+ virtual ~VirtualSerialComm();
+
+ virtual bool IsConnectionEqual(ConnectData* pConn);
+};
+
+#endif // !defined(AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.map ..\..\..\os\win32\x86
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFNative.dsw Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,89 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "TCFClient"=.\TCFClient\TCFClient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommSerial"=.\TCFCommSerial\TCFCommSerial.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommTCP"=.\TCFCommTCP\TCFCommTCP.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommVirtualSerial"=.\TCFCommVirtualSerial\TCFCommVirtualSerial.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFProtOST"=.\TCFProtOST\TCFProtOST.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFServer"=.\TCFServer\TCFServer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFNative.ncb has changed
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFNative.opt has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/OSTProtocol.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// OSTProtocol.cpp: implementation of the COSTProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "OSTProtocol.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+COSTProtocol::COSTProtocol()
+{
+
+}
+
+COSTProtocol::~COSTProtocol()
+{
+
+}
+BOOL COSTProtocol::DecodeMessage(BYTE* fullMessage, DWORD& fullMessageLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength)
+{
+ BOOL found = FALSE;
+
+ WORD msgLen = MAKEWORD(fullMessage[OST_LEN_BYTE_1+1], fullMessage[OST_LEN_BYTE_1]);
+ if (fullMessageLength >= (WORD)(msgLen + OST_HDR_LEN_1))
+ {
+ msgId = fullMessage[OST_PROT_BYTE_1];
+ rawMessage = &fullMessage[OST_MSG_BYTE_1];
+ rawLength = msgLen;
+ fullMessageLength = msgLen+OST_HDR_LEN_1;
+ found = TRUE;
+ }
+
+ return found;
+}
+
+DWORD COSTProtocol::EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength)
+{
+ DWORD outLength = 0;
+
+ fullMessage[OST_VER_BYTE_1] = protocolVersion;
+ fullMessage[OST_PROT_BYTE_1] = msgId;
+ fullMessage[OST_LEN_BYTE_1] = (BYTE)((rawLength >> 8) & 0xff);
+ fullMessage[OST_LEN_BYTE_1+1] = (BYTE)(rawLength & 0xff);
+ if (rawLength > 0)
+ {
+ memcpy(&fullMessage[OST_MSG_BYTE_1], rawMessage, rawLength);
+ }
+ outLength = rawLength + OST_HDR_LEN_1;
+
+ return outLength;
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/OSTProtocol.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// OSTProtocol.h: interface for the COSTProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_)
+#define AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseProtocol.h"
+// Version 1 offsets
+#define OST_HDR_LEN_1 4 // header length
+#define OST_VER_BYTE_1 0 // byte that contains the version
+#define OST_PROT_BYTE_1 1 // protocol byte
+#define OST_LEN_BYTE_1 2 // first byte of length (bytes 2-3)
+#define OST_MSG_BYTE_1 4 // start of message bytes
+
+// Protocol constants
+#define OST_PROT_OST_SYSTEM (0x00) // OST System messages
+#define OST_PROT_OST_ACTIVATION (0x01) // OST Activation messages
+#define OST_PROT_OST_ASCII (0x02) // OST ASCII messages
+#define OST_PROT_OST_SIMPLE (0x03) // OST Simple messages
+#define OST_PROT_OST_EXTENSIBLE (0x04) // OST Extensible messages
+#define OST_PROT_OST_SYMBIAN (0x05) // OST Symbian messages
+#define OST_PROT_TRK (0x90) // OST TRK messages
+#define OST_PROT_TC (0x91) // OST TraceCore messages
+
+class COSTProtocol : public CBaseProtocol
+{
+public:
+ COSTProtocol();
+ virtual ~COSTProtocol();
+
+ BOOL DecodeMessage(BYTE* fullMessage, DWORD& fullLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength);
+ DWORD EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength);
+ DWORD GetHeaderLength() { return OST_HDR_LEN_1; }
+};
+
+#endif // !defined(AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : TCFProtOST
+========================================================================
+
+
+AppWizard has created this TCFProtOST DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFProtOST application.
+
+TCFProtOST.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFProtOST.cpp
+ This is the main DLL source file.
+
+TCFProtOST.h
+ This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFProtOST.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFProtOST.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_)
+#define AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFProtOST.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include "TCFProtOST.h"
+#include "OSTProtocol.h"
+
+static const char* pProtocol="ost";
+static COSTProtocol* pProtocolClass=NULL;
+
+BOOL APIENTRY DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+TCFPROTOST_API const char* RegisterProtocol()
+{
+ return pProtocol;
+}
+
+TCFPROTOST_API CBaseProtocol* CreateProtocol()
+{
+ pProtocolClass = new COSTProtocol();
+ return pProtocolClass;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,21 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFProtOST.mak
+
+..\TCFServer\BaseProtocol.cpp : \
+ "..\TCFServer\BaseProtocol.h"\
+
+
+.\OSTProtocol.cpp : \
+ "..\TCFServer\BaseProtocol.h"\
+ ".\OSTProtocol.h"\
+
+
+.\StdAfx.cpp : \
+ "..\..\..\..\..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
+ ".\StdAfx.h"\
+
+
+.\TCFProtOST.cpp : \
+ "..\TCFServer\BaseProtocol.h"\
+ ".\OSTProtocol.h"\
+ ".\TCFProtOST.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,146 @@
+# Microsoft Developer Studio Project File - Name="TCFProtOST" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFProtOST - 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 "TCFProtOST.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 "TCFProtOST.mak" CFG="TCFProtOST - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFProtOST - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFProtOST - 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)" == "TCFProtOST - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /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 /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFProtOST - Win32 Release"
+# Name "TCFProtOST - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseProtocol.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\OSTProtocol.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFProtOST.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\OSTProtocol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFProtOST.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 Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "BaseProtocol.h"
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the TCFPROTOST_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// TCFPROTOST_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFPROTOST_EXPORTS
+#define TCFPROTOST_API __declspec(dllexport)
+#else
+#define TCFPROTOST_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFPROTOST_API const char* RegisterProtocol();
+TCFPROTOST_API CBaseProtocol* CreateProtocol();
+
+#ifdef __cplusplus
+}
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,238 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFProtOST.dsp
+!IF "$(CFG)" == ""
+CFG=TCFProtOST - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFProtOST - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFProtOST - Win32 Release" && "$(CFG)" != "TCFProtOST - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFProtOST.mak" CFG="TCFProtOST - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFProtOST - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFProtOST - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFProtOST - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFProtOST.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseProtocol.obj"
+ -@erase "$(INTDIR)\OSTProtocol.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCFProtOST.obj"
+ -@erase "$(INTDIR)\TCFProtOST.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\TCFProtOST.dll"
+ -@erase "$(OUTDIR)\TCFProtOST.exp"
+ -@erase "$(OUTDIR)\TCFProtOST.lib"
+ -@erase "$(OUTDIR)\TCFProtOST.map"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFProtOST.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:no /pdb:"$(OUTDIR)\TCFProtOST.pdb" /map:"$(INTDIR)\TCFProtOST.map" /machine:I386 /out:"$(OUTDIR)\TCFProtOST.dll" /implib:"$(OUTDIR)\TCFProtOST.lib"
+LINK32_OBJS= \
+ "$(INTDIR)\BaseProtocol.obj" \
+ "$(INTDIR)\OSTProtocol.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCFProtOST.obj"
+
+"$(OUTDIR)\TCFProtOST.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFProtOST.dll"
+ copyBinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFProtOST.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\BaseProtocol.obj"
+ -@erase "$(INTDIR)\OSTProtocol.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCFProtOST.obj"
+ -@erase "$(INTDIR)\TCFProtOST.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\TCFProtOST.dll"
+ -@erase "$(OUTDIR)\TCFProtOST.exp"
+ -@erase "$(OUTDIR)\TCFProtOST.ilk"
+ -@erase "$(OUTDIR)\TCFProtOST.lib"
+ -@erase "$(OUTDIR)\TCFProtOST.map"
+ -@erase "$(OUTDIR)\TCFProtOST.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFProtOST.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 /incremental:yes /pdb:"$(OUTDIR)\TCFProtOST.pdb" /map:"$(INTDIR)\TCFProtOST.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFProtOST.dll" /implib:"$(OUTDIR)\TCFProtOST.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\BaseProtocol.obj" \
+ "$(INTDIR)\OSTProtocol.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCFProtOST.obj"
+
+"$(OUTDIR)\TCFProtOST.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFProtOST.dll"
+ copyBinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFProtOST.dep")
+!INCLUDE "TCFProtOST.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFProtOST.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFProtOST - Win32 Release" || "$(CFG)" == "TCFProtOST - Win32 Debug"
+SOURCE=..\TCFServer\BaseProtocol.cpp
+
+"$(INTDIR)\BaseProtocol.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\OSTProtocol.cpp
+
+"$(INTDIR)\OSTProtocol.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFProtOST - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFProtOST.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFProtOST.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\TCFProtOST.cpp
+
+"$(INTDIR)\TCFProtOST.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,409 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AE.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AE.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AF.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AF.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B0.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFClient.pdb" /map:"Release/TCFClient.map" /machine:I386 /out:"Release/TCFClient.dll" /implib:"Release/TCFClient.lib"
+.\Release\ClientManager.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\mutex.obj
+.\Release\ServerClient.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCAPIConnectionJni.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFClient.obj
+.\Release\TCFCppApi.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B0.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFClient.lib and object Release/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B4.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B4.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B5.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B5.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B6.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B6.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B7.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFCommSerial.pdb" /map:"Release/TCFCommSerial.map" /machine:I386 /out:"Release/TCFCommSerial.dll" /implib:"Release/TCFCommSerial.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B7.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommSerial.lib and object Release/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BB.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BB.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BC.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BC.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BD.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BD.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BE.tmp" with contents
+[
+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 shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommTCP.pdb" /map:"Release/TCFCommTCP.map" /machine:I386 /out:"Release/TCFCommTCP.dll" /implib:"Release/TCFCommTCP.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommTCP.obj
+.\Release\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BE.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommTCP.lib and object Release/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C2.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C2.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C3.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C3.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C4.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C4.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C5.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFCommVirtualSerial.pdb" /map:"Release/TCFCommVirtualSerial.map" /machine:I386 /out:"Release/TCFCommVirtualSerial.dll" /implib:"Release/TCFCommVirtualSerial.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommVirtualSerial.obj
+.\Release\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C5.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommVirtualSerial.lib and object Release/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C9.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C9.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CA.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CA.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CB.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CB.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CC.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFProtOST.pdb" /map:"Release/TCFProtOST.map" /machine:I386 /out:"Release/TCFProtOST.dll" /implib:"Release/TCFProtOST.lib"
+.\Release\BaseProtocol.obj
+.\Release\OSTProtocol.obj
+.\Release\StdAfx.obj
+.\Release\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CC.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFProtOST.lib and object Release/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D0.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D0.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D1.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D1.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D2.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D2.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D3.tmp" with contents
+[
+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 shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"Release/TCFServer.pdb" /machine:I386 /out:"Release/TCFServer.exe"
+.\Release\Client.obj
+.\Release\CommRegistryItem.obj
+.\Release\Connection.obj
+.\Release\ConnectionImpl.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\MessageFile.obj
+.\Release\mutex.obj
+.\Release\ProtocolRegistryItem.obj
+.\Release\Registry.obj
+.\Release\RegistryImpl.obj
+.\Release\ServerClient.obj
+.\Release\ServerManager.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFServer.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D3.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D5.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D5.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.dll ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.lib ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.map ..\..\..\os\win32\x86
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseCom.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "stdafx.h"
+#include "BaseCom.h"
+
+CBaseCom::CBaseCom()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+ fprintf(f, "CBaseCom::CBaseCom() (default constructor)\n");
+ fclose(f);
+ }
+#endif
+ m_isConnected = false;
+ m_pBuffer = NULL;
+ m_numberBytes = 0;
+ m_ConnectSettings = NULL;
+ m_lastCommError = 0;
+ m_CommDebugLog = NULL;
+ m_ProcDebugLog = NULL;
+ m_connId = -1;
+ m_Protocol = NULL;
+}
+
+CBaseCom::CBaseCom(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+ fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+ fclose(f);
+ }
+#endif
+ m_isConnected = false;
+ m_pBuffer = NULL;
+ m_numberBytes = 0;
+ m_ConnectSettings = NULL;
+ m_lastCommError = 0;
+ m_CommDebugLog = NULL;
+ m_ProcDebugLog = NULL;
+
+ m_connId = connectionId;
+ m_Protocol = protocol;
+
+ m_ConnectSettings = new ConnectData();
+ memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+ if (gDoLogging)
+ {
+ m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+ m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+ }
+#endif
+}
+
+CBaseCom::~CBaseCom()
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+ fprintf(f, "CBaseCom::~CBaseCom()\n");
+ fclose(f);
+ }
+#endif
+ if (m_pBuffer)
+ delete[] m_pBuffer;
+
+ if (m_ConnectSettings)
+ delete m_ConnectSettings;
+
+ if (m_CommDebugLog)
+ delete m_CommDebugLog;
+
+ if (m_ProcDebugLog)
+ delete m_ProcDebugLog;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseCom.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __BASECOM_H__
+#define __BASECOM_H__
+#include "Registry.h"
+#include "ServerClient.h"
+#include "TCConstants.h"
+#include "TCErrorConstants.h"
+#include "BaseProtocol.h"
+#include "TCDebugLog.h"
+#include <time.h>
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_COMM
+#if defined(LOG_COMM) && defined(_DEBUG)
+
+#define COMMLOGOPEN() if (gDoLogging) { if (m_CommDebugLog) m_CommDebugLog->WaitForAccess(); }
+#define COMMLOGS(s) if (gDoLogging) { sprintf(m_CommDebugLogMsg,"%s", s); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA1(s, a1) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA2(s, a1, a2) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2, a3); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2, a3, a4); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGCLOSE() if (gDoLogging) { if (m_CommDebugLog) m_CommDebugLog->ReleaseAccess(); }
+#else
+#define COMMLOGOPEN()
+#define COMMLOGS(s)
+#define COMMLOGA1(s, a1)
+#define COMMLOGA2(s, a1, a2)
+#define COMMLOGA3(s, a1, a2, a3)
+#define COMMLOGA4(s, a1, a2, a3, a4)
+#define COMMLOGCLOSE()
+#endif
+
+#define LOG_PROCCOMM
+#if defined(LOG_PROCCOMM) && defined(_DEBUG)
+#define PROCLOGOPEN() if (gDoLogging) { m_ProcDebugLog->WaitForAccess(); }
+#define PROCLOGS(s) if (gDoLogging) { sprintf(m_ProcDebugLogMsg,"%s", s); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA1(s, a1) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA2(s, a1, a2) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3, a4); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA5(s, a1, a2, a3, a4, a5) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3, a4, a5); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGCLOSE() if (gDoLogging) { m_ProcDebugLog->ReleaseAccess(); }
+#else
+#define PROCLOGOPEN()
+#define PROCLOGS(s)
+#define PROCLOGA1(s, a1)
+#define PROCLOGA2(s, a1, a2)
+#define PROCLOGA3(s, a1, a2, a3)
+#define PROCLOGA4(s, a1, a2, a3, a4)
+#define PROCLOGA5(s, a1, a2, a3, a4, a5)
+#define PROCLOGCLOSE()
+#endif
+
+class CConnection;
+class CBaseProtocol;
+
+class CBaseCom
+{
+public:
+ CBaseCom();
+ CBaseCom(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+ virtual ~CBaseCom();
+
+// void SetConnectSettings(ConnectData* connectSettings);
+// void SetProtocol(CBaseProtocol* protocol) { m_Protocol = protocol; }
+// void SetConnectionId(DWORD id);
+
+ virtual long OpenPort()=0;
+ virtual long ClosePort()=0;
+ virtual long SendDataToPort(DWORD inSize, const void* inData)=0;
+ virtual long PollPort(DWORD& outSize)=0;
+ virtual long ReadPort(DWORD inSize, void* outData, DWORD& outSize)=0;
+ virtual long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)=0;
+ virtual void DeleteMsg(DWORD inMsgLength)=0;
+ virtual bool IsConnected() { return m_isConnected; }
+ virtual bool GetVersion(char* outVersion)=0; // get version of whatever we're connected to
+ virtual bool HasVersion()=0; // does this connection have a version?
+ virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage)=0;
+ virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage)=0;
+ virtual bool IsConnectionEqual(ConnectData* pConn)=0;
+
+ BYTE* m_pBuffer;
+ DWORD m_numberBytes;
+ bool m_isConnected;
+ DWORD m_connId;
+
+ ConnectData* m_ConnectSettings; // from connection
+ CBaseProtocol* m_Protocol; // used for this connection
+
+ // for Open/Close/Send thread
+ char m_CommDebugLogMsg[2000];
+ TCDebugLog* m_CommDebugLog;
+
+ // for Poll/Read/Process/PreProcess thread
+ char m_ProcDebugLogMsg[2000];
+ TCDebugLog* m_ProcDebugLog;
+
+ DWORD m_lastCommError;
+};
+
+typedef const char* (*COMMREGISTER)(void);
+typedef CBaseCom* (*COMMCREATE)(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#define COMMREGISTER_FNNAME "RegisterComm"
+#define COMMCREATE_FNNAME "CreateComm"
+
+#define COMMDLL_BASENAME "TCFComm"
+
+#endif __BASECOM_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseProtocol.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// BaseProtocol.cpp: implementation of the CBaseProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "BaseProtocol.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CBaseProtocol::CBaseProtocol()
+{
+
+}
+
+CBaseProtocol::~CBaseProtocol()
+{
+
+}
+
+DWORD CBaseProtocol::GetHeaderLength()
+{
+ return 0;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseProtocol.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// BaseProtocol.h: interface for the CBaseProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_)
+#define AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+class CBaseProtocol
+{
+public:
+ CBaseProtocol();
+ virtual ~CBaseProtocol();
+
+ // used to decode a message into header/message parts
+ virtual BOOL DecodeMessage(BYTE* fullMessage, DWORD& fullLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength)=0;
+
+ // used to encode a raw message (prefixes any protocol headers)
+ virtual DWORD EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength)=0;
+
+ // used to query how many bytes the header is so the caller can allocate enough memory
+ virtual DWORD GetHeaderLength()=0;
+
+};
+
+typedef const char* (*PROTOCOLREGISTER)(void);
+typedef CBaseProtocol* (*PROTOCOLCREATE)(void);
+
+#define PROTOCOLREGISTER_FNNAME "RegisterProtocol"
+#define PROTOCOLCREATE_FNNAME "CreateProtocol"
+
+#define PROTOCOLDLL_BASENAME "TCFProt"
+
+#endif // !defined(AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Client.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Client.cpp: implementation of the CClient class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Client.h"
+#include "ServerManager.h"
+
+extern CServerManager* gManager;
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_CLIENT
+#if defined(LOG_CLIENT) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CClient::CClient()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClient::CClient\n");
+
+ m_InputStream = NULL;
+ m_MessageFile = NULL;
+ m_ErrorMonitor = NULL;
+ m_Connection = NULL;
+ m_Status = eStopped;
+ m_ClientId = -1;
+ m_Options.ostVersion = 1;
+ m_Options.unWrapFormat = DEFAULT_UNWRAP_OPTION;
+ m_MessageDestination = eDestinationInputStream; // default - changed later
+
+ TCDEBUGCLOSE();
+}
+
+CClient::CClient(CConnection* connection, ClientOptions& options, DWORD clientId)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClient::CClient\n");
+
+ m_Connection = connection;
+ m_Options.ostVersion = options.ostVersion;
+ m_Options.unWrapFormat = options.unWrapFormat;
+ m_ClientId = clientId;
+ m_Status = eStopped;
+
+ m_ErrorMonitor = new CErrorMonitor(m_ClientId);
+ m_ErrorMonitor->CreateData();
+ m_InputStream = NULL; // created on open instead
+ m_MessageFile = NULL;
+ m_MessageDestination = eDestinationInputStream; // default - changed later
+
+
+ TCDEBUGCLOSE();
+}
+CClient::~CClient()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClient::~CClient\n");
+
+ if (m_ErrorMonitor)
+ delete m_ErrorMonitor;
+
+ if (m_InputStream)
+ delete m_InputStream;
+
+ if (m_MessageFile)
+ delete m_MessageFile;
+
+ TCDEBUGCLOSE();
+}
+BOOL CClient::OpenStream(DestinationOptions* streamOptions)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClient::OpenStream\n");
+
+ BOOL done = TRUE;
+
+ if (m_InputStream == NULL)
+ {
+ m_InputStream = new CInputStream(streamOptions->destinationFile, streamOptions->streamSize, streamOptions->overFlowToFile, m_ClientId);
+ m_InputStream->CreateStream();
+ }
+
+ TCDEBUGCLOSE();
+ return done;
+}
+
+BOOL CClient::CloseStream()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CClient::CloseStream\n");
+
+ BOOL done = TRUE;
+
+ if (m_InputStream)
+ {
+ delete m_InputStream;
+ m_InputStream = NULL;
+ }
+
+ TCDEBUGCLOSE();
+ return done;
+}
+BOOL CClient::OpenMessageFile(DestinationOptions *messageFileOptions)
+{
+ BOOL done = TRUE;
+ if (m_MessageFile == NULL)
+ {
+ m_MessageFile = new CMessageFile(messageFileOptions->destinationFile, m_ClientId);
+ m_MessageFile->Open();
+ }
+
+ return done;
+}
+BOOL CClient::CloseMessageFile()
+{
+ BOOL done = TRUE;
+
+ if (m_MessageFile)
+ {
+ delete m_MessageFile;
+ m_MessageFile = NULL;
+ }
+
+ return done;
+}
+BOOL CClient::ClearMessageFile()
+{
+ BOOL done = TRUE;
+
+ if (m_MessageFile)
+ {
+ m_MessageFile->ClearFile();
+ }
+
+ return done;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Client.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Client.h: interface for the CClient class.
+//
+// one of these per client
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_)
+#define AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_
+
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "MessageFile.h"
+#include "ErrorMonitorData.h"
+#include "TCConstants.h"
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+class CConnection;
+
+class CClient
+{
+public:
+ CClient();
+ CClient(CConnection* connection, ClientOptions& options, DWORD clientId);
+ virtual ~CClient();
+
+ void Start() { m_Status = eStarted; }
+ void Stop() { m_Status = eStopped; }
+
+ BOOL IsStarted() { return (m_Status == eStarted); }
+ DWORD GetClientId() { return m_ClientId; }
+ CConnection* GetConnection() { return m_Connection; }
+ BOOL OpenStream(DestinationOptions* streamOptions);
+ BOOL CloseStream();
+ BOOL IsStreamOpen() { return (m_InputStream != NULL); }
+ CInputStream* GetInputStream() { return m_InputStream; }
+
+ BOOL OpenMessageFile(DestinationOptions* messageFileOptions);
+ BOOL CloseMessageFile();
+ BOOL ClearMessageFile();
+ BOOL IsMessageFileOpen() { return (m_MessageFile != NULL); }
+ CMessageFile* GetMessageFile() { return m_MessageFile; }
+
+ eMessageDestination m_MessageDestination;
+ CMessageFile* m_MessageFile;
+ CInputStream* m_InputStream;
+ CErrorMonitor* m_ErrorMonitor;
+ CConnection* m_Connection;
+ ClientOptions m_Options;
+ eClientStatus m_Status;
+ DWORD m_ClientId;
+};
+
+#endif // !defined(AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/CommRegistryItem.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// CommRegistryItem.cpp: implementation of the CCommRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "CommRegistryItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CCommRegistryItem::CCommRegistryItem()
+{
+
+}
+
+CCommRegistryItem::~CCommRegistryItem()
+{
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/CommRegistryItem.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// CommRegistryItem.h: interface for the CCommRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_)
+#define AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "BaseCom.h"
+
+#define MAX_DLLPATHNAME (2048)
+
+class CCommRegistryItem
+{
+public:
+ CCommRegistryItem();
+ virtual ~CCommRegistryItem();
+
+ char m_CommType[MAX_CONNECTION_TYPE];
+ char m_CommLibrary[MAX_DLLPATHNAME];
+};
+
+#endif // !defined(AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Connection.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Connection.cpp: implementation of the CConnection class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Connection.h"
+#include "ServerManager.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#define TCDEBUGOPEN() if (gDoLogging) { this->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(this->m_DebugLogMsg,"%s", s); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { this->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CConnection::CConnection()
+{
+}
+
+CConnection::CConnection(ConnectData conData, DWORD connectionId)
+{
+}
+
+CConnection::~CConnection()
+{
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Connection.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Connection.h: interface for the CConnection class.
+// Implemented by CConnectionImpl
+//
+// one of these per connection
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_)
+#define AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include "Client.h"
+#include "Registry.h"
+#include "BaseCom.h"
+#include <vector>
+#include <time.h>
+
+// basename is suffixed with connection ID to make it unique per CConnection
+#define MESSAGEPROCESSOR_EXITEVENT_BASENAME "TCFServerMessageProcessorExittedEvent"
+#define MESSAGEPROCESSOR_STOPEVENT_BASENAME "TCFServerMessageProcessorStoppedEvent"
+#define MESSAGEPROCESSOR_STARTEVENT_BASENAME "TCFServerMessageProcessorStartedEvent"
+#define MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT 60000L
+
+typedef std::vector<CClient*> ClientList;
+
+// m_MessageProcessorState states
+#define MP_NONE (0)
+#define MP_EXIT (1)
+#define MP_START (2)
+#define MP_PAUSE (3)
+#define MP_PROCESSING (4)
+
+
+#define FLUSH_TIME (100) // 100 ms
+class CConnection
+{
+public:
+ CConnection();
+ CConnection(ConnectData conData, DWORD connectionId);
+ virtual ~CConnection();
+
+ virtual BOOL IsEqual(CConnection* connection)=0;
+ virtual BOOL IsEqual(pConnectData pConData)=0;
+ virtual long GetConnectionId() { return m_ConnectionID; }
+ virtual BOOL ExitProcessing()=0; // exit processing thread
+ virtual long DoDisconnect()=0;
+ virtual void NotifyClientsCommError(long tcfError, bool passOsError=false, DWORD osError=0)=0;
+ long m_ConnectionID; // id for this connection
+
+ ConnectData* m_ConnectSettings; // connection settings
+};
+
+#endif // !defined(AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ConnectionImpl.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,907 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ConnectionImpl.cpp: implementation of the CConnectionImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ConnectionImpl.h"
+#include "RegistryImpl.h"
+#include "ServerManager.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_CONNECTION
+#if defined(LOG_CONNECTION) && defined(_DEBUG)
+#define TCDEBUGOPEN() if (gDoLogging) { this->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(this->m_DebugLogMsg,"%s", s); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3, a4); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { this->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGLOGA4(s, a1, a2, a3, a4)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CConnectionImpl::CConnectionImpl()
+{
+ m_ConnectSettings = NULL;
+ m_ClientList = NULL;
+ m_Status = eDisconnected;
+ m_Registry = NULL;
+ m_ConnectionID = 0;
+ m_OsError = 0;
+ m_BaseComm = NULL;
+ m_BaseProtocol = NULL;
+ m_BaseCommHandle = NULL;
+ m_BaseProtocolHandle = NULL;
+
+ // message processing thread flags and handles
+ m_MessageProcessorState = MP_NONE;
+ m_ExitMessageProcessor = false;
+ m_PauseMessageProcessing = false;
+ m_StartMessageProcessing = false;
+ m_hMessageProcessorExittedEvent = NULL;
+ m_hMessageProcessorStoppedEvent = NULL;
+ m_hMessageProcessorStartedEvent = NULL;
+ m_hMessageProcessorThread = NULL;
+ m_dwMessageProcessorThreadId = 0;
+
+ m_NextRetryTime = m_RetryTimeoutTime = 0;
+
+ m_NextFlushFileTime = 0;
+}
+
+CConnectionImpl::CConnectionImpl(ConnectData conData, DWORD connectionId)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ m_DebugLog = new TCDebugLog("TCF_ConnectionLog", connectionId);
+ m_DebugLog2 = new TCDebugLog("TCF_ProcessorLog", connectionId);
+ }
+ else
+ {
+ m_DebugLog = NULL;
+ m_DebugLog2 = NULL;
+ }
+#else
+ m_DebugLog = NULL;
+ m_DebugLog2 = NULL;
+#endif
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("CConnectionImpl::CConnectionImpl id = %d\n", connectionId);
+
+ m_ConnectSettings = new ConnectData();
+
+ memcpy(m_ConnectSettings, &conData, sizeof(ConnectData));
+
+ m_ClientList = new ClientList();
+ m_ClientList->clear();
+ m_Status = eDisconnected;
+ m_Registry = new CRegistryImpl(connectionId);
+ m_ConnectionID = connectionId;
+ m_BaseComm = NULL;
+ m_BaseProtocol = NULL;
+ m_BaseCommHandle = NULL;
+ m_BaseProtocolHandle = NULL;
+
+ // message processing thread flags and handles
+ m_MessageProcessorState = MP_NONE;
+ m_ExitMessageProcessor = false;
+ m_PauseMessageProcessing = false;
+ m_StartMessageProcessing = false;
+
+ // create named events
+ char eventName[100];
+
+ sprintf(eventName, "%s%d", MESSAGEPROCESSOR_EXITEVENT_BASENAME, connectionId);
+ m_hMessageProcessorExittedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+ sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STOPEVENT_BASENAME, connectionId);
+ m_hMessageProcessorStoppedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+ sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STARTEVENT_BASENAME, connectionId);
+ m_hMessageProcessorStartedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+ m_hMessageProcessorThread = NULL;
+ m_dwMessageProcessorThreadId = 0;
+
+ m_NextRetryTime = m_RetryTimeoutTime = 0;
+
+ m_NextFlushFileTime = 0;
+ m_OsError = 0;
+
+ TCDEBUGCLOSE();
+}
+CConnectionImpl::~CConnectionImpl()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::~CConnectionImpl\n");
+
+ // terminate the message processor thread if running
+
+ if (m_hMessageProcessorThread != NULL)
+ {
+ BOOL t = ::TerminateThread(m_hMessageProcessorThread, 0);
+ ::CloseHandle(m_hMessageProcessorThread);
+ }
+
+ if (m_hMessageProcessorExittedEvent != NULL)
+ {
+ ::CloseHandle(m_hMessageProcessorExittedEvent);
+ }
+
+ if (m_hMessageProcessorStoppedEvent != NULL)
+ {
+ ::CloseHandle(m_hMessageProcessorStoppedEvent);
+ }
+
+ if (m_ConnectSettings)
+ delete m_ConnectSettings;
+
+
+ if (m_ClientList)
+ {
+ m_ClientList->clear();
+ delete m_ClientList;
+ }
+
+ if (m_Registry)
+ {
+ delete m_Registry;
+ }
+
+ if (m_BaseComm)
+ {
+ delete m_BaseComm;
+ }
+
+ if (m_BaseCommHandle)
+ {
+ ::FreeLibrary(m_BaseCommHandle);
+ }
+ if (m_BaseProtocol)
+ {
+ delete m_BaseProtocol;
+ }
+
+ if (m_BaseProtocolHandle)
+ {
+ ::FreeLibrary(m_BaseProtocolHandle);
+ }
+
+ TCDEBUGCLOSE();
+ if (m_DebugLog)
+ delete m_DebugLog;
+ if (m_DebugLog2)
+ delete m_DebugLog2;
+
+}
+
+BOOL CConnectionImpl::IsEqual(CConnection* connection)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
+
+ BOOL equal = FALSE;
+
+ if (strcmp(m_ConnectSettings->connectType, connection->m_ConnectSettings->connectType) == 0)
+ {
+ if (m_BaseComm)
+ {
+ if (m_BaseComm->IsConnectionEqual(connection->m_ConnectSettings))
+ {
+ equal = TRUE;
+ }
+ }
+ else
+ {
+ equal = TRUE;
+ }
+ }
+
+ TCDEBUGCLOSE();
+ return equal;
+}
+
+BOOL CConnectionImpl::IsEqual(pConnectData pConData)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
+
+ BOOL equal = FALSE;
+
+ if (strcmp(m_ConnectSettings->connectType, pConData->connectType) == 0)
+ {
+ if (m_BaseComm)
+ {
+ if (m_BaseComm->IsConnectionEqual(pConData))
+ {
+ equal = TRUE;
+ }
+ }
+ else
+ {
+ equal = TRUE;
+ }
+ }
+ TCDEBUGCLOSE();
+ return equal;
+}
+
+long CConnectionImpl::DoConnect()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoConnect\n");
+
+ long ret = TCAPI_ERR_NONE;
+
+ if (m_BaseComm && m_BaseProtocol)
+ {
+ ret = m_BaseComm->OpenPort();
+ if (ret != TCAPI_ERR_NONE)
+ {
+ m_OsError = m_BaseComm->m_lastCommError;
+ TCDEBUGLOGA1(" m_BaseComm->OpenPort = %d\n", ret);
+ }
+ }
+ else
+ {
+ ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ m_Status = eConnected;
+
+ TCDEBUGCLOSE();
+
+ StartProcessing();
+ }
+ else
+ {
+// if (m_BaseComm != NULL)
+// {
+// delete m_BaseComm;
+// m_BaseComm = NULL;
+// }
+ TCDEBUGCLOSE();
+ }
+ return ret;
+}
+
+long CConnectionImpl::DoDisconnect()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoDisconnect\n");
+
+ long ret = TCAPI_ERR_NONE;
+ if (IsConnected())
+ {
+ ret = m_BaseComm->ClosePort();
+// delete m_BaseComm;
+// m_BaseComm = NULL;
+ }
+ m_Status = eDisconnected;
+
+ TCDEBUGCLOSE();
+ return ret;
+}
+
+BOOL CConnectionImpl::AddClient(CClient* client)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::AddClient\n");
+
+ BOOL ok = TRUE;
+
+ m_ClientList->push_back(client);
+
+ TCDEBUGCLOSE();
+ return ok;
+}
+
+long CConnectionImpl::DoSendMessage(long encodeOption, BYTE protocolVersion, BOOL useMsgId, BYTE msgId, DWORD msgLength, BYTE* pMsg)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoSendMessage\n");
+
+ long err = TCAPI_ERR_NONE;
+ if (IsRetryInProgress())
+ {
+ err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (IsRetryTimedOut())
+ {
+ err = TCAPI_ERR_COMM_TIMEOUT;
+ }
+ else if (m_Status == eConnected)
+ {
+ BYTE* encodedMessage = new BYTE[msgLength + 40]; // add enough for header (msgLength may be 0)
+ // if msgLength == 0, then encodeOption SHOULD be ENCODE_FORMAT since com expects to send something!
+ if (encodeOption == ENCODE_FORMAT)
+ {
+#ifdef _DEBUG
+ char msg[200]; msg[0] = '\0';
+ int len = (msgLength > 30) ? 30 : msgLength;
+ for (int i = 0; i < len; i ++)
+ {
+ sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ TCDEBUGLOGS(msg);
+#endif
+ // msgLength maybe 0 and pMsg maybe NULL (we're not sending a raw message, just a protocol header)
+ msgLength = m_BaseProtocol->EncodeMessage(pMsg, msgLength, protocolVersion, msgId, encodedMessage, msgLength+40);
+#ifdef _DEBUG
+ msg[0] = '\0';
+ len = (msgLength > 30) ? 30 : msgLength;
+ for (i = 0; i < len; i ++)
+ {
+ sprintf(msg, "%s%02.2x ", msg, encodedMessage[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ TCDEBUGLOGS(msg);
+#endif
+ err = m_BaseComm->SendDataToPort(msgLength, encodedMessage);
+ }
+ else
+ {
+#ifdef _DEBUG
+ char msg[200]; msg[0] = '\0';
+ int len = (msgLength > 30) ? 30 : msgLength;
+ for (int i = 0; i < len; i ++)
+ {
+ sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
+ }
+ sprintf(msg, "%s\n", msg);
+ TCDEBUGLOGS(msg);
+#endif
+ // msgLength != 0 and pMsg != NULL
+ err = m_BaseComm->SendDataToPort(msgLength, pMsg);
+ }
+ delete[] encodedMessage;
+
+ TCDEBUGLOGS("CConnectionImpl::DoSendMessage done\n");
+ if (err == TCAPI_ERR_COMM_ERROR)
+ {
+ EnterRetryPeriod(err, true, m_BaseComm->m_lastCommError);
+ m_OsError = m_BaseComm->m_lastCommError;
+ }
+ }
+ else
+ {
+ err = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+
+ TCDEBUGLOGA1("CConnectionImpl::DoSendMessage err = %d\n", err);
+ TCDEBUGCLOSE();
+ return err;
+}
+
+long CConnectionImpl::DoRetryProcessing()
+{
+ long err = TCAPI_ERR_NONE;
+
+ // if not connected
+ // return no error
+ if (m_BaseComm == NULL /*|| m_BaseComm->IsConnected() == false*/)
+ return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+ // if retry not in progress && retry not timed out
+ // return no error
+ if (!IsRetryInProgress() && !IsRetryTimedOut())
+ return TCAPI_ERR_NONE;
+
+// TCDEBUGOPEN();
+// TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing\n");
+// TCDEBUGCLOSE();
+ // if retry timeout flag already set
+ // return timeout error
+ if (IsRetryTimedOut())
+ return TCAPI_ERR_COMM_TIMEOUT;
+
+ // get current time
+ time_t ctime;
+ time(&ctime);
+ // if retry timeout period has expired
+ if (ctime >= m_RetryTimeoutTime)
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry timeout\n");
+ TCDEBUGCLOSE();
+ // send timeout error to all clients
+ NotifyClientsCommError(TCAPI_ERR_COMM_TIMEOUT);
+ // close comm port
+ m_BaseComm->ClosePort();
+ // set retry timeout flag
+ SetRetryTimedOut();
+ // return retry timeout error
+ err = TCAPI_ERR_COMM_TIMEOUT;
+ }
+ // else if retry time has passed
+ else if (ctime >= m_NextRetryTime)
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry time\n");
+ TCDEBUGCLOSE();
+ // close comm port
+ // reopen comm port
+ m_BaseComm->ClosePort();
+ int openErr = m_BaseComm->OpenPort();
+ // if comm error
+ if (openErr != TCAPI_ERR_NONE)
+ {
+ // set next retry time
+ // return comm error
+ m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
+ err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ m_OsError = m_BaseComm->m_lastCommError;
+ }
+ else
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing reconnected\n");
+ TCDEBUGCLOSE();
+ // send reconnect warning to all clients
+ NotifyClientsCommError(TCAPI_INFO_COMM_RECONNECTED);
+ // set connected
+ SetConnected();
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ else // still in retry
+ {
+ err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+
+
+// TCDEBUGOPEN();
+// TCDEBUGLOGA1("CConnectionImpl::DoRetryProcessing err = %d\n", err);
+// TCDEBUGCLOSE();
+ return err;
+}
+long CConnectionImpl::EnterRetryPeriod(long commErr, bool passOsErr, DWORD osErr)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::EnterRetryPeriod\n");
+ TCDEBUGCLOSE();
+
+ long err = TCAPI_ERR_NONE;
+
+ // set next retry time
+ time_t ctime;
+ time(&ctime);
+ m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
+ // set retry timeout time
+ m_RetryTimeoutTime = ctime + m_ConnectSettings->retryTimeout;
+ // send comm error to all clients
+ NotifyClientsCommError(commErr, passOsErr, osErr);
+ // set retry in progress flag
+ SetRetryInProgress();
+
+ return err;
+}
+
+BOOL CConnectionImpl::RemoveClient(CClient* client)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::RemoveClient\n");
+
+ BOOL found = FALSE;
+
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ if ((*iter)->GetClientId() == client->GetClientId())
+ {
+ m_ClientList->erase(iter);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ TCDEBUGCLOSE();
+ return found;
+}
+
+BOOL CConnectionImpl::ExitProcessing()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::ExitProcessing\n");
+
+ // exit the messageprocessing thread
+ if (m_hMessageProcessorThread != NULL)
+ {
+ m_MessageProcessorState = MP_EXIT;
+
+ m_StartMessageProcessing = false;
+ m_PauseMessageProcessing = true;
+ m_ExitMessageProcessor = true;
+ DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorExittedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+ TCDEBUGLOGA1("CConnectionImpl::ExitProcessing waitStatus=%x\n", waitStatus);
+ ::CloseHandle(m_hMessageProcessorThread);
+ m_hMessageProcessorThread = NULL;
+ }
+
+ TCDEBUGCLOSE();
+ return TRUE;
+}
+
+BOOL CConnectionImpl::StartProcessing()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::StartProcessing\n");
+
+ // starts processing thread
+ if (m_hMessageProcessorThread == NULL)
+ {
+ m_MessageProcessorState = MP_PAUSE;
+
+ m_ExitMessageProcessor = false;
+ m_StartMessageProcessing = false;
+ m_PauseMessageProcessing = false;
+ // TODO: create thread
+ m_hMessageProcessorThread = ::CreateThread(
+ NULL,
+ 0,
+ (LPTHREAD_START_ROUTINE) MessageProcessor,
+ this,
+ 0,
+ &m_dwMessageProcessorThreadId);
+ }
+
+ TCDEBUGCLOSE();
+ return PauseProcessing();//RestartProcessing();
+}
+
+BOOL CConnectionImpl::PauseProcessing()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::PauseProcessing\n");
+
+ // tells the processing thread to pause
+ if (m_hMessageProcessorThread != NULL)
+ {
+ m_MessageProcessorState = MP_PAUSE;
+
+ m_ExitMessageProcessor = false;
+ m_StartMessageProcessing = false;
+ m_PauseMessageProcessing = true;
+ DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStoppedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+ TCDEBUGLOGA1("CConnectionImpl::PauseProcessing waitStatus=%x\n", waitStatus);
+ }
+
+ TCDEBUGCLOSE();
+ return TRUE;
+}
+
+BOOL CConnectionImpl::RestartProcessing()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::RestartProcessing\n");
+
+ // tell the processing thread to restart
+ if (m_hMessageProcessorThread != NULL)
+ {
+ m_MessageProcessorState = MP_START;
+
+ m_ExitMessageProcessor = false;
+ m_StartMessageProcessing = true;
+ m_PauseMessageProcessing = false;
+ DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStartedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+ TCDEBUGLOGA1("CConnectionImpl::RestartProcessing waitStatus=%x\n", waitStatus);
+ }
+
+ TCDEBUGCLOSE();
+ return TRUE;
+}
+
+BOOL CConnectionImpl::RemoveClientFromRegistry(CClient* client)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::RemoveClientFromRegistry\n");
+ TCDEBUGCLOSE();
+
+ return m_Registry->RemoveClient(client);
+}
+
+BOOL CConnectionImpl::AddClientToRegistry(CClient* client, long numberIds, BYTE* ids)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::AddClientToRegistry\n");
+ TCDEBUGCLOSE();
+
+ return m_Registry->AddClient(client, numberIds, ids);
+}
+
+void CConnectionImpl::NotifyClientsCommError(long tcfError, bool passOsError, DWORD osError)
+{
+// TCDEBUGOPEN();
+// TCDEBUGLOGS("CConnectionImpl::NotifyClientsCommError\n");
+// TCDEBUGCLOSE();
+
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ CErrorMonitor* errorMonitor = (*iter)->m_ErrorMonitor;
+ errorMonitor->PutError(tcfError, passOsError, osError);
+ }
+ }
+}
+BOOL CConnectionImpl::HasVersion()
+{
+ BOOL found = FALSE;
+
+ if (m_BaseComm && m_BaseComm->HasVersion())
+ found = TRUE;
+
+ return found;
+}
+void CConnectionImpl::GetVersion(char* version)
+{
+ if (HasVersion()) {
+ m_BaseComm->GetVersion(version);
+ }
+}
+
+void CConnectionImpl::UnLockAllDestinations()
+{
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ CInputStream* inputStream = (*iter)->m_InputStream;
+ CMessageFile* file = (*iter)->m_MessageFile;
+ if (inputStream != NULL)
+ {
+ inputStream->UnLockStream();
+ }
+ else if (file != NULL)
+ {
+ file->UnLockMessageFile();
+ }
+ }
+ }
+}
+
+#define LOG_MPROCESSOR
+#if defined(LOG_MPROCESSOR) && defined(_DEBUG)
+#define MPLOGOPEN() if (gDoLogging) { pThis->m_DebugLog2->WaitForAccess(); }
+#define MPLOGS(s) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2,"%s", s); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA1(s, a1) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA2(s, a1, a2) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2, a3); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGCLOSE() if (gDoLogging) { pThis->m_DebugLog2->ReleaseAccess(); }
+#else
+#define MPLOGOPEN()
+#define MPLOGS(s)
+#define MPLOGA1(s, a1)
+#define MPLOGA2(s, a1, a2)
+#define MPLOGA3(s, a1, a2, a3)
+#define MPLOGCLOSE()
+#endif
+
+DWORD WINAPI CConnectionImpl::MessageProcessor(LPVOID lpParam)
+{
+ CConnectionImpl* pThis = (CConnectionImpl*)lpParam;
+
+ MPLOGOPEN();
+ MPLOGS("MessageProcessor start thread\n");
+
+ bool processing = false;
+ long err = TCAPI_ERR_NONE;
+ DWORD pollSize = 0;
+
+ while (pThis->m_MessageProcessorState != MP_EXIT)
+ {
+ if (pThis->m_MessageProcessorState == MP_PAUSE)
+ {
+ MPLOGS("MessageProcessor pause\n");
+
+ processing = false;
+ pThis->m_PauseMessageProcessing = false;
+ pThis->m_MessageProcessorState = MP_NONE;
+ BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStoppedEvent);
+ }
+
+ if (pThis->IsRetryInProgress())
+ err = pThis->DoRetryProcessing();
+ else if (pThis->IsRetryTimedOut())
+ err = TCAPI_ERR_COMM_TIMEOUT;
+
+ if (processing && err == TCAPI_ERR_NONE)
+ {
+ if (pThis->m_BaseComm && pThis->m_BaseComm->IsConnected())
+ {
+ err = pThis->m_BaseComm->PollPort(pollSize);
+ MPLOGA2("MessageProcessor PollPort = %d pollsize = %d\n", err, pollSize);
+ if (err != TCAPI_ERR_NONE)
+ {
+ MPLOGA2("MessageProcessor err = %d osError = %d\n", err, pThis->m_BaseComm->m_lastCommError);
+ pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
+ }
+ else
+ {
+ if (pollSize == 0)
+ {
+ Sleep(1);
+ }
+ else
+ {
+ long numberProcessed = 0;
+// MPLOGA1("MessageProcessor ProcessBuffer pRegistry = %x\n", pThis->m_Registry);
+ err = pThis->m_BaseComm->ProcessBuffer(pThis, pThis->m_Registry, numberProcessed);
+
+ MPLOGA2("MessageProcessor ProcessBuffer err = %d number = %d\n", err, numberProcessed);
+
+ if (err == TCAPI_ERR_COMM_ERROR)
+ {
+ // for this error we have os error, but we probably caught this in PollPort already
+ pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
+ }
+ else if (err != TCAPI_ERR_NONE)
+ {
+ // all clients already notified in ProcessBuffer
+ err = TCAPI_ERR_NONE;
+ }
+ pThis->UnLockAllDestinations(); // unlock all input streams, if they became locked during AddMessage()
+// Sleep(1);
+ }
+ }
+// MPLOGS("MessageProcessor FlushAllClientMessageFiles\n");
+ pThis->FlushAllClientMessageFiles();
+ }
+ else
+ {
+ // basecom not connected
+ Sleep(1);
+ }
+ }
+ else
+ {
+ // processing is not being done
+ Sleep(1);
+ }
+ if (pThis->m_MessageProcessorState == MP_START)
+ {
+ MPLOGS("MessageProcessor start\n");
+
+ processing = true;
+ pThis->m_StartMessageProcessing = false;
+ pThis->m_MessageProcessorState = MP_PROCESSING;
+ BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStartedEvent);
+ }
+ }
+ // signal we're stopping
+ pThis->m_ExitMessageProcessor = false;
+ pThis->m_MessageProcessorState = MP_NONE;
+ ::SetEvent(pThis->m_hMessageProcessorExittedEvent);
+
+ MPLOGS("MessageProcessor exit thread\n");
+ MPLOGCLOSE();
+
+ return 0;
+}
+
+void CConnectionImpl::FlushAllClientMessageFiles()
+{
+ DWORD cTick = GetTickCount();
+
+// MPLOGA2("CConnectionImpl::FlushAllClientMessageFiles cTick=%d m_NextFlushFileTime=%d\n", cTick, m_NextFlushFileTime);
+
+ if (cTick > m_NextFlushFileTime)
+ {
+// MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush timeout\n");
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ CMessageFile* file = (*iter)->m_MessageFile;
+ if (file != NULL)
+ {
+// MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush client\n");
+ file->FlushFile();
+ }
+ }
+ }
+ m_NextFlushFileTime = GetTickCount() + FLUSH_TIME;
+ }
+}
+
+BOOL CConnectionImpl::CreateCommProtocols(const char* commPath, const char* protPath)
+{
+ BOOL loaded = FALSE;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CConnectionImpl::CreateCommProtocols\n");
+
+ TCDEBUGLOGA2(" commPath=%s protPath=%s\n", commPath, protPath);
+
+ m_BaseCommHandle = ::LoadLibrary(commPath);
+ m_BaseProtocolHandle = ::LoadLibrary(protPath);
+ if (m_BaseCommHandle == NULL || m_BaseProtocolHandle == NULL)
+ {
+ TCDEBUGLOGA2(" error loading library, m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseCommHandle, m_BaseProtocolHandle);
+ if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+ if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+
+ }
+ else
+ {
+ COMMCREATE lpCommFn = (COMMCREATE)::GetProcAddress(m_BaseCommHandle, COMMCREATE_FNNAME);
+ PROTOCOLCREATE lpProtFn = (PROTOCOLCREATE)::GetProcAddress(m_BaseProtocolHandle, PROTOCOLCREATE_FNNAME);
+ if (lpCommFn == NULL || lpProtFn == NULL)
+ {
+ TCDEBUGLOGA2(" error finding function, lpCommFn=%x lpProtFn=%x\n", lpCommFn, lpProtFn);
+ if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+ if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+ }
+ else
+ {
+ m_BaseProtocol = lpProtFn();
+ if (m_BaseProtocol == NULL)
+ {
+ TCDEBUGLOGA1(" error creating protocol, m_BaseProtocol=%x\n", m_BaseProtocol);
+ if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+ if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+ }
+ else
+ {
+ m_BaseComm = lpCommFn(m_ConnectSettings, m_ConnectionID, m_BaseProtocol);
+ if (m_BaseComm == NULL)
+ {
+ TCDEBUGLOGA1(" error creating comm, m_BaseComm=%x\n", m_BaseComm);
+ if (m_BaseProtocol) delete m_BaseProtocol; m_BaseProtocol = NULL;
+
+ if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+ if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+ }
+ else
+ {
+ loaded = TRUE;
+ TCDEBUGLOGA4(" created class, m_BaseComm=%x m_BaseProtocol=%x m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseComm, m_BaseProtocol, m_BaseCommHandle, m_BaseProtocolHandle);
+ }
+ }
+ }
+ }
+
+ TCDEBUGCLOSE();
+ return loaded;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ConnectionImpl.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ConnectionImpl.h: interface for the CConnectionImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_)
+#define AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Connection.h"
+
+class CConnectionImpl : public CConnection
+{
+public:
+ CConnectionImpl();
+ CConnectionImpl(ConnectData conData, DWORD connectionId);
+ virtual ~CConnectionImpl();
+
+ BOOL IsEqual(CConnection* connection);
+ BOOL IsEqual(pConnectData pConData);
+
+ BOOL AddClient(CClient* client); // add a client to this connection
+ BOOL RemoveClient(CClient* client); // remove a client from this connection
+ BOOL AddClientToRegistry(CClient* client, long numberIds, BYTE* ids);
+ BOOL RemoveClientFromRegistry(CClient* client); // remove a client from this registry
+ BOOL StartClient(CClient* client){ return TRUE; } // start processing for a specified client
+ BOOL StopClient(CClient* client){ return TRUE; } // stop processing for a specified client
+ long DoConnect();
+ long DoDisconnect();
+ long DoSendMessage(long encodeOption, BYTE protocolVersion, BOOL useMsgId, BYTE msgId, DWORD msgLength, BYTE* msg);
+ long DoRetryProcessing();
+ long EnterRetryPeriod(long err, bool passOsErr, DWORD osErr);
+
+ BOOL PauseProcessing(); // pause processing thread (not exit)
+ BOOL RestartProcessing(); // restart processing after a pause
+ BOOL StartProcessing(); // start processing thread
+ BOOL ExitProcessing(); // exit processing thread
+ BOOL IsProcessingPaused() { return (m_MessageProcessorState == MP_PAUSE); }
+ BOOL IsProcessingStarted() { return (m_MessageProcessorState == MP_START); }
+ BOOL IsProcessingContinuing() { return (m_MessageProcessorState == MP_PROCESSING); }
+
+ long GetConnectionId() { return m_ConnectionID; }
+
+ // m_Status operations
+ BOOL IsConnected() { return ((m_Status == eConnected) || (m_Status == eRetryInProgress)); }
+ BOOL IsDisconnected() { return (m_Status == eDisconnected); }
+ BOOL IsRetryInProgress() { return (m_Status== eRetryInProgress); }
+ BOOL IsRetryTimedOut() { return (m_Status == eRetryTimedOut); }
+ void SetConnected() { m_Status = eConnected; }
+ void SetDisconnected() { m_Status = eDisconnected; }
+ void SetRetryInProgress() { m_Status = eRetryInProgress; }
+ void SetRetryTimedOut() { m_Status = eRetryTimedOut; }
+ void NotifyClientsCommError(long tcfError, bool passOsError=false, DWORD osError=0);
+ BOOL CreateCommProtocols(const char* commLibraryPath, const char* protocolLibraryPath);
+ BOOL HasVersion();
+ void GetVersion(char* outVersion);
+
+ long GetNumberClients() { return m_ClientList->size(); }
+
+ void UnLockAllDestinations();
+ void FlushAllClientMessageFiles();
+
+ ConnectData* m_ConnectSettings; // connection settings
+ ClientList* m_ClientList; // this connection only
+ eConnectionStatus m_Status; // this connection status
+ CRegistry* m_Registry; // registry for this connection
+ long m_ConnectionID; // id for this connection
+
+ CBaseCom* m_BaseComm; // communication port handler
+ HINSTANCE m_BaseCommHandle;
+ CBaseProtocol* m_BaseProtocol; // protocol for port
+ HINSTANCE m_BaseProtocolHandle;
+
+ unsigned long m_OsError; // error from OS if applicable
+
+
+ char m_DebugLogMsg[2000];
+ TCDebugLog* m_DebugLog;
+ char m_DebugLogMsg2[2000];
+ TCDebugLog* m_DebugLog2;
+
+ // MessageProcessor thread
+ static DWORD WINAPI MessageProcessor(LPVOID lpParam);
+
+ int m_MessageProcessorState;
+ bool m_ExitMessageProcessor; // flag to tell MessageProcessor thread to exit
+ bool m_PauseMessageProcessing; // flag to tell MessageProcessor thread to stop all message processing (temporarily)
+ bool m_StartMessageProcessing; // flag to tell MessageProcessor thread to start message processing
+ HANDLE m_hMessageProcessorExittedEvent; // event to tell main thread that MessageProcessor thread has exitted
+ HANDLE m_hMessageProcessorStoppedEvent; // event to tell main thread that MessageProcessor thread has stopped processing
+ HANDLE m_hMessageProcessorStartedEvent; // event to tell main thread that MessageProcessor thread has started processing
+
+ HANDLE m_hMessageProcessorThread; // handle to MessageProcessor thread
+ DWORD m_dwMessageProcessorThreadId; // ID for " "
+
+ // com errors and retry stuff
+ time_t m_NextRetryTime;
+ time_t m_RetryTimeoutTime;
+
+ // client flush times
+ DWORD m_NextFlushFileTime;
+
+};
+
+#endif // !defined(AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/MessageFile.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// MessageFile.cpp: implementation of the CMessageFile class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "MessageFile.h"
+#include "ServerManager.h"
+#include "TCErrorConstants.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+//#define USE_TEXT_FILE
+#ifdef USE_TEXT_FILE
+#define WRITE_MODE "w+t"
+#define APPEND_MODE "a+t"
+#else
+#define WRITE_MODE "w+b"
+#define APPEND_MODE "a+b"
+#endif
+
+#define FLUSH_FREQ 2000 // # messages to write between flushing (if buffered)
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_MESSAGEFILE
+#if defined(LOG_MESSAGEFILE) && defined(_DEBUG)
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CMessageFile::CMessageFile(CHAR* pFilePath, long inClientID)
+{
+ m_ClientID = inClientID;
+ m_FileLocked = FALSE;
+ strncpy(m_FilePath, pFilePath, MAX_FILEPATH);
+
+ char toString[30];
+ sprintf(toString, "%s%04.4d", MESSAGEFILE_MUTEX_BASENAME, m_ClientID);
+
+ m_Mutex.Open(toString, MESSAGEFILE_MUTEX_TIMEOUT);
+ m_hFile = NULL;
+ m_numWritten = 0;
+ m_numWrittenSinceLastFlush = 0;
+ m_Open = FALSE;
+
+#ifdef LOG_FILE_PERFORMANCE
+ perfFileName="c:\\tcf\\serverfileperf.txt";
+ fpLog = NULL;
+ numLogged=0;
+#endif
+ OPENFILEPERF();
+}
+
+CMessageFile::~CMessageFile()
+{
+ CLOSEFILEPERF();
+ Close();
+ m_Mutex.Close();
+
+}
+
+long CMessageFile::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+ long err = TCAPI_ERR_NONE;
+
+ BOOL gotIt = WaitForAccess(); // will lock on first access only
+ size_t lenWritten = 0;
+
+#ifdef USE_TEXT_FILE
+ lenWritten = inLength;
+ int textStart = 20;
+ if (inMessage[9] == 0x5a) textStart = 64;
+ for (int i = 0; i < textStart; i++)
+ fprintf(m_hFile, "%02.2X ", inMessage[i]);
+
+ for (i = textStart; i < (int)inLength; i++)
+ {
+ if (isprint(inMessage[i]))
+ fprintf(m_hFile, "%c", inMessage[i]);
+ else
+ fprintf(m_hFile, "%02.2X ", inMessage[i]);
+ }
+ fprintf(m_hFile,"\n");
+#else
+ lenWritten = fwrite(inMessage, 1, inLength, m_hFile);
+#endif
+ if (lenWritten < inLength)
+ {
+ err = TCAPI_ERR_WRITING_FILE;
+ }
+ else
+ {
+ m_numWrittenSinceLastFlush++;
+ m_numWritten++;
+ if ((m_numWrittenSinceLastFlush % FLUSH_FREQ) == 0)
+ {
+ FlushFile(TRUE);
+ }
+ }
+ LOGFILEPERF("AddMessage\n");
+
+ // no ReleaseAccess this is done by Connection when all bytes processed in buffer and
+ // calls all clients unlock method
+
+ return err;
+}
+
+long CMessageFile::Open()
+{
+ TCDEBUGOPEN();
+ long err = TCAPI_ERR_NONE;
+
+ TCDEBUGLOGS("CMessageFile::Open\n");
+ WaitForAccess();
+
+ if (m_hFile)
+ fclose(m_hFile);
+
+ m_hFile = _fsopen(m_FilePath, APPEND_MODE, _SH_DENYNO);
+
+ if (m_hFile == NULL)
+ {
+ err = TCAPI_ERR_FILE_DOES_NOT_EXIST;
+ }
+ else
+ m_Open = TRUE;
+
+
+ ReleaseAccess();
+
+ TCDEBUGCLOSE();
+ return err;
+}
+
+long CMessageFile::Close()
+{
+ TCDEBUGOPEN();
+ long err = TCAPI_ERR_NONE;
+
+ TCDEBUGLOGA1("CMessageFile::Close numWritten=%d\n", m_numWritten);
+ WaitForAccess();
+
+ if (m_hFile)
+ {
+ fclose(m_hFile);
+ m_hFile = NULL;
+ }
+
+ ReleaseAccess();
+
+ TCDEBUGCLOSE();
+ return err;
+}
+
+long CMessageFile::ClearFile()
+{
+ TCDEBUGOPEN();
+ long err = TCAPI_ERR_NONE;
+
+ TCDEBUGLOGA2("CMessageFile::ClearFile m_hFile=%x numWritten=%d\n", m_hFile, m_numWritten);
+ WaitForAccess();
+
+ if (m_hFile)
+ {
+ fclose(m_hFile);
+ m_hFile = NULL;
+ m_Open = FALSE;
+ }
+ m_numWritten = 0;
+ m_numWrittenSinceLastFlush = 0;
+
+ m_hFile = _fsopen(m_FilePath, WRITE_MODE, _SH_DENYNO);
+
+ if (m_hFile == NULL)
+ {
+ err = TCAPI_ERR_FILE_DOES_NOT_EXIST;
+ }
+ else
+ m_Open = TRUE;
+
+ LOGFILEPERF("ClearFile\n");
+
+ TCDEBUGLOGA1("CMessageFile::ClearFile m_hFile=%x\n", m_hFile);
+ ReleaseAccess();
+
+ TCDEBUGCLOSE();
+ return err;
+}
+void CMessageFile::FlushFile(BOOL numberTimeOut)
+{
+ if (m_hFile && m_numWrittenSinceLastFlush > 0)
+ {
+ fflush(m_hFile);
+ m_numWrittenSinceLastFlush = 0;
+ if (numberTimeOut)
+ LOGFILEPERF("FlushFile <number>\n");
+ else
+ LOGFILEPERF("FlushFile <time>\n");
+ }
+}
+#ifdef LOG_FILE_PERFORMANCE
+void CMessageFile::logPerf(char* msg)
+{
+ if (fpLog)
+ {
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ fprintf(fpLog,
+ "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+ sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+ msg);
+
+ numLogged++;
+ if ((numLogged % 1000) == 0)
+ fflush(fpLog);
+ }
+}
+void CMessageFile::openPerf()
+{
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0) // exists
+ {
+ if (fpLog == NULL)
+ fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+ }
+ else
+ {
+ fpLog = NULL;
+ }
+}
+void CMessageFile::closePerf()
+{
+ if (fpLog)
+ {
+ fflush(fpLog);
+ fclose(fpLog);
+ }
+ fpLog = NULL;
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/MessageFile.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// MessageFile.h: interface for the CMessageFile class.
+//
+// One per client
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_)
+#define AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_
+
+#include <share.h>
+#include "stdio.h"
+#include "mutex.h"
+//#include "ServerClient.h"
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+//----------------------------------
+// Message File Mutex
+//----------------------------------
+// Mutex name is basename + clientID
+#define MESSAGEFILE_MUTEX_BASENAME "TCFMessageFileMutex"
+#define MESSAGEFILE_MUTEX_TIMEOUT (60000L)
+
+class CMessageFile
+{
+public:
+ CMessageFile(CHAR* pFilePath, long inClientID);
+ virtual ~CMessageFile();
+
+
+ long Open();
+ long Close();
+ long AddMessage(DWORD inLength, BYTE* inMessage);
+ void UnLockMessageFile() { ReleaseAccess(); }
+
+ BOOL WaitForAccess() { if (m_FileLocked) return TRUE; else { m_FileLocked = TRUE; return m_Mutex.Wait();} };
+ BOOL ReleaseAccess() { if (m_FileLocked) { m_FileLocked = FALSE; return m_Mutex.Release();} else return TRUE; };
+ BOOL isOpen() { return m_Open; }
+ long ClearFile();
+ void FlushFile(BOOL numberTimeOut = FALSE);
+
+ long m_ClientID;
+ BOOL m_Open;
+ Mutex m_Mutex;
+ CHAR m_FilePath[MAX_FILEPATH];
+ BOOL m_FileLocked;
+ FILE* m_hFile;
+ DWORD m_numWritten; // total number written
+ DWORD m_numWrittenSinceLastFlush; // number written and not flushed yet
+
+ // logging performance
+// for performance - independent of debug logging
+//#define LOG_FILE_PERFORMANCE
+#ifdef LOG_FILE_PERFORMANCE
+ char* perfFileName;
+ FILE *fpLog;
+ int numLogged;
+ void logPerf(char* msg);
+ void openPerf();
+ void closePerf();
+#define OPENFILEPERF() openPerf()
+#define LOGFILEPERF(s) logPerf(s)
+#define CLOSEFILEPERF() closePerf()
+#else
+#define OPENFILEPERF()
+#define LOGFILEPERF(s)
+#define CLOSEFILEPERF()
+#endif
+
+
+
+};
+
+#endif // !defined(AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegisterItem.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,20 @@
+// ProtocolRegisterItem.cpp: implementation of the ProtocolRegisterItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ProtocolRegisterItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+ProtocolRegisterItem::ProtocolRegisterItem()
+{
+
+}
+
+ProtocolRegisterItem::~ProtocolRegisterItem()
+{
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegisterItem.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,25 @@
+// ProtocolRegisterItem.h: interface for the ProtocolRegisterItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_)
+#define AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "BaseProtocol.h"
+
+class ProtocolRegisterItem
+{
+public:
+ ProtocolRegisterItem();
+ virtual ~ProtocolRegisterItem();
+
+ char m_ProtocolType[MAX_DECODE_FORMAT];
+ CBaseProtocol* m_Protocol;
+};
+
+#endif // !defined(AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegistryItem.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ProtocolRegistryItem.cpp: implementation of the CProtocolRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ProtocolRegistryItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CProtocolRegistryItem::CProtocolRegistryItem()
+{
+
+}
+
+CProtocolRegistryItem::~CProtocolRegistryItem()
+{
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegistryItem.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ProtocolRegistryItem.h: interface for the CProtocolRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_)
+#define AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+#include "ServerClient.h"
+#include "BaseProtocol.h"
+//#include <vector>
+
+#define MAX_DLLPATHNAME (2048)
+
+class CProtocolRegistryItem
+{
+public:
+ CProtocolRegistryItem();
+ virtual ~CProtocolRegistryItem();
+
+ char m_ProtocolType[MAX_DECODE_FORMAT];
+ char m_ProtocolLibrary[MAX_DLLPATHNAME];
+
+};
+
+//typdef std::vector<CProtocolRegistryItem*> ProtocolRegistryList;
+
+
+#endif // !defined(AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ReadMe.txt Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,34 @@
+========================================================================
+ CONSOLE APPLICATION : TCFServer
+========================================================================
+
+
+AppWizard has created this TCFServer application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFServer application.
+
+TCFServer.dsp
+ This file (the project file) contains information at the project level and
+ is used to build a single project or subproject. Other users can share the
+ project (.dsp) file, but they should export the makefiles locally.
+
+TCFServer.cpp
+ This is the main application source file.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TCFServer.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Registry.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Registry.cpp: implementation of the CRegistry class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Registry.h"
+#include "ServerManager.h"
+
+//#define LOG_REGISTRY
+#if defined(LOG_REGISTRY) && defined(_DEBUG)
+extern BOOL gDoLogging;
+extern char TCDebugMsg[];
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CRegistry::CRegistry()
+{
+}
+CRegistry::CRegistry(DWORD connectionId)
+{
+}
+CRegistry::~CRegistry()
+{
+}
+#if (0)
+CRegistry::CRegistry()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistry::CRegistry\n");
+ TCDEBUGCLOSE();
+}
+
+CRegistry::CRegistry(DWORD connectionId)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("CRegistry::CRegistry connectionId = %d\n", connectionId);
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ m_Registry[i].clist = new IdClientList();
+ m_Registry[i].clist->clear();
+ }
+
+ char mutexName[200];
+
+ sprintf(mutexName, "%s%d", REGISTRY_MUTEX_BASENAME, connectionId);
+ m_Mutex.Open(mutexName, REGISTRY_MUTEX_TIMEOUT);
+ TCDEBUGCLOSE();
+}
+
+CRegistry::~CRegistry()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistry::~CRegistry\n");
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ if (m_Registry[i].clist != NULL)
+ {
+ m_Registry[i].clist->clear();
+ delete m_Registry[i].clist;
+ }
+ }
+ m_Mutex.Close();
+ TCDEBUGCLOSE();
+}
+BOOL CRegistry::AddClient(CClient* newClient, long numberIds, BYTE* ids)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistry::AddClient\n");
+
+ m_Mutex.Wait();
+
+ for (int i = 0; i < numberIds; i++)
+ {
+ TCDEBUGLOGA1(" id=%x\n", ids[i]);
+ m_Registry[ids[i]].clist->push_back(newClient);
+ }
+
+ DumpRegistry();
+ m_Mutex.Release();
+ TCDEBUGCLOSE();
+ return TRUE;
+}
+BOOL CRegistry::RemoveClient(CClient* client)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistry::RemoveClient\n");
+
+ m_Mutex.Wait();
+
+ BOOL found = FALSE;
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ long num = m_Registry[i].clist->size();
+ if (num != 0)
+ {
+ TCDEBUGLOGA3(" CRegistry::RemoveClient client = %x i = %x num = %d\n", client, i, num);
+ IdClientList::iterator iter;
+ for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+ {
+ TCDEBUGLOGA2(" CRegistry::RemoveClient iter = %x *iter = %x\n", iter, *iter);
+ if (client == *iter)
+ {
+ m_Registry[i].clist->erase(iter);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ }
+
+ m_Mutex.Release();
+ TCDEBUGCLOSE();
+ return found;
+}
+
+void CRegistry::DumpRegistry()
+{
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ long num = m_Registry[i].clist->size();
+ if (num != 0)
+ {
+ TCDEBUGLOGA2(" CRegistry::DumpRegistry i = %x num = %d\n", i, num);
+ IdClientList::iterator iter;
+ for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+ {
+ TCDEBUGLOGA2(" CRegistry::DumpRegistry iter = %x *iter = %x\n", iter, *iter);
+ }
+ }
+ }
+}
+
+// fullmessage includes the protocol header
+// message is unwrapped from the protocol header
+// this is because some clients want the full message and some clients just want the actual message
+long CRegistry::RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)
+{
+
+ long err = TCAPI_ERR_NONE;
+
+// TCDEBUGOPEN();
+// TCDEBUGLOGS("CRegistry::RouteMessage\n");
+// TCDEBUGCLOSE();
+ m_Mutex.Wait();
+
+ if (msgId >= 0 && msgId < MAX_MESSAGE_IDS)
+ {
+ long numClients = m_Registry[msgId&0xff].clist->size();
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2(" CRegistry::RouteMessage msgId = %x numClients = %d\n", msgId, numClients);
+ TCDEBUGCLOSE();
+
+ if (numClients > 0)
+ {
+ IdClientList::iterator iter;
+ for (iter = m_Registry[msgId&0xff].clist->begin(); iter != m_Registry[msgId&0xff].clist->end(); iter++)
+ {
+ CClient* client = *iter;
+ if (client && client->IsStarted())
+ {
+ if (client->IsStreamOpen())
+ {
+ CInputStream* stream = client->GetInputStream();
+ // get unwrap format
+ if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+ {
+ // use full message
+ err = stream->AddMessage(fullLen, fullMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ else
+ {
+ // use raw message
+ err = stream->AddMessage(realMessageLen, realMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ }
+ else if (client->IsMessageFileOpen())
+ {
+ CMessageFile* file = client->GetMessageFile();
+ // get unwrap format
+ if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+ {
+ // use full message
+ err = file->AddMessage(fullLen, fullMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ else
+ {
+ // use raw message
+ err = file->AddMessage(realMessageLen, realMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ m_Mutex.Release();
+ return err;
+}
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Registry.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Registry.h: interface for the CRegistry class.
+//
+// one of these per connection
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_)
+#define AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Client.h"
+#include "mutex.h"
+#include <vector>
+
+#define REGISTRY_MUTEX_BASENAME "TCFRegistry"
+#define REGISTRY_MUTEX_TIMEOUT (60000L)
+
+typedef std::vector<CClient*> IdClientList;
+
+#define MAX_MESSAGE_IDS (256)
+typedef struct tagMessageIdRegistry
+{
+ IdClientList* clist;
+} *pMessageIdRegistry, MessageIdRegistry;
+
+class CRegistry
+{
+public:
+ CRegistry();
+ CRegistry(DWORD connectionId);
+ virtual ~CRegistry();
+
+ virtual BOOL AddClient(CClient* newClient, long numberIds, BYTE* ids)=0;
+ virtual BOOL RemoveClient(CClient* client)=0;
+ virtual void DumpRegistry()=0;
+ virtual long RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)=0;
+
+ MessageIdRegistry m_Registry[MAX_MESSAGE_IDS];
+ Mutex m_Mutex;
+};
+
+#endif // !defined(AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/RegistryImpl.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// RegistryImpl.cpp: implementation of the CRegistryImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "RegistryImpl.h"
+#include "TCErrorConstants.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_REGISTRY
+#if defined(LOG_REGISTRY) && defined(_DEBUG)
+extern char TCDebugMsg[];
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CRegistryImpl::CRegistryImpl()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistryImpl::CRegistryImpl\n");
+ TCDEBUGCLOSE();
+}
+
+CRegistryImpl::CRegistryImpl(DWORD connectionId)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1("CRegistryImpl::CRegistryImpl connectionId = %d\n", connectionId);
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ m_Registry[i].clist = new IdClientList();
+ m_Registry[i].clist->clear();
+ }
+
+ char mutexName[200];
+
+ sprintf(mutexName, "%s%d", REGISTRY_MUTEX_BASENAME, connectionId);
+ m_Mutex.Open(mutexName, REGISTRY_MUTEX_TIMEOUT);
+ TCDEBUGCLOSE();
+}
+
+CRegistryImpl::~CRegistryImpl()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistryImpl::~CRegistryImpl\n");
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ if (m_Registry[i].clist != NULL)
+ {
+ m_Registry[i].clist->clear();
+ delete m_Registry[i].clist;
+ }
+ }
+ m_Mutex.Close();
+ TCDEBUGCLOSE();
+}
+
+BOOL CRegistryImpl::AddClient(CClient* newClient, long numberIds, BYTE* ids)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistryImpl::AddClient\n");
+
+ m_Mutex.Wait();
+
+ for (int i = 0; i < numberIds; i++)
+ {
+ TCDEBUGLOGA1(" id=%x\n", ids[i]);
+ m_Registry[ids[i]].clist->push_back(newClient);
+ }
+
+ DumpRegistry();
+ m_Mutex.Release();
+ TCDEBUGCLOSE();
+ return TRUE;
+}
+BOOL CRegistryImpl::RemoveClient(CClient* client)
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CRegistryImpl::RemoveClient\n");
+
+ m_Mutex.Wait();
+
+ BOOL found = FALSE;
+
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ long num = m_Registry[i].clist->size();
+ if (num != 0)
+ {
+ TCDEBUGLOGA3(" CRegistryImpl::RemoveClient client = %x i = %x num = %d\n", client, i, num);
+ IdClientList::iterator iter;
+ for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+ {
+ TCDEBUGLOGA2(" CRegistryImpl::RemoveClient iter = %x *iter = %x\n", iter, *iter);
+ if (client == *iter)
+ {
+ m_Registry[i].clist->erase(iter);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ }
+
+ m_Mutex.Release();
+ TCDEBUGCLOSE();
+ return found;
+}
+
+void CRegistryImpl::DumpRegistry()
+{
+ for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+ {
+ long num = m_Registry[i].clist->size();
+ if (num != 0)
+ {
+ TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry i = %x num = %d\n", i, num);
+ IdClientList::iterator iter;
+ for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+ {
+ TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry iter = %x *iter = %x\n", iter, *iter);
+ }
+ }
+ }
+}
+
+// fullmessage includes the protocol header
+// message is unwrapped from the protocol header
+// this is because some clients want the full message and some clients just want the actual message
+long CRegistryImpl::RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)
+{
+
+ long err = TCAPI_ERR_NONE;
+
+// TCDEBUGOPEN();
+// TCDEBUGLOGS("CRegistryImpl::RouteMessage\n");
+// TCDEBUGCLOSE();
+ m_Mutex.Wait();
+
+ if (msgId >= 0 && msgId < MAX_MESSAGE_IDS)
+ {
+ long numClients = m_Registry[msgId&0xff].clist->size();
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGA2(" CRegistryImpl::RouteMessage msgId = %x numClients = %d\n", msgId, numClients);
+ TCDEBUGCLOSE();
+
+ if (numClients > 0)
+ {
+ IdClientList::iterator iter;
+ for (iter = m_Registry[msgId&0xff].clist->begin(); iter != m_Registry[msgId&0xff].clist->end(); iter++)
+ {
+ CClient* client = *iter;
+ if (client && client->IsStarted())
+ {
+ if (client->IsStreamOpen())
+ {
+ CInputStream* stream = client->GetInputStream();
+ // get unwrap format
+ if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+ {
+ // use full message
+ err = stream->AddMessage(fullLen, fullMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ else
+ {
+ // use raw message
+ err = stream->AddMessage(realMessageLen, realMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ }
+ else if (client->IsMessageFileOpen())
+ {
+ CMessageFile* file = client->GetMessageFile();
+ // get unwrap format
+ if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+ {
+ // use full message
+ err = file->AddMessage(fullLen, fullMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ else
+ {
+ // use raw message
+ err = file->AddMessage(realMessageLen, realMessage);
+ // routing errors here can be input stream overflows
+ // notify this client right now (no OS error)
+ if (err != TCAPI_ERR_NONE)
+ {
+ client->m_ErrorMonitor->PutError(err, false, 0);
+ err = TCAPI_ERR_NONE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ m_Mutex.Release();
+ return err;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/RegistryImpl.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// RegistryImpl.h: interface for the CRegistryImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_)
+#define AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Registry.h"
+
+class CRegistryImpl : public CRegistry
+{
+public:
+ CRegistryImpl();
+ CRegistryImpl(DWORD connectionId);
+ virtual ~CRegistryImpl();
+
+ BOOL AddClient(CClient* newClient, long numberIds, BYTE* ids);
+ BOOL RemoveClient(CClient* client);
+ void DumpRegistry();
+ long RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen);
+
+};
+
+#endif // !defined(AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ServerManager.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,1192 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ServerManager.cpp: implementation of the CServerManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ServerManager.h"
+#include "ConnectionImpl.h"
+#include "resource.h"
+
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_SERVERMANAGER
+#if defined(LOG_SERVERMANAGER) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+extern char* gServerLocation;
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CServerManager::CServerManager()
+{
+ m_DebugLog = NULL;
+ m_Server = NULL;
+ m_ConnectionList = NULL;
+ m_ClientList = NULL;
+ m_NextClientId = 0;
+ m_NextConnectionId = 0;
+ m_Version[0] = NULL;
+ m_ExeLocation = NULL;
+ m_ProtocolList = NULL;
+ m_CommList = NULL;
+
+}
+CServerManager::CServerManager(const char* exeLocation)
+{
+#ifdef _DEBUG
+ if (gDoLogging)
+ m_DebugLog = new TCDebugLog("TCF_ServerLog", ::GetCurrentProcessId());
+ else
+ m_DebugLog = NULL;
+#else
+ m_DebugLog = NULL;
+#endif
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerManager::CServerManager\n");
+
+ m_Server = new CServerCommand();
+
+ m_ConnectionList = new ConnectionList();
+ m_ConnectionList->clear();
+
+ m_ClientList = new ClientList();
+ m_ClientList->clear();
+
+ m_NextClientId = ::GetCurrentProcessId() * 100;
+ m_NextConnectionId = (::GetCurrentProcessId() * 100) + 100;
+
+ int ret = ::LoadString(::GetModuleHandle(NULL), IDS_VERSION, m_Version, MAX_VERSION_STRING);
+ TCDEBUGLOGA1(" version=%s\n", m_Version);
+
+ TCDEBUGLOGA1(" exeLocation=%s\n", exeLocation);
+ m_ExeLocation = new char[MAX_EXEPATHNAME];
+ m_ExeLocation[0] = '\0';
+ strcpy(m_ExeLocation, exeLocation);
+ TCDEBUGLOGA1(" m_ExeLocation=%s\n", m_ExeLocation);
+
+ m_ProtocolList = new ProtocolRegistry();
+ m_ProtocolList->clear();
+
+ m_CommList = new CommRegistry();
+ m_CommList->clear();
+
+ TCDEBUGCLOSE();
+}
+
+CServerManager::~CServerManager()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerManager::~CServerManager\n");
+
+ if (m_Server)
+ delete m_Server;
+
+ if (m_ConnectionList)
+ {
+ m_ConnectionList->clear();
+ delete m_ConnectionList;
+ }
+
+ if (m_ClientList)
+ {
+ m_ClientList->clear();
+ delete m_ClientList;
+ }
+
+ if (m_ExeLocation)
+ delete[] m_ExeLocation;
+
+ if (m_ProtocolList)
+ {
+ m_ProtocolList->clear();
+ delete m_ProtocolList;
+ }
+
+ if (m_CommList)
+ {
+ m_CommList->clear();
+ delete m_CommList;
+ }
+
+ TCDEBUGCLOSE();
+
+ if (m_DebugLog)
+ delete m_DebugLog;
+
+}
+void CServerManager::CommandThread()
+{
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerManager::CommandThread\n");
+ TCDEBUGCLOSE();
+
+ bool done = false;
+ eServerCommand command = eCmdNone;
+ ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+ pServerMessageData pMsg = new ServerMessageData();
+
+ TCDEBUGOPEN();
+ RegisterAllProtocols();
+ RegisterAllComms();
+ TCDEBUGCLOSE();
+
+ while(!done)
+ {
+ while(!m_Server->GetCommand(pCmdrsp, pMsg))
+ {
+ Sleep(1);
+ }
+ command = pCmdrsp->command;
+
+ switch(command)
+ {
+ case eCmdConnect:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdConnect\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ BOOL connCreated = FALSE;
+ CConnectionImpl* conn = (CConnectionImpl*)FindConnection(&pCmdrsp->connectSettings);
+ if (conn == NULL)
+ {
+ // create new one
+ DWORD connId = m_NextConnectionId;
+ conn = new CConnectionImpl(pCmdrsp->connectSettings, connId);
+
+ TCDEBUGOPEN();
+ const char* commPath = FindCommPath(pCmdrsp->connectSettings.connectType);
+ TCDEBUGCLOSE();
+ TCDEBUGOPEN();
+ const char* protPath = FindProtocolPath(pCmdrsp->connectSettings.decodeFormat);
+ TCDEBUGCLOSE();
+
+ if (protPath == NULL || commPath == NULL)
+ {
+ ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+ }
+ else
+ {
+ if (conn->CreateCommProtocols(commPath, protPath))
+ {
+ connCreated = TRUE;
+ }
+ else
+ {
+ ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+ }
+ }
+ }
+ if (ret == TCAPI_ERR_NONE && (conn->IsDisconnected() || conn->IsRetryTimedOut()))
+ {
+ ret = conn->DoConnect();
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ DWORD id = m_NextClientId++;
+ // create client
+ CClient* client = new CClient(conn, pCmdrsp->clientOptions, id);
+ // add client to connection's list
+ conn->AddClient(client);
+ // add client to total list
+ m_ClientList->push_back(client);
+ // add connection to connection list
+ if (connCreated)
+ m_ConnectionList->push_back(conn);
+
+ m_NextConnectionId++;
+ pCmdrsp->response = eRspOK;
+ pCmdrsp->clientId = id;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ else
+ {
+ if (conn->m_OsError > 0)
+ pCmdrsp->osError = conn->m_OsError;
+ else
+ pCmdrsp->osError = 0;
+ if (connCreated)
+ delete conn;
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ }
+ break;
+ case eCmdDisconnect:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdDisconnect\n");
+ TCDEBUGCLOSE();
+ DWORD id = pCmdrsp->clientId;
+ // find this client in our list
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get the connection for this client
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ // pause the processing so we can delete the client
+ conn->PauseProcessing();
+ // stop processing this client
+ client->Stop();
+ // remove client from registry
+ conn->RemoveClientFromRegistry(client);
+ // remove from connections client list
+ conn->RemoveClient(client);
+ // remove from total client list
+ RemoveClient(client);
+ // delete client
+ delete client;
+ // no more clients on this connection, disconnect this connection
+ if (conn->GetNumberClients() == 0)
+ {
+ conn->ExitProcessing();
+ conn->DoDisconnect();
+ RemoveConnection(conn);
+ delete conn;
+ }
+ else
+ {
+ conn->RestartProcessing();
+ }
+ }
+ pCmdrsp->response = eRspOK;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdSetMessageIds:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdSetMessageIds\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ bool restart = false;
+ // find client
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsProcessingContinuing())
+ {
+ conn->PauseProcessing();
+ restart = true;
+ }
+ if (conn->IsDisconnected())
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (conn->IsRetryInProgress())
+ {
+ ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (conn->IsRetryTimedOut())
+ {
+ ret = TCAPI_ERR_COMM_TIMEOUT;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ // add client to connection's registry
+ conn->AddClientToRegistry(client, pCmdrsp->number, pCmdrsp->messageIds);
+ }
+ if (restart)
+ conn->RestartProcessing();
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdGetNumberConnections:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdGetNumberConnections\n");
+ TCDEBUGCLOSE();
+ long num = m_ConnectionList->size();
+ pCmdrsp->response = eRspOK;
+ pCmdrsp->numConnections = num;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdGetConnectionType:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdGetConnectionType\n");
+ TCDEBUGCLOSE();
+ long index = pCmdrsp->index;
+ CConnectionImpl* pConn = (CConnectionImpl*)FindConnection(index);
+ if (pConn != NULL)
+ {
+ pCmdrsp->response = eRspOK;
+ strncpy(pCmdrsp->connectSettings.connectType, pConn->m_ConnectSettings->connectType, MAX_CONNECTION_TYPE);
+// pCmdrsp->connectSettings.connectType = pConn->m_ConnectSettings->connectType;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = TCAPI_ERR_MISSING_CONNECTION_SPEC;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ }
+ break;
+ case eCmdOpenStream:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdOpenStream\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ // find client
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsDisconnected())
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (conn->IsRetryInProgress())
+ {
+ ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (conn->IsRetryTimedOut())
+ {
+ ret = TCAPI_ERR_COMM_TIMEOUT;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ bool restart = false;
+ if (conn->IsProcessingContinuing())
+ {
+ restart = true;
+ conn->PauseProcessing();
+ }
+ client->OpenStream(&pCmdrsp->destinationOptions);
+ if (restart)
+ conn->RestartProcessing();
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdCloseStream:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdCloseStream\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ bool restart = false;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (conn->IsProcessingContinuing())
+ {
+ conn->PauseProcessing();
+ restart = true;
+ }
+ }
+ client->CloseStream();
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (restart)
+ conn->RestartProcessing();
+ }
+
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdOpenMessageFile:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdOpenMessageFile\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ // find client
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsDisconnected())
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (conn->IsRetryInProgress())
+ {
+ ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (conn->IsRetryTimedOut())
+ {
+ ret = TCAPI_ERR_COMM_TIMEOUT;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ bool restart = false;
+ if (conn->IsProcessingContinuing())
+ {
+ restart = true;
+ conn->PauseProcessing();
+ }
+ client->OpenMessageFile(&pCmdrsp->destinationOptions);
+ if (restart)
+ conn->RestartProcessing();
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdCloseMessageFile:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdCloseMessageFile\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ bool restart = false;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (conn->IsProcessingContinuing())
+ {
+ conn->PauseProcessing();
+ restart = true;
+ }
+ }
+ client->CloseMessageFile();
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (restart)
+ conn->RestartProcessing();
+ }
+
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdClearMessageFile:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdClearMessageFile\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ bool restart = false;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (conn->IsProcessingContinuing())
+ {
+ conn->PauseProcessing();
+ restart = true;
+ }
+ }
+ client->ClearMessageFile();
+ if (restart)
+ conn->RestartProcessing();
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdStart:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdStart\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ conn->PauseProcessing();
+ if (conn->IsDisconnected())
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (conn->IsRetryInProgress())
+ {
+ ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (conn->IsRetryTimedOut())
+ {
+ ret = TCAPI_ERR_COMM_TIMEOUT;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ client->Start();
+ conn->RestartProcessing();
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdStop:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdStop\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ bool restart = false;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ // get connection
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (conn->IsProcessingContinuing())
+ {
+ restart = true;
+ conn->PauseProcessing();
+ }
+ }
+ client->Stop();
+ if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+ {
+ if (restart)
+ conn->RestartProcessing();
+ }
+
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdStop done\n");
+ TCDEBUGCLOSE();
+ }
+ break;
+ case eCmdSendMessage:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdSendMessage\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ DWORD osErr = 0;
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsDisconnected())
+ {
+ ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ else if (conn->IsRetryInProgress())
+ {
+ ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+ }
+ else if (conn->IsRetryTimedOut())
+ {
+ ret = TCAPI_ERR_COMM_TIMEOUT;
+ }
+
+ if (ret == TCAPI_ERR_NONE)
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdSendMessage DoSendMessage\n");
+ TCDEBUGCLOSE();
+ ret = conn->DoSendMessage(pCmdrsp->encodeOption, pCmdrsp->protocolVersion, pCmdrsp->useMyId, pCmdrsp->myId, pMsg->length, pMsg->message);
+// ret = conn->DoSendMessage(pMsg->length, pMsg->message);
+ if (ret != TCAPI_ERR_NONE)
+ osErr = conn->m_OsError;
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdSendMessage DoSendMessage done\n");
+ TCDEBUGCLOSE();
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+// TCDEBUGOPEN();
+// TCDEBUGLOGS(" eCmdSendMessage OK\n");
+// TCDEBUGCLOSE();
+ pCmdrsp->response = eRspOK;
+ }
+ else
+ {
+// TCDEBUGOPEN();
+// TCDEBUGLOGS(" eCmdSendMessage ERROR\n");
+// TCDEBUGCLOSE();
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ if (osErr > 0)
+ pCmdrsp->osError = osErr;
+ else
+ pCmdrsp->osError = 0;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdExit:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdExit\n");
+ TCDEBUGCLOSE();
+ DoShutdown();
+ done = true;
+ }
+ break;
+ case eCmdGetNumberVersions:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdGetNumberVersions\n");
+ TCDEBUGCLOSE();
+
+ long ret = TCAPI_ERR_NONE;
+ long numberVersions = 1; // 1 for server
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ if (conn->HasVersion())
+ numberVersions++;
+ }
+ }
+ if (ret == TCAPI_ERR_NONE)
+ {
+ pCmdrsp->response = eRspOK;
+ pCmdrsp->number = numberVersions;
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = ret;
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdGetVersion:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdGetVersion\n");
+ TCDEBUGCLOSE();
+ // index = 1 ==> TCFServer version
+ // index = 2 ==> Connection version if it exists
+ long ret = TCAPI_ERR_NONE;
+ long index = pCmdrsp->index;
+ pCmdrsp->response = eRspOK;
+ pCmdrsp->version[0] = NULL;
+ if (index == 1)
+ {
+ pCmdrsp->response = eRspOK;
+ strncpy(pCmdrsp->version, m_Version, MAX_VERSION_STRING);
+ }
+ else if (index == 2)
+ {
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ if (client)
+ {
+ CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+ if (conn->IsConnected())
+ {
+ pCmdrsp->response = eRspOK;
+ if (conn->HasVersion())
+ {
+ conn->GetVersion(pCmdrsp->version);
+ }
+ }
+ else
+ {
+ pCmdrsp->response = eRspError;
+ pCmdrsp->error = TCAPI_ERR_MEDIA_NOT_OPEN;
+ }
+ }
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ case eCmdGetClientStatus:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGS(" eCmdGetClientStatus\n");
+ TCDEBUGCLOSE();
+ long ret = TCAPI_ERR_NONE;
+ DWORD id = pCmdrsp->clientId;
+ CClient* client = FindClient(id);
+ pCmdrsp->response = eRspOK;
+ pCmdrsp->clientStatus = eUnknownClient;
+ if (client)
+ {
+ if (client->IsStarted())
+ {
+ pCmdrsp->clientStatus = eStarted;
+ }
+ else
+ {
+ pCmdrsp->clientStatus = eStopped;
+ }
+ }
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ default:
+ {
+ TCDEBUGOPEN();
+ TCDEBUGLOGA1(" unknown command = %d\n", command);
+ TCDEBUGCLOSE();
+ pCmdrsp->response = eRspOK;//eRspError;
+ pCmdrsp->error = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+ m_Server->SendResponse(pCmdrsp);
+ }
+ break;
+ }
+ }
+
+ pCmdrsp->response = eRspExitted;
+ m_Server->SendResponse(&cmdrsp);
+
+ if (pMsg)
+ delete pMsg;
+
+ TCDEBUGOPEN();
+ TCDEBUGLOGS("CServerManager::CommandThread exitting\n");
+ TCDEBUGCLOSE();
+}
+
+CConnection* CServerManager::FindConnection(pConnectData pConData)
+{
+ TCDEBUGLOGS("CServerManager::FindConnection1\n");
+ CConnection* connection = NULL;
+
+ if (m_ConnectionList->size() != 0)
+ {
+ ConnectionList::iterator pConn;
+ for (pConn = m_ConnectionList->begin(); pConn != m_ConnectionList->end(); pConn++)
+ {
+ if ((*pConn)->IsEqual(pConData))
+ {
+ connection = *pConn;
+ break;
+ }
+ }
+ }
+
+ TCDEBUGLOGA1("CServerManager::FindConnection1 connection=%x\n", connection);
+ return connection;
+
+}
+CConnection* CServerManager::FindConnection(long index)
+{
+ TCDEBUGLOGS("CServerManager::FindConnection2\n");
+ CConnection* connection = NULL;
+
+ if (m_ConnectionList->size() >= index)
+ {
+ connection = m_ConnectionList->at(index);
+ }
+
+ TCDEBUGLOGA1("CServerManager::FindConnection2 connection=%x\n", connection);
+ return connection;
+}
+CClient* CServerManager::FindClient(DWORD id)
+{
+ CClient* found = NULL;
+
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ if ((*iter)->GetClientId() == id)
+ {
+ found = *iter;
+ break;
+ }
+ }
+ }
+ return found;
+}
+
+BOOL CServerManager::RemoveClient(CClient* client)
+{
+ BOOL found = FALSE;
+
+ if (m_ClientList->size() != 0)
+ {
+ ClientList::iterator iter;
+ for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+ {
+ if ((*iter)->GetClientId() == client->GetClientId())
+ {
+ m_ClientList->erase(iter);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ return found;
+}
+
+BOOL CServerManager::RemoveConnection(CConnection* conn)
+{
+ BOOL found = FALSE;
+
+ if (m_ConnectionList->size() != 0)
+ {
+ ConnectionList::iterator iter;
+ for (iter = m_ConnectionList->begin(); iter != m_ConnectionList->end(); iter++)
+ {
+ if ((*iter)->GetConnectionId() == conn->GetConnectionId())
+ {
+ m_ConnectionList->erase(iter);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ return found;
+}
+
+void CServerManager::DoShutdown()
+{
+ // for each connection
+ // stop processing on that connection
+ // disconnect that connection
+ if (m_ConnectionList->size() != 0)
+ {
+ ConnectionList::iterator pConn;
+ for (pConn = m_ConnectionList->begin(); pConn != m_ConnectionList->end(); pConn++)
+ {
+ (*pConn)->ExitProcessing();
+ (*pConn)->DoDisconnect();
+ delete (*pConn);
+ }
+ }
+}
+void CServerManager::RegisterAllComms()
+{
+ TCDEBUGLOGS("CServerManager::RegisterAllComms\n");
+
+ m_CommList->clear();
+ if (m_ExeLocation && (m_ExeLocation[0] != '\0'))
+ {
+ char* searchPath = new char[MAX_EXEPATHNAME];
+ char* loadPath = new char[MAX_EXEPATHNAME];
+ strncpy(searchPath, m_ExeLocation, MAX_EXEPATHNAME);
+ sprintf(searchPath, "%s%c*", searchPath, PATH_DELIMITER);
+
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms searchPath=%s\n", searchPath);
+
+ WIN32_FIND_DATA fileData;
+
+ HANDLE sh = ::FindFirstFile(searchPath, &fileData);
+ if (sh != INVALID_HANDLE_VALUE)
+ {
+ BOOL done = FALSE;
+ while (!done)
+ {
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms file=%s\n", fileData.cFileName);
+ if (strncmp(fileData.cFileName, COMMDLL_BASENAME, strlen(COMMDLL_BASENAME)) == 0)
+ {
+ sprintf(loadPath, "%s%c%s", m_ExeLocation, PATH_DELIMITER, fileData.cFileName);
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms loadPath=%s\n", loadPath);
+
+ HINSTANCE hLib = ::LoadLibrary(loadPath);
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms hLib=%x\n", hLib);
+
+ if (hLib)
+ {
+ TCDEBUGLOGS("CServerManager::RegisterAllComms - library loaded\n");
+
+ COMMREGISTER lpFn = (COMMREGISTER)::GetProcAddress(hLib, COMMREGISTER_FNNAME);
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms lpFn=%x\n", lpFn);
+
+ if (lpFn)
+ {
+ TCDEBUGLOGS("CServerManager::RegisterAllComms - function found\n");
+ const char* pType = lpFn();
+ if (pType)
+ {
+ TCDEBUGLOGA1("CServerManager::RegisterAllComms pType=%s\n", pType);
+ CCommRegistryItem* pComm = new CCommRegistryItem();
+ strcpy(pComm->m_CommLibrary, loadPath);
+ strcpy(pComm->m_CommType, pType);
+ m_CommList->push_back(pComm);
+ }
+ }
+ ::FreeLibrary(hLib);
+ }
+ }
+ BOOL fNext = ::FindNextFile(sh, &fileData);
+ if (fNext == FALSE)
+ done = TRUE;
+ }
+ ::FindClose(sh);
+ }
+ delete[] searchPath;
+ delete[] loadPath;
+ }
+ TCDEBUGLOGS("CServerManager::RegisterAllComms\n");
+}
+
+void CServerManager::RegisterAllProtocols()
+{
+ TCDEBUGLOGS("CServerManager::RegisterAllProtocols\n");
+
+ m_ProtocolList->clear();
+ if (m_ExeLocation && (m_ExeLocation[0] != '\0'))
+ {
+ char* searchPath = new char[MAX_EXEPATHNAME];
+ char* loadPath = new char[MAX_EXEPATHNAME];
+ strncpy(searchPath, m_ExeLocation, MAX_EXEPATHNAME);
+ sprintf(searchPath, "%s%c*", searchPath, PATH_DELIMITER);
+
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols searchPath=%s\n", searchPath);
+
+ WIN32_FIND_DATA fileData;
+
+ HANDLE sh = ::FindFirstFile(searchPath, &fileData);
+ BOOL done = FALSE;
+
+ if (sh != INVALID_HANDLE_VALUE)
+ {
+ BOOL done = FALSE;
+ while (!done)
+ {
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols file=%s\n", fileData.cFileName);
+ if (strncmp(fileData.cFileName, PROTOCOLDLL_BASENAME, strlen(PROTOCOLDLL_BASENAME)) == 0)
+ {
+ sprintf(loadPath, "%s%c%s", m_ExeLocation, PATH_DELIMITER, fileData.cFileName);
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols loadPath=%s\n", loadPath);
+
+ HINSTANCE hLib = ::LoadLibrary(loadPath);
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols hLib=%x\n", hLib);
+
+ if (hLib)
+ {
+ TCDEBUGLOGS("CServerManager::RegisterAllProtocols - library loaded\n");
+
+ PROTOCOLREGISTER lpFn = (PROTOCOLREGISTER)::GetProcAddress(hLib, PROTOCOLREGISTER_FNNAME);
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols lpFn=%x\n", lpFn);
+
+ if (lpFn)
+ {
+ TCDEBUGLOGS("CServerManager::RegisterAllProtocols - function found\n");
+ const char* pType = lpFn();
+ if (pType)
+ {
+ TCDEBUGLOGA1("CServerManager::RegisterAllProtocols pType=%s\n", pType);
+ CProtocolRegistryItem* pProt = new CProtocolRegistryItem();
+ strcpy(pProt->m_ProtocolLibrary, loadPath);
+ strcpy(pProt->m_ProtocolType, pType);
+ m_ProtocolList->push_back(pProt);
+ }
+ }
+ ::FreeLibrary(hLib);
+ }
+ }
+ BOOL fNext = ::FindNextFile(sh, &fileData);
+ if (fNext == FALSE)
+ done = TRUE;
+ }
+ ::FindClose(sh);
+ }
+ delete[] searchPath;
+ delete[] loadPath;
+ }
+ TCDEBUGLOGS("CServerManager::RegisterAllProtocols\n");
+}
+
+void CServerManager::UnRegisterAllComms()
+{
+}
+
+void CServerManager::UnRegisterAllProtocols()
+{
+}
+
+const char* CServerManager::FindProtocolPath(char* protocolType)
+{
+ char* path = NULL;
+
+ TCDEBUGLOGS("CServerManager::FindProtocolPath\n");
+ if (m_ProtocolList->size() != 0)
+ {
+ ProtocolRegistry::iterator iter;
+ for (iter = m_ProtocolList->begin(); iter != m_ProtocolList->end(); iter++)
+ {
+ if (strcmp((*iter)->m_ProtocolType, protocolType) == 0)
+ {
+ path = (*iter)->m_ProtocolLibrary;
+ break;
+ }
+ }
+ }
+
+ TCDEBUGLOGA1("CServerManager::FindProtocolPath path=%s\n", path);
+ return path;
+}
+
+const char* CServerManager::FindCommPath(char* commType)
+{
+ char* path = NULL;
+
+ TCDEBUGLOGS("CServerManager::FindCommPath\n");
+ if (m_CommList->size() != 0)
+ {
+ CommRegistry::iterator iter;
+ for (iter = m_CommList->begin(); iter != m_CommList->end(); iter++)
+ {
+ if (strcmp((*iter)->m_CommType, commType) == 0)
+ {
+ path = (*iter)->m_CommLibrary;
+ break;
+ }
+ }
+ }
+
+ TCDEBUGLOGA1("CServerManager::FindCommPath path=%s\n", path);
+ return path;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ServerManager.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// ServerManager.h: interface for the CServerManager class.
+//
+// Only one of these exists
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_)
+#define AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_
+
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include "TCDebugLog.h"
+#include "Connection.h"
+#include "Client.h"
+#include "ProtocolRegistryItem.h"
+#include "CommRegistryItem.h"
+#include <vector>
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+typedef std::vector<CConnection*> ConnectionList;
+typedef std::vector<CClient*> ClientList;
+typedef std::vector<CProtocolRegistryItem*> ProtocolRegistry;
+typedef std::vector<CCommRegistryItem*> CommRegistry;
+
+#define MAX_EXEPATHNAME (2048)
+
+#ifdef _WIN32
+#define PATH_DELIMITER '\\'
+#else
+#error not Windows
+#endif
+
+class CServerManager
+{
+public:
+ CServerManager();
+ virtual ~CServerManager();
+ CServerManager(const char* exeLocation);
+
+ void CommandThread();
+ CConnection* FindConnection(pConnectData pConData);
+ CConnection* FindConnection(long index);
+ CClient* FindClient(DWORD id);
+ BOOL RemoveClient(CClient* client); // remove from m_ClientList
+ BOOL RemoveConnection(CConnection* conn); // remove from m_ConnectionList
+ void DoShutdown();
+private:
+ void RegisterAllProtocols();
+ void RegisterAllComms();
+ void UnRegisterAllProtocols();
+ void UnRegisterAllComms();
+ const char* FindProtocolPath(char* protocolType);
+ const char* FindCommPath(char* commType);
+
+public:
+ CServerCommand* m_Server; // client/server commands/responses
+ TCDebugLog* m_DebugLog;
+ ConnectionList* m_ConnectionList; // all connections
+ ClientList* m_ClientList; // all clients
+ DWORD m_NextClientId; // next client ID
+ DWORD m_NextConnectionId; // next connection ID
+ char m_Version[MAX_VERSION_STRING]; // our version string
+ ProtocolRegistry* m_ProtocolList; // protocols (e.g., OST, etc)
+ CommRegistry* m_CommList; // comm connections (e.g., TCP, etc)
+ char* m_ExeLocation; // current location of TCFServer
+};
+
+#endif // !defined(AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/StdAfx.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+// TCFServer.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/StdAfx.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_)
+#define AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#define TCF_SERVER
+
+#include <stdlib.h>
+#include <windows.h>
+#include <winsock2.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.cpp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// TCFServer.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "ServerManager.h"
+#include <vector>
+#include <sys/stat.h>
+
+CServerManager* gManager;
+char gServerLocation[2048]={0};
+
+#ifdef _DEBUG
+BOOL gDoLogging=FALSE;
+char TCDebugMsg[1000];
+#define TCDEBUGOPEN() gManager->m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() gManager->m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+static void GetServerLocation(char* cl);
+#ifdef _DEBUG
+static void LogTime(FILE* f);
+#endif
+int main(int argc, char* argv[])
+{
+#ifdef _DEBUG
+ struct _stat buf;
+ char* dirname = "c:\\tcf";
+ int result = _stat(dirname, &buf);
+ if (result == 0)
+ {
+ gDoLogging = TRUE;
+ }
+ else
+ {
+ gDoLogging = FALSE;
+ }
+#endif
+
+
+ if (argc == 2) // for running from the debugger
+ {
+ GetServerLocation(argv[1]);
+ }
+ else
+ {
+ GetServerLocation(argv[0]);
+ }
+#ifdef _DEBUG
+ if (gDoLogging)
+ {
+ FILE* f = fopen("c:\\tcf\\TCFServer_Main.txt", "at");
+ LogTime(f);
+ fprintf(f,"ExeLocation=%s\n", gServerLocation);
+ fclose(f);
+ }
+#endif
+ gManager = new CServerManager(gServerLocation);
+ gManager->CommandThread();
+ delete gManager;
+ return 0;
+}
+#ifdef _DEBUG
+static void LogTime(FILE* f)
+{
+ SYSTEMTIME sTime;
+ GetLocalTime(&sTime);
+ if (f)
+ fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+#ifdef _WIN32
+void GetServerLocation(char* cl)
+{
+ char dir[_MAX_DIR];
+ char drive[_MAX_DRIVE];
+ _splitpath(cl, drive, dir, NULL, NULL);
+ sprintf(gServerLocation, "%s%s", drive, dir);
+}
+#else
+#error not Windows
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.dep Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,252 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFServer.mak
+
+.\BaseCom.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Registry.h"\
+
+
+.\Client.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+.\Connection.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\MustiTcpComm.h"\
+ ".\RealSerialComm.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+ ".\TcpComm.h"\
+ ".\VirtualSerialComm.h"\
+
+
+..\Common\Source\ErrorMonitorData.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+..\Common\Source\InputStream.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+.\MustiTcpComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\MustiTcpComm.h"\
+ ".\Registry.h"\
+ ".\TcpComm.h"\
+
+
+..\Common\Source\mutex.cpp : \
+ "..\Common\Headers\mutex.h"\
+
+
+.\RealSerialComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\RealSerialComm.h"\
+ ".\Registry.h"\
+
+
+.\Registry.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+..\Common\Source\ServerClient.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+.\ServerManager.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+..\Common\Source\shareddata.cpp : \
+ "..\Common\Headers\shareddata.h"\
+
+
+.\StdAfx.cpp : \
+ ".\StdAfx.h"\
+
+
+..\Common\Source\TCDebugLog.cpp : \
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+
+
+.\TCFServer.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Connection.h"\
+ ".\Registry.h"\
+ ".\ServerManager.h"\
+
+
+.\TcpComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\Registry.h"\
+ ".\TcpComm.h"\
+
+
+.\VirtualSerialComm.cpp : \
+ "..\Common\Headers\ErrorMonitorData.h"\
+ "..\Common\Headers\InputStream.h"\
+ "..\Common\Headers\mutex.h"\
+ "..\Common\Headers\OSTConstants.h"\
+ "..\Common\Headers\PNConstants.h"\
+ "..\Common\Headers\ServerClient.h"\
+ "..\Common\Headers\shareddata.h"\
+ "..\Common\Headers\TCConstants.h"\
+ "..\Common\Headers\TCDebugLog.h"\
+ "..\Common\Headers\TCErrorConstants.h"\
+ ".\BaseCom.h"\
+ ".\Client.h"\
+ ".\RealSerialComm.h"\
+ ".\Registry.h"\
+ ".\VirtualSerialComm.h"\
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.dsp Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,269 @@
+# Microsoft Developer Studio Project File - Name="TCFServer" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=TCFServer - 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 "TCFServer.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 "TCFServer.mak" CFG="TCFServer - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFServer - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "TCFServer - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# 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 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 /subsystem:console /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 shlwapi.lib /nologo /subsystem:console /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c
+# 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 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 /subsystem:console /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 shlwapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "TCFServer - Win32 Release"
+# Name "TCFServer - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\CommRegistryItem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Connection.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ConnectionImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\InputStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageFile.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ProtocolRegistryItem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Registry.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RegistryImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ServerClient.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ServerManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\shareddata.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFServer.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\BaseCom.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\BaseProtocol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\CommRegistryItem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Connection.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ConnectionImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ErrorMonitorData.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\InputStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageFile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\mutex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ProtocolRegistryItem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RegistryImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ServerClient.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ServerManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\shareddata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCDebugLog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCErrorConstants.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"
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.mak Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,585 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFServer.dsp
+!IF "$(CFG)" == ""
+CFG=TCFServer - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFServer - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "TCFServer - Win32 Release" && "$(CFG)" != "TCFServer - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!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 "TCFServer.mak" CFG="TCFServer - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "TCFServer - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "TCFServer - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFServer.exe"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Client.obj"
+ -@erase "$(INTDIR)\CommRegistryItem.obj"
+ -@erase "$(INTDIR)\Connection.obj"
+ -@erase "$(INTDIR)\ConnectionImpl.obj"
+ -@erase "$(INTDIR)\ErrorMonitorData.obj"
+ -@erase "$(INTDIR)\InputStream.obj"
+ -@erase "$(INTDIR)\MessageFile.obj"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\ProtocolRegistryItem.obj"
+ -@erase "$(INTDIR)\Registry.obj"
+ -@erase "$(INTDIR)\RegistryImpl.obj"
+ -@erase "$(INTDIR)\resource.res"
+ -@erase "$(INTDIR)\ServerClient.obj"
+ -@erase "$(INTDIR)\ServerManager.obj"
+ -@erase "$(INTDIR)\shareddata.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCFServer.obj"
+ -@erase "$(INTDIR)\TCFServer.pch"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\TCFServer.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\TCFServer.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFServer.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=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 shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\TCFServer.pdb" /machine:I386 /out:"$(OUTDIR)\TCFServer.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Client.obj" \
+ "$(INTDIR)\CommRegistryItem.obj" \
+ "$(INTDIR)\Connection.obj" \
+ "$(INTDIR)\ConnectionImpl.obj" \
+ "$(INTDIR)\ErrorMonitorData.obj" \
+ "$(INTDIR)\InputStream.obj" \
+ "$(INTDIR)\MessageFile.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\ProtocolRegistryItem.obj" \
+ "$(INTDIR)\Registry.obj" \
+ "$(INTDIR)\RegistryImpl.obj" \
+ "$(INTDIR)\ServerClient.obj" \
+ "$(INTDIR)\ServerManager.obj" \
+ "$(INTDIR)\shareddata.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFServer.obj" \
+ "$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFServer.exe"
+ copybinaries Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFServer.exe" "$(OUTDIR)\TCFServer.bsc"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Client.obj"
+ -@erase "$(INTDIR)\Client.sbr"
+ -@erase "$(INTDIR)\CommRegistryItem.obj"
+ -@erase "$(INTDIR)\CommRegistryItem.sbr"
+ -@erase "$(INTDIR)\Connection.obj"
+ -@erase "$(INTDIR)\Connection.sbr"
+ -@erase "$(INTDIR)\ConnectionImpl.obj"
+ -@erase "$(INTDIR)\ConnectionImpl.sbr"
+ -@erase "$(INTDIR)\ErrorMonitorData.obj"
+ -@erase "$(INTDIR)\ErrorMonitorData.sbr"
+ -@erase "$(INTDIR)\InputStream.obj"
+ -@erase "$(INTDIR)\InputStream.sbr"
+ -@erase "$(INTDIR)\MessageFile.obj"
+ -@erase "$(INTDIR)\MessageFile.sbr"
+ -@erase "$(INTDIR)\mutex.obj"
+ -@erase "$(INTDIR)\mutex.sbr"
+ -@erase "$(INTDIR)\ProtocolRegistryItem.obj"
+ -@erase "$(INTDIR)\ProtocolRegistryItem.sbr"
+ -@erase "$(INTDIR)\Registry.obj"
+ -@erase "$(INTDIR)\Registry.sbr"
+ -@erase "$(INTDIR)\RegistryImpl.obj"
+ -@erase "$(INTDIR)\RegistryImpl.sbr"
+ -@erase "$(INTDIR)\resource.res"
+ -@erase "$(INTDIR)\ServerClient.obj"
+ -@erase "$(INTDIR)\ServerClient.sbr"
+ -@erase "$(INTDIR)\ServerManager.obj"
+ -@erase "$(INTDIR)\ServerManager.sbr"
+ -@erase "$(INTDIR)\shareddata.obj"
+ -@erase "$(INTDIR)\shareddata.sbr"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\StdAfx.sbr"
+ -@erase "$(INTDIR)\TCDebugLog.obj"
+ -@erase "$(INTDIR)\TCDebugLog.sbr"
+ -@erase "$(INTDIR)\TCFServer.obj"
+ -@erase "$(INTDIR)\TCFServer.pch"
+ -@erase "$(INTDIR)\TCFServer.sbr"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\TCFServer.bsc"
+ -@erase "$(OUTDIR)\TCFServer.exe"
+ -@erase "$(OUTDIR)\TCFServer.ilk"
+ -@erase "$(OUTDIR)\TCFServer.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFServer.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFServer.bsc"
+BSC32_SBRS= \
+ "$(INTDIR)\Client.sbr" \
+ "$(INTDIR)\CommRegistryItem.sbr" \
+ "$(INTDIR)\Connection.sbr" \
+ "$(INTDIR)\ConnectionImpl.sbr" \
+ "$(INTDIR)\ErrorMonitorData.sbr" \
+ "$(INTDIR)\InputStream.sbr" \
+ "$(INTDIR)\MessageFile.sbr" \
+ "$(INTDIR)\mutex.sbr" \
+ "$(INTDIR)\ProtocolRegistryItem.sbr" \
+ "$(INTDIR)\Registry.sbr" \
+ "$(INTDIR)\RegistryImpl.sbr" \
+ "$(INTDIR)\ServerClient.sbr" \
+ "$(INTDIR)\ServerManager.sbr" \
+ "$(INTDIR)\shareddata.sbr" \
+ "$(INTDIR)\StdAfx.sbr" \
+ "$(INTDIR)\TCDebugLog.sbr" \
+ "$(INTDIR)\TCFServer.sbr"
+
+"$(OUTDIR)\TCFServer.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+ $(BSC32) @<<
+ $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=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 shlwapi.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\TCFServer.pdb" /debug /machine:I386 /out:"$(OUTDIR)\TCFServer.exe" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\Client.obj" \
+ "$(INTDIR)\CommRegistryItem.obj" \
+ "$(INTDIR)\Connection.obj" \
+ "$(INTDIR)\ConnectionImpl.obj" \
+ "$(INTDIR)\ErrorMonitorData.obj" \
+ "$(INTDIR)\InputStream.obj" \
+ "$(INTDIR)\MessageFile.obj" \
+ "$(INTDIR)\mutex.obj" \
+ "$(INTDIR)\ProtocolRegistryItem.obj" \
+ "$(INTDIR)\Registry.obj" \
+ "$(INTDIR)\RegistryImpl.obj" \
+ "$(INTDIR)\ServerClient.obj" \
+ "$(INTDIR)\ServerManager.obj" \
+ "$(INTDIR)\shareddata.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\TCDebugLog.obj" \
+ "$(INTDIR)\TCFServer.obj" \
+ "$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFServer.exe" "$(OUTDIR)\TCFServer.bsc"
+ copybinaries Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFServer.dep")
+!INCLUDE "TCFServer.dep"
+!ELSE
+!MESSAGE Warning: cannot find "TCFServer.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "TCFServer - Win32 Release" || "$(CFG)" == "TCFServer - Win32 Debug"
+SOURCE=.\Client.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Client.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Client.obj" "$(INTDIR)\Client.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\CommRegistryItem.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\CommRegistryItem.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\CommRegistryItem.obj" "$(INTDIR)\CommRegistryItem.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\Connection.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Connection.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Connection.obj" "$(INTDIR)\Connection.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\ConnectionImpl.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ConnectionImpl.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ConnectionImpl.obj" "$(INTDIR)\ConnectionImpl.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ErrorMonitorData.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ErrorMonitorData.obj" "$(INTDIR)\ErrorMonitorData.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\InputStream.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\InputStream.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\InputStream.obj" "$(INTDIR)\InputStream.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\MessageFile.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\MessageFile.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\MessageFile.obj" "$(INTDIR)\MessageFile.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\mutex.obj" "$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\ProtocolRegistryItem.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ProtocolRegistryItem.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ProtocolRegistryItem.obj" "$(INTDIR)\ProtocolRegistryItem.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\Registry.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Registry.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Registry.obj" "$(INTDIR)\Registry.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\RegistryImpl.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\RegistryImpl.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\RegistryImpl.obj" "$(INTDIR)\RegistryImpl.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\ServerClient.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ServerClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ServerClient.obj" "$(INTDIR)\ServerClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\ServerManager.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ServerManager.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ServerManager.obj" "$(INTDIR)\ServerManager.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\shareddata.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\shareddata.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\shareddata.obj" "$(INTDIR)\shareddata.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\TCFServer.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\TCFServer.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFServer.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\StdAfx.sbr" "$(INTDIR)\TCFServer.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\TCDebugLog.obj" "$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+SOURCE=.\TCFServer.cpp
+
+!IF "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\TCFServer.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\TCFServer.obj" "$(INTDIR)\TCFServer.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF
+
+SOURCE=.\resource.rc
+
+"$(INTDIR)\resource.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.plg Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,811 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP331.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP331.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP332.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP332.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP333.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFClient.pdb" /map:"Release/TCFClient.map" /machine:I386 /out:"Release/TCFClient.dll" /implib:"Release/TCFClient.lib"
+.\Release\ClientManager.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\mutex.obj
+.\Release\ServerClient.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCAPIConnectionJni.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFClient.obj
+.\Release\TCFCppApi.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP333.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFClient.lib and object Release/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP337.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP337.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFClient - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP338.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP338.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP339.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP339.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33A.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFClient.pdb" /map:"Debug/TCFClient.map" /debug /machine:I386 /out:"Debug/TCFClient.dll" /implib:"Debug/TCFClient.lib" /pdbtype:sept
+.\Debug\ClientManager.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\mutex.obj
+.\Debug\ServerClient.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCAPIConnectionJni.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFClient.obj
+.\Debug\TCFCppApi.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+ Creating library Debug/TCFClient.lib and object Debug/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33E.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33E.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33F.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33F.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP340.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP340.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP341.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFCommSerial.pdb" /map:"Release/TCFCommSerial.map" /machine:I386 /out:"Release/TCFCommSerial.dll" /implib:"Release/TCFCommSerial.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP341.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommSerial.lib and object Release/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP345.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP345.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP346.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP346.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP347.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP347.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP348.tmp" with contents
+[
+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 /incremental:yes /pdb:"Debug/TCFCommSerial.pdb" /map:"Debug/TCFCommSerial.map" /debug /machine:I386 /out:"Debug/TCFCommSerial.dll" /implib:"Debug/TCFCommSerial.lib" /pdbtype:sept
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP348.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+ Creating library Debug/TCFCommSerial.lib and object Debug/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34C.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34C.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34D.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34D.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34E.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34E.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34F.tmp" with contents
+[
+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 shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommTCP.pdb" /map:"Release/TCFCommTCP.map" /machine:I386 /out:"Release/TCFCommTCP.dll" /implib:"Release/TCFCommTCP.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommTCP.obj
+.\Release\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34F.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommTCP.lib and object Release/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP353.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP353.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP354.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"Debug/" /Fp"Debug/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP354.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP355.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"Debug/" /Fp"Debug/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP355.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP356.tmp" with contents
+[
+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 shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommTCP.pdb" /map:"Debug/TCFCommTCP.map" /debug /machine:I386 /out:"Debug/TCFCommTCP.dll" /implib:"Debug/TCFCommTCP.lib" /pdbtype:sept
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommTCP.obj
+.\Debug\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP356.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+ Creating library Debug/TCFCommTCP.lib and object Debug/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35A.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35A.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35B.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35B.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35C.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35C.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35D.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFCommVirtualSerial.pdb" /map:"Release/TCFCommVirtualSerial.map" /machine:I386 /out:"Release/TCFCommVirtualSerial.dll" /implib:"Release/TCFCommVirtualSerial.lib"
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommVirtualSerial.obj
+.\Release\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35D.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFCommVirtualSerial.lib and object Release/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP361.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP361.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP362.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP362.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP363.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP363.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP364.tmp" with contents
+[
+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 /incremental:yes /pdb:"Debug/TCFCommVirtualSerial.pdb" /map:"Debug/TCFCommVirtualSerial.map" /debug /machine:I386 /out:"Debug/TCFCommVirtualSerial.dll" /implib:"Debug/TCFCommVirtualSerial.lib" /pdbtype:sept
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommVirtualSerial.obj
+.\Debug\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP364.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+ Creating library Debug/TCFCommVirtualSerial.lib and object Debug/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP368.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP368.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP369.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP369.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36A.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36A.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36B.tmp" with contents
+[
+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 /incremental:no /pdb:"Release/TCFProtOST.pdb" /map:"Release/TCFProtOST.map" /machine:I386 /out:"Release/TCFProtOST.dll" /implib:"Release/TCFProtOST.lib"
+.\Release\BaseProtocol.obj
+.\Release\OSTProtocol.obj
+.\Release\StdAfx.obj
+.\Release\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36B.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+ Creating library Release/TCFProtOST.lib and object Release/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36F.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36F.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP370.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Debug/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP370.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP371.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Debug/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP371.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP372.tmp" with contents
+[
+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 /incremental:yes /pdb:"Debug/TCFProtOST.pdb" /map:"Debug/TCFProtOST.map" /debug /machine:I386 /out:"Debug/TCFProtOST.dll" /implib:"Debug/TCFProtOST.lib" /pdbtype:sept
+.\Debug\BaseProtocol.obj
+.\Debug\OSTProtocol.obj
+.\Debug\StdAfx.obj
+.\Debug\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP372.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+ Creating library Debug/TCFProtOST.lib and object Debug/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP377.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP377.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+ 1 file(s) copied.
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP378.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP378.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP379.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP379.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37A.tmp" with contents
+[
+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 shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"Release/TCFServer.pdb" /machine:I386 /out:"Release/TCFServer.exe"
+.\Release\Client.obj
+.\Release\CommRegistryItem.obj
+.\Release\Connection.obj
+.\Release\ConnectionImpl.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\MessageFile.obj
+.\Release\mutex.obj
+.\Release\ProtocolRegistryItem.obj
+.\Release\Registry.obj
+.\Release\RegistryImpl.obj
+.\Release\ServerClient.obj
+.\Release\ServerManager.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFServer.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37C.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37C.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc""
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37D.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/TCFServer.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37D.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37E.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/TCFServer.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37E.tmp"
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37F.tmp" with contents
+[
+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 shlwapi.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/TCFServer.pdb" /debug /machine:I386 /out:"Debug/TCFServer.exe" /pdbtype:sept
+.\Debug\Client.obj
+.\Debug\CommRegistryItem.obj
+.\Debug\Connection.obj
+.\Debug\ConnectionImpl.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\MessageFile.obj
+.\Debug\mutex.obj
+.\Debug\ProtocolRegistryItem.obj
+.\Debug\Registry.obj
+.\Debug\RegistryImpl.obj
+.\Debug\ServerClient.obj
+.\Debug\ServerManager.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFServer.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37F.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP381.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP381.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+ 1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/copyBinaries.cmd Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,3 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFServer.exe ..\..\..\os\win32\x86
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.aps has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.h Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDS_VERSION 1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.rc Mon Apr 06 15:18:48 2009 -0500
@@ -0,0 +1,120 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,0,0
+ PRODUCTVERSION 2,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "Comments", "\0"
+ VALUE "CompanyName", "Nokia\0"
+ VALUE "FileDescription", "Target Communication Framework Server\0"
+ VALUE "FileVersion", "2, 0, 0, 0\0"
+ VALUE "InternalName", "TCFServer\0"
+ VALUE "LegalCopyright", "Copyright © 2008\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "TCFServer.exe\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "Nokia TCFServer\0"
+ VALUE "ProductVersion", "2, 0, 0, 0\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_VERSION "2.0.0.0"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/api/ITCConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/api/ITCConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -29,14 +29,6 @@
public interface ITCConnection {
/**
- * Connection types
- */
- public final int MEDIA_REALTCP = 2;
- public final int MEDIA_REALSERIAL = 3;
- public final int MEDIA_VIRTUALSERIAL = 4;
- public final int MEDIA_USB = 5;
-
- /**
* Default retry interval and retry timeout (in seconds)
*/
public final long DEFAULT_COMM_ERROR_RETRY_INTERVAL = 1; // 1 second
@@ -51,7 +43,7 @@
* Return connection type
* @return
*/
- public int getConnectionType();
+ public String getConnectionType();
/**
* Get the current retry interval in seconds
* @return
@@ -67,7 +59,7 @@
* @param inConnectionType
* @return IStatus
*/
- public IStatus setConnectionType(int inConnectionType);
+ public IStatus setConnectionType(String inConnectionType);
/**
* Set the retry interval after a comm error in seconds. The default is 1 second.
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCAPIConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCAPIConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -19,34 +19,15 @@
*/
package com.nokia.tcf.impl;
+import com.nokia.tcf.Activator;
+import com.nokia.tcf.api.*;
+
+import org.eclipse.core.runtime.*;
+
import java.io.File;
import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.text.MessageFormat;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.service.datalocation.Location;
-
-import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.ITCConnection;
-import com.nokia.tcf.api.ITCErrorListener;
-import com.nokia.tcf.api.ITCMessage;
-import com.nokia.tcf.api.ITCRealSerialConnection;
-import com.nokia.tcf.api.ITCRealTCPConnection;
-import com.nokia.tcf.api.ITCVirtualSerialConnection;
-import com.nokia.tcf.api.TCFClassFactory;
-import com.nokia.tcf.api.ITCMessageIds;
-import com.nokia.tcf.api.ITCMessageInputStream;
-import com.nokia.tcf.api.ITCMessageOptions;
-import com.nokia.tcf.api.ITCVersion;
-import com.nokia.tcf.Activator;
-import com.nokia.tcf.api.TCErrorConstants;
-
public class TCAPIConnection implements ITCAPIConnection {
static {
@@ -70,11 +51,11 @@
}
}
private TCErrorListenerList<ITCErrorListener> errorListenerList;
- private ITCCookie cookie; // this client's handle to native
- private ITCMessageIds messageIds; // this client's message ids
- private TCMessageInputStream inputStream; // this client's message input stream (not using message file)
+ protected ITCCookie cookie; // this client's handle to native
+ protected ITCMessageIds messageIds; // this client's message ids
+ protected TCMessageInputStream inputStream; // this client's message input stream (not using message file)
protected ITCMessageOptions messageOptions; // this client's message options
- private TCFMonitorThread monitorThread; // the client's native monitor
+ protected TCFMonitorThread monitorThread; // the client's native monitor
public boolean stopTCFMonitorThread; // stream monitor start/stop flag
protected IStatus statusOK;
protected ITCConnection connection; // the client's connection
@@ -132,15 +113,15 @@
}
protected IStatus checkConnectionType(ITCConnection inConnection) {
IStatus status = statusOK;
- int type = inConnection.getConnectionType();
- if (type == ITCConnection.MEDIA_VIRTUALSERIAL) {
+ String type = inConnection.getConnectionType();
+ if (type.compareToIgnoreCase("virtualserial") == 0) {
ITCVirtualSerialConnection c = (ITCVirtualSerialConnection)inConnection;
String p = c.getComPort();
if (p == null) {
status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA,
TCErrorConstants.getErrorMessage(TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA), null);
}
- } else if (type == ITCConnection.MEDIA_REALTCP) {
+ } else if (type.compareToIgnoreCase("tcp") == 0) {
ITCRealTCPConnection c = (ITCRealTCPConnection)inConnection;
String ip = c.getIpAddress();
String p = c.getPort();
@@ -148,7 +129,7 @@
status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA,
TCErrorConstants.getErrorMessage(TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA), null);
}
- } else if (type == ITCConnection.MEDIA_REALSERIAL) {
+ } else if (type.compareToIgnoreCase("serial") == 0) {
ITCRealSerialConnection c = (ITCRealSerialConnection)inConnection;
long err = checkRealSerialSettings(c);
if (err != TCErrorConstants.TCAPI_ERR_NONE) {
@@ -339,7 +320,7 @@
}
return status;
}
- protected IStatus finishConnect(int type, String[] settings,
+ protected IStatus finishConnect(String type, String[] settings,
ITCConnection inConnection, ITCMessageOptions inMessageOptions, ITCMessageIds inMessageIds) {
IStatus status = statusOK;
// connect
@@ -467,29 +448,24 @@
IStatus status = checkConnectOptions(inConnection, inMessageOptions, inMessageIds);
String[] settings = null;
- int type = 0;
+ String type = null;
// do connect
if (status.isOK()) {
settings = null;
type = inConnection.getConnectionType();
- switch(type) {
- case ITCConnection.MEDIA_REALTCP: {
+ if (type.compareToIgnoreCase("tcp") == 0) {
settings = new String[3];
ITCRealTCPConnection t = (ITCRealTCPConnection)inConnection;
settings[0] = t.getIpAddress();
settings[1] = t.getPort();
settings[2] = t.getDecodeFormat().toLowerCase();
- break;
- }
- case ITCConnection.MEDIA_VIRTUALSERIAL: {
+ } else if (type.compareToIgnoreCase("virtualserial") == 0) {
settings = new String[2];
ITCVirtualSerialConnection s = (ITCVirtualSerialConnection)inConnection;
settings[0] = s.getComPort();
settings[1] = s.getDecodeFormat().toLowerCase();
- break;
- }
- case ITCConnection.MEDIA_REALSERIAL: {
+ } else if (type.compareToIgnoreCase("serial") == 0) {
settings = new String[7];
ITCRealSerialConnection s = (ITCRealSerialConnection)inConnection;
settings[0] = s.getComPort();
@@ -499,20 +475,15 @@
settings[4] = s.getStopBits();
settings[5] = s.getFlowControl();
settings[6] = s.getDecodeFormat().toLowerCase();
- break;
- }
- case ITCConnection.MEDIA_USB: {
+ } else if (type.compareToIgnoreCase("usb") == 0) {
settings = new String[1];
- break;
- }
- default:
- // Add other connection types here - error already checked in checkConnection()
- break;
+ } else {
+ // Add other connections here
}
}
return finishConnect(type, settings, inConnection, inMessageOptions, inMessageIds);
}
- private void ensureWritableFile(String filePath) throws IOException {
+ protected void ensureWritableFile(String filePath) throws IOException {
// ensure file path points to a writable regular file
IPath path = new Path(filePath);
File file = path.toFile();
@@ -628,32 +599,11 @@
connections = new ITCConnection[(int)numberConnections];
for (int inIndex = 0; inIndex < numberConnections; inIndex++)
{
- int[] type = new int[1];
+ String[] type = new String[1];
ret = nativeGetTypeOfConnection(inIndex, type);
- switch ((int)type[0]) {
- case (int)ITCConnection.MEDIA_VIRTUALSERIAL: {
+ if (type[0].compareToIgnoreCase("virtualserial") == 0) {
ITCVirtualSerialConnection outConnection = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection(null);
- int[] outType = new int[1];
- long[] outOptions = new long[3];
- String[] outSettings = new String[1];
- ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
- if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
- outConnection.setConnectionType(outType[0]);
- outConnection.setRetryInterval(outOptions[0]);
- outConnection.setRetryTimeout(outOptions[1]);
- outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
- outConnection.setComPort(outSettings[0]);
-
- connections[inIndex] = outConnection;
- } else {
- // error processing from nativeGetConnectionSettings
- status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
- }
- break;
- }
- case (int)ITCConnection.MEDIA_REALTCP: {
- ITCRealTCPConnection outConnection = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection(null, null);
- int[] outType = new int[1];
+ String[] outType = new String[1];
long[] outOptions = new long[3];
String[] outSettings = new String[2];
ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
@@ -661,66 +611,66 @@
outConnection.setConnectionType(outType[0]);
outConnection.setRetryInterval(outOptions[0]);
outConnection.setRetryTimeout(outOptions[1]);
- outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
- outConnection.setIpAddress(outSettings[0]);
- outConnection.setPort(outSettings[1]);
+ outConnection.setComPort(outSettings[0]);
+ outConnection.setDecodeFormat(outSettings[1]);
connections[inIndex] = outConnection;
} else {
// error processing from nativeGetConnectionSettings
status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
}
- break;
- }
- case (int)ITCConnection.MEDIA_REALSERIAL: {
+ } else if (type[0].compareToIgnoreCase("serial") == 0) {
ITCRealSerialConnection outConnection = (ITCRealSerialConnection)TCFClassFactory.createITCRealSerialConnection(null);
- int[] outType = new int[1];
+ String[] outType = new String[1];
long[] outOptions = new long[6];
- String[] outSettings = new String[6];
+ String[] outSettings = new String[7];
ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
outConnection.setConnectionType(outType[0]);
outConnection.setRetryInterval(outOptions[0]);
outConnection.setRetryTimeout(outOptions[1]);
- outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
outConnection.setComPort(outSettings[0]);
outConnection.setBaudRate(outSettings[1]);
outConnection.setDataBits(outSettings[2]);
outConnection.setParity(outSettings[3]);
outConnection.setStopBits(outSettings[4]);
outConnection.setFlowControl(outSettings[5]);
+ outConnection.setDecodeFormat(outSettings[6]);
connections[inIndex] = outConnection;
} else {
// error processing from nativeGetConnectionSettings
status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
}
- break;
- }
- case (int)ITCConnection.MEDIA_USB: {
- break;
- }
- default:
+ } else if (type[0].compareToIgnoreCase("tcp") == 0) {
+ ITCRealTCPConnection outConnection = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection(null, null);
+ String[] outType = new String[1];
+ long[] outOptions = new long[3];
+ String[] outSettings = new String[3];
+ ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
+ if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
+ outConnection.setConnectionType(outType[0]);
+ outConnection.setRetryInterval(outOptions[0]);
+ outConnection.setRetryTimeout(outOptions[1]);
+ outConnection.setIpAddress(outSettings[0]);
+ outConnection.setPort(outSettings[1]);
+ outConnection.setDecodeFormat(outSettings[2]);
+
+ connections[inIndex] = outConnection;
+ } else {
+ // error processing from nativeGetConnectionSettings
+ status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
+ }
+ } else if (type[0].compareToIgnoreCase("usb") == 0) {
+ // Finish this sometime when real USB is used on PC
+ } else {
// Add other connection types here
- break;
}
}
}
return connections;
}
- protected String convertDecodeFormat(long decodeFormat) {
- if (decodeFormat == 1) {
- return "platsim";
- }
- if (decodeFormat == 2) {
- return "ost";
- }
- if (decodeFormat == 3) {
- return "rawtrk";
- }
- return "ost";
- }
/* (non-Javadoc)
* @see com.nokia.tcf.api.ITCAPIConnection#getInputStream()
*/
@@ -775,10 +725,10 @@
long[] formattingOptions = new long[5];
formattingOptions[0] = 0;
- formattingOptions[1] = messageOptions.getMessageEncodeFormat();
- formattingOptions[2] = messageOptions.getOSTVersion();
- formattingOptions[3] = inMessage.getMyMessageId();
- formattingOptions[4] = (inMessage.isUseMyMessageId() == true) ? 1 : 0;
+ formattingOptions[1] = messageOptions.getMessageEncodeFormat(); // add protocol or not
+ formattingOptions[2] = messageOptions.getOSTVersion(); // OST version byte to use if OST
+ formattingOptions[3] = inMessage.getMyMessageId(); // message ID to use of adding protocol
+ formattingOptions[4] = (inMessage.isUseMyMessageId() == true) ? 1 : 0; // use my ID or not
String[] settings = new String[1];
settings[0] = connection.getDecodeFormat().toLowerCase();
try {
@@ -895,7 +845,7 @@
}
return status;
}
- protected IStatus doTestConnection(int type, String[] settings, ITCConnection inConnection) {
+ protected IStatus doTestConnection(String type, String[] settings, ITCConnection inConnection) {
IStatus status = statusOK;
// test connection
long[] options = new long[3];
@@ -914,10 +864,8 @@
public IStatus testConnection(ITCConnection inConnection) {
IStatus status = statusOK;
String[] settings = null;
- int type = inConnection.getConnectionType();
- switch(type) {
- case ITCConnection.MEDIA_REALSERIAL:
- {
+ String type = inConnection.getConnectionType();
+ if (type.compareToIgnoreCase("serial") == 0) {
settings = new String[7];
ITCRealSerialConnection s = (ITCRealSerialConnection)inConnection;
settings[0] = s.getComPort();
@@ -927,36 +875,25 @@
settings[4] = s.getStopBits();
settings[5] = s.getFlowControl();
settings[6] = s.getDecodeFormat().toLowerCase();
- }
- break;
- case ITCConnection.MEDIA_REALTCP:
- {
+ } else if (type.compareToIgnoreCase("tcp") == 0) {
settings = new String[3];
ITCRealTCPConnection s = (ITCRealTCPConnection)inConnection;
settings[0] = s.getIpAddress();
settings[1] = s.getPort();
settings[2] = s.getDecodeFormat().toLowerCase();
- }
- break;
- case ITCConnection.MEDIA_USB:
- {
+ } else if (type.compareToIgnoreCase("usb") == 0) {
settings = new String[1];
- }
- break;
- case ITCConnection.MEDIA_VIRTUALSERIAL:
- {
+ // finish this sometime when real USB is used on PC
+ } else if (type.compareToIgnoreCase("virtualserial") == 0) {
settings = new String[2];
ITCVirtualSerialConnection s = (ITCVirtualSerialConnection)inConnection;
settings[0] = s.getComPort();
settings[1] = s.getDecodeFormat().toLowerCase();
- }
- break;
- default:
+ } else {
+ // add new connections here
long err = TCErrorConstants.TCAPI_ERR_MEDIA_NOT_SUPPORTED;
status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)err, TCErrorConstants.getErrorMessage((int)err), null);
- break;
}
-
if (status.isOK()) {
status = doTestConnection(type, settings, inConnection);
/* // test connection
@@ -989,17 +926,17 @@
// natives
// connect/disconnect
- private native long nativeConnect(int inType, long[] inOptions, String[] inSettings, long[] inMessageOptions, String inFilePath, long[] outClientId);
- private native long nativeDisconnect(long inClientId);
+ protected native long nativeConnect(String inType, long[] inOptions, String[] inSettings, long[] inMessageOptions, String inFilePath, long[] outClientId);
+ protected native long nativeDisconnect(long inClientId);
// connections
protected native long nativeGetNumberConnections(long[] outNumber);
- protected native long nativeGetTypeOfConnection(long inIndex, int[] outType);
- protected native long nativeGetConnectionSettings(long inIndex, int[] outType, long[] outOptions, String[] outSettings);
+ protected native long nativeGetTypeOfConnection(long inIndex, String[] outType);
+ protected native long nativeGetConnectionSettings(long inIndex, String[] outType, long[] outOptions, String[] outSettings);
// port handling errors
public native boolean nativePollError(long inClienId, int[] outErrorCode, boolean[] outHasOSErrorCode, long[] outOSErrorCode);
// versions
- private native long nativeGetNumberVersionEntities(long inClientId);
- private native long nativeGetVersion(long inClientId, long inNumToGet, String[] outVersion);
+ protected native long nativeGetNumberVersionEntities(long inClientId);
+ protected native long nativeGetVersion(long inClientId, long inNumToGet, String[] outVersion);
// input stream
public native long nativePollInputStream(long inClientId, long[] outNumberTotalMessages);
public native long nativePollInputStream2(long inClientId, long inNumberMessagesToPeek, long[] outNumberMessagesPeeked, long[] outNumberBytesPeeked);
@@ -1008,17 +945,17 @@
public native long nativeOpenInputStream(long inClientId, String inBaseFilePath, long inInputStreamSize, boolean inOverFlowToFile);
public native long nativeCloseInputStream(long inClientId);
// message file
- private native long nativeClearFile(long inClientId);
+ protected native long nativeClearFile(long inClientId);
// send message
- private native long nativeSendMessage(long inClientId, long[] inFormattingOptions, String[] inSettings, byte[] inMessage);
+ protected native long nativeSendMessage(long inClientId, long[] inFormattingOptions, String[] inSettings, byte[] inMessage);
// register message IDs
- private native long nativeSetMessageIds(long inClientId, byte[] inMessageIds);
+ protected native long nativeSetMessageIds(long inClientId, byte[] inMessageIds);
// start/stop processing
- private native long nativeStart(long inClientId);
- private native long nativeStop(long inClientId);
+ protected native long nativeStart(long inClientId);
+ protected native long nativeStop(long inClientId);
// test connections
- private native long nativeTestConnection(int inType, long[] inOptions, String[] inSettings);
- private native long nativeTestConnection(long inClientId);
+ protected native long nativeTestConnection(String inType, long[] inOptions, String[] inSettings);
+ protected native long nativeTestConnection(long inClientId);
// start/stop server - done from plugin activator start/stop methods
public native long nativeStartServer();
public native long nativeStopServer();
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCBaseConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCBaseConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -28,7 +28,7 @@
public abstract class TCBaseConnection implements ITCConnection {
- private int connectionType;
+ private String connectionType;
private long retryInterval;
private long retryTimeout;
protected String decodeFormat;
@@ -38,10 +38,10 @@
* @param retryTimeout
* @param decodeFormat
*/
- public TCBaseConnection(int connectionType, long retryInterval,
+ public TCBaseConnection(String connectionType, long retryInterval,
long retryTimeout, String decodeFormat) {
super();
- this.connectionType = connectionType;
+ this.connectionType = connectionType.toLowerCase();
this.retryInterval = retryInterval;
this.retryTimeout = retryTimeout;
this.decodeFormat = decodeFormat;
@@ -50,9 +50,9 @@
/**
* @param connectionType
*/
- public TCBaseConnection(int connectionType) {
+ public TCBaseConnection(String connectionType) {
super();
- this.connectionType = connectionType;
+ this.connectionType = connectionType.toLowerCase();
this.retryInterval = DEFAULT_COMM_ERROR_RETRY_INTERVAL;
this.retryTimeout = DEFAULT_COMM_ERROR_RETRY_TIMEOUT;
this.decodeFormat = "ost";
@@ -63,10 +63,10 @@
* @param retryInterval
* @param retryTimeout
*/
- public TCBaseConnection(int connectionType, long retryInterval,
+ public TCBaseConnection(String connectionType, long retryInterval,
long retryTimeout) {
super();
- this.connectionType = connectionType;
+ this.connectionType = connectionType.toLowerCase();
this.retryInterval = retryInterval;
this.retryTimeout = retryTimeout;
this.decodeFormat = "ost";
@@ -80,7 +80,7 @@
/* (non-Javadoc)
* @see com.nokia.tcf.api.ITCConnection#getConnectionType()
*/
- public int getConnectionType() {
+ public String getConnectionType() {
return this.connectionType;
}
@@ -101,9 +101,9 @@
/* (non-Javadoc)
* @see com.nokia.tcf.api.ITCConnection#setConnectionType(int)
*/
- public IStatus setConnectionType(int inConnectionType) {
+ public IStatus setConnectionType(String inConnectionType) {
IStatus status = new Status(Status.OK, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_NONE, "OK", null);
- connectionType = inConnectionType;
+ connectionType = inConnectionType.toLowerCase();
return status;
}
@@ -145,14 +145,7 @@
*/
public IStatus setDecodeFormat(String inDecodeFormat) {
IStatus status = new Status(Status.OK, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_NONE, "OK", null);
- if ((inDecodeFormat.compareToIgnoreCase("platsim") == 0) ||
- (inDecodeFormat.compareToIgnoreCase("ost") == 0) ||
- (inDecodeFormat.compareToIgnoreCase("rawtrk") == 0)) {
- decodeFormat = inDecodeFormat;
- } else {
- status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_INVALID_DECODE_FORMAT, "Error", null);
- decodeFormat = "ost";
- }
+ decodeFormat = inDecodeFormat;
return status;
}
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealSerialConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealSerialConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -42,7 +42,7 @@
* All serial parameters are defaulted.
*/
public TCRealSerialConnection() {
- super(MEDIA_REALSERIAL);
+ super("serial");
comPort = DEFAULT_COM_PORT;
baudRate = DEFAULT_BAUD;
parity = DEFAULT_PARITY;
@@ -59,7 +59,7 @@
* @param inComPort
*/
public TCRealSerialConnection(String inComPort) {
- super(MEDIA_REALSERIAL);
+ super("serial");
comPort = inComPort;
baudRate = DEFAULT_BAUD;
parity = DEFAULT_PARITY;
@@ -79,7 +79,7 @@
*/
public TCRealSerialConnection(String inComPort, long retryInterval,
long retryTimeout) {
- super(MEDIA_REALSERIAL, retryInterval, retryTimeout);
+ super("serial", retryInterval, retryTimeout);
comPort = inComPort;
baudRate = DEFAULT_BAUD;
parity = DEFAULT_PARITY;
@@ -98,7 +98,7 @@
* @param inBaudRate
*/
public TCRealSerialConnection(String inComPort, String inBaudRate) {
- super(MEDIA_REALSERIAL);
+ super("serial");
comPort = inComPort;
baudRate = inBaudRate;
parity = DEFAULT_PARITY;
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealTCPConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealTCPConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -40,7 +40,7 @@
* @param inIpPort
*/
public TCRealTCPConnection(String inIpAddress, String inPort) {
- super(MEDIA_REALTCP);
+ super("tcp");
ipAddress = inIpAddress;
ipPort = inPort;
decodeFormat = "ost";
@@ -56,7 +56,7 @@
* @param retryTimeout
*/
public TCRealTCPConnection(String inIpAddress, String inIpPort, long retryInterval, long retryTimeout) {
- super(MEDIA_REALTCP, retryInterval, retryTimeout);
+ super("tcp", retryInterval, retryTimeout);
ipAddress = inIpAddress;
ipPort = inIpPort;
decodeFormat = "ost";
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCVirtualSerialConnection.java Mon Apr 06 15:12:13 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCVirtualSerialConnection.java Mon Apr 06 15:18:48 2009 -0500
@@ -34,7 +34,7 @@
* Create Virtual Serial connection with default COM port. Retry periods are defaulted.
*/
public TCVirtualSerialConnection() {
- super(MEDIA_VIRTUALSERIAL);
+ super("virtualserial");
this.comPort = ITCVirtualSerialConnection.DEFAULT_COM_PORT;
decodeFormat = "ost";
}
@@ -48,7 +48,7 @@
*/
public TCVirtualSerialConnection(long retryInterval,
long retryTimeout) {
- super(MEDIA_VIRTUALSERIAL, retryInterval, retryTimeout);
+ super("virtualserial", retryInterval, retryTimeout);
this.comPort = ITCVirtualSerialConnection.DEFAULT_COM_PORT;
decodeFormat = "ost";
}
@@ -59,7 +59,7 @@
* @param inPort
*/
public TCVirtualSerialConnection(String inPort) {
- super(MEDIA_VIRTUALSERIAL);
+ super("virtualserial");
this.comPort = inPort;
decodeFormat = "ost";
}