📄 tapi3eventnotification.cpp
字号:
logger->error("Address changed, but failed to get the interface");
}
else {
wstring strAddress;
hr = getAddress<ITAddressEvent>(logger, pAddressEvent, strAddress);
if(FAILED(hr)) {
pAddressEvent->Release();
return hr;
}
logger->info("Address changed event on %S.", strAddress.c_str());
logger->debug("Calling get_Event()....");
ADDRESS_EVENT event;
hr = pAddressEvent->get_Event(&event);
if(FAILED(hr)) {
logger->error("get_Event() failed: hr=%08X", hr);
pAddressEvent->Release();
return hr;
}
wstring strTerminal;
hr = getTerminalName<ITAddressEvent>(logger, pAddressEvent, strTerminal);
if(SUCCEEDED(hr)) {
logger->info("TERMINAL NAME: %S.", strTerminal.c_str());
}
pAddressEvent->Release();
wstring info = L"Event=";
switch(event) {
case AE_STATE: info += L"AE_STATE"; break;
case AE_CAPSCHANGE: info += L"AE_CAPSCHANGE"; break;
case AE_RINGING: info += L"AE_RINGING"; break;
case AE_CONFIGCHANGE: info += L"AE_CONFIGCHANGE"; break;
case AE_FORWARD: info += L"AE_FORWARD"; break;
case AE_NEWTERMINAL: info += L"AE_NEWTERMINAL"; break;
case AE_REMOVETERMINAL: info += L"AE_REMOVETERMINAL"; break;
case AE_MSGWAITON: info += L"AE_MSGWAITON"; break;
case AE_MSGWAITOFF: info += L"AE_MSGWAITOFF"; break;
default: info += L"<UNKNOWN>"; break;
}
logger->info("AddressEvent=%08X (%S)", event, info.c_str());
}
break;
}
case TE_CALLHUB: {
logger->debug("TE_CALLHUB");
ITCallHubEvent* pCallHubEvent;
hr = pEvent->QueryInterface( IID_ITCallHubEvent, (void **)&pCallHubEvent );
if (FAILED(hr)) {
logger->error("CallHub changed, but failed to get the interface");
}
else {
logger->debug("CallHub event.");
CALLHUB_EVENT callHubEvent;
hr = pCallHubEvent->get_Event(&callHubEvent);
if(FAILED(hr)) {
logger->error("get_Event() failed: hr=%08X.", hr);
pCallHubEvent->Release();
return hr;
}
char* hubEventName[] = {"CHE_CALLJOIN", "CHE_CALLLEAVE", "CHE_CALLHUBNEW", "CHE_CALLHUBIDLE"};
logger->info("CALLHUB_EVENT = %08X (%s).", callHubEvent, hubEventName[callHubEvent]);
ITCallInfo* pCall;
hr = pCallHubEvent->get_Call(&pCall);
if (FAILED(hr)) {
logger->error("get_Call() failed: hr=%08X.", hr);
pCallHubEvent->Release();
return hr;
} else if(pCall == NULL) {
logger->debug("No call associated with this event.");
pCallHubEvent->Release();
return hr;
}
ITBasicCallControl* pCallControl;
hr = pCall->QueryInterface( IID_ITBasicCallControl, (void**)&pCallControl );
if(FAILED(hr)) {
logger->error("Error retrieving CallControl: hr=%08X", hr);
pCall->Release();
return hr;
}
int callID = pTapi3->getOrCreateCallID(pCallControl);
if(callID > 0) {
pCallControl->Release();
} else {
callID = -callID;
}
wstring callInfo[4];
if(getCallInfo(logger, pCall, callInfo)) {
wstring strAddress;
hr = getAddress<ITCallInfo>(logger, pCall, strAddress);
if(SUCCEEDED(hr)) {
callback(net_sourceforge_gjtapi_raw_tapi3_Tapi3Provider_METHOD_CALL_PRIVATE_DATA,
callID, strAddress, net_sourceforge_gjtapi_raw_tapi3_Tapi3Provider_JNI_CAUSE_NORMAL, callInfo);
}
}
pCall->Release();
pCallHubEvent->Release();
}
break;
}
case TE_CALLINFOCHANGE: {
logger->debug("TE_CALLINFOCHANGE");
ITCallInfoChangeEvent* pCallInfoChangeEvent;
hr = pEvent->QueryInterface( IID_ITCallInfoChangeEvent, (void **)&pCallInfoChangeEvent );
if (FAILED(hr)) {
logger->error("CallInfo changed, but failed to get the interface");
}
else {
logger->debug("CallInfoChanged event.");
CALLINFOCHANGE_CAUSE cause;
hr = pCallInfoChangeEvent->get_Cause(&cause);
if (FAILED(hr)) {
logger->error("get_Cause() failed: hr=%08X", hr);
pCallInfoChangeEvent->Release();
return hr;
}
char* causeName[] = {"CIC_OTHER",
"CIC_DEVSPECIFIC",
"CIC_BEARERMODE",
"CIC_RATE",
"CIC_APPSPECIFIC",
"CIC_CALLID",
"CIC_RELATEDCALLID",
"CIC_ORIGIN",
"CIC_REASON",
"CIC_COMPLETIONID",
"CIC_NUMOWNERINCR",
"CIC_NUMOWNERDECR",
"CIC_NUMMONITORS",
"CIC_TRUNK",
"CIC_CALLERID",
"CIC_CALLEDID",
"CIC_CONNECTEDID",
"CIC_REDIRECTIONID",
"CIC_REDIRECTINGID",
"CIC_USERUSERINFO",
"CIC_HIGHLEVELCOMP",
"CIC_LOWLEVELCOMP",
"CIC_CHARGINGINFO",
"CIC_TREATMENT",
"CIC_CALLDATA",
"CIC_PRIVILEGE",
"CIC_MEDIATYPE"
};
logger->debug("cause=%08X (%s)", cause, causeName[cause]);
ITCallInfo* pCallInfo;
hr = pCallInfoChangeEvent->get_Call(&pCallInfo);
pCallInfoChangeEvent->Release();
if (FAILED(hr)) {
logger->error("get_Call() failed: hr=%08X", hr);
return hr;
}
ITBasicCallControl* pCallControl;
hr = pCallInfo->QueryInterface(IID_ITBasicCallControl, (void**)&pCallControl);
if (FAILED(hr)) {
logger->error("Interface ITBasicCallControl not supported: hr=%08X.", hr);
pCallInfo->Release();
return hr;
}
int callID = pTapi3->getCallID(pCallControl);
wstring strAddress;
hr = getAddress<ITCallInfo>(logger, pCallInfo, strAddress);
pCallControl->Release();
if(FAILED(hr)) {
pCallInfo->Release();
return hr;
}
wstring callInfo[4];
if(getCallInfo(logger, pCallInfo, callInfo)) {
wstring strAddress;
hr = getAddress<ITCallInfo>(logger, pCallInfo, strAddress);
if(SUCCEEDED(hr)) {
callback(net_sourceforge_gjtapi_raw_tapi3_Tapi3Provider_METHOD_CALL_PRIVATE_DATA,
callID, strAddress, net_sourceforge_gjtapi_raw_tapi3_Tapi3Provider_JNI_CAUSE_NORMAL, callInfo);
}
}
pCallInfo->Release();
}
break;
}
/*
case TE_TAPIOBJECT: {
logger->debug("TE_TAPIOBJECT");
ITTAPIObjectEvent* pTAPIObjectEvent;
hr = pEvent->QueryInterface( IID_ITTAPIObjectEvent, (void **)&pTAPIObjectEvent);
if (FAILED(hr)) {
logger->error("TapiObject changed, but failed to get the interface");
}
else {
logger->debug("TapiObject event.");
ITTAPIObjectEvent2* pTAPIObjectEvent2;
hr = pEvent->QueryInterface( IID_ITTAPIObjectEvent2, (void **)&pTAPIObjectEvent2);
if (FAILED(hr)) {
logger->error("TapiObject event 2 NOT available.");
} else {
logger->debug("TapiObject event 2 available !!!.");
}
}
break;
}
*/
default:
logger->warn("tapiEvent=%08X", tapiEvent);
break;
}
return S_OK;
} catch(...) {
logger->fatal("Exception thrown in TAPI3EventNotification::Event.");
return E_FAIL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -