www.pudn.com > TAPI会议系统.rar > tapidescribe.cpp
// ----------------------------------------------------------------------------
// IP Office SDK (c) Avaya 2001. All rights reserved.
//
// PROJECT: TapiSample
// FILE: tapidescribe.cpp
// CREATED: Geoff Froud, based on previous work by Carl Muller
//
// See tapisample.h for an explanation of this program.
//
// This is the implementation file for the tapi message description functions.
// See tapidescribe.h for the definition of these functions
//
// ----------------------------------------------------------------------------
#include "stdafx.h"
#include "tapisample.h"
#include "tapisampleDlg.h"
#include "tapidescribe.h"
// ----------------------------------------------------------------------------
// Describe a call privilege level (in English)
LPCTSTR DescribeError(DWORD dwError)
{
switch (dwError) {
case LINEERR_ALLOCATED : return "Allocated";
case LINEERR_BADDEVICEID : return "BadDeviceId";
case LINEERR_BEARERMODEUNAVAIL : return "BearerModeUnavail";
case LINEERR_CALLUNAVAIL : return "CallUnavail";
case LINEERR_COMPLETIONOVERRUN : return "CompletionOverrun";
case LINEERR_CONFERENCEFULL : return "ConferenceFull";
case LINEERR_DIALBILLING : return "DialBilling";
case LINEERR_DIALDIALTONE : return "DialDialtone";
case LINEERR_DIALPROMPT : return "DialPrompt";
case LINEERR_DIALQUIET : return "DialQuiet";
case LINEERR_INCOMPATIBLEAPIVERSION : return "IncompatibleAPIVersion";
case LINEERR_INCOMPATIBLEEXTVERSION : return "IncompatibleExtVersion";
case LINEERR_INIFILECORRUPT : return "IniFileCorrupt";
case LINEERR_INUSE : return "InUse";
case LINEERR_INVALADDRESS : return "InvalAddress";
case LINEERR_INVALADDRESSID : return "InvalAddressID";
case LINEERR_INVALADDRESSMODE : return "InvalAddressMode";
case LINEERR_INVALADDRESSSTATE : return "InvalAddressState";
case LINEERR_INVALAPPHANDLE : return "InvalAppHandle";
case LINEERR_INVALAPPNAME : return "InvalAppName";
case LINEERR_INVALBEARERMODE : return "InvalBearerMode";
case LINEERR_INVALCALLCOMPLMODE : return "InvalCallCompMode";
case LINEERR_INVALCALLHANDLE : return "InvalCallHandle";
case LINEERR_INVALCALLPARAMS : return "InvalCallParams";
case LINEERR_INVALCALLPRIVILEGE : return "InvalCallPrivilege";
case LINEERR_INVALCALLSELECT : return "InvalCallSelect";
case LINEERR_INVALCALLSTATE : return "InvalCallState";
case LINEERR_INVALCALLSTATELIST : return "InvalCallStateList";
case LINEERR_INVALCARD : return "InvalCard";
case LINEERR_INVALCOMPLETIONID : return "InvalCompletionID";
case LINEERR_INVALCONFCALLHANDLE : return "InvalConfCallHandle";
case LINEERR_INVALCONSULTCALLHANDLE : return "InvalConsultCallHandle";
case LINEERR_INVALCOUNTRYCODE : return "InvalCountryCode";
case LINEERR_INVALDEVICECLASS : return "InvalDeviceClass";
case LINEERR_INVALDEVICEHANDLE : return "InvalDeviceHandle";
case LINEERR_INVALDIALPARAMS : return "InvalDialParams";
case LINEERR_INVALDIGITLIST : return "InvalDigitList";
case LINEERR_INVALDIGITMODE : return "InvalDigitMode";
case LINEERR_INVALDIGITS : return "InvalDigits";
case LINEERR_INVALEXTVERSION : return "InvalExtVersion";
case LINEERR_INVALGROUPID : return "InvalGroupID";
case LINEERR_INVALLINEHANDLE : return "InvalLineHandle";
case LINEERR_INVALLINESTATE : return "InvalLineState";
case LINEERR_INVALLOCATION : return "InvalLocation";
case LINEERR_INVALMEDIALIST : return "InvalMediaList";
case LINEERR_INVALMEDIAMODE : return "InvalMediaMode";
case LINEERR_INVALMESSAGEID : return "InvalMessageID";
case LINEERR_INVALPARAM : return "InvalParam";
case LINEERR_INVALPARKID : return "InvalParkID";
case LINEERR_INVALPARKMODE : return "InvalParkMode";
case LINEERR_INVALPOINTER : return "InvalPointer";
case LINEERR_INVALPRIVSELECT : return "InvalPrivSelect";
case LINEERR_INVALRATE : return "InvalRate";
case LINEERR_INVALREQUESTMODE : return "InvalRequestMode";
case LINEERR_INVALTERMINALID : return "InvalTerminalID";
case LINEERR_INVALTERMINALMODE : return "InvalTerminalMode";
case LINEERR_INVALTIMEOUT : return "InvalTimeout";
case LINEERR_INVALTONE : return "InvalTone";
case LINEERR_INVALTONELIST : return "InvalToneList";
case LINEERR_INVALTONEMODE : return "InvalToneMode";
case LINEERR_INVALTRANSFERMODE : return "InvalTransferMode";
case LINEERR_LINEMAPPERFAILED : return "LineMapperFailed";
case LINEERR_NOCONFERENCE : return "NoConference";
case LINEERR_NODEVICE : return "NoDevice";
case LINEERR_NODRIVER : return "NoDriver";
case LINEERR_NOMEM : return "NoMem";
case LINEERR_NOREQUEST : return "NoRequest";
case LINEERR_NOTOWNER : return "NotOwner";
case LINEERR_NOTREGISTERED : return "NotRegistered";
case LINEERR_OPERATIONFAILED : return "OperationFailed";
case LINEERR_OPERATIONUNAVAIL : return "OperationUnavail";
case LINEERR_RATEUNAVAIL : return "RateUnavail";
case LINEERR_RESOURCEUNAVAIL : return "ResourceUnavail";
case LINEERR_REQUESTOVERRUN : return "RequestOverrun";
case LINEERR_STRUCTURETOOSMALL : return "StructureTooSmall";
case LINEERR_TARGETNOTFOUND : return "TargetNotFound";
case LINEERR_TARGETSELF : return "TargetSelf";
case LINEERR_UNINITIALIZED : return "Uninitialized";
case LINEERR_USERUSERINFOTOOBIG : return "UserUserInfoTooBig";
case LINEERR_REINIT : return "ReInit";
case LINEERR_ADDRESSBLOCKED : return "AddressBlocked";
case LINEERR_BILLINGREJECTED : return "BillingRejected";
case LINEERR_INVALFEATURE : return "InvalFeature";
case LINEERR_NOMULTIPLEINSTANCE : return "NoMultipleInstance";
case LINEERR_INVALAGENTID : return "InvalAgentID";
case LINEERR_INVALAGENTGROUP : return "InvalAgentGroup";
case LINEERR_INVALPASSWORD : return "InvalPassword";
case LINEERR_INVALAGENTSTATE : return "InvalAgentState";
case LINEERR_INVALAGENTACTIVITY : return "InvalAgentActivity";
case LINEERR_DIALVOICEDETECT : return "DialVoiceDetect";
default: return "???";
};
}
// ----------------------------------------------------------------------------
// Describe details about a call state (in English)
LPCTSTR DescribeCallStateDetail(DWORD nCallState, DWORD nCallStateDetail)
{
switch(nCallState) {
case LINECALLSTATE_BUSY:
switch (nCallStateDetail) {
case 0: return "0";
case LINEBUSYMODE_STATION: return "Station";
case LINEBUSYMODE_TRUNK: return "Trunk";
case LINEBUSYMODE_UNKNOWN: return "Unknown";
case LINEBUSYMODE_UNAVAIL: return "Unavailable";
default: return "???";
};
case LINECALLSTATE_CONNECTED:
switch (nCallStateDetail) {
case 0: return "0";
case LINECONNECTEDMODE_ACTIVE: return "Active";
case LINECONNECTEDMODE_INACTIVE: return "Inactive";
case LINECONNECTEDMODE_ACTIVEHELD: return "ActiveHeld";
case LINECONNECTEDMODE_INACTIVEHELD: return "InactiveHeld";
case LINECONNECTEDMODE_CONFIRMED: return "Confirmed";
default: return "???";
};
case LINECALLSTATE_DIALTONE:
switch (nCallStateDetail) {
case 0: return "0";
case LINEDIALTONEMODE_NORMAL: return "Normal";
case LINEDIALTONEMODE_SPECIAL: return "Special";
case LINEDIALTONEMODE_INTERNAL: return "Internal";
case LINEDIALTONEMODE_EXTERNAL: return "External";
case LINEDIALTONEMODE_UNKNOWN: return "Unknown";
case LINEDIALTONEMODE_UNAVAIL: return "Unavailable";
default: return "???";
};
case LINECALLSTATE_OFFERING:
switch (nCallStateDetail) {
case 0: return "0";
case LINEOFFERINGMODE_ACTIVE: return "Active";
case LINEOFFERINGMODE_INACTIVE: return "Inactive";
default: return "???";
};
case LINECALLSTATE_SPECIALINFO:
switch (nCallStateDetail) {
case 0: return "0";
case LINESPECIALINFO_NOCIRCUIT: return "NoCircuit";
case LINESPECIALINFO_CUSTIRREG: return "CustIrreg";
case LINESPECIALINFO_REORDER: return "ReOrder";
case LINESPECIALINFO_UNKNOWN: return "Unknown";
case LINESPECIALINFO_UNAVAIL: return "Unavailable";
default: return "???";
};
case LINECALLSTATE_DISCONNECTED:
switch (nCallStateDetail) {
case 0: return "0";
case LINEDISCONNECTMODE_NORMAL: return "Normal";
case LINEDISCONNECTMODE_UNKNOWN: return "Unknown";
case LINEDISCONNECTMODE_REJECT: return "Reject";
case LINEDISCONNECTMODE_PICKUP: return "Pickup";
case LINEDISCONNECTMODE_FORWARDED: return "Forwarded";
case LINEDISCONNECTMODE_BUSY: return "Busy";
case LINEDISCONNECTMODE_NOANSWER: return "NoAnswer";
case LINEDISCONNECTMODE_BADADDRESS: return "BadAddress";
case LINEDISCONNECTMODE_UNREACHABLE: return "Unreachable";
case LINEDISCONNECTMODE_CONGESTION: return "Congestion";
case LINEDISCONNECTMODE_INCOMPATIBLE: return "Incompatible";
case LINEDISCONNECTMODE_UNAVAIL: return "Unavailable";
case LINEDISCONNECTMODE_NODIALTONE: return "NoDialTone";
case LINEDISCONNECTMODE_NUMBERCHANGED: return "NumberChanged";
case LINEDISCONNECTMODE_OUTOFORDER: return "OutOfOrder";
case LINEDISCONNECTMODE_TEMPFAILURE: return "TempFailure";
case LINEDISCONNECTMODE_QOSUNAVAIL: return "QOSUnavail";
case LINEDISCONNECTMODE_BLOCKED: return "Blocked";
case LINEDISCONNECTMODE_DONOTDISTURB: return "DoNotDisturb";
case LINEDISCONNECTMODE_CANCELLED: return "Cancelled";
default: return "???";
};
default:
return "";
};
}
// ----------------------------------------------------------------------------
// Describe a call state (in English)
LPCTSTR DescribeCallState(CString& result, DWORD CallState)
{
result.Empty();
if (CallState == 0) result += "None";
if (CallState & LINECALLSTATE_IDLE) result += "Idle ";
if (CallState & LINECALLSTATE_OFFERING) result += "Offering ";
if (CallState & LINECALLSTATE_ACCEPTED) result += "Accepted ";
if (CallState & LINECALLSTATE_DIALTONE) result += "DialTone ";
if (CallState & LINECALLSTATE_DIALING) result += "Dialing ";
if (CallState & LINECALLSTATE_RINGBACK) result += "RingBack ";
if (CallState & LINECALLSTATE_BUSY) result += "Busy ";
if (CallState & LINECALLSTATE_SPECIALINFO) result += "SpecialInfo ";
if (CallState & LINECALLSTATE_CONNECTED) result += "Connected ";
if (CallState & LINECALLSTATE_PROCEEDING) result += "Proceeding ";
if (CallState & LINECALLSTATE_ONHOLD) result += "Held ";
if (CallState & LINECALLSTATE_CONFERENCED) result += "Conferenced ";
if (CallState & LINECALLSTATE_ONHOLDPENDCONF) result += "HoldPendingConference ";
if (CallState & LINECALLSTATE_ONHOLDPENDTRANSFER) result += "HoldPendingTransfer ";
if (CallState & LINECALLSTATE_DISCONNECTED) result += "Disconnected ";
if (CallState & LINECALLSTATE_UNKNOWN) result += "Unknown ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe a call privilege level (in English)
LPCTSTR DescribePrivilege(CString &result, DWORD nPrivilege)
{
result.Empty();
if (nPrivilege == 0) result += "SamePrivilege";
if (nPrivilege & LINECALLPRIVILEGE_NONE) result += "NoPrivilege ";
if (nPrivilege & LINECALLPRIVILEGE_MONITOR) result += "Monitor ";
if (nPrivilege & LINECALLPRIVILEGE_OWNER) result += "Owner ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe details about a device state (in English)
LPCTSTR DescribeDeviceStatus(CString &result, DWORD DeviceState)
{
result.Empty();
if (DeviceState == 0) result += "None";
if (DeviceState & LINEDEVSTATE_OTHER) result += "Other ";
if (DeviceState & LINEDEVSTATE_RINGING) result += "Ringing ";
if (DeviceState & LINEDEVSTATE_CONNECTED) result += "Connected ";
if (DeviceState & LINEDEVSTATE_DISCONNECTED) result += "Disconnected ";
if (DeviceState & LINEDEVSTATE_MSGWAITON) result += "MsgWaitOn ";
if (DeviceState & LINEDEVSTATE_MSGWAITOFF) result += "MsgWaitOff ";
if (DeviceState & LINEDEVSTATE_NUMCOMPLETIONS) result += "NumCompletions ";
if (DeviceState & LINEDEVSTATE_INSERVICE) result += "InService ";
if (DeviceState & LINEDEVSTATE_OUTOFSERVICE) result += "OutOfService ";
if (DeviceState & LINEDEVSTATE_MAINTENANCE) result += "Maintenance ";
if (DeviceState & LINEDEVSTATE_OPEN) result += "Open ";
if (DeviceState & LINEDEVSTATE_CLOSE) result += "Close ";
if (DeviceState & LINEDEVSTATE_NUMCALLS) result += "NumCalls ";
if (DeviceState & LINEDEVSTATE_TERMINALS) result += "Terminals ";
if (DeviceState & LINEDEVSTATE_ROAMMODE) result += "RoamMode ";
if (DeviceState & LINEDEVSTATE_BATTERY) result += "Battery ";
if (DeviceState & LINEDEVSTATE_SIGNAL) result += "Signal ";
if (DeviceState & LINEDEVSTATE_DEVSPECIFIC) result += "DevSpecific ";
if (DeviceState & LINEDEVSTATE_REINIT) result += "ReInit ";
if (DeviceState & LINEDEVSTATE_LOCK) result += "Lock ";
if (DeviceState & LINEDEVSTATE_CAPSCHANGE) result += "CapsChange ";
if (DeviceState & LINEDEVSTATE_CONFIGCHANGE) result += "ConfigChange ";
if (DeviceState & LINEDEVSTATE_TRANSLATECHANGE) result += "TranslateChange ";
if (DeviceState & LINEDEVSTATE_COMPLCANCEL) result += "ComplCancel ";
if (DeviceState & LINEDEVSTATE_REMOVED) result += "Removed ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe details about an address state (in English)
LPCTSTR DescribeAddressStatus(CString &result, DWORD AddressState)
{
result.Empty();
if (AddressState == 0) result += "None";
if (AddressState & LINEADDRESSSTATE_OTHER) result += "Other ";
if (AddressState & LINEADDRESSSTATE_DEVSPECIFIC) result += "DeviceSpecific ";
if (AddressState & LINEADDRESSSTATE_INUSEZERO) result += "InUseZero "; // Address is idle
if (AddressState & LINEADDRESSSTATE_INUSEONE) result += "InUseOne ";
if (AddressState & LINEADDRESSSTATE_INUSEMANY) result += "InUseMany ";
if (AddressState & LINEADDRESSSTATE_NUMCALLS) result += "NumCalls ";
if (AddressState & LINEADDRESSSTATE_FORWARD) result += "Forward ";
if (AddressState & LINEADDRESSSTATE_TERMINALS) result += "Terminals ";
if (AddressState & LINEADDRESSSTATE_CAPSCHANGE) result += "CapsChange ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe details about call information (in English)
LPCTSTR DescribeCallInfo(CString &result, DWORD CallInfoState)
{
result.Empty();
if (CallInfoState == 0) result += "None";
if (CallInfoState & LINECALLINFOSTATE_OTHER) result += "Other ";
if (CallInfoState & LINECALLINFOSTATE_DEVSPECIFIC) result += "DevSpecific ";
if (CallInfoState & LINECALLINFOSTATE_BEARERMODE) result += "BearerMode ";
if (CallInfoState & LINECALLINFOSTATE_RATE) result += "Rate ";
if (CallInfoState & LINECALLINFOSTATE_MEDIAMODE) result += "MediaMode ";
if (CallInfoState & LINECALLINFOSTATE_APPSPECIFIC) result += "AppSpecific ";
if (CallInfoState & LINECALLINFOSTATE_CALLID) result += "CallID ";
if (CallInfoState & LINECALLINFOSTATE_RELATEDCALLID) result += "RelatedCallID ";
if (CallInfoState & LINECALLINFOSTATE_ORIGIN) result += "Origin ";
if (CallInfoState & LINECALLINFOSTATE_REASON) result += "Reason ";
if (CallInfoState & LINECALLINFOSTATE_COMPLETIONID) result += "CompletionID ";
if (CallInfoState & LINECALLINFOSTATE_NUMOWNERINCR) result += "NumOwnerIncr ";
if (CallInfoState & LINECALLINFOSTATE_NUMOWNERDECR) result += "NumOwnerDecr ";
if (CallInfoState & LINECALLINFOSTATE_NUMMONITORS) result += "NumMonitors ";
if (CallInfoState & LINECALLINFOSTATE_TRUNK) result += "Trunk ";
if (CallInfoState & LINECALLINFOSTATE_CALLERID) result += "CallerID ";
if (CallInfoState & LINECALLINFOSTATE_CALLEDID) result += "CalledID ";
if (CallInfoState & LINECALLINFOSTATE_CONNECTEDID) result += "ConnectedID ";
if (CallInfoState & LINECALLINFOSTATE_REDIRECTIONID) result += "RedirectionID ";
if (CallInfoState & LINECALLINFOSTATE_REDIRECTINGID) result += "RedirectingID ";
if (CallInfoState & LINECALLINFOSTATE_DISPLAY) result += "Display ";
if (CallInfoState & LINECALLINFOSTATE_USERUSERINFO) result += "UserUserInfo ";
if (CallInfoState & LINECALLINFOSTATE_HIGHLEVELCOMP) result += "HighLevelComp ";
if (CallInfoState & LINECALLINFOSTATE_LOWLEVELCOMP) result += "LowLevelComp ";
if (CallInfoState & LINECALLINFOSTATE_CHARGINGINFO) result += "ChargingInfo ";
if (CallInfoState & LINECALLINFOSTATE_TERMINAL) result += "Terminal ";
if (CallInfoState & LINECALLINFOSTATE_DIALPARAMS) result += "DialParams ";
if (CallInfoState & LINECALLINFOSTATE_MONITORMODES) result += "MonitorModes ";
if (CallInfoState & LINECALLINFOSTATE_TREATMENT) result += "Treatment ";
if (CallInfoState & LINECALLINFOSTATE_QOS) result += "QOS ";
if (CallInfoState & LINECALLINFOSTATE_CALLDATA) result += "CallData ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Why was the call made?
LPCTSTR DescribeCallReason(CString& result, DWORD CallReason)
{
result.Empty();
if (CallReason == 0) result += "None";
if (CallReason & LINECALLREASON_DIRECT) result += "Direct ";
if (CallReason & LINECALLREASON_FWDBUSY) result += "FwdBusy ";
if (CallReason & LINECALLREASON_FWDNOANSWER) result += "FwdNoAnswer ";
if (CallReason & LINECALLREASON_FWDUNCOND) result += "FwdUncond ";
if (CallReason & LINECALLREASON_PICKUP) result += "PickUp ";
if (CallReason & LINECALLREASON_UNPARK) result += "UnPark ";
if (CallReason & LINECALLREASON_REDIRECT) result += "Redirect ";
if (CallReason & LINECALLREASON_CALLCOMPLETION) result += "CallCompletion ";
if (CallReason & LINECALLREASON_TRANSFER) result += "Transfer ";
if (CallReason & LINECALLREASON_REMINDER) result += "Reminder ";
if (CallReason & LINECALLREASON_UNKNOWN) result += "Unknown ";
if (CallReason & LINECALLREASON_UNAVAIL) result += "Unavail ";
if (CallReason & LINECALLREASON_INTRUDE) result += "Intrude ";
if (CallReason & LINECALLREASON_PARKED) result += "Parked ";
if (CallReason & LINECALLREASON_CAMPEDON) result += "CampedOn ";
if (CallReason & LINECALLREASON_ROUTEREQUEST) result += "RouteRequest ";
if (result.IsEmpty()) result += "??? ";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Where was the call from?
LPCTSTR DescribeCallOrigin(CString& result, DWORD CallOrigin)
{
result.Empty();
if (CallOrigin == 0) result += "None";
if (CallOrigin & LINECALLORIGIN_INBOUND) result += "Inbound ";
if (CallOrigin & LINECALLORIGIN_OUTBOUND) result += "Outbound ";
if (CallOrigin & LINECALLORIGIN_INTERNAL) result += "Internal ";
if (CallOrigin & LINECALLORIGIN_EXTERNAL) result += "External ";
if (CallOrigin & LINECALLORIGIN_UNKNOWN) result += "Unknown ";
if (CallOrigin & LINECALLORIGIN_UNAVAIL) result += "Unavail ";
if (CallOrigin & LINECALLORIGIN_CONFERENCE) result += "Conference ";
if (result.IsEmpty()) result += "???";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe details about a device state (in English)
LPCTSTR DescribeCallCompletion(CString &result, DWORD CallCompletion)
{
result.Empty();
if (CallCompletion == 0) result += "None";
if (CallCompletion & LINECALLCOMPLMODE_CAMPON) result += "CampOn ";
if (CallCompletion & LINECALLCOMPLMODE_CALLBACK) result += "CallBack ";
if (CallCompletion & LINECALLCOMPLMODE_INTRUDE) result += "Intrude ";
if (CallCompletion & LINECALLCOMPLMODE_MESSAGE) result += "Message ";
if (result.IsEmpty()) result += "???";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe capabilities of an address on a line
LPCTSTR DescribeAddressCapabilities(CString &result, DWORD AddressCaps)
{
result.Empty();
if (AddressCaps == 0) result += "None";
if (AddressCaps & LINEADDRCAPFLAGS_FWDNUMRINGS) result += "FwdNumRings ";
if (AddressCaps & LINEADDRCAPFLAGS_PICKUPGROUPID) result += "PickupGroupID ";
if (AddressCaps & LINEADDRCAPFLAGS_SECURE) result += "Secure ";
if (AddressCaps & LINEADDRCAPFLAGS_BLOCKIDDEFAULT) result += "BlockIDDefault ";
if (AddressCaps & LINEADDRCAPFLAGS_BLOCKIDOVERRIDE) result += "BlockIDOverride ";
if (AddressCaps & LINEADDRCAPFLAGS_DIALED) result += "Dialed ";
if (AddressCaps & LINEADDRCAPFLAGS_ORIGOFFHOOK) result += "OrigOffHook ";
if (AddressCaps & LINEADDRCAPFLAGS_DESTOFFHOOK) result += "DeskOffHook ";
if (AddressCaps & LINEADDRCAPFLAGS_FWDCONSULT) result += "FwdConsult ";
if (AddressCaps & LINEADDRCAPFLAGS_SETUPCONFNULL) result += "SetupConfNull ";
if (AddressCaps & LINEADDRCAPFLAGS_AUTORECONNECT) result += "AutoReconnect ";
if (AddressCaps & LINEADDRCAPFLAGS_COMPLETIONID) result += "CompletionID ";
if (AddressCaps & LINEADDRCAPFLAGS_TRANSFERHELD) result += "TransferHeld ";
if (AddressCaps & LINEADDRCAPFLAGS_TRANSFERMAKE) result += "TransferMake ";
if (AddressCaps & LINEADDRCAPFLAGS_CONFERENCEHELD) result += "ConferenceHeld ";
if (AddressCaps & LINEADDRCAPFLAGS_CONFERENCEMAKE) result += "ConferenceMake ";
if (AddressCaps & LINEADDRCAPFLAGS_PARTIALDIAL) result += "PartialDial ";
if (AddressCaps & LINEADDRCAPFLAGS_FWDSTATUSVALID) result += "FwdStatusValid ";
if (AddressCaps & LINEADDRCAPFLAGS_FWDINTEXTADDR) result += "FwdIntExtAddr ";
if (AddressCaps & LINEADDRCAPFLAGS_FWDBUSYNAADDR) result += "FwdBusyNAAddr ";
if (AddressCaps & LINEADDRCAPFLAGS_ACCEPTTOALERT) result += "AcceptToAlert ";
if (AddressCaps & LINEADDRCAPFLAGS_CONFDROP) result += "ConfDrop ";
if (AddressCaps & LINEADDRCAPFLAGS_PICKUPCALLWAIT) result += "PickupCallWait ";
if (AddressCaps & LINEADDRCAPFLAGS_PREDICTIVEDIALER) result += "PredictiveDialer ";
if (AddressCaps & LINEADDRCAPFLAGS_QUEUE) result += "Queue ";
if (AddressCaps & LINEADDRCAPFLAGS_ROUTEPOINT) result += "RoutePoint ";
if (AddressCaps & LINEADDRCAPFLAGS_HOLDMAKESNEW) result += "HoldMakesNew ";
if (AddressCaps & LINEADDRCAPFLAGS_NOINTERNALCALLS) result += "NoInternalCalls ";
if (AddressCaps & LINEADDRCAPFLAGS_NOEXTERNALCALLS) result += "NoExternalCalls ";
if (AddressCaps & LINEADDRCAPFLAGS_SETCALLINGID) result += "SetCallingID ";
if (result.IsEmpty()) result += "???";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe capabilities of an address on a line
LPCTSTR DescribeCallFeatures(CString &result, DWORD CallFeatures)
{
result.Empty();
if (CallFeatures == 0) result += "None";
if (CallFeatures & LINECALLFEATURE_ACCEPT) result += "Accept ";
if (CallFeatures & LINECALLFEATURE_ADDTOCONF) result += "AddToConf ";
if (CallFeatures & LINECALLFEATURE_ANSWER) result += "Answer ";
if (CallFeatures & LINECALLFEATURE_BLINDTRANSFER) result += "BlindTransfer ";
if (CallFeatures & LINECALLFEATURE_COMPLETECALL) result += "CompleteCall ";
if (CallFeatures & LINECALLFEATURE_COMPLETETRANSF) result += "CompleteTransf ";
if (CallFeatures & LINECALLFEATURE_DIAL) result += "Dial ";
if (CallFeatures & LINECALLFEATURE_DROP) result += "Drop ";
if (CallFeatures & LINECALLFEATURE_GATHERDIGITS) result += "GatherDigits ";
if (CallFeatures & LINECALLFEATURE_GENERATEDIGITS) result += "GenerateDigits ";
if (CallFeatures & LINECALLFEATURE_GENERATETONE) result += "GenerateTone ";
if (CallFeatures & LINECALLFEATURE_HOLD) result += "Hold ";
if (CallFeatures & LINECALLFEATURE_MONITORDIGITS) result += "MonitorDigits ";
if (CallFeatures & LINECALLFEATURE_MONITORMEDIA) result += "MonitorMedia ";
if (CallFeatures & LINECALLFEATURE_MONITORTONES) result += "MonitorTones ";
if (CallFeatures & LINECALLFEATURE_PARK) result += "Park ";
if (CallFeatures & LINECALLFEATURE_PREPAREADDCONF) result += "PrepareAddConf ";
if (CallFeatures & LINECALLFEATURE_REDIRECT) result += "Redirect ";
if (CallFeatures & LINECALLFEATURE_REMOVEFROMCONF) result += "RemoveFromConf ";
if (CallFeatures & LINECALLFEATURE_SECURECALL) result += "SecureCall ";
if (CallFeatures & LINECALLFEATURE_SENDUSERUSER) result += "SendUserUser ";
if (CallFeatures & LINECALLFEATURE_SETCALLPARAMS) result += "SetCallParams ";
if (CallFeatures & LINECALLFEATURE_SETMEDIACONTROL) result += "SetMediaControl ";
if (CallFeatures & LINECALLFEATURE_SETTERMINAL) result += "SetTerminal ";
if (CallFeatures & LINECALLFEATURE_SETUPCONF) result += "SetupConf ";
if (CallFeatures & LINECALLFEATURE_SETUPTRANSFER) result += "SetupTransfer ";
if (CallFeatures & LINECALLFEATURE_SWAPHOLD) result += "SwapHold ";
if (CallFeatures & LINECALLFEATURE_UNHOLD) result += "Unhold ";
if (CallFeatures & LINECALLFEATURE_RELEASEUSERUSERINFO) result += "ReleaseUserUserInfo ";
if (CallFeatures & LINECALLFEATURE_SETTREATMENT) result += "SetTreatment ";
if (CallFeatures & LINECALLFEATURE_SETQOS) result += "SetQOS ";
if (CallFeatures & LINECALLFEATURE_SETCALLDATA) result += "SetCallData ";
if (result.IsEmpty()) result += "???";
return LPCTSTR(result);
}
// ----------------------------------------------------------------------------
// Describe capabilities of an address on a line
LPCTSTR DescribeCallFeatures2(CString &result, DWORD CallFeatures2)
{
result.Empty();
if (CallFeatures2 == 0) result += " "; // Don't mess up the string
if (CallFeatures2 & LINECALLFEATURE2_NOHOLDCONFERENCE) result += "NoHoldConference ";
if (CallFeatures2 & LINECALLFEATURE2_ONESTEPTRANSFER) result += "OneStepTransfer ";
if (CallFeatures2 & LINECALLFEATURE2_COMPLCAMPON) result += "ComplCampOn ";
if (CallFeatures2 & LINECALLFEATURE2_COMPLCALLBACK) result += "ComplCallBack ";
if (CallFeatures2 & LINECALLFEATURE2_COMPLINTRUDE) result += "ComplIntrude ";
if (CallFeatures2 & LINECALLFEATURE2_COMPLMESSAGE) result += "ComplMessage ";
if (CallFeatures2 & LINECALLFEATURE2_TRANSFERNORM) result += "TransferNorm ";
if (CallFeatures2 & LINECALLFEATURE2_TRANSFERCONF) result += "TransferConf ";
if (CallFeatures2 & LINECALLFEATURE2_PARKDIRECT) result += "ParkDirect ";
if (CallFeatures2 & LINECALLFEATURE2_PARKNONDIRECT) result += "ParkNonDirect ";
if (result.IsEmpty()) result += "???";
return LPCTSTR(result);
}