📄 tapiinfo.c
字号:
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.
//
// MODULE: TapiInfo.c
//
// PURPOSE: Handles all Pretty Printing functions for the TapiComm sample.
//
// EXPORTED FUNCTIONS: These functions are for use by other modules.
//
// All of these pretty print to the debugging output.
// OutputDebugLineCallback - Calls FormatLineCallback.
// OutputDebugLineError - Calls OutputDebugLineErrorFileLine.
// OutputDebugLastError - Calls OutputDebugLineErrorFileLine.
// OutputDebugPrintf - Calls wsprintf
// OutputDebugLineErrorFileLine - Calls FormatLineError
// OutputDebugLastErrorFileLine - Calls FormatLastError
//
// All of these functions pretty print to a string buffer.
// FormatLineError - Prints a LINEERR
// FormatLastError - Prints a GetLastError error.
// FormatLineCallback - Prints a lineCallbackFunc message.
//
// INTERNAL FUNCTION: These functions are for this module only.
// strBinaryArrayAppend - prints a binary flag array to a buffer.
#include <windows.h>
#include <tapi.h>
#include "TapiInfo.h"
// Maximum length of all internal string buffers.
#define MAXOUTPUTSTRINGLENGTH 4096
// define to make accessing arrays easy.
#define sizeofArray(pArray) (sizeof(pArray) / sizeof((pArray)[0]))
//*****************************************
// Internal prototypes.
//*****************************************
static long strBinaryArrayAppend(LPSTR pszOutputBuffer, DWORD dwFlags,
LPSTR szStringArray[], DWORD dwSizeofStringArray);
//*****************************************
// Global arrays for interpreting TAPI constants.
//*****************************************
LPSTR pszLineError[] =
{
"",
"LINEERR_ALLOCATED",
"LINEERR_BADDEVICEID",
"LINEERR_BEARERMODEUNAVAIL",
"LINEERR Unused constant, ERROR!!",
"LINEERR_CALLUNAVAIL",
"LINEERR_COMPLETIONOVERRUN",
"LINEERR_CONFERENCEFULL",
"LINEERR_DIALBILLING",
"LINEERR_DIALDIALTONE",
"LINEERR_DIALPROMPT",
"LINEERR_DIALQUIET",
"LINEERR_INCOMPATIBLEAPIVERSION",
"LINEERR_INCOMPATIBLEEXTVERSION",
"LINEERR_INIFILECORRUPT",
"LINEERR_INUSE",
"LINEERR_INVALADDRESS",
"LINEERR_INVALADDRESSID",
"LINEERR_INVALADDRESSMODE",
"LINEERR_INVALADDRESSSTATE",
"LINEERR_INVALAPPHANDLE",
"LINEERR_INVALAPPNAME",
"LINEERR_INVALBEARERMODE",
"LINEERR_INVALCALLCOMPLMODE",
"LINEERR_INVALCALLHANDLE",
"LINEERR_INVALCALLPARAMS",
"LINEERR_INVALCALLPRIVILEGE",
"LINEERR_INVALCALLSELECT",
"LINEERR_INVALCALLSTATE",
"LINEERR_INVALCALLSTATELIST",
"LINEERR_INVALCARD",
"LINEERR_INVALCOMPLETIONID",
"LINEERR_INVALCONFCALLHANDLE",
"LINEERR_INVALCONSULTCALLHANDLE",
"LINEERR_INVALCOUNTRYCODE",
"LINEERR_INVALDEVICECLASS",
"LINEERR_INVALDEVICEHANDLE",
"LINEERR_INVALDIALPARAMS",
"LINEERR_INVALDIGITLIST",
"LINEERR_INVALDIGITMODE",
"LINEERR_INVALDIGITS",
"LINEERR_INVALEXTVERSION",
"LINEERR_INVALGROUPID",
"LINEERR_INVALLINEHANDLE",
"LINEERR_INVALLINESTATE",
"LINEERR_INVALLOCATION",
"LINEERR_INVALMEDIALIST",
"LINEERR_INVALMEDIAMODE",
"LINEERR_INVALMESSAGEID",
"LINEERR Unused constant, ERROR!!",
"LINEERR_INVALPARAM",
"LINEERR_INVALPARKID",
"LINEERR_INVALPARKMODE",
"LINEERR_INVALPOINTER",
"LINEERR_INVALPRIVSELECT",
"LINEERR_INVALRATE",
"LINEERR_INVALREQUESTMODE",
"LINEERR_INVALTERMINALID",
"LINEERR_INVALTERMINALMODE",
"LINEERR_INVALTIMEOUT",
"LINEERR_INVALTONE",
"LINEERR_INVALTONELIST",
"LINEERR_INVALTONEMODE",
"LINEERR_INVALTRANSFERMODE",
"LINEERR_LINEMAPPERFAILED",
"LINEERR_NOCONFERENCE",
"LINEERR_NODEVICE",
"LINEERR_NODRIVER",
"LINEERR_NOMEM",
"LINEERR_NOREQUEST",
"LINEERR_NOTOWNER",
"LINEERR_NOTREGISTERED",
"LINEERR_OPERATIONFAILED",
"LINEERR_OPERATIONUNAVAIL",
"LINEERR_RATEUNAVAIL",
"LINEERR_RESOURCEUNAVAIL",
"LINEERR_REQUESTOVERRUN",
"LINEERR_STRUCTURETOOSMALL",
"LINEERR_TARGETNOTFOUND",
"LINEERR_TARGETSELF",
"LINEERR_UNINITIALIZED",
"LINEERR_USERUSERINFOTOOBIG",
"LINEERR_REINIT",
"LINEERR_ADDRESSBLOCKED",
"LINEERR_BILLINGREJECTED",
"LINEERR_INVALFEATURE",
"LINEERR_NOMULTIPLEINSTANCE"
};
LPSTR psz_dwMsg[] = {
"LINE_ADDRESSSTATE",
"LINE_CALLINFO",
"LINE_CALLSTATE",
"LINE_CLOSE",
"LINE_DEVSPECIFIC",
"LINE_DEVSPECIFICFEATURE",
"LINE_GATHERDIGITS",
"LINE_GENERATE",
"LINE_LINEDEVSTATE",
"LINE_MONITORDIGITS",
"LINE_MONITORMEDIA",
"LINE_MONITORTONE",
"LINE_REPLY",
"LINE_REQUEST",
"PHONE_BUTTON",
"PHONE_CLOSE",
"PHONE_DEVSPECIFIC",
"PHONE_REPLY",
"PHONE_STATE",
"LINE_CREATE",
"PHONE_CREATE"
};
LPSTR pszfLINEADDRESSSTATE[] =
{
"Unknown LINEADDRESSSTATE information",
"LINEADDRESSSTATE_OTHER",
"LINEADDRESSSTATE_DEVSPECIFIC",
"LINEADDRESSSTATE_INUSEZERO",
"LINEADDRESSSTATE_INUSEONE",
"LINEADDRESSSTATE_INUSEMANY",
"LINEADDRESSSTATE_NUMCALLS",
"LINEADDRESSSTATE_FORWARD",
"LINEADDRESSSTATE_TERMINALS",
"LINEADDRESSSTATE_CAPSCHANGE"
};
LPSTR pszfLINECALLINFOSTATE[] =
{
"Unknown LINECALLINFOSTATE state",
"LINECALLINFOSTATE_OTHER",
"LINECALLINFOSTATE_DEVSPECIFIC",
"LINECALLINFOSTATE_BEARERMODE",
"LINECALLINFOSTATE_RATE",
"LINECALLINFOSTATE_MEDIAMODE",
"LINECALLINFOSTATE_APPSPECIFIC",
"LINECALLINFOSTATE_CALLID",
"LINECALLINFOSTATE_RELATEDCALLID",
"LINECALLINFOSTATE_ORIGIN",
"LINECALLINFOSTATE_REASON",
"LINECALLINFOSTATE_COMPLETIONID",
"LINECALLINFOSTATE_NUMOWNERINCR",
"LINECALLINFOSTATE_NUMOWNERDECR",
"LINECALLINFOSTATE_NUMMONITORS",
"LINECALLINFOSTATE_TRUNK",
"LINECALLINFOSTATE_CALLERID",
"LINECALLINFOSTATE_CALLEDID",
"LINECALLINFOSTATE_CONNECTEDID",
"LINECALLINFOSTATE_REDIRECTIONID",
"LINECALLINFOSTATE_REDIRECTINGID",
"LINECALLINFOSTATE_DISPLAY",
"LINECALLINFOSTATE_USERUSERINFO",
"LINECALLINFOSTATE_HIGHLEVELCOMP",
"LINECALLINFOSTATE_LOWLEVELCOMP",
"LINECALLINFOSTATE_CHARGINGINFO",
"LINECALLINFOSTATE_TERMINAL",
"LINECALLINFOSTATE_DIALPARAMS",
"LINECALLINFOSTATE_MONITORMODES"
};
LPSTR pszfLINECALLSTATE[] =
{
"Unknown LINECALLSTATE state",
"LINECALLSTATE_IDLE",
"LINECALLSTATE_OFFERING",
"LINECALLSTATE_ACCEPTED",
"LINECALLSTATE_DIALTONE",
"LINECALLSTATE_DIALING",
"LINECALLSTATE_RINGBACK",
"LINECALLSTATE_BUSY",
"LINECALLSTATE_SPECIALINFO",
"LINECALLSTATE_CONNECTED",
"LINECALLSTATE_PROCEEDING",
"LINECALLSTATE_ONHOLD",
"LINECALLSTATE_CONFERENCED",
"LINECALLSTATE_ONHOLDPENDCONF",
"LINECALLSTATE_ONHOLDPENDTRANSFER",
"LINECALLSTATE_DISCONNECTED",
"LINECALLSTATE_UNKNOWN"
};
LPSTR pszfLINEDIALTONEMODE[] =
{
"Unknown LINEDIALTONE information",
"LINEDIALTONEMODE_NORMAL",
"LINEDIALTONEMODE_SPECIAL",
"LINEDIALTONEMODE_INTERNAL",
"LINEDIALTONEMODE_EXTERNAL",
"LINEDIALTONEMODE_UNKNOWN",
"LINEDIALTONEMODE_UNAVAIL"
};
LPSTR pszfLINEBUSYMODE[] =
{
"Unknown LINEBUSYMODE information",
"LINEBUSYMODE_STATION",
"LINEBUSYMODE_TRUNK",
"LINEBUSYMODE_UNKNOWN",
"LINEBUSYMODE_UNAVAIL"
};
LPSTR pszfLINESPECIALINFO[] =
{
"Unknown LINESPECIALINFO information",
"LINESPECIALINFO_NOCIRCUIT",
"LINESPECIALINFO_CUSTIRREG",
"LINESPECIALINFO_REORDER",
"LINESPECIALINFO_UNKNOWN",
"LINESPECIALINFO_UNAVAIL"
};
LPSTR pszfLINEDISCONNECTED[] =
{
"Unknown LINEDISCONNECTED information",
"LINEDISCONNECTMODE_NORMAL",
"LINEDISCONNECTMODE_UNKNOWN",
"LINEDISCONNECTMODE_REJECT",
"LINEDISCONNECTMODE_PICKUP",
"LINEDISCONNECTMODE_FORWARDED",
"LINEDISCONNECTMODE_BUSY",
"LINEDISCONNECTMODE_NOANSWER",
"LINEDISCONNECTMODE_BADADDRESS",
"LINEDISCONNECTMODE_UNREACHABLE",
"LINEDISCONNECTMODE_CONGESTION",
"LINEDISCONNECTMODE_INCOMPATIBLE",
"LINEDISCONNECTMODE_UNAVAIL",
"LINEDISCONNECTMODE_NODIALTONE"
};
LPSTR pszfLINECALLPRIVILEGE[] =
{
"No change to LINECALLPRIVILEGE",
"LINECALLPRIVILEGE_NONE",
"LINECALLPRIVILEGE_MONITOR",
"LINECALLPRIVILEGE_OWNER"
};
LPSTR pszfLINEGATHERTERM[] =
{
"Unknown LINEGATHERTERM message",
"LINEGATHERTERM_BUFFERFULL",
"LINEGATHERTERM_TERMDIGIT",
"LINEGATHERTERM_FIRSTTIMEOUT",
"LINEGATHERTERM_INTERTIMEOUT",
"LINEGATHERTERM_CANCEL"
};
LPSTR pszfLINEGENERATETERM[] =
{
"Unknown LINEGENERATETERM message",
"LINEGENERATETERM_DONE",
"LINEGENERATETERM_CANCEL"
};
LPSTR pszfLINEDEVSTATE[] =
{
"Unknown LINEDEVESTATE state",
"LINEDEVSTATE_OTHER",
"LINEDEVSTATE_RINGING",
"LINEDEVSTATE_CONNECTED",
"LINEDEVSTATE_DISCONNECTED",
"LINEDEVSTATE_MSGWAITON",
"LINEDEVSTATE_MSGWAITOFF",
"LINEDEVSTATE_INSERVICE",
"LINEDEVSTATE_OUTOFSERVICE",
"LINEDEVSTATE_MAINTENANCE",
"LINEDEVSTATE_OPEN",
"LINEDEVSTATE_CLOSE",
"LINEDEVSTATE_NUMCALLS",
"LINEDEVSTATE_NUMCOMPLETIONS",
"LINEDEVSTATE_TERMINALS",
"LINEDEVSTATE_ROAMMODE",
"LINEDEVSTATE_BATTERY",
"LINEDEVSTATE_SIGNAL",
"LINEDEVSTATE_DEVSPECIFIC",
"LINEDEVSTATE_REINIT",
"LINEDEVSTATE_LOCK",
"LINEDEVSTATE_CAPSCHANGE",
"LINEDEVSTATE_CONFIGCHANGE",
"LINEDEVSTATE_TRANSLATECHANGE",
"LINEDEVSTATE_COMPLCANCEL",
"LINEDEVSTATE_REMOVED"
};
LPSTR pszfLINEDIGITMODE[] =
{
"Unknown LINEDIGITMODE mode",
"LINEDIGITMODE_PULSE",
"LINEDIGITMODE_DTMF",
"LINEDIGITMODE_DTMFEND"
};
LPSTR pszfLINEMEDIAMODE[] =
{
"Unknown LINEMEDIAMODE mode",
"UnUsed LINEMEDIAMODE mode, ERROR!!",
"LINEMEDIAMODE_UNKNOWN",
"LINEMEDIAMODE_INTERACTIVEVOICE",
"LINEMEDIAMODE_AUTOMATEDVOICE",
"LINEMEDIAMODE_DATAMODEM",
"LINEMEDIAMODE_G3FAX",
"LINEMEDIAMODE_TDD",
"LINEMEDIAMODE_G4FAX",
"LINEMEDIAMODE_DIGITALDATA",
"LINEMEDIAMODE_TELETEX",
"LINEMEDIAMODE_VIDEOTEX",
"LINEMEDIAMODE_TELEX",
"LINEMEDIAMODE_MIXED",
"LINEMEDIAMODE_ADSI",
"LINEMEDIAMODE_VOICEVIEW"
};
LPSTR pszfLINEREQUESTMODE[] =
{
"Unknown LINEREQUESTMODE message",
"LINEREQUESTMODE_MAKECALL",
"LINEREQUESTMODE_MEDIACALL",
"LINEREQUESTMODE_DROP"
};
//
// FUNCTION: FormatLineError(long, LPSTR, DWORD)
//
// PURPOSE: Pretty print a line error to a string.
//
// PARAMETERS:
// lLineError - Actual error code to decipher.
// szOutputBuffer - String buffer to pretty print to.
// dwSizeofOutputBuffer - Size of String buffer.
//
// RETURN VALUE:
// Returns the buffer printed to.
//
// COMMENTS:
// lpszOutputBuffer *must* be big enough to hold the full output.
// At the moment, no more than 64 characters are needed.
//
//
LPSTR FormatTapiError(long lError, LPSTR lpszOutputBuffer)
{
DWORD dwError = (DWORD) lError;
if (lpszOutputBuffer == NULL)
return NULL;
// Is this a line error?
if (0x80000000 == (dwError & 0x80000000))
{
// Strip off the high bit to make the error code positive.
dwError &= 0x0FFFFFFF;
if ((lError > 0) || (dwError > sizeof(pszLineError)))
wsprintf(lpszOutputBuffer, "Unknown LINEERR_ code: 0x%lx", lError);
else
strcpy(lpszOutputBuffer, pszLineError[dwError]);
}
else if (0x90000000 == (dwError & 0x90000000))
{
wsprintf(lpszOutputBuffer,
"PHONEERR_ error codes not translated. Code: 0x%lx", lError);
}
else
wsprintf(lpszOutputBuffer,"Unknown error code: 0x%lx", lError);
return lpszOutputBuffer;
}
//
// FUNCTION: FormatLastError(DWORD, LPSTR, DWORD)
//
// PURPOSE: Pretty print a system error to a string.
//
// PARAMETERS:
// dwLastError - Actual error code to decipher.
// szOutputBuffer - String buffer to pretty print to.
// dwSizeofOutputBuffer - Size of String buffer.
//
// RETURN VALUE:
// Returns the buffer printed to.
//
// COMMENTS:
// szOutputBuffer *must* be big enough. 512 bytes is big enough.
//
//
LPSTR FormatLastError(DWORD dwLastError, LPSTR szOutputBuffer)
{
char buf[512];
if (szOutputBuffer == NULL)
return NULL;
// Make FormatMessage pretty print the system error.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -