fix bad pointer memory snafu in wrapped language libs

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8238 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2008-05-01 19:03:57 +00:00
parent 8c352ce5b9
commit 85fc8c37e7
11 changed files with 195 additions and 327 deletions

View File

@ -3,6 +3,6 @@
freeswitch.console_log("info", "Lua in da house!!!\n");
local event = freeswitch.Event("message_waiting");
event:addHeader("MWI-Messages-Waiting", "yes");
event:addHeader("MWI-Messages-Waiting", "no");
event:addHeader("MWI-Message-Account", "sip:1000@10.0.1.100");
event:fire();

View File

@ -1,6 +1,6 @@
-- Example Lua script to originate. luarun
freeswitch.console_log("info", "Lua in da house!!!\n");
local session = freeswitch.Session("sofia/10.0.1.100/1002");
local session = freeswitch.Session("sofia/10.0.1.100/1001");
session:execute("playback", "/sr8k.wav");
session:hangup();

View File

@ -140,6 +140,7 @@ class CoreSession {
void *on_hangup; // language specific callback function, cast as void *
switch_file_handle_t local_fh;
switch_file_handle_t *fhp;
char dtmf_buf[512];
SWITCH_DECLARE(switch_status_t) process_callback_result(char *ret);
public:
SWITCH_DECLARE_CONSTRUCTOR CoreSession();
@ -219,13 +220,12 @@ class CoreSession {
* (see mod_python.i). This does NOT call any callbacks upon
* receiving dtmf digits. For that, use collectDigits.
*/
SWITCH_DECLARE(int) getDigits(char *dtmf_buf,
switch_size_t buflen,
switch_size_t maxdigits,
char *terminators,
char *terminator,
int timeout);
SWITCH_DECLARE(char *) getDigits(
switch_size_t maxdigits,
char *terminators,
char *terminator,
int timeout);
SWITCH_DECLARE(int) transfer(char *extensions, char *dialplan, char *context);
/** \brief Play a file into channel and collect dtmfs
@ -236,14 +236,13 @@ class CoreSession {
* setDTMFCallback(..) as it uses its own internal callback
* handler.
*/
SWITCH_DECLARE(int) playAndGetDigits(int min_digits,
SWITCH_DECLARE(char *) playAndGetDigits(int min_digits,
int max_digits,
int max_tries,
int timeout,
char *terminators,
char *audio_files,
char *bad_input_audio_files,
char *dtmf_buf,
char *digits_regex);
/** \brief Play a file that resides on disk into the channel

View File

@ -161,16 +161,16 @@ public class CoreSession {
return freeswitchJNI.CoreSession_collectDigits(swigCPtr, this, timeout);
}
public int getDigits(byte[] dtmf_buf, SWIGTYPE_p_switch_size_t buflen, SWIGTYPE_p_switch_size_t maxdigits, String terminators, byte[] terminator, int timeout) {
return freeswitchJNI.CoreSession_getDigits(swigCPtr, this, dtmf_buf, SWIGTYPE_p_switch_size_t.getCPtr(buflen), SWIGTYPE_p_switch_size_t.getCPtr(maxdigits), terminators, terminator, timeout);
public String getDigits(SWIGTYPE_p_switch_size_t maxdigits, String terminators, byte[] terminator, int timeout) {
return freeswitchJNI.CoreSession_getDigits(swigCPtr, this, SWIGTYPE_p_switch_size_t.getCPtr(maxdigits), terminators, terminator, timeout);
}
public int transfer(String extensions, String dialplan, String context) {
return freeswitchJNI.CoreSession_transfer(swigCPtr, this, extensions, dialplan, context);
}
public int playAndGetDigits(int min_digits, int max_digits, int max_tries, int timeout, String terminators, String audio_files, String bad_input_audio_files, byte[] dtmf_buf, String digits_regex) {
return freeswitchJNI.CoreSession_playAndGetDigits(swigCPtr, this, min_digits, max_digits, max_tries, timeout, terminators, audio_files, bad_input_audio_files, dtmf_buf, digits_regex);
public String playAndGetDigits(int min_digits, int max_digits, int max_tries, int timeout, String terminators, String audio_files, String bad_input_audio_files, String digits_regex) {
return freeswitchJNI.CoreSession_playAndGetDigits(swigCPtr, this, min_digits, max_digits, max_tries, timeout, terminators, audio_files, bad_input_audio_files, digits_regex);
}
public int streamFile(String file, int starting_sample_count) {

View File

@ -87,9 +87,9 @@ class freeswitchJNI {
public final static native int CoreSession_speak(long jarg1, CoreSession jarg1_, String jarg2);
public final static native void CoreSession_set_tts_parms(long jarg1, CoreSession jarg1_, String jarg2, String jarg3);
public final static native int CoreSession_collectDigits(long jarg1, CoreSession jarg1_, int jarg2);
public final static native int CoreSession_getDigits(long jarg1, CoreSession jarg1_, byte[] jarg2, long jarg3, long jarg4, String jarg5, byte[] jarg6, int jarg7);
public final static native String CoreSession_getDigits(long jarg1, CoreSession jarg1_, long jarg2, String jarg3, byte[] jarg4, int jarg5);
public final static native int CoreSession_transfer(long jarg1, CoreSession jarg1_, String jarg2, String jarg3, String jarg4);
public final static native int CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, byte[] jarg9, String jarg10);
public final static native String CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, String jarg9);
public final static native int CoreSession_streamFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3);
public final static native int CoreSession_streamFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2);
public final static native int CoreSession_flushEvents(long jarg1, CoreSession jarg1_);

View File

@ -1576,59 +1576,42 @@ SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1coll
}
SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getDigits(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jbyteArray jarg2, jlong jarg3, jlong jarg4, jstring jarg5, jbyteArray jarg6, jint jarg7) {
jint jresult = 0 ;
SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getDigits(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jstring jarg3, jbyteArray jarg4, jint jarg5) {
jstring jresult = 0 ;
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
switch_size_t arg3 ;
switch_size_t arg4 ;
char *arg5 = (char *) 0 ;
char *arg6 = (char *) 0 ;
int arg7 ;
int result;
switch_size_t *argp3 ;
switch_size_t *argp4 ;
switch_size_t arg2 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
int arg5 ;
char *result = 0 ;
switch_size_t *argp2 ;
(void)jenv;
(void)jcls;
(void)jarg1_;
arg1 = *(CoreSession **)&jarg1;
{
arg2 = (char*) jenv->GetByteArrayElements(jarg2, 0);
if (!arg2) return 0;
}
argp3 = *(switch_size_t **)&jarg3;
if (!argp3) {
argp2 = *(switch_size_t **)&jarg2;
if (!argp2) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null switch_size_t");
return 0;
}
arg3 = *argp3;
argp4 = *(switch_size_t **)&jarg4;
if (!argp4) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null switch_size_t");
return 0;
}
arg4 = *argp4;
arg5 = 0;
if (jarg5) {
arg5 = (char *)jenv->GetStringUTFChars(jarg5, 0);
if (!arg5) return 0;
arg2 = *argp2;
arg3 = 0;
if (jarg3) {
arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
if (!arg3) return 0;
}
{
arg6 = (char*) jenv->GetByteArrayElements(jarg6, 0);
if (!arg6) return 0;
arg4 = (char*) jenv->GetByteArrayElements(jarg4, 0);
if (!arg4) return 0;
}
arg7 = (int)jarg7;
result = (int)(arg1)->getDigits(arg2,arg3,arg4,arg5,arg6,arg7);
jresult = (jint)result;
arg5 = (int)jarg5;
result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5);
if(result) jresult = jenv->NewStringUTF((const char *)result);
{
jenv->ReleaseByteArrayElements(jarg2, (jbyte*) arg2, 0);
jenv->ReleaseByteArrayElements(jarg4, (jbyte*) arg4, 0);
}
{
jenv->ReleaseByteArrayElements(jarg6, (jbyte*) arg6, 0);
}
if (arg5) jenv->ReleaseStringUTFChars(jarg5, (const char *)arg5);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
return jresult;
}
@ -1670,8 +1653,8 @@ SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1tran
}
SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1playAndGetDigits(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3, jint jarg4, jint jarg5, jstring jarg6, jstring jarg7, jstring jarg8, jbyteArray jarg9, jstring jarg10) {
jint jresult = 0 ;
SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1playAndGetDigits(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3, jint jarg4, jint jarg5, jstring jarg6, jstring jarg7, jstring jarg8, jstring jarg9) {
jstring jresult = 0 ;
CoreSession *arg1 = (CoreSession *) 0 ;
int arg2 ;
int arg3 ;
@ -1681,8 +1664,7 @@ SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1play
char *arg7 = (char *) 0 ;
char *arg8 = (char *) 0 ;
char *arg9 = (char *) 0 ;
char *arg10 = (char *) 0 ;
int result;
char *result = 0 ;
(void)jenv;
(void)jcls;
@ -1707,25 +1689,17 @@ SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1play
arg8 = (char *)jenv->GetStringUTFChars(jarg8, 0);
if (!arg8) return 0;
}
{
arg9 = (char*) jenv->GetByteArrayElements(jarg9, 0);
arg9 = 0;
if (jarg9) {
arg9 = (char *)jenv->GetStringUTFChars(jarg9, 0);
if (!arg9) return 0;
}
arg10 = 0;
if (jarg10) {
arg10 = (char *)jenv->GetStringUTFChars(jarg10, 0);
if (!arg10) return 0;
}
result = (int)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
jresult = (jint)result;
{
jenv->ReleaseByteArrayElements(jarg9, (jbyte*) arg9, 0);
}
result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
if(result) jresult = jenv->NewStringUTF((const char *)result);
if (arg6) jenv->ReleaseStringUTFChars(jarg6, (const char *)arg6);
if (arg7) jenv->ReleaseStringUTFChars(jarg7, (const char *)arg7);
if (arg8) jenv->ReleaseStringUTFChars(jarg8, (const char *)arg8);
if (arg10) jenv->ReleaseStringUTFChars(jarg10, (const char *)arg10);
if (arg9) jenv->ReleaseStringUTFChars(jarg9, (const char *)arg9);
return jresult;
}

View File

@ -4097,48 +4097,36 @@ fail:
static int _wrap_CoreSession_getDigits(lua_State* L) {
int SWIG_arg = -1;
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
switch_size_t arg3 ;
switch_size_t arg4 ;
char *arg5 = (char *) 0 ;
char *arg6 = (char *) 0 ;
int arg7 ;
int result;
switch_size_t *argp3 ;
switch_size_t *argp4 ;
switch_size_t arg2 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
int arg5 ;
char *result = 0 ;
switch_size_t *argp2 ;
SWIG_check_num_args("getDigits",7,7)
SWIG_check_num_args("getDigits",5,5)
if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getDigits",1,"CoreSession *");
if(!lua_isstring(L,2)) SWIG_fail_arg("getDigits",2,"char *");
if(!lua_isuserdata(L,3)) SWIG_fail_arg("getDigits",3,"switch_size_t");
if(!lua_isuserdata(L,4)) SWIG_fail_arg("getDigits",4,"switch_size_t");
if(!lua_isstring(L,5)) SWIG_fail_arg("getDigits",5,"char *");
if(!lua_isstring(L,6)) SWIG_fail_arg("getDigits",6,"char *");
if(!lua_isnumber(L,7)) SWIG_fail_arg("getDigits",7,"int");
if(!lua_isuserdata(L,2)) SWIG_fail_arg("getDigits",2,"switch_size_t");
if(!lua_isstring(L,3)) SWIG_fail_arg("getDigits",3,"char *");
if(!lua_isstring(L,4)) SWIG_fail_arg("getDigits",4,"char *");
if(!lua_isnumber(L,5)) SWIG_fail_arg("getDigits",5,"int");
if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
SWIG_fail_ptr("CoreSession_getDigits",1,SWIGTYPE_p_CoreSession);
}
arg2 = (char *)lua_tostring(L, 2);
if (!SWIG_IsOK(SWIG_ConvertPtr(L,3,(void**)&argp3,SWIGTYPE_p_switch_size_t,0))){
SWIG_fail_ptr("CoreSession_getDigits",3,SWIGTYPE_p_switch_size_t);
if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_switch_size_t,0))){
SWIG_fail_ptr("CoreSession_getDigits",2,SWIGTYPE_p_switch_size_t);
}
arg3 = *argp3;
arg2 = *argp2;
if (!SWIG_IsOK(SWIG_ConvertPtr(L,4,(void**)&argp4,SWIGTYPE_p_switch_size_t,0))){
SWIG_fail_ptr("CoreSession_getDigits",4,SWIGTYPE_p_switch_size_t);
}
arg4 = *argp4;
arg5 = (char *)lua_tostring(L, 5);
arg6 = (char *)lua_tostring(L, 6);
arg7 = (int)lua_tonumber(L, 7);
result = (int)(arg1)->getDigits(arg2,arg3,arg4,arg5,arg6,arg7);
arg3 = (char *)lua_tostring(L, 3);
arg4 = (char *)lua_tostring(L, 4);
arg5 = (int)lua_tonumber(L, 5);
result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5);
SWIG_arg=0;
lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
lua_pushstring(L,(const char*)result); SWIG_arg++;
return SWIG_arg;
if(0) SWIG_fail;
@ -4194,10 +4182,9 @@ static int _wrap_CoreSession_playAndGetDigits(lua_State* L) {
char *arg7 = (char *) 0 ;
char *arg8 = (char *) 0 ;
char *arg9 = (char *) 0 ;
char *arg10 = (char *) 0 ;
int result;
char *result = 0 ;
SWIG_check_num_args("playAndGetDigits",10,10)
SWIG_check_num_args("playAndGetDigits",9,9)
if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("playAndGetDigits",1,"CoreSession *");
if(!lua_isnumber(L,2)) SWIG_fail_arg("playAndGetDigits",2,"int");
if(!lua_isnumber(L,3)) SWIG_fail_arg("playAndGetDigits",3,"int");
@ -4207,7 +4194,6 @@ static int _wrap_CoreSession_playAndGetDigits(lua_State* L) {
if(!lua_isstring(L,7)) SWIG_fail_arg("playAndGetDigits",7,"char *");
if(!lua_isstring(L,8)) SWIG_fail_arg("playAndGetDigits",8,"char *");
if(!lua_isstring(L,9)) SWIG_fail_arg("playAndGetDigits",9,"char *");
if(!lua_isstring(L,10)) SWIG_fail_arg("playAndGetDigits",10,"char *");
if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
SWIG_fail_ptr("CoreSession_playAndGetDigits",1,SWIGTYPE_p_CoreSession);
@ -4221,10 +4207,9 @@ static int _wrap_CoreSession_playAndGetDigits(lua_State* L) {
arg7 = (char *)lua_tostring(L, 7);
arg8 = (char *)lua_tostring(L, 8);
arg9 = (char *)lua_tostring(L, 9);
arg10 = (char *)lua_tostring(L, 10);
result = (int)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
SWIG_arg=0;
lua_pushnumber(L, (lua_Number) result); SWIG_arg++;
lua_pushstring(L,(const char*)result); SWIG_arg++;
return SWIG_arg;
if(0) SWIG_fail;

View File

@ -5223,96 +5223,71 @@ XS(_wrap_CoreSession_collectDigits) {
XS(_wrap_CoreSession_getDigits) {
{
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
switch_size_t arg3 ;
switch_size_t arg4 ;
char *arg5 = (char *) 0 ;
char *arg6 = (char *) 0 ;
int arg7 ;
int result;
switch_size_t arg2 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
int arg5 ;
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
void *argp3 ;
int res3 = 0 ;
void *argp4 ;
int res4 = 0 ;
int res5 ;
char *buf5 = 0 ;
int alloc5 = 0 ;
int res6 ;
char *buf6 = 0 ;
int alloc6 = 0 ;
int val7 ;
int ecode7 = 0 ;
void *argp2 ;
int res2 = 0 ;
int res3 ;
char *buf3 = 0 ;
int alloc3 = 0 ;
int res4 ;
char *buf4 = 0 ;
int alloc4 = 0 ;
int val5 ;
int ecode5 = 0 ;
int argvi = 0;
dXSARGS;
if ((items < 7) || (items > 7)) {
SWIG_croak("Usage: CoreSession_getDigits(self,dtmf_buf,buflen,maxdigits,terminators,terminator,timeout);");
if ((items < 5) || (items > 5)) {
SWIG_croak("Usage: CoreSession_getDigits(self,maxdigits,terminators,terminator,timeout);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_getDigits" "', argument " "1"" of type '" "CoreSession *""'");
}
arg1 = reinterpret_cast< CoreSession * >(argp1);
res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "char *""'");
}
arg2 = reinterpret_cast< char * >(buf2);
{
res3 = SWIG_ConvertPtr(ST(2), &argp3, SWIGTYPE_p_switch_size_t, 0 );
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "switch_size_t""'");
res2 = SWIG_ConvertPtr(ST(1), &argp2, SWIGTYPE_p_switch_size_t, 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "switch_size_t""'");
}
if (!argp3) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "switch_size_t""'");
if (!argp2) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "switch_size_t""'");
} else {
arg3 = *(reinterpret_cast< switch_size_t * >(argp3));
arg2 = *(reinterpret_cast< switch_size_t * >(argp2));
}
}
{
res4 = SWIG_ConvertPtr(ST(3), &argp4, SWIGTYPE_p_switch_size_t, 0 );
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "switch_size_t""'");
}
if (!argp4) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "switch_size_t""'");
} else {
arg4 = *(reinterpret_cast< switch_size_t * >(argp4));
}
res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "char *""'");
}
res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CoreSession_getDigits" "', argument " "5"" of type '" "char *""'");
arg3 = reinterpret_cast< char * >(buf3);
res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "char *""'");
}
arg5 = reinterpret_cast< char * >(buf5);
res6 = SWIG_AsCharPtrAndSize(ST(5), &buf6, NULL, &alloc6);
if (!SWIG_IsOK(res6)) {
SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CoreSession_getDigits" "', argument " "6"" of type '" "char *""'");
}
arg6 = reinterpret_cast< char * >(buf6);
ecode7 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(6), &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CoreSession_getDigits" "', argument " "7"" of type '" "int""'");
arg4 = reinterpret_cast< char * >(buf4);
ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5);
if (!SWIG_IsOK(ecode5)) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CoreSession_getDigits" "', argument " "5"" of type '" "int""'");
}
arg7 = static_cast< int >(val7);
result = (int)(arg1)->getDigits(arg2,arg3,arg4,arg5,arg6,arg7);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
arg5 = static_cast< int >(val5);
result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
XSRETURN(argvi);
fail:
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
SWIG_croak_null();
}
@ -5391,8 +5366,7 @@ XS(_wrap_CoreSession_playAndGetDigits) {
char *arg7 = (char *) 0 ;
char *arg8 = (char *) 0 ;
char *arg9 = (char *) 0 ;
char *arg10 = (char *) 0 ;
int result;
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int val2 ;
@ -5415,14 +5389,11 @@ XS(_wrap_CoreSession_playAndGetDigits) {
int res9 ;
char *buf9 = 0 ;
int alloc9 = 0 ;
int res10 ;
char *buf10 = 0 ;
int alloc10 = 0 ;
int argvi = 0;
dXSARGS;
if ((items < 10) || (items > 10)) {
SWIG_croak("Usage: CoreSession_playAndGetDigits(self,min_digits,max_digits,max_tries,timeout,terminators,audio_files,bad_input_audio_files,dtmf_buf,digits_regex);");
if ((items < 9) || (items > 9)) {
SWIG_croak("Usage: CoreSession_playAndGetDigits(self,min_digits,max_digits,max_tries,timeout,terminators,audio_files,bad_input_audio_files,digits_regex);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
if (!SWIG_IsOK(res1)) {
@ -5469,13 +5440,8 @@ XS(_wrap_CoreSession_playAndGetDigits) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "CoreSession_playAndGetDigits" "', argument " "9"" of type '" "char *""'");
}
arg9 = reinterpret_cast< char * >(buf9);
res10 = SWIG_AsCharPtrAndSize(ST(9), &buf10, NULL, &alloc10);
if (!SWIG_IsOK(res10)) {
SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "CoreSession_playAndGetDigits" "', argument " "10"" of type '" "char *""'");
}
arg10 = reinterpret_cast< char * >(buf10);
result = (int)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ;
result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
@ -5485,7 +5451,6 @@ XS(_wrap_CoreSession_playAndGetDigits) {
if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
if (alloc8 == SWIG_NEWOBJ) delete[] buf8;
if (alloc9 == SWIG_NEWOBJ) delete[] buf9;
if (alloc10 == SWIG_NEWOBJ) delete[] buf10;
XSRETURN(argvi);
fail:
@ -5497,7 +5462,6 @@ XS(_wrap_CoreSession_playAndGetDigits) {
if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
if (alloc8 == SWIG_NEWOBJ) delete[] buf8;
if (alloc9 == SWIG_NEWOBJ) delete[] buf9;
if (alloc10 == SWIG_NEWOBJ) delete[] buf10;
SWIG_croak_null();
}
}

View File

@ -5631,112 +5631,77 @@ fail:
SWIGINTERN PyObject *_wrap_CoreSession_getDigits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
switch_size_t arg3 ;
switch_size_t arg4 ;
char *arg5 = (char *) 0 ;
char *arg6 = (char *) 0 ;
int arg7 ;
int result;
switch_size_t arg2 ;
char *arg3 = (char *) 0 ;
char *arg4 = (char *) 0 ;
int arg5 ;
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int res2 ;
char temp2[128+1] ;
char *t2 = 0 ;
size_t n2 = 0 ;
int alloc2 = 0 ;
void *argp3 ;
int res3 = 0 ;
void *argp4 ;
int res4 = 0 ;
int res5 ;
char *buf5 = 0 ;
int alloc5 = 0 ;
int res6 ;
char temp6[8+1] ;
char *t6 = 0 ;
size_t n6 = 0 ;
int alloc6 = 0 ;
int val7 ;
int ecode7 = 0 ;
void *argp2 ;
int res2 = 0 ;
int res3 ;
char *buf3 = 0 ;
int alloc3 = 0 ;
int res4 ;
char temp4[8+1] ;
char *t4 = 0 ;
size_t n4 = 0 ;
int alloc4 = 0 ;
int val5 ;
int ecode5 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
PyObject * obj3 = 0 ;
PyObject * obj4 = 0 ;
PyObject * obj5 = 0 ;
PyObject * obj6 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CoreSession_getDigits",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
if (!PyArg_ParseTuple(args,(char *)"OOOOO:CoreSession_getDigits",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_getDigits" "', argument " "1"" of type '" "CoreSession *""'");
}
arg1 = reinterpret_cast< CoreSession * >(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &t2, &n2, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "char *dtmf_buf""'");
}
if ( n2 > (size_t) 128 ) n2 = (size_t) 128;
memcpy(temp2, t2, sizeof(char)*n2);
if (alloc2 == SWIG_NEWOBJ) delete[] t2;
temp2[n2 - 1] = 0;
arg2 = (char *) temp2;
{
res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_switch_size_t, 0 | 0);
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "switch_size_t""'");
res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_switch_size_t, 0 | 0);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "switch_size_t""'");
}
if (!argp3) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "switch_size_t""'");
if (!argp2) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "2"" of type '" "switch_size_t""'");
} else {
switch_size_t * temp = reinterpret_cast< switch_size_t * >(argp3);
arg3 = *temp;
if (SWIG_IsNewObj(res3)) delete temp;
switch_size_t * temp = reinterpret_cast< switch_size_t * >(argp2);
arg2 = *temp;
if (SWIG_IsNewObj(res2)) delete temp;
}
}
{
res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_switch_size_t, 0 | 0);
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "switch_size_t""'");
}
if (!argp4) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "switch_size_t""'");
} else {
switch_size_t * temp = reinterpret_cast< switch_size_t * >(argp4);
arg4 = *temp;
if (SWIG_IsNewObj(res4)) delete temp;
}
res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_getDigits" "', argument " "3"" of type '" "char *""'");
}
res5 = SWIG_AsCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
if (!SWIG_IsOK(res5)) {
SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CoreSession_getDigits" "', argument " "5"" of type '" "char *""'");
arg3 = reinterpret_cast< char * >(buf3);
res4 = SWIG_AsCharPtrAndSize(obj3, &t4, &n4, &alloc4);
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_getDigits" "', argument " "4"" of type '" "char *terminator""'");
}
arg5 = reinterpret_cast< char * >(buf5);
res6 = SWIG_AsCharPtrAndSize(obj5, &t6, &n6, &alloc6);
if (!SWIG_IsOK(res6)) {
SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CoreSession_getDigits" "', argument " "6"" of type '" "char *terminator""'");
}
if ( n6 > (size_t) 8 ) n6 = (size_t) 8;
memcpy(temp6, t6, sizeof(char)*n6);
if (alloc6 == SWIG_NEWOBJ) delete[] t6;
temp6[n6 - 1] = 0;
arg6 = (char *) temp6;
ecode7 = SWIG_AsVal_int(obj6, &val7);
if (!SWIG_IsOK(ecode7)) {
SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CoreSession_getDigits" "', argument " "7"" of type '" "int""'");
if ( n4 > (size_t) 8 ) n4 = (size_t) 8;
memcpy(temp4, t4, sizeof(char)*n4);
if (alloc4 == SWIG_NEWOBJ) delete[] t4;
temp4[n4 - 1] = 0;
arg4 = (char *) temp4;
ecode5 = SWIG_AsVal_int(obj4, &val5);
if (!SWIG_IsOK(ecode5)) {
SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CoreSession_getDigits" "', argument " "5"" of type '" "int""'");
}
arg7 = static_cast< int >(val7);
result = (int)(arg1)->getDigits(arg2,arg3,arg4,arg5,arg6,arg7);
resultobj = SWIG_From_int(static_cast< int >(result));
arg2[128] = 0;
resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2));
arg6[8] = 0;
resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg6));
if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
arg5 = static_cast< int >(val5);
result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5);
resultobj = SWIG_FromCharPtr((const char *)result);
arg4[8] = 0;
resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg4));
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
return resultobj;
fail:
if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
return NULL;
}
@ -5810,8 +5775,7 @@ SWIGINTERN PyObject *_wrap_CoreSession_playAndGetDigits(PyObject *SWIGUNUSEDPARM
char *arg7 = (char *) 0 ;
char *arg8 = (char *) 0 ;
char *arg9 = (char *) 0 ;
char *arg10 = (char *) 0 ;
int result;
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int val2 ;
@ -5832,13 +5796,8 @@ SWIGINTERN PyObject *_wrap_CoreSession_playAndGetDigits(PyObject *SWIGUNUSEDPARM
char *buf8 = 0 ;
int alloc8 = 0 ;
int res9 ;
char temp9[128+1] ;
char *t9 = 0 ;
size_t n9 = 0 ;
char *buf9 = 0 ;
int alloc9 = 0 ;
int res10 ;
char *buf10 = 0 ;
int alloc10 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@ -5848,9 +5807,8 @@ SWIGINTERN PyObject *_wrap_CoreSession_playAndGetDigits(PyObject *SWIGUNUSEDPARM
PyObject * obj6 = 0 ;
PyObject * obj7 = 0 ;
PyObject * obj8 = 0 ;
PyObject * obj9 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CoreSession_playAndGetDigits",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CoreSession_playAndGetDigits",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_playAndGetDigits" "', argument " "1"" of type '" "CoreSession *""'");
@ -5891,34 +5849,23 @@ SWIGINTERN PyObject *_wrap_CoreSession_playAndGetDigits(PyObject *SWIGUNUSEDPARM
SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "CoreSession_playAndGetDigits" "', argument " "8"" of type '" "char *""'");
}
arg8 = reinterpret_cast< char * >(buf8);
res9 = SWIG_AsCharPtrAndSize(obj8, &t9, &n9, &alloc9);
res9 = SWIG_AsCharPtrAndSize(obj8, &buf9, NULL, &alloc9);
if (!SWIG_IsOK(res9)) {
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "CoreSession_playAndGetDigits" "', argument " "9"" of type '" "char *dtmf_buf""'");
SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "CoreSession_playAndGetDigits" "', argument " "9"" of type '" "char *""'");
}
if ( n9 > (size_t) 128 ) n9 = (size_t) 128;
memcpy(temp9, t9, sizeof(char)*n9);
if (alloc9 == SWIG_NEWOBJ) delete[] t9;
temp9[n9 - 1] = 0;
arg9 = (char *) temp9;
res10 = SWIG_AsCharPtrAndSize(obj9, &buf10, NULL, &alloc10);
if (!SWIG_IsOK(res10)) {
SWIG_exception_fail(SWIG_ArgError(res10), "in method '" "CoreSession_playAndGetDigits" "', argument " "10"" of type '" "char *""'");
}
arg10 = reinterpret_cast< char * >(buf10);
result = (int)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
resultobj = SWIG_From_int(static_cast< int >(result));
arg9[128] = 0;
resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg9));
arg9 = reinterpret_cast< char * >(buf9);
result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
resultobj = SWIG_FromCharPtr((const char *)result);
if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
if (alloc8 == SWIG_NEWOBJ) delete[] buf8;
if (alloc10 == SWIG_NEWOBJ) delete[] buf10;
if (alloc9 == SWIG_NEWOBJ) delete[] buf9;
return resultobj;
fail:
if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
if (alloc8 == SWIG_NEWOBJ) delete[] buf8;
if (alloc10 == SWIG_NEWOBJ) delete[] buf10;
if (alloc9 == SWIG_NEWOBJ) delete[] buf9;
return NULL;
}

View File

@ -470,20 +470,19 @@ SWITCH_DECLARE(int) CoreSession::collectDigits(int timeout) {
return SWITCH_STATUS_SUCCESS;
}
SWITCH_DECLARE(int) CoreSession::getDigits(char *dtmf_buf,
switch_size_t buflen,
switch_size_t maxdigits,
char *terminators,
char *terminator,
int timeout)
SWITCH_DECLARE(char *) CoreSession::getDigits(switch_size_t maxdigits,
char *terminators,
char *terminator,
int timeout)
{
switch_status_t status;
sanity_check(-1);
sanity_check("");
begin_allow_threads();
memset(dtmf_buf, 0, sizeof(dtmf_buf));
status = switch_ivr_collect_digits_count(session,
dtmf_buf,
buflen,
sizeof(dtmf_buf),
maxdigits,
terminators,
terminator,
@ -491,7 +490,7 @@ SWITCH_DECLARE(int) CoreSession::getDigits(char *dtmf_buf,
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "getDigits dtmf_buf: %s\n", dtmf_buf);
end_allow_threads();
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
return dtmf_buf;
}
SWITCH_DECLARE(int) CoreSession::transfer(char *extension, char *dialplan, char *context)
@ -505,19 +504,19 @@ SWITCH_DECLARE(int) CoreSession::transfer(char *extension, char *dialplan, char
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
}
SWITCH_DECLARE(int) CoreSession::playAndGetDigits(int min_digits,
int max_digits,
int max_tries,
int timeout,
char *terminators,
char *audio_files,
char *bad_input_audio_files,
char *dtmf_buf,
char *digits_regex)
SWITCH_DECLARE(char *) CoreSession::playAndGetDigits(int min_digits,
int max_digits,
int max_tries,
int timeout,
char *terminators,
char *audio_files,
char *bad_input_audio_files,
char *digits_regex)
{
switch_status_t status;
sanity_check(-1);
sanity_check("");
begin_allow_threads();
memset(dtmf_buf, 0, sizeof(dtmf_buf));
status = switch_play_and_get_digits( session,
(uint32_t) min_digits,
(uint32_t) max_digits,
@ -527,13 +526,13 @@ SWITCH_DECLARE(int) CoreSession::playAndGetDigits(int min_digits,
audio_files,
bad_input_audio_files,
dtmf_buf,
128,
sizeof(dtmf_buf),
digits_regex);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "playAndGetDigits dtmf_buf: %s\n", dtmf_buf);
end_allow_threads();
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
return dtmf_buf;
}
SWITCH_DECLARE(int) CoreSession::streamFile(char *file, int starting_sample_count) {

View File

@ -1239,7 +1239,7 @@ SWITCH_DECLARE(switch_status_t) switch_play_and_get_digits(switch_core_session_t
switch_channel_pre_answer(channel);
//Start pestering the user for input
for (; (switch_channel_get_state(channel) == CS_EXECUTE) && max_tries > 0; max_tries--) {
for (; switch_channel_ready(channel) && max_tries > 0; max_tries--) {
switch_input_args_t args = { 0 };
//make the buffer so fresh and so clean clean
memset(digit_buffer, 0, digit_buffer_length);