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

📄 tapiconn.cpp

📁 基于Tapi 3.0的软电话源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					long pReg = 0;

					// register callback for this address
					hr = m_pTAPI3->RegisterCallNotifications(pAddress, 
															VARIANT_TRUE, 
															VARIANT_TRUE, 
															lMediaType, 
															0, 
															&pReg);

					// Create a TAPI address object
					CTAPIAddr *pAddr = new CTAPIAddr(m_pTAPI3, 
													 Addr, 
													 DialAddr, 
													 lMediaType, 
													 pReg, 
													 pAddress);

					// Add to TAPI Address Map, key on display name
					// No need to AddRef as 'new' already called AddRef
					//CTAPIAddr::AddToAddrMap(CString(Addr), pAddr);				
					
					// Add to TAPI Address Map, key on dialable address
					CTAPIAddr::AddToAddrMap(CString(DialAddr), pAddr);

					pAddr->Release();					

					if (hr != S_OK)
					{
						PRINT_INIT(-1, 0, "Failed to register Call Notification for the above address, hr=%x", hr);
					}
				}

				// Release the line
				pAddress->Release();
					
				// Free all the BSTRs
				SysFreeString(Addr);
				SysFreeString(Provider);
				SysFreeString(DialAddr);
			}
			else
			{
				// No more addresses, exit while loop
				break;
			}
		}
		pEnumAddress->Release();
	}

	return 0;
}

CString CTAPIConn::GetASCIITAPIError(long lError)
{
	static CString sErrMsg;

	switch(lError)
	{
		case LINEERR_BADDEVICEID: sErrMsg=_T("LINEERR_BADDEVICEID"); break;
		case LINEERR_NODRIVER: sErrMsg=_T("LINEERR_NODRIVER"); break;
		case LINEERR_INCOMPATIBLEAPIVERSION: sErrMsg=_T("LINEERR_INCOMPATIBLEAPIVERSION"); break;
		case LINEERR_OPERATIONFAILED: sErrMsg=_T("LINEERR_OPERATIONFAILED"); break;
		case LINEERR_INVALAPPHANDLE: sErrMsg=_T("LINEERR_INVALAPPHANDLE"); break;
		case LINEERR_RESOURCEUNAVAIL: sErrMsg=_T("LINEERR_RESOURCEUNAVAIL"); break;
		case LINEERR_INVALPOINTER: sErrMsg=_T("LINEERR_INVALPOINTER"); break;
		case LINEERR_UNINITIALIZED: sErrMsg=_T("LINEERR_UNINITIALIZED"); break;
		case LINEERR_NOMEM: sErrMsg=_T("LINEERR_NOMEM"); break;
		case LINEERR_OPERATIONUNAVAIL: sErrMsg=_T("LINEERR_OPERATIONUNAVAIL"); break;
		case LINEERR_NODEVICE: sErrMsg=_T("LINEERR_NODEVICE"); break;
		default: sErrMsg.Format(_T("Unhandled TAPI Error (%d)"), lError); break;
	}
	
	return sErrMsg;
}

void CTAPIConn::GetASCIIMediaType(long& Type, CString& T)
{
	T.Empty();
	if (Type & TAPIMEDIATYPE_AUDIO) T += _T("Audio ");
	if (Type & TAPIMEDIATYPE_VIDEO) T += _T("Video ");
	if (Type & TAPIMEDIATYPE_DATAMODEM) T += _T("DataModem ");
	if (Type & TAPIMEDIATYPE_G3FAX) T += _T("G3FAX ");
}

void CTAPIConn::GetASCIICallOrigin(long dwOrigin, CString& sOrigin)
{
	sOrigin.Empty();
	if (dwOrigin & LINECALLORIGIN_CONFERENCE) sOrigin += _T("LINECALLORIGIN_CONFERENCE ");
	if (dwOrigin & LINECALLORIGIN_EXTERNAL) sOrigin += _T("LINECALLORIGIN_EXTERNAL ");
	if (dwOrigin & LINECALLORIGIN_INBOUND) sOrigin += _T("LINECALLORIGIN_INBOUND ");
	if (dwOrigin & LINECALLORIGIN_INTERNAL) sOrigin += _T("LINECALLORIGIN_INTERNAL ");
	if (dwOrigin & LINECALLORIGIN_OUTBOUND) sOrigin += _T("LINECALLORIGIN_OUTBOUND ");
	if (dwOrigin & LINECALLORIGIN_UNAVAIL) sOrigin += _T("LINECALLORIGIN_UNAVAIL ");
	if (dwOrigin & LINECALLORIGIN_UNKNOWN) sOrigin += _T("LINECALLORIGIN_UNKNOWN ");
}

void CTAPIConn::GetASCIICallReason(long dwReason, CString& sReason)
{
	sReason.Empty();
	if (dwReason & LINECALLREASON_DIRECT) sReason += _T("LINECALLREASON_DIRECT ");
	if (dwReason & LINECALLREASON_FWDBUSY) sReason += _T("LINECALLREASON_FWDBUSY ");
	if (dwReason & LINECALLREASON_FWDNOANSWER) sReason += _T("LINECALLREASON_FWDNOANSWER ");
	if (dwReason & LINECALLREASON_FWDUNCOND) sReason += _T("LINECALLREASON_FWDUNCOND ");
	if (dwReason & LINECALLREASON_UNPARK) sReason += _T("LINECALLREASON_UNPARK ");
	if (dwReason & LINECALLREASON_REDIRECT) sReason += _T("LINECALLREASON_REDIRECT ");
	if (dwReason & LINECALLREASON_CALLCOMPLETION) sReason += _T("LINECALLREASON_CALLCOMPLETION ");
	if (dwReason & LINECALLREASON_TRANSFER) sReason += _T("LINECALLREASON_TRANSFER ");
	if (dwReason & LINECALLREASON_REMINDER) sReason += _T("LINECALLREASON_REMINDER ");
	if (dwReason & LINECALLREASON_UNKNOWN) sReason += _T("LINECALLREASON_UNKNOWN ");
	if (dwReason & LINECALLREASON_UNAVAIL) sReason += _T("LINECALLREASON_UNAVAIL ");
	if (dwReason & LINECALLREASON_INTRUDE) sReason += _T("LINECALLREASON_INTRUDE ");
	if (dwReason & LINECALLREASON_PARKED)  sReason+= _T("LINECALLREASON_PARKED ");
	if (dwReason & LINECALLREASON_PICKUP) sReason += _T("sLINECALLREASON_PICKUPOrigin ");
	if (dwReason & LINECALLREASON_CAMPEDON) sReason += _T("LINECALLREASON_CAMPEDON ");
	if (dwReason & LINECALLREASON_ROUTEREQUEST) sReason += _T("LINECALLREASON_ROUTEREQUEST ");
}

void CTAPIConn::GetASCIICallState(CALL_STATE cState, CString& sState)
{
	sState.Empty();
	switch(cState)
	{
	case CS_IDLE:
		sState = _T("Idle");
		break;
	case CS_INPROGRESS:
		sState = _T("In Progress");
		break;
	case CS_CONNECTED:
		sState = _T("Connected");
		break;
	case CS_DISCONNECTED:
		sState = _T("Disconnected");
		break;
	case CS_OFFERING:
		sState = _T("Offering");
		break;
	case CS_HOLD:
		sState = _T("Hold");
		break;
	case CS_QUEUED:
		sState = _T("Queued");
		break;
	}
}

void CTAPIConn::GetASCIICallInfoChange(CALLINFOCHANGE_CAUSE Cause, CString& sCause)
{
	sCause.Empty();
	switch (Cause)
	{
		case CIC_OTHER:
		{
			sCause = _T("Other "); 
			break;
		}
		case CIC_DEVSPECIFIC:
		{
			sCause = _T("DevSpecific "); 
			break;
		}
		case CIC_BEARERMODE:
		{
			sCause = _T("BearerMode "); 
			break;
		}
		case CIC_RATE:
		{
			sCause = _T("Rate "); 
			break;
		}
		case CIC_APPSPECIFIC:
		{
			sCause = _T("AppSpecific "); 
			break;
		}
		case CIC_CALLID:
		{
			sCause = _T("CallId "); 
			break;
		}
		case CIC_RELATEDCALLID:
		{
			sCause = _T("RelatedCallId "); 
			break;
		}
		case CIC_ORIGIN:
		{
			sCause = _T("Origin "); 
			break;
		}
		case CIC_REASON:
		{
			sCause = _T("Reason "); 
			break;
		}
		case CIC_COMPLETIONID:
		{
			sCause = _T("CompletionId "); 
			break;
		}
		case CIC_NUMOWNERINCR:
		{
			sCause = _T("NumOwnerIncr "); 
			break;
		}
		case CIC_NUMOWNERDECR:
		{
			sCause = _T("NumOwnerDecr "); 
			break;
		}
		case CIC_NUMMONITORS:
		{
			sCause = _T("NumMonitors "); 
			break;
		}
		case CIC_TRUNK:
		{
			sCause = _T("Trunk "); 
			break;
		}
		case CIC_CALLERID:
		{
			sCause = _T("CallerId "); 
			break;
		}
		case CIC_CALLEDID:
		{
			sCause = _T("CalledId "); 
			break;
		}
		case CIC_CONNECTEDID:
		{
			sCause = _T("ConnectedId "); 
			break;
		}
		case CIC_REDIRECTIONID:
		{
			sCause = _T("RedirectionId "); 
			break;
		}
		case CIC_REDIRECTINGID:
		{
			sCause = _T("RedirectingId "); 
			break;
		}
		case CIC_USERUSERINFO:
		{
			sCause = _T("UserUserInfo "); 
			break;
		}
		case CIC_HIGHLEVELCOMP:
		{
			sCause = _T("HighLevelComp "); 
			break;
		}
		case CIC_LOWLEVELCOMP:
		{
			sCause = _T("LowLevelComp "); 
			break;
		}
		case CIC_CHARGINGINFO:
		{
			sCause = _T("ChargingInfo "); 
			break;
		}
		case CIC_TREATMENT:
		{
			sCause = _T("Treatment "); 
			break;
		}
		case CIC_CALLDATA:
		{
			sCause = _T("CallData "); 
			break;
		}
		case CIC_PRIVILEGE:
		{
			sCause = _T("Privilege "); 
			break;
		}
		case CIC_MEDIATYPE:
		{
			sCause = _T("MediaType "); 
			break;
		}
		default:
		{
			sCause = _T("???");
			break;
		}
	}
}

void CTAPIConn::GetASCIICallHubEvent(CALLHUB_EVENT e, CString& s)
{
	s.Empty();
	switch(e)
	{
	case CHE_CALLJOIN:
		s = _T("Callhub: Call Join");
		break;
	case CHE_CALLLEAVE:
		s = _T("Callhub: Call Leave");
		break;
	case CHE_CALLHUBNEW:
		s = _T("Callhub: New");
		break;
	case CHE_CALLHUBIDLE:
		s = _T("Callhub: Idle");
		break;
	}
}

void CTAPIConn::GetASCIICallStateEventCause(CALL_STATE_EVENT_CAUSE Cause, CString& s)
{
	s.Empty();

	switch(Cause)
	{
		case CEC_NONE:
			s = _T("None");
		break;
		case CEC_DISCONNECT_NORMAL:
			s = _T("Normal");
		break;
		case CEC_DISCONNECT_BUSY:
			s = _T("Busy");
		break;
		case CEC_DISCONNECT_BADADDRESS:
			s = _T("Bad Address");
		break;
		case CEC_DISCONNECT_NOANSWER:
			s = _T("No Answer");
		break;
		case CEC_DISCONNECT_CANCELLED:
			s = _T("Cancelled");
		break;
		case CEC_DISCONNECT_REJECTED:
			s = _T("Rejected");
		break;
		case CEC_DISCONNECT_FAILED:
			s = _T("Failed");
		break;
		default:
			s = _T("???");
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -