Example #1
0
File: xtapi.c Project: btb/d2x
LINEADDRESSCAPS *tapi_line_getaddrcaps(uint dev, DWORD addrID)
{
	LINEADDRESSCAPS *ad=NULL;
	LONG retval;
	int size;

	size = sizeof(LINEADDRESSCAPS) + 256;

	while (1)
	{
		DWORD apiver;
		LINEEXTENSIONID extid;

		retval = lineNegotiateAPIVersion(TapiObj.hObj, 
								dev,	TAPI_VERSION, TAPI_VERSION,
								&apiver, &extid);

		if (retval != 0)
			return NULL;

		ad = (LINEADDRESSCAPS *)realloc(ad, size);
		if (!ad) return NULL;
		 
		memset(ad, 0, size);
		ad->dwTotalSize = size;

		retval = lineGetAddressCaps(TapiObj.hObj, dev, 
									addrID, apiver, 0,
									ad);

		if (retval!=0) {
			free(ad);
			return NULL;
		}
		
		if (ad->dwNeededSize > ad->dwTotalSize) {
			size = ad->dwNeededSize;
			continue;
		}
		else break;
	}

	return ad;
}
Example #2
0
File: xtapi.c Project: btb/d2x
LINEDEVCAPS *tapi_getdevcaps(uint dev)
{
	LINEDEVCAPS *pcaps=NULL;
	LONG retval, size;
	DWORD apiver;

	size = sizeof(LINEDEVCAPS) + 256;
	
	while (1)
	{
		LINEEXTENSIONID extid;

		retval = lineNegotiateAPIVersion(TapiObj.hObj, 
								dev,	TAPI_VERSION, TAPI_VERSION,
								&apiver, &extid);

		if (retval != 0)
			return NULL;

		pcaps = (LINEDEVCAPS *)realloc(pcaps, size);
		if (!pcaps) return NULL;
		 
		memset(pcaps, 0, size);
		pcaps->dwTotalSize = size;

		retval = lineGetDevCaps(TapiObj.hObj, dev,
						apiver, 0, 
						pcaps);

		if (retval!=0) {
			free(pcaps);
			return NULL;
		}
		
		if (pcaps->dwNeededSize > pcaps->dwTotalSize) {
			size = pcaps->dwNeededSize;
			continue;
		}
		else break;
	}

	return pcaps;
}
Example #3
0
File: xtapi.c Project: btb/d2x
int xtapi_enumdevices(TapiDevice *dev, int num)
{
	LONG retval;
	int i;

	Assert(TapiObj.hObj != NULL);
	Assert(num <= TapiObj.num_devs);
					 
	for (i = 0; i < num; i++) 
	{
		LINEEXTENSIONID extid;
		LINEDEVCAPS *caps;
	
		caps = tapi_getdevcaps(i);
		if (caps == NULL) return XTAPI_OUT_OF_MEMORY;

		if ((caps->dwBearerModes & LINEBEARERMODE_VOICE) &&
			 (caps->dwMediaModes & LINEMEDIAMODE_DATAMODEM)) {
			dev[i].type = XTAPI_MODEM_DEVICE;
		}
		else dev[i].type = 0;

		retval = lineNegotiateAPIVersion(TapiObj.hObj, 
								i,	TAPI_VERSION, TAPI_VERSION,
								(DWORD *)&dev[i].apiver, &extid);

		if (retval == LINEERR_INCOMPATIBLEAPIVERSION)
			return XTAPI_INCOMPATIBLE_VERSION;
		else if (retval != 0)
			return xtapi_err(retval);

		dev[i].id = i;
		dev[i].min_baud = (uint)caps->dwMaxRate;
		dev[i].max_baud = (uint)caps->dwMaxRate;

		free(caps);			
	}
		
	return XTAPI_SUCCESS;
}
Example #4
0
JNIEXPORT jint JNICALL Java_net_xtapi_serviceProvider_MSTAPI_openLine
  (JNIEnv *pEnv, jobject oObj, jint lLine, jobject oTerminalName)
{
	long	lRc;
	DWORD	lNegVer;
	char	szDebug[256];

	long	lUnused = 0;
	long	sizeBuffer;
	HLINE	hLine;

	LINEEXTENSIONID lpExtensionID;
	LPLINEDEVCAPS	lpLineDevCaps = NULL;

    lRc = lineNegotiateAPIVersion(g_hTAPI, lLine, TAPIVERSION,
        TAPIVERSION, &lNegVer, &lpExtensionID);

	if(TAPIVERSION == lNegVer)
	{
		wsprintf(szDebug,"Negotiated TAPI 1.4 on line %d.",lLine);
		debugString(8,"openLine",szDebug,_where());
	}
	else
	{
		wsprintf(szDebug,"Failed to Negotiate TAPI 1.4 on line %d.",lLine);
		debugString(4,"openLine",szDebug,_where());
		return -1;
	}


	lRc = lineOpen(g_hTAPI, lLine, &hLine, lNegVer, lUnused, lLine, 
		LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_AUTOMATEDVOICE, 0);

	wsprintf(szDebug,"lineOpen on line %d returned with %d",lLine, lRc);

	if(lRc < 0)
	{
		debugString(4,"openLine",szDebug,_where());
		return lRc;
	}
	else
		debugString(8,"openLine",szDebug,_where());
	

	sizeBuffer = sizeof(lpLineDevCaps) + 1024;

	lpLineDevCaps = (LINEDEVCAPS *) malloc(sizeBuffer);

	memset(lpLineDevCaps, 0, sizeBuffer);

	lpLineDevCaps->dwTotalSize = sizeBuffer;


	lRc = lineGetDevCaps(g_hTAPI, lLine, lNegVer, 0, lpLineDevCaps);

	wsprintf(szDebug,"lineGetDevCaps returned -> %d",lRc);
	debugString(8,"openLine",szDebug,_where());

	if(0 == lRc)
	{
		if(lpLineDevCaps->dwLineNameSize > 0)
		{
			// lpLineDevCaps holds the name of the terminal, push that name up
			// to Java.

			long lpName = (long)lpLineDevCaps  + lpLineDevCaps->dwLineNameOffset;

			jstring oName = pEnv->NewStringUTF((const char *)lpName);

			jclass cls;
			jmethodID mid;

			cls = pEnv->GetObjectClass (oTerminalName);

			mid = pEnv->GetMethodID(cls,"append",
				"(Ljava/lang/String;)Ljava/lang/StringBuffer;");

			pEnv->CallObjectMethod (oTerminalName, mid, oName);

		}

		lRc = lineSetStatusMessages(hLine,lpLineDevCaps->dwLineStates,0);

		if(lRc != 0)
		{
			debugString(4,"openLine","lineSetStatusMessages failed",_where());
			hLine = (HLINE)-1;
		}
	}

	free(lpLineDevCaps);

	return (long)hLine;
}