connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ConnectionImpl.cpp
author Chad Peckham <chad.peckham@nokia.com>
Thu, 17 Jun 2010 13:07:08 -0500
changeset 1489 d3e4dfeca859
parent 1481 c7f22cc57d44
permissions -rw-r--r--
close port on any error
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     1
/*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     3
* All rights reserved.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     4
* This component and the accompanying materials are made available
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     6
* which accompanies this distribution, and is available
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     8
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     9
* Initial Contributors:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    11
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    12
* Contributors:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    13
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    14
* Description: 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    15
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    16
*/
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    17
// ConnectionImpl.cpp: implementation of the CConnectionImpl class.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    18
//
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    19
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    20
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    21
#include "stdafx.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    22
#include "ConnectionImpl.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    23
#include "RegistryImpl.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    24
#include "ServerManager.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    25
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    26
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    27
extern BOOL gDoLogging;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    28
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    29
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
    30
#define LOG_CONNECTION
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    31
#if defined(LOG_CONNECTION) && defined(_DEBUG)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    32
#define TCDEBUGOPEN() if (gDoLogging) { this->m_DebugLog->WaitForAccess(); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    33
#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(this->m_DebugLogMsg,"%s", s); this->m_DebugLog->log(this->m_DebugLogMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    34
#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1); this->m_DebugLog->log(this->m_DebugLogMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    35
#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2); this->m_DebugLog->log(this->m_DebugLogMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    36
#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3); this->m_DebugLog->log(this->m_DebugLogMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    37
#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); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    38
#define TCDEBUGCLOSE() if (gDoLogging) { this->m_DebugLog->ReleaseAccess(); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    39
#else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    40
#define TCDEBUGOPEN()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    41
#define TCDEBUGLOGS(s)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    42
#define TCDEBUGLOGA1(s, a1)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    43
#define TCDEBUGLOGA2(s, a1, a2)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    44
#define TCDEBUGLOGA3(s, a1, a2, a3)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    45
#define TCDEBUGLOGA4(s, a1, a2, a3, a4)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    46
#define TCDEBUGCLOSE()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    47
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    48
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    49
//#define LOG_MPROCESSOR
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    50
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    51
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    52
// Construction/Destruction
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    53
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    54
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    55
CConnectionImpl::CConnectionImpl()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    56
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    57
	m_ConnectSettings = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    58
	m_ClientList = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    59
	m_Status = eDisconnected;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    60
	m_Registry = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    61
	m_ConnectionID = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    62
	m_OsError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    63
	m_BaseComm = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    64
	m_BaseProtocol = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    65
	m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    66
	m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    67
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    68
	// message processing thread flags and handles
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    69
	m_MessageProcessorState = MP_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    70
	m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    71
	m_PauseMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    72
	m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    73
	m_hMessageProcessorExittedEvent = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    74
	m_hMessageProcessorStoppedEvent = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    75
	m_hMessageProcessorStartedEvent = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    76
	m_hMessageProcessorThread = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    77
	m_dwMessageProcessorThreadId = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    78
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    79
	m_NextRetryTime = m_RetryTimeoutTime = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    80
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    81
	m_NextFlushFileTime = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    82
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    83
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    84
CConnectionImpl::CConnectionImpl(ConnectData conData, DWORD connectionId)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    85
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    86
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    87
	if (gDoLogging)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    88
	{
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    89
#if defined(LOG_CONNECTION)
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    90
		m_DebugLog = new TCDebugLog("TCF_ConnectionLog", connectionId);
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    91
#else
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    92
		m_DebugLog = NULL;
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    93
#endif
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    94
#if defined(LOG_MPROCESSOR)
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    95
		m_DebugLog2 = new TCDebugLog("TCF_ProcessorLog", connectionId);
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    96
#else
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    97
		m_DebugLog2 = NULL;
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    98
#endif
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    99
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   100
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   101
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   102
		m_DebugLog = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   103
		m_DebugLog2 = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   104
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   105
#else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   106
	m_DebugLog = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   107
	m_DebugLog2 = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   108
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   109
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   110
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   111
	TCDEBUGLOGA1("CConnectionImpl::CConnectionImpl id = %d\n", connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   112
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   113
	m_ConnectSettings = new ConnectData();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   114
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   115
	memcpy(m_ConnectSettings, &conData, sizeof(ConnectData));
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   116
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   117
	m_ClientList = new ClientList();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   118
	m_ClientList->clear();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   119
	m_Status = eDisconnected;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   120
	m_Registry = new CRegistryImpl(connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   121
	m_ConnectionID = connectionId;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   122
	m_BaseComm = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   123
	m_BaseProtocol = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   124
	m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   125
	m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   126
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   127
	// message processing thread flags and handles
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   128
	m_MessageProcessorState = MP_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   129
	m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   130
	m_PauseMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   131
	m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   132
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   133
	// create named events
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   134
	char eventName[100];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   135
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   136
	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_EXITEVENT_BASENAME, connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   137
	m_hMessageProcessorExittedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   138
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   139
	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STOPEVENT_BASENAME, connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   140
	m_hMessageProcessorStoppedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   141
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   142
	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STARTEVENT_BASENAME, connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   143
	m_hMessageProcessorStartedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   144
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   145
	m_hMessageProcessorThread = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   146
	m_dwMessageProcessorThreadId = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   147
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   148
	m_NextRetryTime = m_RetryTimeoutTime = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   149
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   150
	m_NextFlushFileTime = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   151
	m_OsError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   152
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   153
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   154
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   155
CConnectionImpl::~CConnectionImpl()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   156
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   157
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   158
	TCDEBUGLOGS("CConnectionImpl::~CConnectionImpl\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   159
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   160
	// terminate the message processor thread if running
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   161
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   162
	if (m_hMessageProcessorThread != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   163
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   164
		BOOL t = ::TerminateThread(m_hMessageProcessorThread, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   165
		::CloseHandle(m_hMessageProcessorThread);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   166
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   167
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   168
	if (m_hMessageProcessorExittedEvent != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   169
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   170
		::CloseHandle(m_hMessageProcessorExittedEvent);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   171
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   172
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   173
	if (m_hMessageProcessorStoppedEvent != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   174
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   175
		::CloseHandle(m_hMessageProcessorStoppedEvent);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   176
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   177
1215
657de0649d83 fix event leak bug 11107
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   178
	if (m_hMessageProcessorStartedEvent != NULL)
657de0649d83 fix event leak bug 11107
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   179
	{
657de0649d83 fix event leak bug 11107
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   180
		::CloseHandle(m_hMessageProcessorStartedEvent);
657de0649d83 fix event leak bug 11107
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   181
	}
657de0649d83 fix event leak bug 11107
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   182
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   183
	if (m_ConnectSettings)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   184
		delete m_ConnectSettings;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   185
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   186
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   187
	if (m_ClientList)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   188
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   189
		m_ClientList->clear();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   190
		delete m_ClientList;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   191
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   192
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   193
	if (m_Registry)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   194
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   195
		delete m_Registry;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   196
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   197
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   198
	if (m_BaseComm)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   199
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   200
		delete m_BaseComm;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   201
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   202
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   203
	if (m_BaseCommHandle)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   204
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   205
		::FreeLibrary(m_BaseCommHandle);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   206
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   207
	if (m_BaseProtocol)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   208
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   209
		delete m_BaseProtocol;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   210
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   211
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   212
	if (m_BaseProtocolHandle)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   213
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   214
		::FreeLibrary(m_BaseProtocolHandle);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   215
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   216
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   217
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   218
	if (m_DebugLog)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   219
		delete m_DebugLog;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   220
	if (m_DebugLog2)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   221
		delete m_DebugLog2;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   222
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   223
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   224
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   225
BOOL CConnectionImpl::IsEqual(CConnection* connection)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   226
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   227
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   228
	TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   229
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   230
	BOOL equal = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   231
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   232
	if (strcmp(m_ConnectSettings->connectType, connection->m_ConnectSettings->connectType) == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   233
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   234
		if (m_BaseComm)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   235
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   236
			if (m_BaseComm->IsConnectionEqual(connection->m_ConnectSettings))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   237
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   238
				equal = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   239
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   240
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   241
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   242
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   243
			equal = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   244
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   245
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   246
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   247
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   248
	return equal;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   249
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   250
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   251
BOOL CConnectionImpl::IsEqual(pConnectData pConData)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   252
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   253
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   254
	TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   255
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   256
	BOOL equal = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   257
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   258
	if (strcmp(m_ConnectSettings->connectType, pConData->connectType) == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   259
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   260
		if (m_BaseComm)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   261
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   262
			if (m_BaseComm->IsConnectionEqual(pConData))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   263
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   264
				equal = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   265
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   266
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   267
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   268
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   269
			equal = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   270
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   271
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   272
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   273
	return equal;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   274
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   275
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   276
long CConnectionImpl::DoConnect()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   277
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   278
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   279
	TCDEBUGLOGS("CConnectionImpl::DoConnect\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   280
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   281
	long ret = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   282
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   283
	if (m_BaseComm && m_BaseProtocol)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   284
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   285
		ret = m_BaseComm->OpenPort();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   286
		if (ret != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   287
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   288
			m_OsError = m_BaseComm->m_lastCommError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   289
			TCDEBUGLOGA1(" m_BaseComm->OpenPort = %d\n", ret);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   290
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   291
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   292
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   293
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   294
		ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   295
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   296
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   297
	if (ret == TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   298
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   299
		m_Status = eConnected;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   300
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   301
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   302
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   303
		StartProcessing();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   304
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   305
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   306
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   307
//		if (m_BaseComm != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   308
//		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   309
//			delete m_BaseComm;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   310
//			m_BaseComm = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   311
//		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   312
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   313
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   314
	return ret;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   315
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   316
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   317
long CConnectionImpl::DoDisconnect()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   318
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   319
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   320
	TCDEBUGLOGS("CConnectionImpl::DoDisconnect\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   321
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   322
	long ret = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   323
	if (IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   324
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   325
		ret = m_BaseComm->ClosePort();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   326
//		delete m_BaseComm;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   327
//		m_BaseComm = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   328
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   329
	m_Status = eDisconnected;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   330
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   331
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   332
	return ret;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   333
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   334
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   335
BOOL CConnectionImpl::AddClient(CClient* client)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   336
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   337
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   338
	TCDEBUGLOGS("CConnectionImpl::AddClient\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   339
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   340
	BOOL ok = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   341
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   342
	m_ClientList->push_back(client);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   343
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   344
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   345
	return ok;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   346
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   347
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   348
long CConnectionImpl::DoSendMessage(long encodeOption, BYTE protocolVersion, BOOL useMsgId, BYTE msgId, DWORD msgLength, BYTE* pMsg)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   349
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   350
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   351
	TCDEBUGLOGS("CConnectionImpl::DoSendMessage\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   352
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   353
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   354
	if (IsRetryInProgress())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   355
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   356
		err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   357
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   358
	else if (IsRetryTimedOut())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   359
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   360
		err = TCAPI_ERR_COMM_TIMEOUT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   361
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   362
	else if (m_Status == eConnected)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   363
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   364
		BYTE* encodedMessage = new BYTE[msgLength + 40]; // add enough for header (msgLength may be 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   365
		// if msgLength == 0, then encodeOption SHOULD be ENCODE_FORMAT since com expects to send something!
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   366
		if (encodeOption == ENCODE_FORMAT)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   367
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   368
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   369
			char msg[200]; msg[0] = '\0';
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   370
			int len = (msgLength > 30) ? 30 : msgLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   371
			for (int i = 0; i < len; i ++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   372
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   373
				sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   374
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   375
			sprintf(msg, "%s\n", msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   376
			TCDEBUGLOGS(msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   377
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   378
			// msgLength maybe 0 and pMsg maybe NULL (we're not sending a raw message, just a protocol header)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   379
			msgLength = m_BaseProtocol->EncodeMessage(pMsg, msgLength, protocolVersion, msgId, encodedMessage, msgLength+40);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   380
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   381
			msg[0] = '\0';
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   382
			len = (msgLength > 30) ? 30 : msgLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   383
			for (i = 0; i < len; i ++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   384
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   385
				sprintf(msg, "%s%02.2x ", msg, encodedMessage[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   386
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   387
			sprintf(msg, "%s\n", msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   388
			TCDEBUGLOGS(msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   389
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   390
			err = m_BaseComm->SendDataToPort(msgLength, encodedMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   391
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   392
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   393
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   394
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   395
			char msg[200]; msg[0] = '\0';
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   396
			int len = (msgLength > 30) ? 30 : msgLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   397
			for (int i = 0; i < len; i ++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   398
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   399
				sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   400
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   401
			sprintf(msg, "%s\n", msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   402
			TCDEBUGLOGS(msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   403
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   404
			// msgLength != 0 and pMsg != NULL
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   405
			err = m_BaseComm->SendDataToPort(msgLength, pMsg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   406
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   407
		delete[] encodedMessage;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   408
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   409
		TCDEBUGLOGS("CConnectionImpl::DoSendMessage done\n");
1489
d3e4dfeca859 close port on any error
Chad Peckham <chad.peckham@nokia.com>
parents: 1481
diff changeset
   410
		if (err != TCAPI_ERR_NONE)
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   411
		{
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
   412
//			EnterRetryPeriod(err, true, m_BaseComm->m_lastCommError);
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   413
			HandleFatalPortError(err, true, m_BaseComm->m_lastCommError);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   414
			m_OsError = m_BaseComm->m_lastCommError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   415
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   416
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   417
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   418
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   419
		err = TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   420
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   421
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   422
	TCDEBUGLOGA1("CConnectionImpl::DoSendMessage err = %d\n", err);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   423
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   424
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   425
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   426
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   427
long CConnectionImpl::DoRetryProcessing()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   428
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   429
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   430
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   431
	// if not connected
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   432
	//   return no error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   433
	if (m_BaseComm == NULL /*|| m_BaseComm->IsConnected() == false*/)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   434
		return TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   435
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   436
	// if retry not in progress && retry not timed out
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   437
	//   return no error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   438
	if (!IsRetryInProgress() && !IsRetryTimedOut())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   439
		return TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   440
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   441
//	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   442
//	TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   443
//	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   444
	// if retry timeout flag already set
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   445
	//   return timeout error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   446
	if (IsRetryTimedOut())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   447
		return TCAPI_ERR_COMM_TIMEOUT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   448
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   449
	// get current time
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   450
	time_t ctime;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   451
	time(&ctime);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   452
	// if retry timeout period has expired
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   453
	if (ctime >= m_RetryTimeoutTime)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   454
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   455
		TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   456
		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry timeout\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   457
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   458
		// send timeout error to all clients
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   459
		NotifyClientsCommError(TCAPI_ERR_COMM_TIMEOUT);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   460
		// close comm port
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   461
		m_BaseComm->ClosePort();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   462
		// set retry timeout flag
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   463
		SetRetryTimedOut();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   464
		// return retry timeout error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   465
		err = TCAPI_ERR_COMM_TIMEOUT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   466
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   467
	// else if retry time has passed
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   468
	else if (ctime >= m_NextRetryTime)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   469
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   470
		TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   471
		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry time\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   472
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   473
		// close comm port
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   474
		// reopen comm port
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   475
		m_BaseComm->ClosePort();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   476
		int openErr = m_BaseComm->OpenPort();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   477
		// if comm error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   478
		if (openErr != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   479
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   480
			// set next retry time
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   481
			// return comm error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   482
			m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   483
			err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   484
			m_OsError = m_BaseComm->m_lastCommError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   485
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   486
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   487
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   488
		TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   489
		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing reconnected\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   490
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   491
			// send reconnect warning to all clients
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   492
			NotifyClientsCommError(TCAPI_INFO_COMM_RECONNECTED);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   493
			// set connected
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   494
			SetConnected();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   495
			err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   496
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   497
	} 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   498
	else // still in retry
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   499
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   500
		err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   501
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   502
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   503
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   504
//	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   505
//	TCDEBUGLOGA1("CConnectionImpl::DoRetryProcessing err = %d\n", err);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   506
//	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   507
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   508
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   509
long CConnectionImpl::EnterRetryPeriod(long commErr, bool passOsErr, DWORD osErr)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   510
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   511
	TCDEBUGOPEN();
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
   512
	TCDEBUGLOGA3("CConnectionImpl::EnterRetryPeriod commErr=%d passOsErr=%d osErr=%d\n", commErr, passOsErr, osErr);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   513
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   514
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   515
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   516
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   517
	// set next retry time
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   518
	time_t ctime;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   519
	time(&ctime);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   520
	m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   521
	// set retry timeout time
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   522
	m_RetryTimeoutTime = ctime + m_ConnectSettings->retryTimeout;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   523
	// send comm error to all clients
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   524
	NotifyClientsCommError(commErr, passOsErr, osErr);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   525
	// set retry in progress flag
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   526
	SetRetryInProgress();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   527
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   528
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   529
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   530
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   531
BOOL CConnectionImpl::RemoveClient(CClient* client)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   532
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   533
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   534
	TCDEBUGLOGS("CConnectionImpl::RemoveClient\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   535
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   536
	BOOL found = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   537
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   538
	if (m_ClientList->size() != 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   539
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   540
		ClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   541
		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   542
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   543
			if ((*iter)->GetClientId() == client->GetClientId())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   544
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   545
				m_ClientList->erase(iter);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   546
				found = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   547
				break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   548
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   549
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   550
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   551
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   552
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   553
	return found;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   554
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   555
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   556
BOOL CConnectionImpl::ExitProcessing()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   557
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   558
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   559
	TCDEBUGLOGS("CConnectionImpl::ExitProcessing\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   560
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   561
	// exit the messageprocessing thread
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   562
	if (m_hMessageProcessorThread != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   563
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   564
		m_MessageProcessorState = MP_EXIT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   565
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   566
		m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   567
		m_PauseMessageProcessing = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   568
		m_ExitMessageProcessor = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   569
		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorExittedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   570
		TCDEBUGLOGA1("CConnectionImpl::ExitProcessing waitStatus=%x\n", waitStatus);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   571
		::CloseHandle(m_hMessageProcessorThread);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   572
		m_hMessageProcessorThread = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   573
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   574
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   575
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   576
	return TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   577
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   578
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   579
BOOL CConnectionImpl::StartProcessing()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   580
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   581
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   582
	TCDEBUGLOGS("CConnectionImpl::StartProcessing\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   583
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   584
	// starts processing thread
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   585
	if (m_hMessageProcessorThread == NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   586
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   587
		m_MessageProcessorState = MP_PAUSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   588
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   589
		m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   590
		m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   591
		m_PauseMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   592
		// TODO: create thread
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   593
		m_hMessageProcessorThread = ::CreateThread(
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   594
			NULL,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   595
			0,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   596
			(LPTHREAD_START_ROUTINE) MessageProcessor,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   597
			this,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   598
			0,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   599
			&m_dwMessageProcessorThreadId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   600
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   601
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   602
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   603
	return PauseProcessing();//RestartProcessing();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   604
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   605
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   606
BOOL CConnectionImpl::PauseProcessing()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   607
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   608
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   609
	TCDEBUGLOGS("CConnectionImpl::PauseProcessing\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   610
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   611
	// tells the processing thread to pause
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   612
	if (m_hMessageProcessorThread != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   613
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   614
		m_MessageProcessorState = MP_PAUSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   615
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   616
		m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   617
		m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   618
		m_PauseMessageProcessing = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   619
		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStoppedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   620
		TCDEBUGLOGA1("CConnectionImpl::PauseProcessing waitStatus=%x\n", waitStatus);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   621
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   622
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   623
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   624
	return TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   625
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   626
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   627
BOOL CConnectionImpl::RestartProcessing()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   628
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   629
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   630
	TCDEBUGLOGS("CConnectionImpl::RestartProcessing\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   631
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   632
	// tell the processing thread to restart
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   633
	if (m_hMessageProcessorThread != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   634
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   635
		m_MessageProcessorState = MP_START;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   636
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   637
		m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   638
		m_StartMessageProcessing = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   639
		m_PauseMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   640
		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStartedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   641
		TCDEBUGLOGA1("CConnectionImpl::RestartProcessing waitStatus=%x\n", waitStatus);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   642
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   643
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   644
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   645
	return TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   646
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   647
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   648
BOOL CConnectionImpl::RemoveClientFromRegistry(CClient* client)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   649
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   650
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   651
	TCDEBUGLOGS("CConnectionImpl::RemoveClientFromRegistry\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   652
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   653
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   654
	return m_Registry->RemoveClient(client);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   655
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   656
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   657
BOOL CConnectionImpl::AddClientToRegistry(CClient* client, long numberIds, BYTE* ids)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   658
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   659
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   660
	TCDEBUGLOGS("CConnectionImpl::AddClientToRegistry\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   661
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   662
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   663
	return m_Registry->AddClient(client, numberIds, ids);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   664
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   665
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   666
long CConnectionImpl::HandleFatalPortError(long err, bool passOsErr, DWORD osErr)
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   667
{
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   668
	TCDEBUGOPEN();
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   669
	TCDEBUGLOGA3("CConnectionImpl::HandleFatalPortError err=%d passOsErr=%d osErr=%d\n", err, passOsErr, osErr);
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   670
	TCDEBUGCLOSE();
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   671
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   672
	m_BaseComm->ClosePort();
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   673
	m_Status = eDisconnected;
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   674
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   675
	NotifyClientsCommError(err);
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   676
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   677
	return TCAPI_ERR_NONE;
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   678
}
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   679
void CConnectionImpl::NotifyClientsCommError(long tcfError, bool passOsError, DWORD osError)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   680
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   681
//	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   682
//	TCDEBUGLOGS("CConnectionImpl::NotifyClientsCommError\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   683
//	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   684
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   685
	if (m_ClientList->size() != 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   686
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   687
		ClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   688
		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   689
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   690
			CErrorMonitor* errorMonitor = (*iter)->m_ErrorMonitor;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   691
			errorMonitor->PutError(tcfError, passOsError, osError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   692
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   693
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   694
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   695
BOOL CConnectionImpl::HasVersion()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   696
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   697
	BOOL found = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   698
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   699
	if (m_BaseComm && m_BaseComm->HasVersion())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   700
		found = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   701
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   702
	return found;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   703
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   704
void CConnectionImpl::GetVersion(char* version)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   705
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   706
	if (HasVersion()) {
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   707
		m_BaseComm->GetVersion(version);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   708
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   709
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   710
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   711
void CConnectionImpl::UnLockAllDestinations()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   712
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   713
	if (m_ClientList->size() != 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   714
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   715
		ClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   716
		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   717
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   718
			CInputStream* inputStream = (*iter)->m_InputStream;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   719
			CMessageFile* file = (*iter)->m_MessageFile;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   720
			if (inputStream != NULL) 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   721
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   722
				inputStream->UnLockStream();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   723
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   724
			else if (file != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   725
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   726
				file->UnLockMessageFile();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   727
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   728
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   729
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   730
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   731
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   732
#if defined(LOG_MPROCESSOR) && defined(_DEBUG)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   733
#define MPLOGOPEN() if (gDoLogging) { pThis->m_DebugLog2->WaitForAccess(); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   734
#define MPLOGS(s) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2,"%s", s); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   735
#define MPLOGA1(s, a1) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   736
#define MPLOGA2(s, a1, a2) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   737
#define MPLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2, a3); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   738
#define MPLOGCLOSE() if (gDoLogging) { pThis->m_DebugLog2->ReleaseAccess(); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   739
#else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   740
#define MPLOGOPEN()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   741
#define MPLOGS(s)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   742
#define MPLOGA1(s, a1)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   743
#define MPLOGA2(s, a1, a2)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   744
#define MPLOGA3(s, a1, a2, a3)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   745
#define MPLOGCLOSE()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   746
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   747
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   748
DWORD WINAPI CConnectionImpl::MessageProcessor(LPVOID lpParam)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   749
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   750
	CConnectionImpl* pThis = (CConnectionImpl*)lpParam;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   751
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   752
	MPLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   753
	MPLOGS("MessageProcessor start thread\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   754
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   755
	bool processing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   756
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   757
	DWORD pollSize = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   758
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   759
	while (pThis->m_MessageProcessorState != MP_EXIT)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   760
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   761
		if (pThis->m_MessageProcessorState == MP_PAUSE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   762
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   763
			MPLOGS("MessageProcessor pause\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   764
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   765
			processing = false; 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   766
			pThis->m_PauseMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   767
			pThis->m_MessageProcessorState = MP_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   768
			BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStoppedEvent);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   769
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   770
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   771
		if (pThis->IsRetryInProgress())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   772
			err = pThis->DoRetryProcessing();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   773
		else if (pThis->IsRetryTimedOut())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   774
			err = TCAPI_ERR_COMM_TIMEOUT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   775
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   776
		if (processing && err == TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   777
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   778
			if (pThis->m_BaseComm && pThis->m_BaseComm->IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   779
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   780
				err = pThis->m_BaseComm->PollPort(pollSize);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   781
				MPLOGA2("MessageProcessor PollPort = %d pollsize = %d\n", err, pollSize);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   782
				if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   783
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   784
					MPLOGA2("MessageProcessor  err = %d osError = %d\n", err, pThis->m_BaseComm->m_lastCommError);
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
   785
//					pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   786
					if (err == TCAPI_ERR_COMM_ERROR)
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   787
						pThis->HandleFatalPortError(err, true, pThis->m_BaseComm->m_lastCommError);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   788
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   789
				else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   790
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   791
					if (pollSize == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   792
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   793
						Sleep(1);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   794
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   795
					else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   796
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   797
						long numberProcessed = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   798
//						MPLOGA1("MessageProcessor ProcessBuffer pRegistry = %x\n", pThis->m_Registry);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   799
						err = pThis->m_BaseComm->ProcessBuffer(pThis, pThis->m_Registry, numberProcessed);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   800
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   801
						MPLOGA2("MessageProcessor ProcessBuffer err = %d number = %d\n", err, numberProcessed);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   802
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   803
						if (err == TCAPI_ERR_COMM_ERROR)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   804
						{
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 1215
diff changeset
   805
							MPLOGA2("MessageProcessor  err = %d osError = %d\n", err, pThis->m_BaseComm->m_lastCommError);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   806
							// for this error we have os error, but we probably caught this in PollPort already
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
   807
//							pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   808
							if (err == TCAPI_ERR_COMM_ERROR)
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   809
								pThis->HandleFatalPortError(err, true, pThis->m_BaseComm->m_lastCommError);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   810
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   811
						else if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   812
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   813
							// all clients already notified in ProcessBuffer
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   814
							err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   815
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   816
						pThis->UnLockAllDestinations(); // unlock all input streams, if they became locked during AddMessage()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   817
//						Sleep(1);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   818
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   819
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   820
//				MPLOGS("MessageProcessor FlushAllClientMessageFiles\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   821
				pThis->FlushAllClientMessageFiles();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   822
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   823
			else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   824
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   825
				// basecom not connected
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   826
				Sleep(1);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   827
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   828
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   829
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   830
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   831
			// processing is not being done
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   832
			Sleep(1);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   833
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   834
		if (pThis->m_MessageProcessorState == MP_START)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   835
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   836
			MPLOGS("MessageProcessor start\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   837
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   838
			processing = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   839
			pThis->m_StartMessageProcessing = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   840
			pThis->m_MessageProcessorState = MP_PROCESSING;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   841
			BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStartedEvent);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   842
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   843
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   844
	// signal we're stopping
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   845
	pThis->m_ExitMessageProcessor = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   846
	pThis->m_MessageProcessorState = MP_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   847
	::SetEvent(pThis->m_hMessageProcessorExittedEvent);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   848
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   849
	MPLOGS("MessageProcessor exit thread\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   850
	MPLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   851
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   852
	return 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   853
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   854
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   855
void CConnectionImpl::FlushAllClientMessageFiles()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   856
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   857
	DWORD cTick = GetTickCount();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   858
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   859
//	MPLOGA2("CConnectionImpl::FlushAllClientMessageFiles cTick=%d m_NextFlushFileTime=%d\n", cTick, m_NextFlushFileTime);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   860
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   861
	if (cTick > m_NextFlushFileTime)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   862
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   863
//	MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush timeout\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   864
		if (m_ClientList->size() != 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   865
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   866
			ClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   867
			for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   868
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   869
				CMessageFile* file = (*iter)->m_MessageFile;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   870
				if (file != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   871
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   872
//	MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush client\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   873
					file->FlushFile();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   874
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   875
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   876
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   877
		m_NextFlushFileTime = GetTickCount() + FLUSH_TIME;		
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   878
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   879
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   880
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   881
BOOL CConnectionImpl::CreateCommProtocols(const char* commPath, const char* protPath)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   882
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   883
	BOOL loaded = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   884
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   885
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   886
	TCDEBUGLOGS("CConnectionImpl::CreateCommProtocols\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   887
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   888
	TCDEBUGLOGA2(" commPath=%s protPath=%s\n", commPath, protPath);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   889
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   890
	m_BaseCommHandle = ::LoadLibrary(commPath);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   891
	m_BaseProtocolHandle = ::LoadLibrary(protPath);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   892
	if (m_BaseCommHandle == NULL || m_BaseProtocolHandle == NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   893
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   894
		TCDEBUGLOGA2(" error loading library, m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseCommHandle, m_BaseProtocolHandle);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   895
		if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   896
		if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   897
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   898
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   899
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   900
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   901
		COMMCREATE lpCommFn = (COMMCREATE)::GetProcAddress(m_BaseCommHandle, COMMCREATE_FNNAME);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   902
		PROTOCOLCREATE lpProtFn = (PROTOCOLCREATE)::GetProcAddress(m_BaseProtocolHandle, PROTOCOLCREATE_FNNAME);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   903
		if (lpCommFn == NULL || lpProtFn == NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   904
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   905
			TCDEBUGLOGA2(" error finding function, lpCommFn=%x lpProtFn=%x\n", lpCommFn, lpProtFn);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   906
			if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   907
			if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   908
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   909
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   910
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   911
			m_BaseProtocol = lpProtFn();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   912
			if (m_BaseProtocol == NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   913
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   914
				TCDEBUGLOGA1(" error creating protocol, m_BaseProtocol=%x\n", m_BaseProtocol);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   915
				if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   916
				if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   917
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   918
			else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   919
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   920
				m_BaseComm = lpCommFn(m_ConnectSettings, m_ConnectionID, m_BaseProtocol);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   921
				if (m_BaseComm == NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   922
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   923
					TCDEBUGLOGA1(" error creating comm, m_BaseComm=%x\n", m_BaseComm);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   924
					if (m_BaseProtocol) delete m_BaseProtocol; m_BaseProtocol = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   925
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   926
					if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   927
					if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   928
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   929
				else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   930
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   931
					loaded = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   932
					TCDEBUGLOGA4(" created class, m_BaseComm=%x m_BaseProtocol=%x m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseComm, m_BaseProtocol, m_BaseCommHandle, m_BaseProtocolHandle);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   933
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   934
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   935
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   936
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   937
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   938
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   939
	return loaded;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   940
}