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