ARTCOM LOGO

Здравствуйте, гость ( Вход | Регистрация )

> TAPI calls monitoring
from_mars
сообщение 2.3.2009, 7:24
Сообщение #1


Частый гость
***

Группа: Участники
Сообщений: 42
Регистрация: 11.8.2008
Пользователь №: 11688



Пишу программу, которая должна отслеживать звонки на АТС (ipLDK 300 3.7Ce) через TAPI.

Подключиться получается, и даже уведомления о звонках получаю, но через пол часа или час, уведомления перестают приходить. Перезапуск программы (как выяснилось позже) дает результат, но уведомления перестают приходить уже через минут 10 - 15.

Кто сталкивался с подобным, подскажите где собака зарыта? )

Вот код, который слушает события от АТС.

CODE
DWORD g_dwAPIVersion = 0x00020001;
DWORD g_dwExtVersion = 0;


unsigned __stdcall line_event_proc(void* p)
{
LINEMESSAGE lm;
LPLINECALLSTATUS lpCallStatus;
long lResult;
DWORD dwLCSSize;
TCHAR szBuff[4096];
int nBuffPos;

dwLCSSize = sizeof(LINECALLSTATUS) + 4096;

lpCallStatus = (LPLINECALLSTATUS)malloc(dwLCSSize);

SYSTEMTIME st;

while (true) {
lResult = lineGetMessage(g_hLineApp, &lm, INFINITE);

if (lResult != 0) {
if (lResult == LINEERR_INVALAPPHANDLE){
_tprintf(_T("Application shuting down, leaving thread\n"));
return 0;
}

_tprintf(_T("EventThreadFunc: error on lineGetMessage: %x\n"), lResult);
Sleep(100);
continue;
}


if (LINE_CALLSTATE == lm.dwMessageID) {

memset(lpCallStatus, 0, dwLCSSize);
lpCallStatus->dwTotalSize = dwLCSSize;

// line status
if (!lineGetCallStatus(lm.hDevice, lpCallStatus)) {
switch(lpCallStatus->dwCallState) { // здесь обрабатываю сообщения

}

}

}
}

return 0;
}



int _tmain(int argc, _TCHAR* argv[])
{
LINEINITIALIZEEXPARAMS lip = {};

lip.dwTotalSize = sizeof(LINEINITIALIZEEXPARAMS);
lip.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;

lResult = lineInitializeEx(&g_hLineApp, GetModuleHandle(NULL), NULL, _T("TAPI call monitor"),
&dwNumDevs, &g_dwAPIVersion, &lip);


g_hTAPIEvent = lip.Handles.hEvent;

hThread = (HANDLE)_beginthreadex(NULL, 0, &line_event_proc, NULL, 0, &nThreadID);

for (DWORD dwDeviceID = 0; dwDeviceID < dwNumDevs; dwDeviceID++) {
HLINE hLine;
LINEEXTENSIONID lineExtensionID = {};

lResult = lineNegotiateAPIVersion(g_hLineApp, dwDeviceID, dwAPILowVersion, dwAPIHighVersion,
&g_dwAPIVersion, &lineExtensionID);

lResult = lineOpen (g_hLineApp, dwDeviceID, &hLine, g_dwAPIVersion, g_dwExtVersion, NULL,
LINECALLPRIVILEGE_MONITOR, 0, NULL);

}

getchar();
Sleep(100);
}
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов
vldmr
сообщение 10.3.2009, 15:48
Сообщение #2


Ветеран форума
*****

Группа: Участники
Сообщений: 1166
Регистрация: 29.8.2007
Из: Москва
Пользователь №: 4065



Станция может обслужить и два хоста (больше не пробовал)
У нас стоял драйвер на серваке и я параллельно запускал на своем компе и работало.
Перейти в начало страницы
 
+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18.7.2025, 16:38