www.pudn.com > d4j.zip > dialogic.c
/* $Id: dialogic.c,v 1.9 2003/07/24 20:12:21 cgm8 Exp $ */ /* * Dialogic.c: Dialogic SRL interface to java * Copyright (c) 1999 Carlos G Mendioroz. * * This file is part of D4J. * * D4J is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * D4J is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Report problems and direct all questions to: * * tron@acm.org */ #ifndef LINUX #include#else #define O_BINARY 0 #define dx_fileopen open #define dx_fileclose close #endif #include #include #include "Dialogic.h" #ifndef LINUX #include "dxuio.h" #endif #include "srllib.h" #include "dxxxlib.h" #include "dxdigit.h" #include "msilib.h" #include "dcblib.h" #include "cclib.h" #include "jni.h" /* * Class: local_dialogic_Dialogic * Method: openFile * Signature: (Ljava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_openFile (JNIEnv *env, jclass class, jstring Sfile, jint Imode) { char *filename; int fd; filename = (char *)(*env)->GetStringUTFChars(env, Sfile, 0); fd = dx_fileopen(filename, O_BINARY | (Imode?O_RDWR|O_CREAT:O_RDONLY), 0644); (*env)->ReleaseStringUTFChars(env, Sfile, filename); return fd; } /* * Class: local_dialogic_Dialogic * Method: closeFile * Signature: (I)V */ JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_closeFile (JNIEnv *env, jclass class, jint fd) { dx_fileclose(fd); } static JavaVM *vm; static JavaVMAttachArgs attachArgs = { JNI_VERSION_1_2, NULL, NULL} ; static jclass evtClass = 0; static jfieldID evtDevID = 0; static jfieldID evtTypeID = 0; static jfieldID evtTermmskID = 0; static jfieldID evtCstevtID = 0; static jfieldID evtCstdataID = 0; static jfieldID evtDataID = 0; static jfieldID evtLineID = 0; static jfieldID evtConfID = 0; static jfieldID evtCrnID = 0; static jclass channelClass = 0; static jmethodID handleEventID = 0; struct DX_CST { unsigned short cst_event; unsigned short cst_data; } *rs_getevtdata(); /* * Signal pseudo handler for Linux * Request all data and pass it up for queuing... * */ long handleEvent() { int s, a = 0; int dev, evt_type, datalen; long crn; struct DX_CST *cstdata; int *data; short *sdata; char *cdata; struct dcb_digits *dcbd; JNIEnv *env; jobject Oevt; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2) != JNI_OK) { (*vm)->AttachCurrentThread(vm, (void **)&env, &attachArgs); a = 1; } Oevt = (*env)->AllocObject(env, evtClass); (*env)->SetIntField(env, Oevt, evtDevID, dev = sr_getevtdev()); evt_type = sr_getevttype(); (*env)->SetIntField(env, Oevt, evtTypeID, evt_type); datalen = sr_getevtlen(); if (datalen == 4 && evt_type != TDX_CST && evt_type != CCEV_OFFERED) { data = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *data); } else if (datalen == 2) { sdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *sdata); } else if (datalen == 1) { cdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *cdata); } switch(evt_type) { case TDX_CST: cstdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtCstevtID, cstdata->cst_event); (*env)->SetIntField(env, Oevt, evtCstdataID, cstdata->cst_data); break; case DCBEV_DIGIT: dcbd = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtConfID, dcbd->confid); (*env)->SetIntField(env, Oevt, evtLineID, dcbd->chan_num); (*env)->SetIntField(env, Oevt, evtDataID, dcbd->digits[0]); break; case TDX_PLAY: case TDX_RECORD: case TDX_GETDIG: case TDX_PLAYTONE: (*env)->SetIntField(env, Oevt, evtTermmskID, ATDX_TERMMSK(dev)); break; case CCEV_OFFERED: data = sr_getevtdatap(); if (cc_GetCRN(&crn, data) != 0) crn = -1; (*env)->SetLongField(env, Oevt, evtCrnID, crn); break; } (*env)->CallStaticVoidMethod(env, channelClass, handleEventID, Oevt); if (a) (*vm)->DetachCurrentThread(vm); return 0; } /* * Class: Dialogic * Method: sr_libinit * Signature: ()I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_sr_1libinit (JNIEnv *env, jclass class) { int nvm, gotvm; int par; jclass clst; #ifndef LINUX #ifdef OLDDLG if (sr_libinit(DLGC_MT) == -1) { throw(env, "java/lang/RuntimeException", "SRL init error"); return -1; } #endif par = SR_POLLMODE; #else /* Reference symbols to get them loaded */ if (0) { getpmsg(0); putpmsg(0); } par = SR_POLLMODE; /* SR_SIGMODE; */ #endif if( sr_setparm( SRL_DEVICE, SR_MODEID, &par ) == -1 ) { throw(env, "java/lang/RuntimeException", "SRL MODE init error"); return -1; } gotvm = (*env)->GetJavaVM(env, &vm); if (gotvm < 0) { throw(env, "java/lang/RuntimeException", "VM reference error!"); return -1; } clst = (*env)->FindClass(env, "local/dialogic/EVT"); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class EVT not found!"); return -1; } evtClass = (*env)->NewGlobalRef(env, clst); if (evtClass == 0) { throw(env, "java/lang/RuntimeException", "Class EVT reference error!"); return -1; } evtDevID = (*env)->GetFieldID(env, evtClass, "dev", "I"); evtTypeID = (*env)->GetFieldID(env, evtClass, "type", "I"); evtTermmskID = (*env)->GetFieldID(env, evtClass, "termmsk", "I"); evtCstevtID = (*env)->GetFieldID(env, evtClass, "cstevt", "I"); evtCstdataID = (*env)->GetFieldID(env, evtClass, "cstdata", "I"); evtDataID = (*env)->GetFieldID(env, evtClass, "data", "I"); evtLineID = (*env)->GetFieldID(env, evtClass, "line", "I"); evtConfID = (*env)->GetFieldID(env, evtClass, "conf", "I"); evtCrnID = (*env)->GetFieldID(env, evtClass, "crn", "J"); clst = (*env)->FindClass(env, "local/dialogic/Channel"); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class Channel not found!"); return -1; } channelClass = (*env)->NewGlobalRef(env, clst); if (channelClass == 0) { throw(env, "java/lang/RuntimeException", "Class Channel reference error!"); return -1; } handleEventID = (*env)->GetStaticMethodID(env, channelClass, "handleEvent", "(Llocal/dialogic/EVT;)V"); #ifndef LINUX par = SR_STASYNC; if( sr_setparm( SRL_DEVICE, SR_MODELTYPE, &par ) == -1 ) { throw(env, "java/lang/RuntimeException", "SRL MODEL init error"); return -1; } #else if (sr_enbhdlr(EV_ANYDEV, EV_ANYEVT, handleEvent ) == -1 ) { throw(env, "java/lang/RuntimeException", "SRL handler registration error"); return -1; } #endif return 0; } /* * Class: Dialogic * Method: sr_getboardcnt * Signature: (Ljava/lang/String;[I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_sr_1getboardcnt #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_sr_1do_1getboardcnt #endif (JNIEnv *env, jclass class, jstring Stype) { char *type; int count = 0; long res; long *Rcount; type = (char *)(*env)->GetStringUTFChars(env, Stype, 0); #ifndef LINUX res = sr_getboardcnt(type, &count); #else res = 0; #endif (*env)->ReleaseStringUTFChars(env, Stype, type); if (res < 0) return res; return count; } /* * user IO functions to transfer data to/from voice boards */ static jclass iottClass = 0; static jmethodID readID = 0; static jmethodID writeID = 0; static jmethodID seekID = 0; int dialogic_read(int fd, char *buf, unsigned len) { int s, a = 0; JNIEnv *env; jbyteArray jbuf; char *jbufp; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2) != JNI_OK) { (*vm)->AttachCurrentThread(vm, (void **)&env, &attachArgs); a = 1; } jbuf = (*env)->NewByteArray(env, len); s = (*env)->CallStaticIntMethod(env, iottClass, readID, fd, jbuf); jbufp = (char *)(*env)->GetByteArrayElements(env, jbuf, 0); memcpy(buf, jbufp, s); (*env)->ReleaseByteArrayElements(env, jbuf, jbufp, JNI_ABORT); (*env)->DeleteLocalRef(env, jbuf); if (a) (*vm)->DetachCurrentThread(vm); return s; } int dialogic_write(int fd, char *buf, unsigned len) { int s, a = 0; JNIEnv *env; jbyteArray jbuf; char *jbufp; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2) != JNI_OK) { (*vm)->AttachCurrentThread(vm, (void **)&env, &attachArgs); a = 1; } jbuf = (*env)->NewByteArray(env, len); jbufp = (char *)(*env)->GetByteArrayElements(env, jbuf, 0); memcpy(jbufp, buf, len); (*env)->ReleaseByteArrayElements(env, jbuf, jbufp, 0); s = (*env)->CallStaticIntMethod(env, iottClass, writeID, fd, jbuf); (*env)->DeleteLocalRef(env, jbuf); if (a) (*vm)->DetachCurrentThread(vm); return s; } long dialogic_seek(int fd, long pos, int type) { long s, a = 0; JNIEnv *env; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2) != JNI_OK) { (*vm)->AttachCurrentThread(vm, (void **)&env, &attachArgs); a = 1; } s = (*env)->CallStaticLongMethod(env, iottClass, seekID, fd, pos, type); if (a) (*vm)->DetachCurrentThread(vm); return s; } /* * Low level channel buffer utility fns */ static jclass voiceClass = 0; static jfieldID physioID = 0; static jfieldID deviceID = 0; jclass getVoiceClass(JNIEnv *env, jobject Ovoice) { jclass clst; clst = (*env)->GetObjectClass(env, Ovoice); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class Voice not found!"); return 0; } voiceClass = (*env)->NewGlobalRef(env, clst); if (voiceClass == 0) { throw(env, "java/lang/RuntimeException", "Class Voice reference error!"); return 0; } physioID = (*env)->GetFieldID(env, voiceClass, "physio", "I"); deviceID = (*env)->GetFieldID(env, voiceClass, "device", "I"); return voiceClass; } /* * Class: Dialogic * Method: dx_libinit * Signature: ()I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1libinit (JNIEnv *env, jclass class) { jclass clst; DX_UIO uio; #ifndef LINUX #ifdef OLDDLG if (dx_libinit(DLGC_MT) == -1) { throw(env, "java/lang/RuntimeException", "DXL init error"); return -1; }; #endif #endif clst = (*env)->FindClass(env, "local/dialogic/IOTT"); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class IOTT not found!"); return -1; } iottClass = (*env)->NewGlobalRef(env, clst); if (iottClass == 0) { throw(env, "java/lang/RuntimeException", "Class IOTT reference error!"); return -1; } readID = (*env)->GetStaticMethodID(env, iottClass, "read", "(I[B)I"); writeID = (*env)->GetStaticMethodID(env, iottClass, "write", "(I[B)I"); seekID = (*env)->GetStaticMethodID(env, iottClass, "seek", "(IJI)J"); uio.u_read = dialogic_read; uio.u_write = dialogic_write; uio.u_seek = dialogic_seek; if (dx_setuio(uio) == -1 ) { throw(env, "java/lang/RuntimeException", "DXL dx_setuio error"); return -1; } return 0; } /* * Class: Dialogic * Method: dx_open * Signature: (Ljava/lang/String;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1open #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1open #endif (JNIEnv *env, jclass class, jstring Sdev, jint Ires) { long res; char *dev; dev = (char *)(*env)->GetStringUTFChars(env, Sdev, 0); res = dx_open(dev, (int)Ires); (*env)->ReleaseStringUTFChars(env, Sdev, dev); if (res < 0) { throw(env, "java/lang/RuntimeException", "dx_open error %d", errno); return -1; } return res; } /* * Class: local_dialogic_Dialogic * Method: dx_close * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1close #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1do_1close #endif (JNIEnv *env, jclass class, jobject Ovoice) { int dev; char *mem; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return; } dev = (*env)->GetIntField(env, Ovoice, deviceID); mem = (char *)(*env)->GetIntField(env, Ovoice, physioID); if (mem != 0) free(mem); dx_close(dev); (*env)->SetIntField(env, Ovoice, physioID, 0L); (*env)->SetIntField(env, Ovoice, deviceID, 0L); } /* * Class: local_dialogic_Dialogic * Method: dx_setdigtyp * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1setdigtyp #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1setdigtyp #endif (JNIEnv *env, jclass class, jint Idev, jint Imask) { return dx_setdigtyp((int)Idev, (int)Imask); } /* * Class: local_dialogic_Dialogic * Method: dx_setevtmsk * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1setevtmsk #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1setevtmsk #endif (JNIEnv *env, jclass class, jint Idev, jint Imask) { return dx_setevtmsk((int)Idev, (int)Imask); } /* * Class: local_dialogic_Dialogic * Method: dx_setparm * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1setparm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1setparm #endif (JNIEnv *env, jclass class, jint Idev, jint Ipar, jint Ival) { return dx_setparm((int)Idev, (int)Ipar, &Ival); } /* * Class: Dialogic * Method: dx_sethook * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1sethook #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1sethook #endif (JNIEnv *env, jclass class, jint Idev, jint Ihook, jint Imode) { return dx_sethook((int)Idev, (int)Ihook, (unsigned short)Imode); } DX_IOTT * mIOTTp(JNIEnv *env, jobject Oiott, jobject Ovoice) { static jfieldID sizeID = 0; static jfieldID handleID = 0; static jfieldID offsetID = 0; static jfieldID lengthID = 0; jintArray IAfd, IAoff, IAlen; int s; jint *fd, *off, *len; DX_IOTT *iott; int i; if (iottClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Oiott); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class IOTT not found!"); return (DX_IOTT *)0; } iottClass = (*env)->NewGlobalRef(env, clst); if (iottClass == 0) { throw(env, "java/lang/RuntimeException", "Class IOTT reference error!"); return (DX_IOTT *)0; } } if (sizeID == 0) { sizeID = (*env)->GetFieldID(env, iottClass, "size", "I"); handleID = (*env)->GetFieldID(env, iottClass, "handle", "[I"); offsetID = (*env)->GetFieldID(env, iottClass, "offset", "[I"); lengthID = (*env)->GetFieldID(env, iottClass, "length", "[I"); } if (voiceClass == 0) { throw(env, "java/lang/RuntimeException", "Class Voice not defined!"); return (DX_IOTT *)0; } s = (*env)->GetIntField(env, Oiott, sizeID); if (s == 0) return (DX_IOTT *)0; IAfd = (*env)->GetObjectField(env, Oiott, handleID); IAoff = (*env)->GetObjectField(env, Oiott, offsetID); IAlen = (*env)->GetObjectField(env, Oiott, lengthID); fd = (*env)->GetIntArrayElements(env, IAfd, 0); off = (*env)->GetIntArrayElements(env, IAoff, 0); len = (*env)->GetIntArrayElements(env, IAlen, 0); /* * Size of DX_IOTT is 28 bytes. * DV_TPT size is 16 * DV_DIGIT size is 64 * We alloc 1032 bytes (good for 25 segments) in the channel, * 16 TPT conditions at physio + 700, * 1 DV_DIGIT buffer at physio + 956 * and 1 DX_XPB buffer at physio + 1020 * not to deal with dinamic alloc/free */ if (s > 25) { throw(env, "java/lang/RuntimeException", "Class IOTT size > 25 error!"); return (DX_IOTT *)0; } iott = (DX_IOTT *)(*env)->GetIntField(env, Ovoice, physioID); if ((long)iott == 0) { iott = (DX_IOTT *)malloc(1032); if ((long)iott == 0) { throw(env, "java/lang/RuntimeException", "Channel buffer malloc error!"); return (DX_IOTT *)0; } (*env)->SetIntField(env, Ovoice, physioID, (long)iott); } for (i = 0; i < s; i++) { iott[i].io_type = IO_DEV|IO_CONT; iott[i].rfu = 0; if (fd[i] < 0) { iott[i].io_fhandle = -fd[i]; iott[i].io_type |= IO_UIO; } else iott[i].io_fhandle = fd[i]; iott[i].io_bufp = 0; iott[i].io_offset = off[i]; iott[i].io_length = len[i]; iott[i].io_nextp = 0; iott[i].io_prevp = 0; } iott[i-1].io_type |= IO_EOT; iott[i-1].io_type &= ~IO_CONT; /* Dialogic does not like |IO_CONT */ (*env)->ReleaseIntArrayElements(env, IAfd, fd, JNI_ABORT); (*env)->ReleaseIntArrayElements(env, IAoff, off, JNI_ABORT); (*env)->ReleaseIntArrayElements(env, IAlen, len, JNI_ABORT); return iott; } DV_TPT * mTPTp(JNIEnv *env, jobject Otpt, jobject Ovoice) { static jclass tptClass = 0; static jfieldID sizeID = 0; static jfieldID termnoID = 0; static jfieldID lengthID = 0; static jfieldID flagsID = 0; static jfieldID dataID = 0; jintArray IAterm, IAlen, IAflgs, IAdata; int s; jint *term, *len, *flgs, *data; DV_TPT *tpt; int i; if (tptClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Otpt); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class TPT not found!"); return (DV_TPT *)0; } tptClass = (*env)->NewGlobalRef(env, clst); if (tptClass == 0) { throw(env, "java/lang/RuntimeException", "Class TPT reference error!"); return (DV_TPT *)0; } sizeID = (*env)->GetFieldID(env, tptClass, "size", "I"); termnoID = (*env)->GetFieldID(env, tptClass, "termno", "[I"); lengthID = (*env)->GetFieldID(env, tptClass, "length", "[I"); flagsID = (*env)->GetFieldID(env, tptClass, "flags", "[I"); dataID = (*env)->GetFieldID(env, tptClass, "data", "[I"); } if (voiceClass == 0) { throw(env, "java/lang/RuntimeException", "Class Voice not defined!"); return (DV_TPT *)0; } s = (*env)->GetIntField(env, Otpt, sizeID); if (s == 0) return (DV_TPT *)0; IAterm = (*env)->GetObjectField(env, Otpt, termnoID); IAlen = (*env)->GetObjectField(env, Otpt, lengthID); IAflgs = (*env)->GetObjectField(env, Otpt, flagsID); IAdata = (*env)->GetObjectField(env, Otpt, dataID); term = (*env)->GetIntArrayElements(env, IAterm, 0); len = (*env)->GetIntArrayElements(env, IAlen, 0); flgs = (*env)->GetIntArrayElements(env, IAflgs, 0); data = (*env)->GetIntArrayElements(env, IAdata, 0); /* * See mIOTT on alloc strategy... */ if (s > 16) { throw(env, "java/lang/RuntimeException", "Class TPT size > 16 error!"); return (DV_TPT *)0; } tpt = (DV_TPT *)((*env)->GetIntField(env, Ovoice, physioID) + 700); if ((long)tpt == 700) { tpt = (DV_TPT *)((char *)malloc(1032) + 700); if ((long)tpt == 700) { throw(env, "java/lang/RuntimeException", "Channel buffer malloc error!"); return (DV_TPT *)0; } (*env)->SetIntField(env, Ovoice, physioID, (long)tpt - 700); } for (i = 0; i < s; i++) { tpt[i].tp_type = IO_CONT; tpt[i].tp_termno = term[i]; tpt[i].tp_length = len[i]; tpt[i].tp_flags = flgs[i]; tpt[i].tp_data = data[i]; tpt[i].rfu = 0; tpt[i].tp_nextp = 0; } tpt[i-1].tp_type = IO_EOT; (*env)->ReleaseIntArrayElements(env, IAterm, term, JNI_ABORT); (*env)->ReleaseIntArrayElements(env, IAlen, len, JNI_ABORT); (*env)->ReleaseIntArrayElements(env, IAflgs, flgs, JNI_ABORT); (*env)->ReleaseIntArrayElements(env, IAdata, data, JNI_ABORT); return tpt; } DX_XPB * mXPBp(JNIEnv *env, jobject Oxpb, jobject Ovoice) { static jclass xpbClass = 0; static jfieldID wFileFormatID = 0; static jfieldID wDataFormatID = 0; static jfieldID nSamplesPerSecID = 0; static jfieldID wBitsPerSampleID = 0; int s; DX_XPB *xpb; int i; if (xpbClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Oxpb); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class XPB not found!"); return (DX_XPB *)0; } xpbClass = (*env)->NewGlobalRef(env, clst); if (xpbClass == 0) { throw(env, "java/lang/RuntimeException", "Class XPB reference error!"); return (DX_XPB *)0; } wFileFormatID = (*env)->GetFieldID(env, xpbClass, "wFileFormat", "I"); wDataFormatID = (*env)->GetFieldID(env, xpbClass, "wDataFormat", "I"); nSamplesPerSecID = (*env)->GetFieldID(env, xpbClass, "nSamplesPerSec", "I"); wBitsPerSampleID = (*env)->GetFieldID(env, xpbClass, "wBitsPerSample", "I"); } if (voiceClass == 0) { throw(env, "java/lang/RuntimeException", "Class Voice not defined!"); return (DX_XPB *)0; } /* * See mIOTT on alloc strategy... */ xpb = (DX_XPB *)((*env)->GetIntField(env, Ovoice, physioID) + 1020); if ((long)xpb == 1020) { xpb = (DX_XPB *)((char *)malloc(1032) + 1020); if ((long)xpb == 1020) { throw(env, "java/lang/RuntimeException", "Channel buffer malloc error!"); return (DX_XPB *)0; } (*env)->SetIntField(env, Ovoice, physioID, (long)xpb - 1020); } xpb->wFileFormat = (*env)->GetIntField(env, Oxpb, wFileFormatID); xpb->wDataFormat = (*env)->GetIntField(env, Oxpb, wDataFormatID); xpb->nSamplesPerSec = (*env)->GetIntField(env, Oxpb, nSamplesPerSecID); xpb->wBitsPerSample = (*env)->GetIntField(env, Oxpb, wBitsPerSampleID); return xpb; } void fTNGENp(JNIEnv *env, jobject Otngen, TN_GEN *tngen) { static jclass tngenClass = 0; static jfieldID dflagID = 0; static jfieldID freq1ID = 0; static jfieldID ampl1ID = 0; static jfieldID freq2ID = 0; static jfieldID ampl2ID = 0; static jfieldID durID = 0; if (tngenClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Otngen); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class TNGEN not found!"); return; } tngenClass = (*env)->NewGlobalRef(env, clst); if (tngenClass == 0) { throw(env, "java/lang/RuntimeException", "Class TNGEN reference error!"); return; } dflagID = (*env)->GetFieldID(env, tngenClass, "dflag", "I"); freq1ID = (*env)->GetFieldID(env, tngenClass, "freq1", "I"); ampl1ID = (*env)->GetFieldID(env, tngenClass, "ampl1", "I"); freq2ID = (*env)->GetFieldID(env, tngenClass, "freq2", "I"); ampl2ID = (*env)->GetFieldID(env, tngenClass, "ampl2", "I"); durID = (*env)->GetFieldID(env, tngenClass, "dur", "I"); } tngen->tg_dflag = (*env)->GetIntField(env, Otngen, dflagID); tngen->tg_freq1 = (*env)->GetIntField(env, Otngen, freq1ID); tngen->tg_ampl1 = (*env)->GetIntField(env, Otngen, ampl1ID); tngen->tg_freq2 = (*env)->GetIntField(env, Otngen, freq2ID); tngen->tg_ampl2 = (*env)->GetIntField(env, Otngen, ampl2ID); tngen->tg_dur = (*env)->GetIntField(env, Otngen, durID); } void fDXCAPp(JNIEnv *env, jobject Odxcap, DX_CAP *dxcap) { static jclass dxcapClass = 0; static jfieldID nbrdnaID = 0; static jfieldID stdelyID = 0; static jfieldID cnosigID = 0; static jfieldID lcdlyID = 0; static jfieldID lcdly1ID = 0; static jfieldID hedgeID = 0; static jfieldID cnosilID = 0; static jfieldID lo1tolaID = 0; static jfieldID lo1tolbID = 0; static jfieldID lo2tolaID = 0; static jfieldID lo2tolbID = 0; static jfieldID hi1tolaID = 0; static jfieldID hi1tolbID = 0; static jfieldID lo1bmaxID = 0; static jfieldID lo2bmaxID = 0; static jfieldID hi1bmaxID = 0; static jfieldID nsbusyID = 0; static jfieldID logltchID = 0; static jfieldID higltchID = 0; static jfieldID lo1rmaxID = 0; static jfieldID lo2rminID = 0; static jfieldID intflgID = 0; static jfieldID intfltrID = 0; static jfieldID hisizID = 0; static jfieldID alowmaxID = 0; static jfieldID blowmaxID = 0; static jfieldID nbrbegID = 0; static jfieldID hi1ceilID = 0; static jfieldID lo1ceilID = 0; static jfieldID lowerfrqID = 0; static jfieldID upperfrqID = 0; static jfieldID timefrqID = 0; static jfieldID rejctfrqID = 0; static jfieldID maxansrID = 0; static jfieldID ansrdglID = 0; static jfieldID mxtimefrqID = 0; static jfieldID lower2frqID = 0; static jfieldID upper2frqID = 0; static jfieldID time2frqID = 0; static jfieldID mxtime2frqID = 0; static jfieldID lower3frqID = 0; static jfieldID upper3frqID = 0; static jfieldID time3frqID = 0; static jfieldID mxtime3frqID = 0; static jfieldID dtn_presID = 0; static jfieldID dtn_npresID = 0; static jfieldID dtn_deboffID = 0; static jfieldID pamd_failtimeID = 0; static jfieldID pamd_minringID = 0; static jfieldID pamd_spdvalID = 0; static jfieldID pamd_qtempID = 0; static jfieldID noanswerID = 0; static jfieldID maxinteringID = 0; if (dxcapClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Odxcap); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class DXCAP not found!"); return; } dxcapClass = (*env)->NewGlobalRef(env, clst); if (dxcapClass == 0) { throw(env, "java/lang/RuntimeException", "Class DXCAP reference error!"); return; } nbrdnaID = (*env)->GetFieldID(env, dxcapClass, "nbrdna", "I"); stdelyID = (*env)->GetFieldID(env, dxcapClass, "stdely", "I"); cnosigID = (*env)->GetFieldID(env, dxcapClass, "cnosig", "I"); lcdlyID = (*env)->GetFieldID(env, dxcapClass, "lcdly", "I"); lcdly1ID = (*env)->GetFieldID(env, dxcapClass, "lcdly1", "I"); hedgeID = (*env)->GetFieldID(env, dxcapClass, "hedge", "I"); cnosilID = (*env)->GetFieldID(env, dxcapClass, "cnosil", "I"); lo1tolaID = (*env)->GetFieldID(env, dxcapClass, "lo1tola", "I"); lo1tolbID = (*env)->GetFieldID(env, dxcapClass, "lo1tolb", "I"); lo2tolaID = (*env)->GetFieldID(env, dxcapClass, "lo2tola", "I"); lo2tolbID = (*env)->GetFieldID(env, dxcapClass, "lo2tolb", "I"); hi1tolaID = (*env)->GetFieldID(env, dxcapClass, "hi1tola", "I"); hi1tolbID = (*env)->GetFieldID(env, dxcapClass, "hi1tolb", "I"); lo1bmaxID = (*env)->GetFieldID(env, dxcapClass, "lo1bmax", "I"); lo2bmaxID = (*env)->GetFieldID(env, dxcapClass, "lo2bmax", "I"); hi1bmaxID = (*env)->GetFieldID(env, dxcapClass, "hi1bmax", "I"); nsbusyID = (*env)->GetFieldID(env, dxcapClass, "nsbusy", "I"); logltchID = (*env)->GetFieldID(env, dxcapClass, "logltch", "I"); higltchID = (*env)->GetFieldID(env, dxcapClass, "higltch", "I"); lo1rmaxID = (*env)->GetFieldID(env, dxcapClass, "lo1rmax", "I"); lo2rminID = (*env)->GetFieldID(env, dxcapClass, "lo2rmin", "I"); intflgID = (*env)->GetFieldID(env, dxcapClass, "intflg", "I"); intfltrID = (*env)->GetFieldID(env, dxcapClass, "intfltr", "I"); hisizID = (*env)->GetFieldID(env, dxcapClass, "hisiz", "I"); alowmaxID = (*env)->GetFieldID(env, dxcapClass, "alowmax", "I"); blowmaxID = (*env)->GetFieldID(env, dxcapClass, "blowmax", "I"); nbrbegID = (*env)->GetFieldID(env, dxcapClass, "nbrbeg", "I"); hi1ceilID = (*env)->GetFieldID(env, dxcapClass, "hi1ceil", "I"); lo1ceilID = (*env)->GetFieldID(env, dxcapClass, "lo1ceil", "I"); lowerfrqID = (*env)->GetFieldID(env, dxcapClass, "lowerfrq", "I"); upperfrqID = (*env)->GetFieldID(env, dxcapClass, "upperfrq", "I"); timefrqID = (*env)->GetFieldID(env, dxcapClass, "timefrq", "I"); rejctfrqID = (*env)->GetFieldID(env, dxcapClass, "rejctfrq", "I"); maxansrID = (*env)->GetFieldID(env, dxcapClass, "maxansr", "I"); ansrdglID = (*env)->GetFieldID(env, dxcapClass, "ansrdgl", "I"); mxtimefrqID = (*env)->GetFieldID(env, dxcapClass, "mxtimefrq", "I"); lower2frqID = (*env)->GetFieldID(env, dxcapClass, "lower2frq", "I"); upper2frqID = (*env)->GetFieldID(env, dxcapClass, "upper2frq", "I"); time2frqID = (*env)->GetFieldID(env, dxcapClass, "time2frq", "I"); mxtime2frqID = (*env)->GetFieldID(env, dxcapClass, "mxtime2frq", "I"); lower3frqID = (*env)->GetFieldID(env, dxcapClass, "lower3frq", "I"); upper3frqID = (*env)->GetFieldID(env, dxcapClass, "upper3frq", "I"); time3frqID = (*env)->GetFieldID(env, dxcapClass, "time3frq", "I"); mxtime3frqID = (*env)->GetFieldID(env, dxcapClass, "mxtime3frq", "I"); dtn_presID = (*env)->GetFieldID(env, dxcapClass, "dtn_pres", "I"); dtn_npresID = (*env)->GetFieldID(env, dxcapClass, "dtn_npres", "I"); dtn_deboffID = (*env)->GetFieldID(env, dxcapClass, "dtn_deboff", "I"); pamd_failtimeID = (*env)->GetFieldID(env, dxcapClass, "pamd_failtime", "I"); pamd_minringID = (*env)->GetFieldID(env, dxcapClass, "pamd_minring", "I"); pamd_spdvalID = (*env)->GetFieldID(env, dxcapClass, "pamd_spdval", "I"); pamd_qtempID = (*env)->GetFieldID(env, dxcapClass, "pamd_qtemp", "I"); noanswerID = (*env)->GetFieldID(env, dxcapClass, "noanswer", "I"); maxinteringID = (*env)->GetFieldID(env, dxcapClass, "maxintering", "I"); } dxcap->ca_nbrdna = (*env)->GetIntField(env, Odxcap, nbrdnaID); dxcap->ca_nbrdna = (*env)->GetIntField(env, Odxcap, nbrdnaID); dxcap->ca_stdely = (*env)->GetIntField(env, Odxcap, stdelyID); dxcap->ca_cnosig = (*env)->GetIntField(env, Odxcap, cnosigID); dxcap->ca_lcdly = (*env)->GetIntField(env, Odxcap, lcdlyID); dxcap->ca_lcdly1 = (*env)->GetIntField(env, Odxcap, lcdly1ID); dxcap->ca_hedge = (*env)->GetIntField(env, Odxcap, hedgeID); dxcap->ca_cnosil = (*env)->GetIntField(env, Odxcap, cnosilID); dxcap->ca_lo1tola = (*env)->GetIntField(env, Odxcap, lo1tolaID); dxcap->ca_lo1tolb = (*env)->GetIntField(env, Odxcap, lo1tolbID); dxcap->ca_lo2tola = (*env)->GetIntField(env, Odxcap, lo2tolaID); dxcap->ca_lo2tolb = (*env)->GetIntField(env, Odxcap, lo2tolbID); dxcap->ca_hi1tola = (*env)->GetIntField(env, Odxcap, hi1tolaID); dxcap->ca_hi1tolb = (*env)->GetIntField(env, Odxcap, hi1tolbID); dxcap->ca_lo1bmax = (*env)->GetIntField(env, Odxcap, lo1bmaxID); dxcap->ca_lo2bmax = (*env)->GetIntField(env, Odxcap, lo2bmaxID); dxcap->ca_hi1bmax = (*env)->GetIntField(env, Odxcap, hi1bmaxID); dxcap->ca_nsbusy = (*env)->GetIntField(env, Odxcap, nsbusyID); dxcap->ca_logltch = (*env)->GetIntField(env, Odxcap, logltchID); dxcap->ca_higltch = (*env)->GetIntField(env, Odxcap, higltchID); dxcap->ca_lo1rmax = (*env)->GetIntField(env, Odxcap, lo1rmaxID); dxcap->ca_lo2rmin = (*env)->GetIntField(env, Odxcap, lo2rminID); dxcap->ca_intflg = (*env)->GetIntField(env, Odxcap, intflgID); dxcap->ca_intfltr = (*env)->GetIntField(env, Odxcap, intfltrID); dxcap->ca_hisiz = (*env)->GetIntField(env, Odxcap, hisizID); dxcap->ca_alowmax = (*env)->GetIntField(env, Odxcap, alowmaxID); dxcap->ca_blowmax = (*env)->GetIntField(env, Odxcap, blowmaxID); dxcap->ca_nbrbeg = (*env)->GetIntField(env, Odxcap, nbrbegID); dxcap->ca_hi1ceil = (*env)->GetIntField(env, Odxcap, hi1ceilID); dxcap->ca_lo1ceil = (*env)->GetIntField(env, Odxcap, lo1ceilID); dxcap->ca_lowerfrq = (*env)->GetIntField(env, Odxcap, lowerfrqID); dxcap->ca_upperfrq = (*env)->GetIntField(env, Odxcap, upperfrqID); dxcap->ca_timefrq = (*env)->GetIntField(env, Odxcap, timefrqID); dxcap->ca_rejctfrq = (*env)->GetIntField(env, Odxcap, rejctfrqID); dxcap->ca_maxansr = (*env)->GetIntField(env, Odxcap, maxansrID); dxcap->ca_ansrdgl = (*env)->GetIntField(env, Odxcap, ansrdglID); dxcap->ca_mxtimefrq = (*env)->GetIntField(env, Odxcap, mxtimefrqID); dxcap->ca_lower2frq = (*env)->GetIntField(env, Odxcap, lower2frqID); dxcap->ca_upper2frq = (*env)->GetIntField(env, Odxcap, upper2frqID); dxcap->ca_time2frq = (*env)->GetIntField(env, Odxcap, time2frqID); dxcap->ca_mxtime2frq = (*env)->GetIntField(env, Odxcap, mxtime2frqID); dxcap->ca_lower3frq = (*env)->GetIntField(env, Odxcap, lower3frqID); dxcap->ca_upper3frq = (*env)->GetIntField(env, Odxcap, upper3frqID); dxcap->ca_time3frq = (*env)->GetIntField(env, Odxcap, time3frqID); dxcap->ca_mxtime3frq = (*env)->GetIntField(env, Odxcap, mxtime3frqID); dxcap->ca_dtn_pres = (*env)->GetIntField(env, Odxcap, dtn_presID); dxcap->ca_dtn_npres = (*env)->GetIntField(env, Odxcap, dtn_npresID); dxcap->ca_dtn_deboff = (*env)->GetIntField(env, Odxcap, dtn_deboffID); dxcap->ca_pamd_failtime = (*env)->GetIntField(env, Odxcap, pamd_failtimeID); dxcap->ca_pamd_minring = (*env)->GetIntField(env, Odxcap, pamd_minringID); dxcap->ca_pamd_spdval = (*env)->GetIntField(env, Odxcap, pamd_spdvalID); dxcap->ca_pamd_qtemp = (*env)->GetIntField(env, Odxcap, pamd_qtempID); dxcap->ca_noanswer = (*env)->GetIntField(env, Odxcap, noanswerID); dxcap->ca_maxintering = (*env)->GetIntField(env, Odxcap, maxinteringID); } /* * Class: local_dialogic_Dialogic * Method: dx_play * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/IOTT;Llocal/dialogic/TPT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1play #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1play #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Oiott, jobject Otpt, jint Imode) { int dev; DX_IOTT * iott; DV_TPT * tpt; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); iott = mIOTTp(env, Oiott, Ovoice); tpt = mTPTp(env, Otpt, Ovoice); return dx_play(dev, iott, tpt, (unsigned short)Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_rec * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/IOTT;Llocal/dialogic/TPT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1rec #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1rec #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Oiott, jobject Otpt, jint Imode) { int dev, res; DX_IOTT * iott; DV_TPT * tpt; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); iott = mIOTTp(env, Oiott, Ovoice); tpt = mTPTp(env, Otpt, Ovoice); res = dx_rec(dev, iott, tpt, (unsigned short)Imode); return 0; } /* * Class: local_dialogic_Dialogic * Method: dx_getdig * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/TPT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1getdig__Llocal_dialogic_Voice_2Llocal_dialogic_TPT_2I #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1getdig__Llocal_dialogic_Voice_2Llocal_dialogic_TPT_2I #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Otpt, jint Imode) { int dev, res; DV_TPT * tpt; DV_DIGIT * digitbuf; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); /* * See mIOTT on alloc strategy... */ digitbuf = (DV_DIGIT *)((*env)->GetIntField(env, Ovoice, physioID) + 956); if ((long)digitbuf == 956) { digitbuf = (DV_DIGIT *)((char *)malloc(1032) + 956); if ((long)digitbuf == 956) { throw(env, "java/lang/RuntimeException", "Channel buffer malloc error!"); return 0; } (*env)->SetIntField(env, Ovoice, physioID, (long)digitbuf - 956); } tpt = mTPTp(env, Otpt, Ovoice); return dx_getdig(dev, tpt, digitbuf, (unsigned short)Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_getdig * Signature: (Llocal/dialogic/Voice;[B)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1getdig__Llocal_dialogic_Voice_2_3B #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1getdig__Llocal_dialogic_Voice_2_3B #endif (JNIEnv * env, jclass class, jobject Ovoice, jbyteArray BAbuf) { char *digits, *digitbuf; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } if ((*env)->GetArrayLength(env, BAbuf) < sizeof (struct dv_digit) ) { throw(env, "java/lang/RuntimeException", "Small digit buffer to dx_getdig()" ); return 0; } digitbuf = (char *)((*env)->GetIntField(env, Ovoice, physioID) + 956); if ((long)digitbuf == 956) { /* This should not happen... we should be here after allocing memory */ return 0; } digits = (char *)(*env)->GetByteArrayElements(env, BAbuf, 0); memcpy(digits, digitbuf, sizeof (struct dv_digit)); (*env)->ReleaseByteArrayElements(env, BAbuf, digits, 0); return strlen(digitbuf); } /* * Class: local_dialogic_Dialogic * Method: dx_clrdigbuf * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1clrdigbuf #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1clrdigbuf #endif (JNIEnv *env, jclass class, jint Idev) { return dx_clrdigbuf(Idev); } /* * Class: local_dialogic_Dialogic * Method: dx_bldst * Signature: (IIII)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1bldst #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1bldst #endif (JNIEnv *env , jclass class, jint Iid, jint If1, jint Id1, jint Imode) { return dx_bldst(Iid, If1, Id1, Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_blddt * Signature: (IIIIII)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1blddt #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1blddt #endif (JNIEnv *env , jclass class, jint Iid, jint If1, jint Id1, jint If2, jint Id2, jint Imode) { return dx_blddt(Iid, If1, Id1, If2, Id2, Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_deltones * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1deltones #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1deltones #endif (JNIEnv *env, jclass class, jint Idev) { return dx_deltones(Idev); } /* * Class: local_dialogic_Dialogic * Method: dx_addtone * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1addtone #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1addtone #endif (JNIEnv *env, jclass class, jint Idev, jint Idigit, jint Itype) { return dx_addtone(Idev, Idigit, Itype); } /* * Class: local_dialogic_Dialogic * Method: dx_enbtone * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1enbtone #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1enbtone #endif (JNIEnv *env, jclass class, jint Idev, jint Iid, jint Imask) { return dx_enbtone(Idev, Iid, Imask); } /* * Class: local_dialogic_Dialogic * Method: dx_distone * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1distone #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1distone #endif (JNIEnv *env, jclass class, jint Idev, jint Iid, jint Imask) { return dx_distone(Idev, Iid, Imask); } /* * Class: local_dialogic_Dialogic * Method: dx_playtone * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/TNGEN;Llocal/dialogic/TPT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1playtone #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1playtone #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Otngen, jobject Otpt, jint Imode) { int dev, res; TN_GEN tngen; DV_TPT * tpt; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); tpt = mTPTp(env, Otpt, Ovoice); fTNGENp(env, Otngen, &tngen); res = dx_playtone(dev, &tngen, tpt, Imode); } /* * Class: local_dialogic_Dialogic * Method: sr_waitevt * Signature: (Llocal/dialogic/EVT;)V */ JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_sr_1waitevt (JNIEnv *env, jclass class, jobject Oevt) { int dev, evt_type, datalen; long crn; struct DX_CST *cstdata; int *data; short *sdata; char *cdata; struct dcb_digits *dcbd; if (evtClass == 0) { throw(env, "java/lang/RuntimeException", "Class EVT not loaded!"); return; } #ifdef LINUX #define PAR () sr_waitevt(0); (*env)->SetIntField(env, Oevt, evtDevID, dev = sr_getevtdev PAR); if (dev == 0) return; #else #define PAR (0) sr_waitevt(-1); (*env)->SetIntField(env, Oevt, evtDevID, dev = sr_getevtdev PAR); #endif evt_type = sr_getevttype PAR; (*env)->SetIntField(env, Oevt, evtTypeID, evt_type); datalen = sr_getevtlen PAR; if (datalen == 4 && evt_type != TDX_CST && evt_type != CCEV_OFFERED) { data = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *data); } else if (datalen == 2) { sdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *sdata); } else if (datalen == 1) { cdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtDataID, *cdata); } switch(evt_type) { case TDX_CST: cstdata = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtCstevtID, cstdata->cst_event); (*env)->SetIntField(env, Oevt, evtCstdataID, cstdata->cst_data); break; case DCBEV_DIGIT: dcbd = sr_getevtdatap(); (*env)->SetIntField(env, Oevt, evtConfID, dcbd->confid); (*env)->SetIntField(env, Oevt, evtLineID, dcbd->chan_num); (*env)->SetIntField(env, Oevt, evtDataID, dcbd->digits[0]); break; case TDX_PLAY: case TDX_RECORD: case TDX_GETDIG: case TDX_PLAYTONE: (*env)->SetIntField(env, Oevt, evtTermmskID, ATDX_TERMMSK(dev)); break; case CCEV_OFFERED: data = sr_getevtdatap(); if (cc_GetCRN(&crn, data) != 0) crn = -1; (*env)->SetLongField(env, Oevt, evtCrnID, crn); break; } } /* * Class: local_dialogic_Dialogic * Method: ATDX_STATE * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1STATE #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1do_1STATE #endif (JNIEnv * env, jclass class, jint Idev) { return ATDX_STATE((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: ATDX_CPTERM * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1CPTERM #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1do_1CPTERM #endif (JNIEnv * env, jclass class, jint Idev) { return ATDX_CPTERM((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: ATDX_LINEST * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1LINEST #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1do_1LINEST #endif (JNIEnv * env, jclass class, jint Idev) { return ATDX_LINEST((int)Idev); } /* * Class: Dialogic * Method: dx_stopch * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1stopch #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1stopch #endif (JNIEnv *env, jclass class, jint Idev, jint Imode) { return dx_stopch((int)Idev, (unsigned short)Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_dial * Signature: (ILjava/lang/String;Llocal/dialogic/DXCAP;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1dial #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1dial #endif (JNIEnv *env, jclass class, jint Idev, jstring Snumber, jobject Odxcap, jint Imode) { char *number; int ret; number = (char *)(*env)->GetStringUTFChars(env, Snumber, 0); if (Odxcap) { DX_CAP cap; fDXCAPp(env, Odxcap, &cap); ret = dx_dial((int)Idev, number, &cap, (unsigned short)DX_CALLP|Imode); } else { ret = dx_dial((int)Idev, number, 0, (unsigned short)Imode); } (*env)->ReleaseStringUTFChars(env, Snumber, number); return ret; } /* * Class: local_dialogic_Dialogic * Method: dx_getxmitslot * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1getxmitslot #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1getxmitslot #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = 0; tsinfo.sc_tsarrayp = &scts; if (dx_getxmitslot(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "dx_getxmitslot error"); } return scts; } /* * Class: local_dialogic_Dialogic * Method: dx_listen * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1listen #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1do_1listen #endif (JNIEnv *env, jclass class, jint Idev, jint Its) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = Its; tsinfo.sc_tsarrayp = &scts; if (dx_listen(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "dx_listen error"); } } /* * Class: local_dialogic_Dialogic * Method: dx_unlisten * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1unlisten #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dx_1do_1unlisten #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; if (dx_unlisten(Idev) == -1) { throw(env, "java/lang/RuntimeException", "dx_unlisten error"); } } /* * Class: local_dialogic_Dialogic * Method: ag_getxmitslot * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ag_1getxmitslot #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ag_1do_1getxmitslot #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = 0; tsinfo.sc_tsarrayp = &scts; if (ag_getxmitslot(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "ag_getxmitslot error"); } return scts; } /* * Class: local_dialogic_Dialogic * Method: ag_listen * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ag_1listen #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ag_1do_1listen #endif (JNIEnv *env, jclass class, jint Idev, jint Its) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = Its; tsinfo.sc_tsarrayp = &scts; if (ag_listen(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "ag_listen error"); } } /* * Class: local_dialogic_Dialogic * Method: ag_unlisten * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ag_1unlisten #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ag_1do_1unlisten #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; if (ag_unlisten(Idev) == -1) { throw(env, "java/lang/RuntimeException", "ag_unlisten error"); } } /* * Class: local_dialogic_Dialogic * Method: dx_playiottdata * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/IOTT;Llocal/dialogic/TPT;Llocal/dialogic/XPB;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1playiottdata #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1playiottdata #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Oiott, jobject Otpt, jobject Oxpb, jint Imode) { int dev; DX_IOTT * iott; DV_TPT * tpt; DX_XPB * xpb; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); iott = mIOTTp(env, Oiott, Ovoice); tpt = mTPTp(env, Otpt, Ovoice); xpb = mXPBp(env, Oxpb, Ovoice); return dx_playiottdata(dev, iott, tpt, xpb, (unsigned short)Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_reciottdata * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/IOTT;Llocal/dialogic/TPT;Llocal/dialogic/XPB;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1reciottdata #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1reciottdata #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Oiott, jobject Otpt, jobject Oxpb, jint Imode) { int dev; DX_IOTT * iott; DV_TPT * tpt; DX_XPB * xpb; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); iott = mIOTTp(env, Oiott, Ovoice); tpt = mTPTp(env, Otpt, Ovoice); xpb = mXPBp(env, Oxpb, Ovoice); return dx_reciottdata(dev, iott, tpt, xpb, (unsigned short)Imode); } /* * Class: local_dialogic_Dialogic * Method: dx_mreciottdata * Signature: (Llocal/dialogic/Voice;Llocal/dialogic/IOTT;Llocal/dialogic/TPT;Llocal/dialogic/XPB;III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1mreciottdata #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1mreciottdata #endif (JNIEnv *env, jclass class, jobject Ovoice, jobject Oiott, jobject Otpt, jobject Oxpb, jint Imode, jint Its1, jint Its2) { int dev; DX_IOTT * iott; DV_TPT * tpt; DX_XPB * xpb; SC_TSINFO tsinfo; long scts[2]; tsinfo.sc_numts = 2; scts[0] = Its1; scts[1] = Its2; tsinfo.sc_tsarrayp = scts; if (voiceClass == 0 && getVoiceClass(env, Ovoice) == 0) { return 0; } dev = (*env)->GetIntField(env, Ovoice, deviceID); iott = mIOTTp(env, Oiott, Ovoice); tpt = mTPTp(env, Otpt, Ovoice); xpb = mXPBp(env, Oxpb, Ovoice); #ifndef LINUX_NO_MREC return dx_mreciottdata(dev, iott, tpt, xpb, (unsigned short)Imode, &tsinfo); #else if (xpb->wFileFormat != FILE_FORMAT_VOX) { throw(env, "java/lang/RuntimeException", "Unsupported file format under linux" ); return 0; } switch(xpb->wDataFormat) { case DATA_FORMAT_DIALOGIC_ADPCM: Imode |= MD_ADPCM; break; case DATA_FORMAT_PCM: Imode |= MD_PCM; break; case DATA_FORMAT_ALAW: Imode |= MD_PCM|RM_ALAW; break; case DATA_FORMAT_MULAW: Imode |= MD_PCM; break; default: throw(env, "java/lang/RuntimeException", "Unsupported data format under linux" ); return 0; } switch(xpb->nSamplesPerSec) { case DRT_6KHZ: Imode |= RM_SR6; break; case DRT_8KHZ: Imode |= RM_SR8; break; default: throw(env, "java/lang/RuntimeException", "Unsupported sample rate under linux" ); return 0; } return dx_recm(dev, iott, tpt, (unsigned short)Imode, &tsinfo); #endif } /* * Class: local_dialogic_Dialogic * Method: dx_setchxfercnt * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1setchxfercnt #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1setchxfercnt #endif (JNIEnv *env , jclass class, jint Idev, jint Ibufnum) { return dx_setchxfercnt(Idev, Ibufnum); } /* * Class: local_dialogic_Dialogic * Method: dx_gtcallid * Signature: (I[B)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1gtcallid #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1gtcallid #endif (JNIEnv *env, jclass class, jint Idev, jbyteArray BAbuf) { int dev, res, len; char *digits; if ((*env)->GetArrayLength(env, BAbuf) < 81 ) { throw(env, "java/lang/RuntimeException", "Small digit buffer to dx_gtcallid()" ); return 0; } digits = (char *)(*env)->GetByteArrayElements(env, BAbuf, 0); res = dx_gtcallid(Idev, digits); if (res == 0) len = strlen(digits); else len = -1 * ATDV_LASTERR(Idev); (*env)->ReleaseByteArrayElements(env, BAbuf, digits, 0); return len; } /* * Class: local_dialogic_Dialogic * Method: dx_gtextcallid * Signature: (II[B)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1gtextcallid #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1gtextcallid #endif (JNIEnv *env, jclass class, jint Idev, jint Itype, jbyteArray BAbuf) { int dev, res, len; char *digits; if ((*env)->GetArrayLength(env, BAbuf) < 258 ) { throw(env, "java/lang/RuntimeException", "Small digit buffer to dx_gtextcallid()" ); return 0; } digits = (char *)(*env)->GetByteArrayElements(env, BAbuf, 0); res = dx_gtextcallid(Idev, Itype, digits); if (res == 0) len = strlen(digits); else len = -1 * ATDV_LASTERR(Idev); (*env)->ReleaseByteArrayElements(env, BAbuf, digits, 0); return len; } /* * Class: local_dialogic_Dialogic * Method: dx_initcallp * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1initcallp #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1initcallp #endif (JNIEnv *env, jclass class, jint dev) { return dx_initcallp(dev); } /* * Class: local_dialogic_Dialogic * Method: dx_getparm * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1getparm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dx_1do_1getparm #endif (JNIEnv *env, jclass class, jint Idev, jint Ipar) { long value; if (dx_getparm(Idev, Ipar, &value) == -1) { throw(env, "java/lang/RuntimeException", "dx_getparm error"); return 0; } return value; } /* * Class: local_dialogic_Dialogic * Method: ATDX_BUFDIGS * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1BUFDIGS #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1do_1BUFDIGS #endif (JNIEnv * env, jclass class, jint Idev) { return ATDX_BUFDIGS((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: ATDX_TRCOUNT * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1TRCOUNT #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDX_1do_1TRCOUNT #endif (JNIEnv * env, jclass class, jint Idev) { return ATDX_TRCOUNT((int)Idev); } /* * DDDD TTTTT I * D D T I * D D T I * D D T I * D D T I * D D T I * DDDD T I */ /* * Class: local_dialogic_Dialogic * Method: dt_libinit * Signature: ()I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1libinit (JNIEnv *env, jclass class) { int par; #ifndef LINUX #ifdef OLDDLG if (dt_libinit(DLGC_MT) == -1) { throw(env, "java/lang/RuntimeException", "DTI init error"); return -1; } #endif #endif return 0; } /* * Class: local_dialogic_Dialogic * Method: dt_open * Signature: (Ljava/lang/String;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1open #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1do_1open #endif (JNIEnv *env, jclass class, jstring Sdev, jint Ires) { long res; char *dev; dev = (char *)(*env)->GetStringUTFChars(env, Sdev, 0); res = dt_open(dev, (int)Ires); (*env)->ReleaseStringUTFChars(env, Sdev, dev); if (res < 0) { throw(env, "java/lang/RuntimeException", "dt_open error %d", errno); return -1; } return res; } /* * Class: local_dialogic_Dialogic * Method: dt_close * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1close #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1do_1close #endif (JNIEnv *env, jclass class, jint Idev) { dt_close((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: dt_getparm * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1getparm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1do_1getparm #endif (JNIEnv *env, jclass class, jint Idev, jint Ipar) { long value; if (dt_getparm(Idev, Ipar, &value) == -1) { throw(env, "java/lang/RuntimeException", "dt_getparm error"); return 0; } return value; } /* * Class: local_dialogic_Dialogic * Method: dt_setparm * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1setparm #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1do_1setparm #endif (JNIEnv *env, jclass class, jint Idev, jint Ipar, jint Ivalue) { if (dt_setparm(Idev, Ipar, &Ivalue) == -1) { throw(env, "java/lang/RuntimeException", "dt_setparm error"); } } /* * Class: local_dialogic_Dialogic * Method: dt_getxmitslot * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1getxmitslot #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1do_1getxmitslot #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = 0; tsinfo.sc_tsarrayp = &scts; if (dt_getxmitslot(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "dt_getxmitslot error"); } return scts; } /* * Class: local_dialogic_Dialogic * Method: dt_listen * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1listen #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1do_1listen #endif (JNIEnv *env, jclass class, jint Idev, jint Its) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = Its; tsinfo.sc_tsarrayp = &scts; if (dt_listen(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "dt_listen error"); } } /* * Class: local_dialogic_Dialogic * Method: dt_unlisten * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1unlisten #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1do_1unlisten #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; if (dt_unlisten(Idev) == -1) { throw(env, "java/lang/RuntimeException", "dt_unlisten error"); } } /* * Class: local_dialogic_Dialogic * Method: dt_getevtmsk * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1getevtmsk #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1do_1getevtmsk #endif (JNIEnv *env, jclass class, jint Idev, jint Ievt) { long value; if (dt_getevtmsk(Idev, Ievt, &value) == -1) { throw(env, "java/lang/RuntimeException", "dt_getevtmsk error"); return 0; } return value; } /* * Class: local_dialogic_Dialogic * Method: dt_setevtmsk * Signature: (IIII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1setevtmsk #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dt_1do_1setevtmsk #endif (JNIEnv *env, jclass class, jint Idev, jint Ievt, jint Imsk, jint Imode) { if (dt_setevtmsk(Idev, Ievt, Imsk, Imode) == -1) { throw(env, "java/lang/RuntimeException", "dt_setevtmsk error"); } } /* * Class: local_dialogic_Dialogic * Method: dt_settssig * Signature: (III)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1settssig #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dt_1do_1settssig #endif (JNIEnv *env, jclass class, jint Idev, jint Isig, jint Imode) { if (dt_settssig(Idev, Isig, Imode) == -1) { throw(env, "java/lang/RuntimeException", "dt_settssig error"); } } /* * Class: local_dialogic_Dialogic * Method: ATDT_TSSGBIT * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDT_1TSSGBIT #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATDT_1do_1TSSGBIT #endif (JNIEnv * env, jclass class, jint Idev) { return ATDT_TSSGBIT((int)Idev); } static jclass cdtClass = 0; static jfieldID chan_numID = 0; static jfieldID chan_selID = 0; static jfieldID chan_attrID = 0; void fCDTp(JNIEnv *env, jobject Ocdt, MS_CDT *cdt) { if (cdtClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Ocdt); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class CDT not found!"); return; } cdtClass = (*env)->NewGlobalRef(env, clst); if (cdtClass == 0) { throw(env, "java/lang/RuntimeException", "Class CDT reference error!"); return; } chan_numID = (*env)->GetFieldID(env, cdtClass, "chan_num", "I"); chan_selID = (*env)->GetFieldID(env, cdtClass, "chan_sel", "I"); chan_attrID = (*env)->GetFieldID(env, cdtClass, "chan_attr", "I"); } cdt->chan_num = (*env)->GetIntField(env, Ocdt, chan_numID); cdt->chan_sel = (*env)->GetIntField(env, Ocdt, chan_selID); cdt->chan_attr = (*env)->GetIntField(env, Ocdt, chan_attrID); } void fillCDT(JNIEnv *env, jobject Ocdt, MS_CDT *cdt) { if (cdtClass == 0) { jclass clst; clst = (*env)->GetObjectClass(env, Ocdt); if (clst == 0) { throw(env, "java/lang/RuntimeException", "Class CDT not found!"); return; } cdtClass = (*env)->NewGlobalRef(env, clst); if (cdtClass == 0) { throw(env, "java/lang/RuntimeException", "Class CDT reference error!"); return; } chan_numID = (*env)->GetFieldID(env, cdtClass, "chan_num", "I"); chan_selID = (*env)->GetFieldID(env, cdtClass, "chan_sel", "I"); chan_attrID = (*env)->GetFieldID(env, cdtClass, "chan_attr", "I"); } (*env)->SetIntField(env, Ocdt, chan_numID, cdt->chan_num); (*env)->SetIntField(env, Ocdt, chan_selID, cdt->chan_sel); (*env)->SetIntField(env, Ocdt, chan_attrID, cdt->chan_attr); } /* * DDDD CCCC BBBB * D D C B B * D D C B B * D D C BBBB * D D C B B * D D C B B * DDDD CCCC BBBB */ /* * Class: local_dialogic_Dialogic * Method: dcb_libinit * Signature: ()I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1libinit (JNIEnv *env, jclass class) { int par; #ifndef LINUX #ifdef OLDDLG if (dcb_libinit(DLGC_MT) == -1) { throw(env, "java/lang/RuntimeException", "DCB init error"); return -1; } #endif #endif return 0; } /* * Class: local_dialogic_Dialogic * Method: dcb_addtoconf * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1addtoconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1addtoconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (dcb_addtoconf(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "dcb_addtoconf error"); return; } fillCDT(env, oCDT, &cdt); } /* * Class: local_dialogic_Dialogic * Method: dcb_close * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1close #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1close #endif (JNIEnv * env, jclass class, jint Idev) { dcb_close((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: dcb_delconf * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1delconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1delconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf) { if (dcb_delconf(Idev, Iconf) == -1) { throw(env, "java/lang/RuntimeException", "dcb_delconf error"); } } /* * Class: local_dialogic_Dialogic * Method: dcb_estconf * Signature: (I[Llocal/dialogic/CDT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1estconf #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1do_1estconf #endif (JNIEnv * env, jclass class, jint Idev, jobjectArray OAcdt, jint Ipar) { MS_CDT cdts[4]; int parties = 0; int conf = 0; jobject Ocdt; int i; parties = (*env)->GetArrayLength(env, OAcdt); if (parties < 0 || parties > 4) { throw(env, "java/lang/RuntimeException", "dcb_estconf size error"); return 0; } for (i = 0; i < parties; i++) { Ocdt = (*env)->GetObjectArrayElement(env, OAcdt, i); fCDTp(env, Ocdt, &cdts[i]); } if (dcb_estconf(Idev, &cdts[0], parties, Ipar, &conf) == -1) { throw(env, "java/lang/RuntimeException", "dcb_estconf error"); return 0; } for (i = 0; i < parties; i++) { Ocdt = (*env)->GetObjectArrayElement(env, OAcdt, i); fillCDT(env, Ocdt, &cdts[i]); } return conf; } /* * Class: local_dialogic_Dialogic * Method: dcb_getbrdparm * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1getbrdparm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1do_1getbrdparm #endif (JNIEnv * env, jclass class, jint Idev, jint Ipar) { long val; if (dcb_getbrdparm(Idev, Ipar, &val) == -1) { throw(env, "java/lang/RuntimeException", "dcb_getbrdparm error"); return 0; } return val; } /* * Class: local_dialogic_Dialogic * Method: dcb_getcde * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1getcde #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1getcde #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject Ocdt) { MS_CDT cdt; fCDTp(env, Ocdt, &cdt); if (dcb_getcde(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "dcb_getcde error"); return; } fillCDT(env, Ocdt, &cdt); } /* * Class: local_dialogic_Dialogic * Method: dcb_gettalkers * Signature: (II[Llocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1gettalkers #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1gettalkers #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobjectArray OAcdt) { MS_CDT cdts[32], cdtt[32]; int parties = 0, talkers = 0; jobject Ocdt[32]; int i, j; parties = (*env)->GetArrayLength(env, OAcdt); for (i = 0; i < parties; i++) { Ocdt[i] = (*env)->GetObjectArrayElement(env, OAcdt, i); fCDTp(env, Ocdt[i], &cdts[i]); cdts[i].chan_attr &= ~0x80; /* clear talking indication */ } if (dcb_gettalkers(Idev, Iconf, &talkers, &cdtt[0]) == -1) { throw(env, "java/lang/RuntimeException", "dcb_gettalkers error"); return; } for (i = 0; i < parties; i++) { for (j = 0; j < talkers; j++) { if (cdtt[j].chan_num == cdts[i].chan_num) { cdts[i].chan_attr |= 0x80; /* This one is talking */ break; } } fillCDT(env, Ocdt[i], &cdts[i]); } } /* * Class: local_dialogic_Dialogic * Method: dcb_open * Signature: (Ljava/lang/String;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1open #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_dcb_1do_1open #endif (JNIEnv * env, jclass class, jstring Sdev, jint Ires) { long res; char *dev; dev = (char *)(*env)->GetStringUTFChars(env, Sdev, 0); res = dcb_open(dev, (int)Ires); (*env)->ReleaseStringUTFChars(env, Sdev, dev); if (res < 0) { throw(env, "java/lang/RuntimeException", "dcb_open error %d", errno); return -1; } return res; } /* * Class: local_dialogic_Dialogic * Method: dcb_remfromconf * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1remfromconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1remfromconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (dcb_remfromconf(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "dcb_remfromconf error"); } } /* * Class: local_dialogic_Dialogic * Method: dcb_setbrdparm * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1setbrdparm #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1setbrdparm #endif (JNIEnv * env, jclass class, jint Idev, jint Ipar, jint Ival) { if (dcb_setbrdparm(Idev, Ipar, &Ival) == -1) { throw(env, "java/lang/RuntimeException", "dcb_setbrdparm error"); } } /* * Class: local_dialogic_Dialogic * Method: dcb_setcde * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1setcde #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1setcde #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (dcb_setcde(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "dcb_setcde error"); } } /* * Class: local_dialogic_Dialogic * Method: dcb_setdigitmsk * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1setdigitmsk #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_dcb_1do_1setdigitmsk #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jint Imsk) { if (dcb_setdigitmsk(Idev, Iconf, Imsk, CBA_SETMSK) == -1) { throw(env, "java/lang/RuntimeException", "dcb_setdigitmsk error"); } } /* * M M SSSS I * MM MM S I * M M M S I * M M SSS I * M M S I * M M S I * M M SSSS I */ /* * Class: local_dialogic_Dialogic * Method: ms_libinit * Signature: ()I */ JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1libinit (JNIEnv *env, jclass class) { int par; #ifndef LINUX #ifdef OLDDLG if (ms_libinit(DLGC_MT) == -1) { throw(env, "java/lang/RuntimeException", "MSI init error"); return -1; } #endif #endif return 0; } /* * Class: local_dialogic_Dialogic * Method: ms_addtoconf * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1addtoconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1addtoconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (ms_addtoconf(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "ms_addtoconf error"); return; } fillCDT(env, oCDT, &cdt); } /* * Class: local_dialogic_Dialogic * Method: ms_delconf * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1delconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1delconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf) { if (ms_delconf(Idev, Iconf) == -1) { throw(env, "java/lang/RuntimeException", "ms_delconf error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_estconf * Signature: (I[Llocal/dialogic/CDT;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1estconf #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1do_1estconf #endif (JNIEnv * env, jclass class, jint Idev, jobjectArray OAcdt, jint Ipar) { MS_CDT cdts[4]; int parties = 0; int conf = 0; jobject Ocdt; int i; parties = (*env)->GetArrayLength(env, OAcdt); if (parties < 0 || parties > 4) { throw(env, "java/lang/RuntimeException", "ms_estconf size error"); return 0; } for (i = 0; i < parties; i++) { Ocdt = (*env)->GetObjectArrayElement(env, OAcdt, i); fCDTp(env, Ocdt, &cdts[i]); } if (ms_estconf(Idev, &cdts[0], parties, Ipar, &conf) == -1) { throw(env, "java/lang/RuntimeException", "ms_estconf error"); return 0; } for (i = 0; i < parties; i++) { Ocdt = (*env)->GetObjectArrayElement(env, OAcdt, i); fillCDT(env, Ocdt, &cdts[i]); } return conf; } /* * Class: local_dialogic_Dialogic * Method: ms_getcde * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1getcde #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1getcde #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject Ocdt) { MS_CDT cdt; fCDTp(env, Ocdt, &cdt); if (ms_getcde(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "ms_getcde error"); return; } fillCDT(env, Ocdt, &cdt); } /* * Class: local_dialogic_Dialogic * Method: ms_remfromconf * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1remfromconf #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1remfromconf #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (ms_remfromconf(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "ms_remfromconf error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_setcde * Signature: (IILlocal/dialogic/CDT;)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1setcde #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1setcde #endif (JNIEnv * env, jclass class, jint Idev, jint Iconf, jobject oCDT) { MS_CDT cdt; fCDTp(env, oCDT, &cdt); if (ms_setcde(Idev, Iconf, &cdt) == -1) { throw(env, "java/lang/RuntimeException", "ms_setcde error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_open * Signature: (Ljava/lang/String;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1open #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1do_1open #endif (JNIEnv * env, jclass class, jstring Sdev, jint Ires) { long res; char *dev; dev = (char *)(*env)->GetStringUTFChars(env, Sdev, 0); res = ms_open(dev, (int)Ires); (*env)->ReleaseStringUTFChars(env, Sdev, dev); if (res < 0) { throw(env, "java/lang/RuntimeException", "ms_open error %d", errno); return -1; } return res; } /* * Class: local_dialogic_Dialogic * Method: ms_close * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1close #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1close #endif (JNIEnv * env, jclass class, jint Idev) { ms_close((int)Idev); } /* * Class: local_dialogic_Dialogic * Method: ms_getbrdparm * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1getbrdparm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1do_1getbrdparm #endif (JNIEnv * env, jclass class, jint Idev, jint Ipar) { long val; if (ms_getbrdparm(Idev, Ipar, &val) == -1) { throw(env, "java/lang/RuntimeException", "ms_getbrdparm error"); return 0; } return val; } /* * Class: local_dialogic_Dialogic * Method: ms_setbrdparm * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1setbrdparm #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1setbrdparm #endif (JNIEnv * env, jclass class, jint Idev, jint Ipar, jint Ival) { if (ms_setbrdparm(Idev, Ipar, &Ival) == -1) { throw(env, "java/lang/RuntimeException", "ms_setbrdparm error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_getevtmsk * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1getevtmsk #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1do_1getevtmsk #endif (JNIEnv * env, jclass class, jint Idev, jint Ievent) { short val; if (ms_getevtmsk(Idev, Ievent, &val) == -1) { throw(env, "java/lang/RuntimeException", "ms_getevtmsk error"); return 0; } return val; } /* * Class: local_dialogic_Dialogic * Method: ms_setevtmsk * Signature: (IIII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1setevtmsk #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1setevtmsk #endif (JNIEnv * env, jclass class, jint Idev, jint Ievent, jint Imask, jint Iaction) { if (ms_setevtmsk(Idev, Ievent, Imask, Iaction) == -1) { throw(env, "java/lang/RuntimeException", "ms_setevtmsk error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_getxmitslot * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1getxmitslot #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ms_1do_1getxmitslot #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = 0; tsinfo.sc_tsarrayp = &scts; if (ms_getxmitslot(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "ms_getxmitslot error"); } return scts; } /* * Class: local_dialogic_Dialogic * Method: ms_listen * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1listen #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1listen #endif (JNIEnv *env, jclass class, jint Idev, jint Its) { SC_TSINFO tsinfo; long scts; tsinfo.sc_numts = 1; scts = Its; tsinfo.sc_tsarrayp = &scts; if (ms_listen(Idev, &tsinfo) == -1) { throw(env, "java/lang/RuntimeException", "ms_listen error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_unlisten * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1unlisten #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1unlisten #endif (JNIEnv *env, jclass class, jint Idev) { SC_TSINFO tsinfo; if (ms_unlisten(Idev) == -1) { throw(env, "java/lang/RuntimeException", "ms_unlisten error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_genring * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1genring #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1genring #endif (JNIEnv *env, jclass class, jint Idev, jint Ilen, jint Imode) { if (ms_genring(Idev, Ilen, Imode) == -1) { throw(env, "java/lang/RuntimeException", "ms_genring error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_genziptone * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1genziptone #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1genziptone #endif (JNIEnv *env, jclass class, jint Idev) { if (ms_genziptone(Idev) == -1) { throw(env, "java/lang/RuntimeException", "ms_genziptone error"); } } /* * Class: local_dialogic_Dialogic * Method: ms_setvol * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1setvol #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1setvol #endif (JNIEnv *env, jclass class, jint Idev, jint Itype, jint Isteps) { if (ms_setvol(Idev, Itype, Isteps) == -1) { throw(env, "java/lang/RuntimeException", "ms_setvol error"); } } /* * Class: local_dialogic_Dialogic * Method: ATMS_TSSGBIT * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATMS_1TSSGBIT #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_ATMS_1do_1TSSGBIT #endif (JNIEnv *env, jclass class, jint Idev) { long bits; bits = 0; if ((bits = ATMS_TSSGBIT(Idev)) == -1) { throw(env, "java/lang/RuntimeException", "ATMS_TSSGBIT error"); } return bits; } /* * Class: local_dialogic_Dialogic * Method: ms_stopfn * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1stopfn #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_ms_1do_1stopfn #endif (JNIEnv *env, jclass class, jint Idev, jint Ifn) { if (ms_stopfn(Idev, Ifn) == -1) { throw(env, "java/lang/RuntimeException", "ms_stopfn error"); } } /* * I SSSS DDDD N N * I S D D N N * I S D D NN N * I SSS D D N N N * I S D D N NN * I S D D N N * I SSSS DDDD N N */ /* * Class: local_dialogic_Dialogic * Method: cc_AcceptCall * Signature: (JII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1AcceptCall #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1AcceptCall #endif (JNIEnv *env, jclass class, jlong Lcrn, jint Irings, jint Imode) { if (cc_AcceptCall(Lcrn, Irings, Imode) == -1) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_AcceptCall error %x",cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_AnswerCall * Signature: (JII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1AnswerCall #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1AnswerCall #endif (JNIEnv *env, jclass class, jlong Lcrn, jint Irings, jint Imode) { if (cc_AnswerCall(Lcrn, Irings, Imode) == -1) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_AnswerCall error %x",cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_CauseValue * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1CauseValue #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1CauseValue #endif (JNIEnv *env, jclass class, jint Ildev) { return cc_CauseValue(Ildev); } /* * Class: local_dialogic_Dialogic * Method: cc_Close * Signature: (I)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1Close #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1Close #endif (JNIEnv *env, jclass class, jint Ildev) { cc_Close(Ildev); } /* * Class: local_dialogic_Dialogic * Method: cc_DropCall * Signature: (JII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1DropCall #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1DropCall #endif (JNIEnv *env, jclass class, jlong Lcrn, jint Icause, jint Imode) { if (cc_DropCall(Lcrn, Icause, Imode) == -1) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_DropCall error %x",cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_GetANI * Signature: (J[B)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1GetANI #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1GetANI #endif (JNIEnv *env, jclass class, jlong Lcrn, jbyteArray BAani) { int res; char *ani; if ((*env)->GetArrayLength(env, BAani) < 32 ) { throw(env, "java/lang/RuntimeException", "Small ANI buffer to cc_GetANI()" ); return; } ani = (char *)(*env)->GetByteArrayElements(env, BAani, 0); res = cc_GetANI(Lcrn, ani); (*env)->ReleaseByteArrayElements(env, BAani, ani, 0); if (res < 0) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_GetANI error %x", cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_GetDNIS * Signature: (J[B)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1GetDNIS #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1GetDNIS #endif (JNIEnv *env, jclass class, jlong Lcrn, jbyteArray BAdnis) { int res; char *dnis; if ((*env)->GetArrayLength(env, BAdnis) < 32 ) { throw(env, "java/lang/RuntimeException", "Small dnis buffer to cc_GetDNIS()" ); return; } dnis = (char *)(*env)->GetByteArrayElements(env, BAdnis, 0); res = cc_GetDNIS(Lcrn, dnis); (*env)->ReleaseByteArrayElements(env, BAdnis, dnis, 0); if (res < 0) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_GetDNIS error %x", cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_GetEvtMsk * Signature: (I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1GetEvtMsk #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1GetEvtMsk #endif (JNIEnv *env, jclass class, jint Ildev) { long mask; if (cc_GetEvtMsk(Ildev, &mask) == -1) { throw(env, "java/lang/RuntimeException", "cc_GetEvtMsk error %x",cc_CauseValue(Ildev)); } return mask; } /* * Class: local_dialogic_Dialogic * Method: cc_GetParm * Signature: (II)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1GetParm #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1GetParm #endif (JNIEnv *env, jclass class, jint Ildev, jint Iparmid) { long value; if (cc_GetParm(Ildev, Iparmid, &value) == -1) { throw(env, "java/lang/RuntimeException", "cc_GetParm error %x",cc_CauseValue(Ildev)); } return value; } /* * Class: local_dialogic_Dialogic * Method: cc_MakeCall * Signature: (ILjava/lang/String;Ljava/lang/Object;II)J */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1MakeCall #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1MakeCall #endif (JNIEnv *env, jclass class, jint Ildev, jstring Snumber, jobject Omakecall, jint Ito, jint Imode) { int ret; long crn = 0; MAKECALL_BLK makecall_blk; char * number; // Should be read from Omakecall memset(&makecall_blk,0xff,sizeof(MAKECALL_BLK)); makecall_blk.isdn.BC_xfer_cap = ISDN_NOTUSED; makecall_blk.isdn.BC_xfer_mode = ISDN_NOTUSED; makecall_blk.isdn.BC_xfer_rate = ISDN_NOTUSED; makecall_blk.isdn.facility_coding_value = ISDN_NOTUSED; makecall_blk.isdn.destination_number_type = ISDN_NOTUSED; makecall_blk.isdn.destination_number_plan = ISDN_NOTUSED; makecall_blk.isdn.origination_number_type = ISDN_NOTUSED; makecall_blk.isdn.origination_number_plan = ISDN_NOTUSED; makecall_blk.isdn.origination_phone_number[0] = ISDN_NOTUSED; makecall_blk.isdn.facility_feature_service = ISDN_NOTUSED; makecall_blk.isdn.usrinfo_layer1_protocol = ISDN_NOTUSED; makecall_blk.isdn.usr_rate = ISDN_NOTUSED; makecall_blk.isdn.usrinfo_bufp = NULL; makecall_blk.isdn.nsfc_bufp = NULL; makecall_blk.isdn.destination_sub_number_type = ISDN_NOTUSED; makecall_blk.isdn.destination_sub_phone_number[0] = ISDN_NOTUSED; number = (char *)(*env)->GetStringUTFChars(env, Snumber, 0); ret = cc_MakeCall(Ildev, &crn, number, &makecall_blk, Ito, Imode); (*env)->ReleaseStringUTFChars(env, Snumber, number); if (ret == -1) { throw(env, "java/lang/RuntimeException", "cc_MakeCall error %x",cc_CauseValue(Ildev)); } return crn; } /* * Class: local_dialogic_Dialogic * Method: cc_Open * Signature: (Ljava/lang/String;I)I */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1Open #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1Open #endif (JNIEnv *env, jclass class, jstring Sdevice, jint Irfu) { int linedev, res; char * device; device = (char *)(*env)->GetStringUTFChars(env, Sdevice, 0); res = cc_Open(&linedev, device, Irfu); (*env)->ReleaseStringUTFChars(env, Sdevice, device); if (res < 0) throw(env, "java/lang/RuntimeException", "cc_Open error %d", errno); return linedev; } /* * Class: local_dialogic_Dialogic * Method: cc_RejectCall * Signature: (JII)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1RejectCall #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1RejectCall #endif (JNIEnv *env, jclass class, jlong Lcrn, jint Icause, jint Imode) { if (cc_RejectCall(Lcrn, Icause, Imode) == -1) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_RejectCall error %x",cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_ReleaseCallEx * Signature: (JI)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1ReleaseCallEx #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1ReleaseCallEx #endif (JNIEnv *env, jclass class, jlong Lcrn, jint Imode) { if (cc_ReleaseCallEx(Lcrn, Imode) == -1) { int line = 0; cc_CRN2LineDev(Lcrn, &line); throw(env, "java/lang/RuntimeException", "cc_ReleaseCallEx error %x",cc_CauseValue(line)); } } /* * Class: local_dialogic_Dialogic * Method: cc_Restart * Signature: (II)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1Restart #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1Restart #endif (JNIEnv *env, jclass class, jint Ildev, jint Imode) { if (cc_Restart(Ildev, Imode) == -1) { throw(env, "java/lang/RuntimeException", "cc_Restart error %x",cc_CauseValue(Ildev)); } } /* * Class: local_dialogic_Dialogic * Method: cc_ResultMsg * Signature: (II[B)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1ResultMsg #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1ResultMsg #endif (JNIEnv *env, jclass class, jint Ildev, jint Iresult, jbyteArray BAmessage) { int res, mesl; char *message, *messagep; if ((mesl = (*env)->GetArrayLength(env, BAmessage)) < 80 ) { throw(env, "java/lang/RuntimeException", "Small message buffer to cc_ResultMsg()" ); return; } res = cc_ResultMsg(Ildev, Iresult, &messagep); message = (char *)(*env)->GetByteArrayElements(env, BAmessage, 0); strncpy(message, messagep, mesl); (*env)->ReleaseByteArrayElements(env, BAmessage, message, 0); if (res < 0) throw(env, "java/lang/RuntimeException", "cc_ResultMsg error %x", cc_CauseValue(Ildev)); } /* * Class: local_dialogic_Dialogic * Method: cc_SetEvtMsk * Signature: (III)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1SetEvtMsk #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1SetEvtMsk #endif (JNIEnv *env, jclass class, jint Ildev, jint Imask, jint Iaction) { if (cc_SetEvtMsk(Ildev, Imask, Iaction) == -1) { throw(env, "java/lang/RuntimeException", "cc_SetEvtMsk error %x",cc_CauseValue(Ildev)); } } /* * Class: local_dialogic_Dialogic * Method: cc_SetParm * Signature: (IIJ)V */ #ifndef LINUX JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1SetParm #else JNIEXPORT void JNICALL Java_local_dialogic_Dialogic_cc_1do_1SetParm #endif (JNIEnv *env, jclass class, jint Ildev, jint Iparam, jint Ivalue) { if (cc_SetParm(Ildev, Iparam, Ivalue) == -1) { throw(env, "java/lang/RuntimeException", "cc_SetParm error %x",cc_CauseValue(Ildev)); } } /* * Class: local_dialogic_Dialogic * Method: cc_WaitCall * Signature: (ILjava/lang/Object;II)J */ #ifndef LINUX JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1WaitCall #else JNIEXPORT jint JNICALL Java_local_dialogic_Dialogic_cc_1do_1WaitCall #endif (JNIEnv *env, jclass class, jint Ildev, jobject Owaitcall, jint Ito, jint Imode) { long crn = 0; if (cc_WaitCall(Ildev, &crn, NULL, Ito, Imode) == -1) { throw(env, "java/lang/RuntimeException", "cc_WaitCall error %x",cc_CauseValue(Ildev)); } return crn; } throw(JNIEnv *env, char * which, char *what, long par1, long par2, long par3, long par4) { jclass newExcCls; char errbuf[128]; newExcCls = (*env)->FindClass(env, which); if (newExcCls == 0) return 0; sprintf(errbuf, what, par1, par2, par3, par4); (*env)->ThrowNew(env, newExcCls, errbuf); }