⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tapi3eventnotification.cpp

📁 jtapi for telephone
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					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 + -