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
сообщение 2.3.2009, 10:10
Сообщение #2


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

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



я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?

Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт?
А если запустить exe с этого сайта - теряет связь или нет?
Перейти в начало страницы
 
+Цитировать сообщение
from_mars
сообщение 3.3.2009, 2:53
Сообщение #3


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

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



Цитата(vldmr @ 2.3.2009, 17:10) *
я так понимаю что исходник отсюда - http://www.julmar.com/tapi/ ?

Как запущено TAPI - TSP драйвер на выделенном сервере или на компе, где сам софт?
А если запустить exe с этого сайта - теряет связь или нет?


Да, писал на основе исходников этого сайта.
TSP на компе, на котором софт. Настроен как 3rd Pfrty Connection.
На счет exe с сайта, пробовал TCMON, проработал больше часа, потом пришлось выключить smile.gif Но по нему не понятно, были ли пропадания связи по TAPI. Еще погоняю. Надеюсь это моя ошибка.

Цитата(ALLeX)
В обработке LINE_CALLSTATE не хватает
if (lm.dwParam1==LINECALLSTATE_IDLE) {
lineDeallocateCall(lm.hDevice);
}


Спасибо, попробую.

Цитата(ALLeX)
PS. А Вы упрямый! wink.gif


В смысле? smile.gif
Перейти в начало страницы
 
+Цитировать сообщение

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


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

 



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