connectivity/com.nokia.tcf/native/TCFNative/TCFServer/RegistryImpl.cpp
author chpeckha
Mon, 06 Apr 2009 15:18:48 -0500
changeset 60 9d2210c8eed2
permissions -rw-r--r--
Commit changes for 2.1.0
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
// RegistryImpl.cpp: implementation of the CRegistryImpl 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 "RegistryImpl.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    23
#include "TCErrorConstants.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    24
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    25
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    26
extern BOOL gDoLogging;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    27
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    28
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    29
//#define LOG_REGISTRY
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    30
#if defined(LOG_REGISTRY) && defined(_DEBUG)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    31
extern char TCDebugMsg[];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    32
extern CServerManager* gManager;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    33
#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    34
#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    35
#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    36
#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    37
#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    38
#define TCDEBUGCLOSE() if (gDoLogging) { gManager->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 TCDEBUGCLOSE()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    46
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    47
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    48
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    49
// Construction/Destruction
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    50
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    51
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    52
CRegistryImpl::CRegistryImpl()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    53
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    54
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    55
	TCDEBUGLOGS("CRegistryImpl::CRegistryImpl\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    56
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    57
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    58
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    59
CRegistryImpl::CRegistryImpl(DWORD connectionId)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    60
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    61
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    62
	TCDEBUGLOGA1("CRegistryImpl::CRegistryImpl connectionId = %d\n", connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    63
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    64
	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    65
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    66
		m_Registry[i].clist = new IdClientList();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    67
		m_Registry[i].clist->clear();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    68
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    69
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    70
	char mutexName[200];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    71
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    72
	sprintf(mutexName, "%s%d", REGISTRY_MUTEX_BASENAME, connectionId);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    73
	m_Mutex.Open(mutexName, REGISTRY_MUTEX_TIMEOUT);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    74
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    75
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    76
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    77
CRegistryImpl::~CRegistryImpl()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    78
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    79
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    80
	TCDEBUGLOGS("CRegistryImpl::~CRegistryImpl\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    81
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    82
	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    83
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    84
		if (m_Registry[i].clist != NULL)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    85
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    86
			m_Registry[i].clist->clear();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    87
			delete m_Registry[i].clist;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    88
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    89
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    90
	m_Mutex.Close();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    91
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    92
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    93
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    94
BOOL CRegistryImpl::AddClient(CClient* newClient, long numberIds, BYTE* ids)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    95
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    96
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    97
	TCDEBUGLOGS("CRegistryImpl::AddClient\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    98
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    99
	m_Mutex.Wait();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   100
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   101
	for (int i = 0; i < numberIds; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   102
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   103
		TCDEBUGLOGA1(" id=%x\n", ids[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   104
		m_Registry[ids[i]].clist->push_back(newClient);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   105
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   106
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   107
	DumpRegistry();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   108
	m_Mutex.Release();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   109
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   110
	return TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   111
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   112
BOOL CRegistryImpl::RemoveClient(CClient* client)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   113
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   114
	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   115
	TCDEBUGLOGS("CRegistryImpl::RemoveClient\n");
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_Mutex.Wait();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   118
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   119
	BOOL found = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   120
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   121
	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   122
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   123
		long num = m_Registry[i].clist->size();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   124
		if (num != 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   125
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   126
			TCDEBUGLOGA3(" CRegistryImpl::RemoveClient client = %x i = %x num = %d\n", client, i, num);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   127
			IdClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   128
			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   129
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   130
				TCDEBUGLOGA2(" CRegistryImpl::RemoveClient iter = %x *iter = %x\n", iter, *iter);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   131
				if (client == *iter)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   132
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   133
					m_Registry[i].clist->erase(iter);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   134
					found = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   135
					break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   136
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   137
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   138
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   139
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   140
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   141
	m_Mutex.Release();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   142
	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   143
	return found;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   144
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   145
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   146
void CRegistryImpl::DumpRegistry()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   147
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   148
	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   149
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   150
		long num = m_Registry[i].clist->size();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   151
		if (num != 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
			TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry i = %x num = %d\n", i, num);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   154
			IdClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   155
			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   156
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   157
				TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry iter = %x *iter = %x\n", iter, *iter);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   158
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   159
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   160
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   161
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   162
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   163
// fullmessage includes the protocol header
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   164
// message is unwrapped from the protocol header
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   165
// this is because some clients want the full message and some clients just want the actual message
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   166
long CRegistryImpl::RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   167
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   168
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   169
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   170
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   171
//	TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   172
//	TCDEBUGLOGS("CRegistryImpl::RouteMessage\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   173
//	TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   174
	m_Mutex.Wait();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   175
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   176
	if (msgId >= 0 && msgId < MAX_MESSAGE_IDS)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   177
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   178
		long numClients = m_Registry[msgId&0xff].clist->size();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   179
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   180
		TCDEBUGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   181
		TCDEBUGLOGA2(" CRegistryImpl::RouteMessage msgId = %x numClients = %d\n", msgId, numClients);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   182
		TCDEBUGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   183
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   184
		if (numClients > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   185
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   186
			IdClientList::iterator iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   187
			for (iter = m_Registry[msgId&0xff].clist->begin(); iter != m_Registry[msgId&0xff].clist->end(); iter++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   188
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   189
				CClient* client = *iter;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   190
				if (client && client->IsStarted())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   191
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   192
					if (client->IsStreamOpen())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   193
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   194
						CInputStream* stream = client->GetInputStream();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   195
						// get unwrap format
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   196
						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   197
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   198
							// use full message
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   199
							err = stream->AddMessage(fullLen, fullMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   200
							// routing errors here can be input stream overflows
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   201
							//  notify this client right now (no OS error)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   202
							if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   203
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   204
								client->m_ErrorMonitor->PutError(err, false, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   205
								err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   206
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   207
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   208
						else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   209
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   210
							// use raw message
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   211
							err = stream->AddMessage(realMessageLen, realMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   212
							// routing errors here can be input stream overflows
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   213
							//  notify this client right now (no OS error)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   214
							if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   215
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   216
								client->m_ErrorMonitor->PutError(err, false, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   217
								err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   218
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   219
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   220
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   221
					else if (client->IsMessageFileOpen())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   222
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   223
						CMessageFile* file = client->GetMessageFile();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   224
						// get unwrap format
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   225
						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   226
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   227
							// use full message
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   228
							err = file->AddMessage(fullLen, fullMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   229
							// routing errors here can be input stream overflows
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   230
							//  notify this client right now (no OS error)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   231
							if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   232
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   233
								client->m_ErrorMonitor->PutError(err, false, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   234
								err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   235
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   236
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   237
						else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   238
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   239
							// use raw message
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   240
							err = file->AddMessage(realMessageLen, realMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   241
							// routing errors here can be input stream overflows
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   242
							//  notify this client right now (no OS error)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   243
							if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   244
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   245
								client->m_ErrorMonitor->PutError(err, false, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   246
								err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   247
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   248
						}
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
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   252
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   253
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   254
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   255
	m_Mutex.Release();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   256
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   257
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   258