diff --git a/conf/dialplan/default.xml b/conf/dialplan/default.xml index a19f68399e..36f0e52a2e 100644 --- a/conf/dialplan/default.xml +++ b/conf/dialplan/default.xml @@ -274,7 +274,15 @@ + + + + + + + + diff --git a/conf/dialplan/skinny-patterns.xml b/conf/dialplan/skinny-patterns.xml index a78b83bdc7..9f5786d731 100644 --- a/conf/dialplan/skinny-patterns.xml +++ b/conf/dialplan/skinny-patterns.xml @@ -5,7 +5,7 @@ This context is used for skinny to match dialed number The special applications: - - skinny-route tells skinny to route the call + - skinny-process tells skinny to process the call (route, set call forwarding, ...) - skinny-drop tells skinny to drop the call - skinny-wait tells skinny to wait 'data' seconds for more numbers before drop --> diff --git a/conf/dialplan/skinny-patterns/20-Demo.xml b/conf/dialplan/skinny-patterns/20-Demo.xml index 0246fe29a4..f69658128f 100644 --- a/conf/dialplan/skinny-patterns/20-Demo.xml +++ b/conf/dialplan/skinny-patterns/20-Demo.xml @@ -1,7 +1,7 @@ - + diff --git a/conf/dialplan/skinny-patterns/20-Local_extension.xml b/conf/dialplan/skinny-patterns/20-Local_extension.xml index a3693e80c8..9ad5651328 100644 --- a/conf/dialplan/skinny-patterns/20-Local_extension.xml +++ b/conf/dialplan/skinny-patterns/20-Local_extension.xml @@ -1,12 +1,12 @@ - + - + diff --git a/conf/dialplan/skinny-patterns/90-External.xml b/conf/dialplan/skinny-patterns/90-External.xml index 706bf74027..50d6c37f24 100644 --- a/conf/dialplan/skinny-patterns/90-External.xml +++ b/conf/dialplan/skinny-patterns/90-External.xml @@ -1,7 +1,7 @@ - + diff --git a/conf/lang/en/en.xml b/conf/lang/en/en.xml index 1e23dc5d7b..2ccd513823 100644 --- a/conf/lang/en/en.xml +++ b/conf/lang/en/en.xml @@ -6,6 +6,7 @@ + diff --git a/libs/esl/java/esl_wrap.cpp b/libs/esl/java/esl_wrap.cpp index 9a764dd030..52c5065d00 100644 --- a/libs/esl/java/esl_wrap.cpp +++ b/libs/esl/java/esl_wrap.cpp @@ -419,10 +419,11 @@ SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1setPriority } -SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { +SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3) { jstring jresult = 0 ; ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; (void)jenv; @@ -434,7 +435,8 @@ SWIGEXPORT jstring JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1getHeader(JN arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); if (!arg2) return 0; } - result = (char *)(arg1)->getHeader((char const *)arg2); + arg3 = (int)jarg3; + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); if(result) jresult = jenv->NewStringUTF((const char *)result); if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); return jresult; @@ -522,6 +524,64 @@ SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1addHeader(J } +SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1pushHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) { + jboolean jresult = 0 ; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(ESLevent **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return 0; + } + arg3 = 0; + if (jarg3) { + arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3) return 0; + } + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + jresult = (jboolean)result; + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); + if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1unshiftHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) { + jboolean jresult = 0 ; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(ESLevent **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return 0; + } + arg3 = 0; + if (jarg3) { + arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3) return 0; + } + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + jresult = (jboolean)result; + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); + if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3); + return jresult; +} + + SWIGEXPORT jboolean JNICALL Java_org_freeswitch_esl_eslJNI_ESLevent_1delHeader(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { jboolean jresult = 0 ; ESLevent *arg1 = (ESLevent *) 0 ; diff --git a/libs/esl/java/org/freeswitch/esl/ESLevent.java b/libs/esl/java/org/freeswitch/esl/ESLevent.java index 5f5b303e8b..d3bbbf88b4 100644 --- a/libs/esl/java/org/freeswitch/esl/ESLevent.java +++ b/libs/esl/java/org/freeswitch/esl/ESLevent.java @@ -78,8 +78,8 @@ public class ESLevent { return eslJNI.ESLevent_setPriority(swigCPtr, this, SWIGTYPE_p_esl_priority_t.getCPtr(priority)); } - public String getHeader(String header_name) { - return eslJNI.ESLevent_getHeader(swigCPtr, this, header_name); + public String getHeader(String header_name, int idx) { + return eslJNI.ESLevent_getHeader(swigCPtr, this, header_name, idx); } public String getBody() { @@ -98,6 +98,14 @@ public class ESLevent { return eslJNI.ESLevent_addHeader(swigCPtr, this, header_name, value); } + public boolean pushHeader(String header_name, String value) { + return eslJNI.ESLevent_pushHeader(swigCPtr, this, header_name, value); + } + + public boolean unshiftHeader(String header_name, String value) { + return eslJNI.ESLevent_unshiftHeader(swigCPtr, this, header_name, value); + } + public boolean delHeader(String header_name) { return eslJNI.ESLevent_delHeader(swigCPtr, this, header_name); } diff --git a/libs/esl/java/org/freeswitch/esl/eslJNI.java b/libs/esl/java/org/freeswitch/esl/eslJNI.java index e6e576f0dc..dfdedff60f 100644 --- a/libs/esl/java/org/freeswitch/esl/eslJNI.java +++ b/libs/esl/java/org/freeswitch/esl/eslJNI.java @@ -21,11 +21,13 @@ class eslJNI { public final static native void delete_ESLevent(long jarg1); public final static native String ESLevent_serialize(long jarg1, ESLevent jarg1_, String jarg2); public final static native boolean ESLevent_setPriority(long jarg1, ESLevent jarg1_, long jarg2); - public final static native String ESLevent_getHeader(long jarg1, ESLevent jarg1_, String jarg2); + public final static native String ESLevent_getHeader(long jarg1, ESLevent jarg1_, String jarg2, int jarg3); public final static native String ESLevent_getBody(long jarg1, ESLevent jarg1_); public final static native String ESLevent_getType(long jarg1, ESLevent jarg1_); public final static native boolean ESLevent_addBody(long jarg1, ESLevent jarg1_, String jarg2); public final static native boolean ESLevent_addHeader(long jarg1, ESLevent jarg1_, String jarg2, String jarg3); + public final static native boolean ESLevent_pushHeader(long jarg1, ESLevent jarg1_, String jarg2, String jarg3); + public final static native boolean ESLevent_unshiftHeader(long jarg1, ESLevent jarg1_, String jarg2, String jarg3); public final static native boolean ESLevent_delHeader(long jarg1, ESLevent jarg1_, String jarg2); public final static native String ESLevent_firstHeader(long jarg1, ESLevent jarg1_); public final static native String ESLevent_nextHeader(long jarg1, ESLevent jarg1_); diff --git a/libs/esl/lua/esl_wrap.cpp b/libs/esl/lua/esl_wrap.cpp index 25fceb7bea..c3ee30811e 100644 --- a/libs/esl/lua/esl_wrap.cpp +++ b/libs/esl/lua/esl_wrap.cpp @@ -1923,18 +1923,23 @@ static int _wrap_ESLevent_getHeader(lua_State* L) { int SWIG_arg = -1; ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; - SWIG_check_num_args("getHeader",2,2) + SWIG_check_num_args("getHeader",2,3) if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getHeader",1,"ESLevent *"); if(!lua_isstring(L,2)) SWIG_fail_arg("getHeader",2,"char const *"); + if(lua_gettop(L)>=3 && !lua_isnumber(L,3)) SWIG_fail_arg("getHeader",3,"int"); if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){ SWIG_fail_ptr("ESLevent_getHeader",1,SWIGTYPE_p_ESLevent); } arg2 = (char *)lua_tostring(L, 2); - result = (char *)(arg1)->getHeader((char const *)arg2); + if(lua_gettop(L)>=3){ + arg3 = (int)lua_tonumber(L, 3); + } + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); SWIG_arg=0; lua_pushstring(L,(const char*)result); SWIG_arg++; return SWIG_arg; @@ -2056,6 +2061,68 @@ fail: } +static int _wrap_ESLevent_pushHeader(lua_State* L) { + int SWIG_arg = -1; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + SWIG_check_num_args("pushHeader",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("pushHeader",1,"ESLevent *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("pushHeader",2,"char const *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("pushHeader",3,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){ + SWIG_fail_ptr("ESLevent_pushHeader",1,SWIGTYPE_p_ESLevent); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} + + +static int _wrap_ESLevent_unshiftHeader(lua_State* L) { + int SWIG_arg = -1; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + SWIG_check_num_args("unshiftHeader",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("unshiftHeader",1,"ESLevent *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("unshiftHeader",2,"char const *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("unshiftHeader",3,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_ESLevent,0))){ + SWIG_fail_ptr("ESLevent_unshiftHeader",1,SWIGTYPE_p_ESLevent); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} + + static int _wrap_ESLevent_delHeader(lua_State* L) { int SWIG_arg = -1; ESLevent *arg1 = (ESLevent *) 0 ; @@ -2146,6 +2213,8 @@ static swig_lua_method swig_ESLevent_methods[] = { {"getType", _wrap_ESLevent_getType}, {"addBody", _wrap_ESLevent_addBody}, {"addHeader", _wrap_ESLevent_addHeader}, + {"pushHeader", _wrap_ESLevent_pushHeader}, + {"unshiftHeader", _wrap_ESLevent_unshiftHeader}, {"delHeader", _wrap_ESLevent_delHeader}, {"firstHeader", _wrap_ESLevent_firstHeader}, {"nextHeader", _wrap_ESLevent_nextHeader}, diff --git a/libs/esl/managed/ESLPINVOKE.cs b/libs/esl/managed/ESLPINVOKE.cs index 1e487895d9..ee15a2b702 100644 --- a/libs/esl/managed/ESLPINVOKE.cs +++ b/libs/esl/managed/ESLPINVOKE.cs @@ -221,7 +221,7 @@ class ESLPINVOKE { public static extern bool ESLevent_SetPriority(HandleRef jarg1, HandleRef jarg2); [DllImport("ESL", EntryPoint="CSharp_ESLevent_GetHeader")] - public static extern string ESLevent_GetHeader(HandleRef jarg1, string jarg2); + public static extern string ESLevent_GetHeader(HandleRef jarg1, string jarg2, int jarg3); [DllImport("ESL", EntryPoint="CSharp_ESLevent_GetBody")] public static extern string ESLevent_GetBody(HandleRef jarg1); @@ -235,6 +235,12 @@ class ESLPINVOKE { [DllImport("ESL", EntryPoint="CSharp_ESLevent_AddHeader")] public static extern bool ESLevent_AddHeader(HandleRef jarg1, string jarg2, string jarg3); + [DllImport("ESL", EntryPoint="CSharp_ESLevent_pushHeader")] + public static extern bool ESLevent_pushHeader(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("ESL", EntryPoint="CSharp_ESLevent_unshiftHeader")] + public static extern bool ESLevent_unshiftHeader(HandleRef jarg1, string jarg2, string jarg3); + [DllImport("ESL", EntryPoint="CSharp_ESLevent_DelHeader")] public static extern bool ESLevent_DelHeader(HandleRef jarg1, string jarg2); diff --git a/libs/esl/managed/ESLevent.cs b/libs/esl/managed/ESLevent.cs index ab4df67212..65cd24d98c 100644 --- a/libs/esl/managed/ESLevent.cs +++ b/libs/esl/managed/ESLevent.cs @@ -89,8 +89,8 @@ public class ESLevent : IDisposable { return ret; } - public string GetHeader(string header_name) { - string ret = ESLPINVOKE.ESLevent_GetHeader(swigCPtr, header_name); + public string GetHeader(string header_name, int idx) { + string ret = ESLPINVOKE.ESLevent_GetHeader(swigCPtr, header_name, idx); return ret; } @@ -114,6 +114,16 @@ public class ESLevent : IDisposable { return ret; } + public bool pushHeader(string header_name, string value) { + bool ret = ESLPINVOKE.ESLevent_pushHeader(swigCPtr, header_name, value); + return ret; + } + + public bool unshiftHeader(string header_name, string value) { + bool ret = ESLPINVOKE.ESLevent_unshiftHeader(swigCPtr, header_name, value); + return ret; + } + public bool DelHeader(string header_name) { bool ret = ESLPINVOKE.ESLevent_DelHeader(swigCPtr, header_name); return ret; diff --git a/libs/esl/managed/esl_wrap.cpp b/libs/esl/managed/esl_wrap.cpp index 4d0e27d261..f07b4b3d3f 100644 --- a/libs/esl/managed/esl_wrap.cpp +++ b/libs/esl/managed/esl_wrap.cpp @@ -436,15 +436,17 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ESLevent_SetPriority(void * jarg1, vo } -SWIGEXPORT char * SWIGSTDCALL CSharp_ESLevent_GetHeader(void * jarg1, char * jarg2) { +SWIGEXPORT char * SWIGSTDCALL CSharp_ESLevent_GetHeader(void * jarg1, char * jarg2, int jarg3) { char * jresult ; ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; arg1 = (ESLevent *)jarg1; arg2 = (char *)jarg2; - result = (char *)(arg1)->getHeader((char const *)arg2); + arg3 = (int)jarg3; + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } @@ -504,6 +506,38 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ESLevent_AddHeader(void * jarg1, char } +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ESLevent_pushHeader(void * jarg1, char * jarg2, char * jarg3) { + unsigned int jresult ; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + arg1 = (ESLevent *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ESLevent_unshiftHeader(void * jarg1, char * jarg2, char * jarg3) { + unsigned int jresult ; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + arg1 = (ESLevent *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ESLevent_DelHeader(void * jarg1, char * jarg2) { unsigned int jresult ; ESLevent *arg1 = (ESLevent *) 0 ; diff --git a/libs/esl/perl/ESL.pm b/libs/esl/perl/ESL.pm index b50ee4a083..b291d002d7 100644 --- a/libs/esl/perl/ESL.pm +++ b/libs/esl/perl/ESL.pm @@ -88,6 +88,8 @@ sub DESTROY { *getType = *ESLc::ESLevent_getType; *addBody = *ESLc::ESLevent_addBody; *addHeader = *ESLc::ESLevent_addHeader; +*pushHeader = *ESLc::ESLevent_pushHeader; +*unshiftHeader = *ESLc::ESLevent_unshiftHeader; *delHeader = *ESLc::ESLevent_delHeader; *firstHeader = *ESLc::ESLevent_firstHeader; *nextHeader = *ESLc::ESLevent_nextHeader; diff --git a/libs/esl/perl/esl_wrap.cpp b/libs/esl/perl/esl_wrap.cpp index ccce4bb6d0..1bc45fa2e1 100644 --- a/libs/esl/perl/esl_wrap.cpp +++ b/libs/esl/perl/esl_wrap.cpp @@ -2285,17 +2285,20 @@ XS(_wrap_ESLevent_getHeader) { { ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; + int val3 ; + int ecode3 = 0 ; int argvi = 0; dXSARGS; - if ((items < 2) || (items > 2)) { - SWIG_croak("Usage: ESLevent_getHeader(self,header_name);"); + if ((items < 2) || (items > 3)) { + SWIG_croak("Usage: ESLevent_getHeader(self,header_name,idx);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); if (!SWIG_IsOK(res1)) { @@ -2307,14 +2310,23 @@ XS(_wrap_ESLevent_getHeader) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_getHeader" "', argument " "2"" of type '" "char const *""'"); } arg2 = reinterpret_cast< char * >(buf2); - result = (char *)(arg1)->getHeader((char const *)arg2); + if (items > 2) { + ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ESLevent_getHeader" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + } + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); } } @@ -2465,6 +2477,106 @@ XS(_wrap_ESLevent_addHeader) { } +XS(_wrap_ESLevent_pushHeader) { + { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 3) || (items > 3)) { + SWIG_croak("Usage: ESLevent_pushHeader(self,header_name,value);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_pushHeader" "', argument " "1"" of type '" "ESLevent *""'"); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_pushHeader" "', argument " "2"" of type '" "char const *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_pushHeader" "', argument " "3"" of type '" "char const *""'"); + } + arg3 = reinterpret_cast< char * >(buf3); + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ; + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_croak_null(); + } +} + + +XS(_wrap_ESLevent_unshiftHeader) { + { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 3) || (items > 3)) { + SWIG_croak("Usage: ESLevent_unshiftHeader(self,header_name,value);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_unshiftHeader" "', argument " "1"" of type '" "ESLevent *""'"); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_unshiftHeader" "', argument " "2"" of type '" "char const *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_unshiftHeader" "', argument " "3"" of type '" "char const *""'"); + } + arg3 = reinterpret_cast< char * >(buf3); + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ; + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_croak_null(); + } +} + + XS(_wrap_ESLevent_delHeader) { { ESLevent *arg1 = (ESLevent *) 0 ; @@ -3658,6 +3770,8 @@ static swig_command_info swig_commands[] = { {"ESLc::ESLevent_getType", _wrap_ESLevent_getType}, {"ESLc::ESLevent_addBody", _wrap_ESLevent_addBody}, {"ESLc::ESLevent_addHeader", _wrap_ESLevent_addHeader}, +{"ESLc::ESLevent_pushHeader", _wrap_ESLevent_pushHeader}, +{"ESLc::ESLevent_unshiftHeader", _wrap_ESLevent_unshiftHeader}, {"ESLc::ESLevent_delHeader", _wrap_ESLevent_delHeader}, {"ESLc::ESLevent_firstHeader", _wrap_ESLevent_firstHeader}, {"ESLc::ESLevent_nextHeader", _wrap_ESLevent_nextHeader}, diff --git a/libs/esl/php/ESL.php b/libs/esl/php/ESL.php index 70ff62ac0d..0bc8c4e724 100644 --- a/libs/esl/php/ESL.php +++ b/libs/esl/php/ESL.php @@ -76,8 +76,8 @@ class ESLevent { return $r; } - function getHeader($header_name) { - return ESLevent_getHeader($this->_cPtr,$header_name); + function getHeader($header_name,$idx=-1) { + return ESLevent_getHeader($this->_cPtr,$header_name,$idx); } function getBody() { @@ -96,6 +96,14 @@ class ESLevent { return ESLevent_addHeader($this->_cPtr,$header_name,$value); } + function pushHeader($header_name,$value) { + return ESLevent_pushHeader($this->_cPtr,$header_name,$value); + } + + function unshiftHeader($header_name,$value) { + return ESLevent_unshiftHeader($this->_cPtr,$header_name,$value); + } + function delHeader($header_name) { return ESLevent_delHeader($this->_cPtr,$header_name); } diff --git a/libs/esl/php/esl_wrap.cpp b/libs/esl/php/esl_wrap.cpp index c38ea1fa62..9e49c7c080 100644 --- a/libs/esl/php/esl_wrap.cpp +++ b/libs/esl/php/esl_wrap.cpp @@ -1445,13 +1445,16 @@ fail: ZEND_NAMED_FUNCTION(_wrap_ESLevent_getHeader) { ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; - zval **args[2]; + zval **args[3]; + int arg_count; SWIG_ResetError(); - if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) { - WRONG_PARAM_COUNT; - } + arg_count = ZEND_NUM_ARGS(); + if(arg_count<2 || arg_count>3 || + zend_get_parameters_array_ex(arg_count,args)!=SUCCESS) + WRONG_PARAM_COUNT; { if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) { @@ -1465,7 +1468,14 @@ ZEND_NAMED_FUNCTION(_wrap_ESLevent_getHeader) { arg2 = (char *) Z_STRVAL_PP(args[1]); /*@SWIG@*/; - result = (char *)(arg1)->getHeader((char const *)arg2); + if(arg_count > 2) { + /*@SWIG:/usr/local/share/swig/1.3.35/php4/utils.i,7,CONVERT_INT_IN@*/ + convert_to_long_ex(args[2]); + arg3 = (int) Z_LVAL_PP(args[2]); + /*@SWIG@*/; + + } + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); { if(!result) { ZVAL_NULL(return_value); @@ -1612,6 +1622,86 @@ fail: } +ZEND_NAMED_FUNCTION(_wrap_ESLevent_pushHeader) { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + zval **args[3]; + + SWIG_ResetError(); + if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) { + WRONG_PARAM_COUNT; + } + + { + if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) { + SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_pushHeader. Expected SWIGTYPE_p_ESLevent"); + } + } + if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL"); + + /*@SWIG:/usr/local/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/ + convert_to_string_ex(args[1]); + arg2 = (char *) Z_STRVAL_PP(args[1]); + /*@SWIG@*/; + + + /*@SWIG:/usr/local/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/ + convert_to_string_ex(args[2]); + arg3 = (char *) Z_STRVAL_PP(args[2]); + /*@SWIG@*/; + + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + { + ZVAL_BOOL(return_value,(result)?1:0); + } + return; +fail: + zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg()); +} + + +ZEND_NAMED_FUNCTION(_wrap_ESLevent_unshiftHeader) { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + zval **args[3]; + + SWIG_ResetError(); + if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_array_ex(3, args) != SUCCESS) { + WRONG_PARAM_COUNT; + } + + { + if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_ESLevent, 0) < 0) { + SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of ESLevent_unshiftHeader. Expected SWIGTYPE_p_ESLevent"); + } + } + if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL"); + + /*@SWIG:/usr/local/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/ + convert_to_string_ex(args[1]); + arg2 = (char *) Z_STRVAL_PP(args[1]); + /*@SWIG@*/; + + + /*@SWIG:/usr/local/share/swig/1.3.35/php4/utils.i,26,CONVERT_STRING_IN@*/ + convert_to_string_ex(args[2]); + arg3 = (char *) Z_STRVAL_PP(args[2]); + /*@SWIG@*/; + + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + { + ZVAL_BOOL(return_value,(result)?1:0); + } + return; +fail: + zend_error(SWIG_ErrorCode(),SWIG_ErrorMsg()); +} + + ZEND_NAMED_FUNCTION(_wrap_ESLevent_delHeader) { ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; @@ -2547,6 +2637,8 @@ static zend_function_entry ESL_functions[] = { SWIG_ZEND_NAMED_FE(eslevent_gettype,_wrap_ESLevent_getType,NULL) SWIG_ZEND_NAMED_FE(eslevent_addbody,_wrap_ESLevent_addBody,NULL) SWIG_ZEND_NAMED_FE(eslevent_addheader,_wrap_ESLevent_addHeader,NULL) + SWIG_ZEND_NAMED_FE(eslevent_pushheader,_wrap_ESLevent_pushHeader,NULL) + SWIG_ZEND_NAMED_FE(eslevent_unshiftheader,_wrap_ESLevent_unshiftHeader,NULL) SWIG_ZEND_NAMED_FE(eslevent_delheader,_wrap_ESLevent_delHeader,NULL) SWIG_ZEND_NAMED_FE(eslevent_firstheader,_wrap_ESLevent_firstHeader,NULL) SWIG_ZEND_NAMED_FE(eslevent_nextheader,_wrap_ESLevent_nextHeader,NULL) diff --git a/libs/esl/php/php_ESL.h b/libs/esl/php/php_ESL.h index 8c9dede981..eceac5dd70 100644 --- a/libs/esl/php/php_ESL.h +++ b/libs/esl/php/php_ESL.h @@ -46,6 +46,8 @@ ZEND_NAMED_FUNCTION(_wrap_ESLevent_getBody); ZEND_NAMED_FUNCTION(_wrap_ESLevent_getType); ZEND_NAMED_FUNCTION(_wrap_ESLevent_addBody); ZEND_NAMED_FUNCTION(_wrap_ESLevent_addHeader); +ZEND_NAMED_FUNCTION(_wrap_ESLevent_pushHeader); +ZEND_NAMED_FUNCTION(_wrap_ESLevent_unshiftHeader); ZEND_NAMED_FUNCTION(_wrap_ESLevent_delHeader); ZEND_NAMED_FUNCTION(_wrap_ESLevent_firstHeader); ZEND_NAMED_FUNCTION(_wrap_ESLevent_nextHeader); diff --git a/libs/esl/python/ESL.py b/libs/esl/python/ESL.py index 8e52ea303f..6bb4216692 100644 --- a/libs/esl/python/ESL.py +++ b/libs/esl/python/ESL.py @@ -59,6 +59,8 @@ class ESLevent: def getType(*args): return apply(_ESL.ESLevent_getType, args) def addBody(*args): return apply(_ESL.ESLevent_addBody, args) def addHeader(*args): return apply(_ESL.ESLevent_addHeader, args) + def pushHeader(*args): return apply(_ESL.ESLevent_pushHeader, args) + def unshiftHeader(*args): return apply(_ESL.ESLevent_unshiftHeader, args) def delHeader(*args): return apply(_ESL.ESLevent_delHeader, args) def firstHeader(*args): return apply(_ESL.ESLevent_firstHeader, args) def nextHeader(*args): return apply(_ESL.ESLevent_nextHeader, args) diff --git a/libs/esl/python/esl_wrap.cpp b/libs/esl/python/esl_wrap.cpp index 3ef587561c..90f6ed2c79 100644 --- a/libs/esl/python/esl_wrap.cpp +++ b/libs/esl/python/esl_wrap.cpp @@ -3373,17 +3373,21 @@ SWIGINTERN PyObject *_wrap_ESLevent_getHeader(PyObject *SWIGUNUSEDPARM(self), Py PyObject *resultobj = 0; ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; + int val3 ; + int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; SWIG_PYTHON_THREAD_BEGIN_BLOCK; - if (!PyArg_ParseTuple(args,(char *)"OO:ESLevent_getHeader",&obj0,&obj1)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OO|O:ESLevent_getHeader",&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_getHeader" "', argument " "1"" of type '" "ESLevent *""'"); @@ -3394,9 +3398,16 @@ SWIGINTERN PyObject *_wrap_ESLevent_getHeader(PyObject *SWIGUNUSEDPARM(self), Py SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_getHeader" "', argument " "2"" of type '" "char const *""'"); } arg2 = reinterpret_cast< char * >(buf2); + if (obj2) { + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ESLevent_getHeader" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + } { SWIG_PYTHON_THREAD_BEGIN_ALLOW; - result = (char *)(arg1)->getHeader((char const *)arg2); + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); SWIG_PYTHON_THREAD_END_ALLOW; } resultobj = SWIG_FromCharPtr((const char *)result); @@ -3562,6 +3573,112 @@ fail: } +SWIGINTERN PyObject *_wrap_ESLevent_pushHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + if (!PyArg_ParseTuple(args,(char *)"OOO:ESLevent_pushHeader",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_pushHeader" "', argument " "1"" of type '" "ESLevent *""'"); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_pushHeader" "', argument " "2"" of type '" "char const *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_pushHeader" "', argument " "3"" of type '" "char const *""'"); + } + arg3 = reinterpret_cast< char * >(buf3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_PYTHON_THREAD_END_BLOCK; + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_PYTHON_THREAD_END_BLOCK; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_ESLevent_unshiftHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + if (!PyArg_ParseTuple(args,(char *)"OOO:ESLevent_unshiftHeader",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ESLevent_unshiftHeader" "', argument " "1"" of type '" "ESLevent *""'"); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ESLevent_unshiftHeader" "', argument " "2"" of type '" "char const *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ESLevent_unshiftHeader" "', argument " "3"" of type '" "char const *""'"); + } + arg3 = reinterpret_cast< char * >(buf3); + { + SWIG_PYTHON_THREAD_BEGIN_ALLOW; + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + SWIG_PYTHON_THREAD_END_ALLOW; + } + resultobj = SWIG_From_bool(static_cast< bool >(result)); + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_PYTHON_THREAD_END_BLOCK; + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + SWIG_PYTHON_THREAD_END_BLOCK; + return NULL; +} + + SWIGINTERN PyObject *_wrap_ESLevent_delHeader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; ESLevent *arg1 = (ESLevent *) 0 ; @@ -4726,6 +4843,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"ESLevent_getType", _wrap_ESLevent_getType, METH_VARARGS, NULL}, { (char *)"ESLevent_addBody", _wrap_ESLevent_addBody, METH_VARARGS, NULL}, { (char *)"ESLevent_addHeader", _wrap_ESLevent_addHeader, METH_VARARGS, NULL}, + { (char *)"ESLevent_pushHeader", _wrap_ESLevent_pushHeader, METH_VARARGS, NULL}, + { (char *)"ESLevent_unshiftHeader", _wrap_ESLevent_unshiftHeader, METH_VARARGS, NULL}, { (char *)"ESLevent_delHeader", _wrap_ESLevent_delHeader, METH_VARARGS, NULL}, { (char *)"ESLevent_firstHeader", _wrap_ESLevent_firstHeader, METH_VARARGS, NULL}, { (char *)"ESLevent_nextHeader", _wrap_ESLevent_nextHeader, METH_VARARGS, NULL}, diff --git a/libs/esl/ruby/esl_wrap.cpp b/libs/esl/ruby/esl_wrap.cpp index 3769b5bc24..5afce64cf9 100644 --- a/libs/esl/ruby/esl_wrap.cpp +++ b/libs/esl/ruby/esl_wrap.cpp @@ -2396,15 +2396,18 @@ SWIGINTERN VALUE _wrap_ESLevent_getHeader(int argc, VALUE *argv, VALUE self) { ESLevent *arg1 = (ESLevent *) 0 ; char *arg2 = (char *) 0 ; + int arg3 = (int) -1 ; char *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; + int val3 ; + int ecode3 = 0 ; VALUE vresult = Qnil; - if ((argc < 1) || (argc > 1)) { + if ((argc < 1) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); @@ -2417,7 +2420,14 @@ _wrap_ESLevent_getHeader(int argc, VALUE *argv, VALUE self) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","getHeader", 2, argv[0] )); } arg2 = reinterpret_cast< char * >(buf2); - result = (char *)(arg1)->getHeader((char const *)arg2); + if (argc > 1) { + ecode3 = SWIG_AsVal_int(argv[1], &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "int","getHeader", 3, argv[1] )); + } + arg3 = static_cast< int >(val3); + } + result = (char *)(arg1)->getHeader((char const *)arg2,arg3); vresult = SWIG_FromCharPtr((const char *)result); if (alloc2 == SWIG_NEWOBJ) delete[] buf2; return vresult; @@ -2556,6 +2566,98 @@ fail: } +SWIGINTERN VALUE +_wrap_ESLevent_pushHeader(int argc, VALUE *argv, VALUE self) { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + VALUE vresult = Qnil; + + if ((argc < 2) || (argc > 2)) { + rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; + } + res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","pushHeader", 1, self )); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","pushHeader", 2, argv[0] )); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","pushHeader", 3, argv[1] )); + } + arg3 = reinterpret_cast< char * >(buf3); + result = (bool)(arg1)->pushHeader((char const *)arg2,(char const *)arg3); + vresult = SWIG_From_bool(static_cast< bool >(result)); + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return vresult; +fail: + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return Qnil; +} + + +SWIGINTERN VALUE +_wrap_ESLevent_unshiftHeader(int argc, VALUE *argv, VALUE self) { + ESLevent *arg1 = (ESLevent *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + VALUE vresult = Qnil; + + if ((argc < 2) || (argc > 2)) { + rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; + } + res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_ESLevent, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "ESLevent *","unshiftHeader", 1, self )); + } + arg1 = reinterpret_cast< ESLevent * >(argp1); + res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","unshiftHeader", 2, argv[0] )); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","unshiftHeader", 3, argv[1] )); + } + arg3 = reinterpret_cast< char * >(buf3); + result = (bool)(arg1)->unshiftHeader((char const *)arg2,(char const *)arg3); + vresult = SWIG_From_bool(static_cast< bool >(result)); + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return vresult; +fail: + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return Qnil; +} + + SWIGINTERN VALUE _wrap_ESLevent_delHeader(int argc, VALUE *argv, VALUE self) { ESLevent *arg1 = (ESLevent *) 0 ; @@ -3835,6 +3937,8 @@ SWIGEXPORT void Init_ESL(void) { rb_define_method(cESLevent.klass, "getType", VALUEFUNC(_wrap_ESLevent_getType), -1); rb_define_method(cESLevent.klass, "addBody", VALUEFUNC(_wrap_ESLevent_addBody), -1); rb_define_method(cESLevent.klass, "addHeader", VALUEFUNC(_wrap_ESLevent_addHeader), -1); + rb_define_method(cESLevent.klass, "pushHeader", VALUEFUNC(_wrap_ESLevent_pushHeader), -1); + rb_define_method(cESLevent.klass, "unshiftHeader", VALUEFUNC(_wrap_ESLevent_unshiftHeader), -1); rb_define_method(cESLevent.klass, "delHeader", VALUEFUNC(_wrap_ESLevent_delHeader), -1); rb_define_method(cESLevent.klass, "firstHeader", VALUEFUNC(_wrap_ESLevent_firstHeader), -1); rb_define_method(cESLevent.klass, "nextHeader", VALUEFUNC(_wrap_ESLevent_nextHeader), -1); diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 675ecee460..ef8d7c1cb1 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -1025,51 +1025,6 @@ static esl_ssize_t handle_recv(esl_handle_t *handle, void *data, esl_size_t data return recv(handle->sock, data, datalen, 0); } -static int add_array(esl_event_t *event, const char *var, const char *val) -{ - char *data; - char **array; - int idx; - int max = 0; - int len; - const char *p; - int i; - - if (strlen(val) < 8) { - return -1; - } - - p = val + 7; - - while((p = strstr(p, "::"))) { - max++; - p += 2; - } - - if (!max) { - return -2; - } - - data = strdup(val + 7); - - len = (sizeof(char *) * max) + 1; - array = malloc(len); - memset(array, 0, len); - - idx = esl_separate_string_string(data, "::", array, max); - - for(i = 0; i < max; i++) { - esl_event_add_header_string(event, ESL_STACK_PUSH, var, array[i]); - } - - free(array); - free(data); - - return 0; -} - - - ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_event_t **save_event) { char *c; @@ -1134,7 +1089,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_ esl_url_decode(hval); esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval); if (!strncmp(hval, "ARRAY::", 7)) { - add_array(revent, hname, hval); + esl_event_add_array(revent, hname, hval); } else { esl_event_add_header_string(revent, ESL_STACK_BOTTOM, hname, hval); } @@ -1268,7 +1223,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_ } if (!strncmp(hval, "ARRAY::", 7)) { - add_array(handle->last_ievent, hname, hval); + esl_event_add_array(handle->last_ievent, hname, hval); } else { esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval); } diff --git a/libs/esl/src/esl_event.c b/libs/esl/src/esl_event.c index 614d1b6190..28723928e3 100644 --- a/libs/esl/src/esl_event.c +++ b/libs/esl/src/esl_event.c @@ -298,7 +298,7 @@ ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const cha esl_assert(x < 1000000); hash = esl_ci_hashfunc_default(header_name, &hlen); - if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name) && (esl_strlen_zero(val) || !strcmp(hp->value, val))) { + if ((!hp->hash || hash == hp->hash) && (hp->name && !strcasecmp(header_name, hp->name)) && (esl_strlen_zero(val) || !strcmp(hp->value, val))) { if (lp) { lp->next = hp->next; } else { @@ -338,30 +338,9 @@ ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const cha return status; } -static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, char *data) +static esl_event_header_t *new_header(const char *header_name) { - esl_event_header_t *header = NULL; - esl_ssize_t hlen = -1; - int exists = 0; - - if ((stack & ESL_STACK_PUSH) || (stack & ESL_STACK_UNSHIFT) || esl_test_flag(event, ESL_EF_CONTAINS_ARRAYS)) { - - if ((header = esl_event_get_header_ptr(event, header_name))) { - - if (!(stack & ESL_STACK_PUSH) && !(stack & ESL_STACK_UNSHIFT) && header->idx) { - stack |= ESL_STACK_PUSH; - } - - if ((stack & ESL_STACK_PUSH) || (stack & ESL_STACK_UNSHIFT)) { - exists++; - stack &= ~(ESL_STACK_TOP | ESL_STACK_BOTTOM); - } else { - header = NULL; - } - } - } - - if (!header) { + esl_event_header_t *header; #ifdef ESL_EVENT_RECYCLE void *pop; @@ -373,16 +352,144 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st esl_assert(header); #ifdef ESL_EVENT_RECYCLE } -#endif - +#endif + memset(header, 0, sizeof(*header)); + header->name = DUP(header_name); + + return header; + +} + +ESL_DECLARE(int) esl_event_add_array(esl_event_t *event, const char *var, const char *val) +{ + char *data; + char **array; + int max = 0; + int len; + const char *p; + int i; + + if (strlen(val) < 8) { + return -1; + } + + p = val + 7; + + max = 1; + + while((p = strstr(p, "|:"))) { + max++; + p += 2; + } + + if (!max) { + return -2; + } + + data = strdup(val + 7); + + len = (sizeof(char *) * max) + 1; + array = malloc(len); + esl_assert(array); + memset(array, 0, len); + + esl_separate_string_string(data, "|:", array, max); + + for(i = 0; i < max; i++) { + esl_event_add_header_string(event, ESL_STACK_PUSH, var, array[i]); + } + + free(array); + free(data); + + return 0; +} + +static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, char *data) +{ + esl_event_header_t *header = NULL; + esl_ssize_t hlen = -1; + int exists = 0, fly = 0; + char *index_ptr; + int index = 0; + char *real_header_name = NULL; + + if ((index_ptr = strchr(header_name, '['))) { + index_ptr++; + index = atoi(index_ptr); + real_header_name = DUP(header_name); + if ((index_ptr = strchr(real_header_name, '['))) { + *index_ptr++ = '\0'; + } + header_name = real_header_name; + } + + if (index_ptr || (stack & ESL_STACK_PUSH) || (stack & ESL_STACK_UNSHIFT)) { + + if (!(header = esl_event_get_header_ptr(event, header_name)) && index_ptr) { + + header = new_header(header_name); + + if (esl_test_flag(event, ESL_EF_UNIQ_HEADERS)) { + esl_event_del_header(event, header_name); + } + + fly++; + } + + if ((header = esl_event_get_header_ptr(event, header_name))) { + + if (index_ptr) { + if (index > -1 && index <= 4000) { + if (index < header->idx) { + FREE(header->array[index]); + header->array[index] = DUP(data); + } else { + int i; + char **m; + + m = realloc(header->array, sizeof(char *) * (index + 1)); + esl_assert(m); + header->array = m; + for (i = header->idx; i < index; i++) { + m[i] = DUP(""); + } + m[index] = DUP(data); + header->idx = index + 1; + if (!fly) { + exists = 1; + } + + goto redraw; + } + } + goto end; + } else { + if ((stack & ESL_STACK_PUSH) || (stack & ESL_STACK_UNSHIFT)) { + exists++; + stack &= ~(ESL_STACK_TOP | ESL_STACK_BOTTOM); + } else { + header = NULL; + } + } + } + } + + + if (!header) { if (esl_test_flag(event, ESL_EF_UNIQ_HEADERS)) { esl_event_del_header(event, header_name); } - memset(header, 0, sizeof(*header)); + if (strstr(data, "ARRAY::")) { + esl_event_add_array(event, header_name, data); + FREE(data); + goto end; + } - header->name = DUP(header_name); + + header = new_header(header_name); } if ((stack & ESL_STACK_PUSH) || (stack & ESL_STACK_UNSHIFT)) { @@ -391,8 +498,6 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st char *hv; int i = 0, j = 0; - esl_set_flag(event, ESL_EF_CONTAINS_ARRAYS); - if (header->value && !header->idx) { m = malloc(sizeof(char *)); esl_assert(m); @@ -419,6 +524,8 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st header->idx++; header->array = m; + redraw: + len = 0; for(j = 0; j < header->idx; j++) { len += strlen(header->array[j]) + 2; } @@ -428,9 +535,10 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st hv = realloc(header->value, len); esl_assert(hv); header->value = hv; + esl_snprintf(header->value, len, "ARRAY::"); for(j = 0; j < header->idx; j++) { - esl_snprintf(header->value + strlen(header->value), len - strlen(header->value), "%s%s", j == 0 ? "" : "::", header->array[j]); + esl_snprintf(header->value + strlen(header->value), len - strlen(header->value), "%s%s", j == 0 ? "" : "|:", header->array[j]); } } @@ -458,6 +566,10 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st } } + end: + + esl_safe_free(real_header_name); + return ESL_SUCCESS; } @@ -681,10 +793,12 @@ ESL_DECLARE(esl_status_t) esl_event_serialize(esl_event_t *event, char **str, es if ((len + llen) > dlen) { char *m; + char *old = buf; dlen += (blocksize + (len + llen)); if ((m = realloc(buf, dlen))) { buf = m; } else { + buf = old; abort(); } } @@ -708,10 +822,12 @@ ESL_DECLARE(esl_status_t) esl_event_serialize(esl_event_t *event, char **str, es if ((len + llen) > dlen) { char *m; + char *old = buf; dlen += (blocksize + (len + llen)); if ((m = realloc(buf, dlen))) { buf = m; } else { + buf = old; abort(); } } @@ -768,7 +884,7 @@ ESL_DECLARE(esl_status_t) esl_event_create_json(esl_event_t **event, const char for (i = 0; i < x; i++) { cJSON *item = cJSON_GetArrayItem(cjp, i); - if (item && item->type == cJSON_String && item->valuestring) { + if (item != NULL && item->type == cJSON_String && item->valuestring) { esl_event_add_header_string(new_event, ESL_STACK_PUSH, name, item->valuestring); } } diff --git a/libs/esl/src/esl_oop.cpp b/libs/esl/src/esl_oop.cpp index 8ea3dfa4d3..0c4bbd6f90 100644 --- a/libs/esl/src/esl_oop.cpp +++ b/libs/esl/src/esl_oop.cpp @@ -390,12 +390,12 @@ bool ESLevent::setPriority(esl_priority_t priority) return false; } -const char *ESLevent::getHeader(const char *header_name) +const char *ESLevent::getHeader(const char *header_name, int idx) { this_check(""); if (event) { - return esl_event_get_header(event, header_name); + return esl_event_get_header_idx(event, header_name, idx); } else { esl_log(ESL_LOG_ERROR, "Trying to getHeader an event that does not exist!\n"); } @@ -415,6 +415,32 @@ bool ESLevent::addHeader(const char *header_name, const char *value) return false; } +bool ESLevent::pushHeader(const char *header_name, const char *value) +{ + this_check(false); + + if (event) { + return esl_event_add_header_string(event, ESL_STACK_PUSH, header_name, value) == ESL_SUCCESS ? true : false; + } else { + esl_log(ESL_LOG_ERROR, "Trying to addHeader an event that does not exist!\n"); + } + + return false; +} + +bool ESLevent::unshiftHeader(const char *header_name, const char *value) +{ + this_check(false); + + if (event) { + return esl_event_add_header_string(event, ESL_STACK_UNSHIFT, header_name, value) == ESL_SUCCESS ? true : false; + } else { + esl_log(ESL_LOG_ERROR, "Trying to addHeader an event that does not exist!\n"); + } + + return false; +} + bool ESLevent::delHeader(const char *header_name) { this_check(false); diff --git a/libs/esl/src/include/esl_event.h b/libs/esl/src/include/esl_event.h index 10af7264b9..d6be0470e8 100644 --- a/libs/esl/src/include/esl_event.h +++ b/libs/esl/src/include/esl_event.h @@ -180,8 +180,7 @@ struct esl_event { }; typedef enum { - ESL_EF_UNIQ_HEADERS = (1 << 0), - ESL_EF_CONTAINS_ARRAYS = (1 << 1) + ESL_EF_UNIQ_HEADERS = (1 << 0) } esl_event_flag_t; @@ -234,6 +233,8 @@ ESL_DECLARE(char *)esl_event_get_body(esl_event_t *event); ESL_DECLARE(esl_status_t) esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...); //PRINTF_FUNCTION(4, 5); +ESL_DECLARE(int) esl_event_add_array(esl_event_t *event, const char *var, const char *val); + /*! \brief Add a string header to an event \param event the event to add the header to diff --git a/libs/esl/src/include/esl_oop.h b/libs/esl/src/include/esl_oop.h index 3947d0cfb7..947fe453d7 100644 --- a/libs/esl/src/include/esl_oop.h +++ b/libs/esl/src/include/esl_oop.h @@ -56,11 +56,13 @@ class ESLevent { virtual ~ESLevent(); const char *serialize(const char *format = NULL); bool setPriority(esl_priority_t priority = ESL_PRIORITY_NORMAL); - const char *getHeader(const char *header_name); + const char *getHeader(const char *header_name, int idx = -1); char *getBody(void); const char *getType(void); bool addBody(const char *value); bool addHeader(const char *header_name, const char *value); + bool pushHeader(const char *header_name, const char *value); + bool unshiftHeader(const char *header_name, const char *value); bool delHeader(const char *header_name); const char *firstHeader(void); const char *nextHeader(void); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 0789c433f9..872cf51bc4 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -881,6 +881,12 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event) uint8_t call_state = 0; ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + + if (!suInstId && !spInstId) { + /* We already cleared this call */ + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Dropping STATUS CONFIRM (suId:%u suInstId:%u spInstId:%u)\n", suId, suInstId, spInstId); + return; + } if (staEvnt->callSte.eh.pres && staEvnt->callSte.callGlblSte.pres) { call_state = staEvnt->callSte.callGlblSte.val; diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c index 67de893f5d..2a523c7cb9 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c @@ -502,12 +502,16 @@ void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, St sngisdn_event_data_t *sngisdn_event = NULL; ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - + + /* We sometimes receive a STA CFM after receiving a RELEASE/RELEASE COMPLETE, so we need to lock + here in case we are calling clear_call_data at the same time this function is called */ + + ftdm_mutex_lock(g_sngisdn_data.ccs[suId].mutex); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); - ftdm_assert(0, "Inconsistent call states\n"); + ftdm_mutex_unlock(g_sngisdn_data.ccs[suId].mutex); return; } @@ -526,6 +530,7 @@ void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, St memcpy(&sngisdn_event->event.staEvnt, staEvnt, sizeof(*staEvnt)); ftdm_queue_enqueue(((sngisdn_span_data_t*)sngisdn_info->ftdmchan->span->signal_data)->event_queue, sngisdn_event); + ftdm_mutex_unlock(g_sngisdn_data.ccs[suId].mutex); ISDN_FUNC_TRACE_EXIT(__FUNCTION__); } diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c index 3ba776928d..61f340205d 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c @@ -100,12 +100,12 @@ void clear_call_data(sngisdn_chan_data_t *sngisdn_info) ftdm_mutex_lock(g_sngisdn_data.ccs[cc_id].mutex); g_sngisdn_data.ccs[cc_id].active_spInstIds[sngisdn_info->spInstId]=NULL; g_sngisdn_data.ccs[cc_id].active_suInstIds[sngisdn_info->suInstId]=NULL; - ftdm_mutex_unlock(g_sngisdn_data.ccs[cc_id].mutex); - + sngisdn_info->suInstId = 0; sngisdn_info->spInstId = 0; sngisdn_info->globalFlg = 0; sngisdn_info->flags = 0; + ftdm_mutex_unlock(g_sngisdn_data.ccs[cc_id].mutex); return; } diff --git a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c index 9c01b41299..b77fde0ffa 100644 --- a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c +++ b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c @@ -1066,16 +1066,20 @@ static __inline__ ftdm_status_t zt_channel_process_event(ftdm_channel_t *fchan, break; case ZT_EVENT_BADFCS: { - ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Bad frame checksum (ZT_EVENT_BADFCS)!\n"); - /* What else could we do? */ - *event_id = FTDM_OOB_NOOP; + ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Bad frame checksum (ZT_EVENT_BADFCS)\n"); + *event_id = FTDM_OOB_NOOP; /* What else could we do? */ } break; case ZT_EVENT_OVERRUN: { - ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Driver overrun! (ZT_EVENT_OVERRUN)\n"); - /* What else could we do? */ - *event_id = FTDM_OOB_NOOP; + ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "HDLC frame overrun (ZT_EVENT_OVERRUN)\n"); + *event_id = FTDM_OOB_NOOP; /* What else could we do? */ + } + break; + case ZT_EVENT_ABORT: + { + ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "HDLC abort frame received (ZT_EVENT_ABORT)\n"); + *event_id = FTDM_OOB_NOOP; /* What else could we do? */ } break; case ZT_EVENT_NONE: diff --git a/src/include/switch_event.h b/src/include/switch_event.h index 642e39afeb..c6b1d64c35 100644 --- a/src/include/switch_event.h +++ b/src/include/switch_event.h @@ -103,8 +103,7 @@ struct switch_event { }; typedef enum { - EF_UNIQ_HEADERS = (1 << 0), - EF_CONTAINS_ARRAYS = (1 << 1), + EF_UNIQ_HEADERS = (1 << 0) } switch_event_flag_t; @@ -152,7 +151,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_set_priority(switch_event_t *event, \return the value of the requested header */ -_Ret_opt_z_ SWITCH_DECLARE(switch_event_header_t *) switch_event_get_header_ptr(switch_event_t *event, const char *header_name); +SWITCH_DECLARE(switch_event_header_t *) switch_event_get_header_ptr(switch_event_t *event, const char *header_name); _Ret_opt_z_ SWITCH_DECLARE(char *) switch_event_get_header_idx(switch_event_t *event, const char *header_name, int idx); #define switch_event_get_header(_e, _h) switch_event_get_header_idx(_e, _h, -1) @@ -192,7 +191,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_add_header_string(switch_event_t *e SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *event, const char *header_name, const char *val); #define switch_event_del_header(_e, _h) switch_event_del_header_val(_e, _h, NULL) - +SWITCH_DECLARE(int) switch_event_add_array(switch_event_t *event, const char *var, const char *val); /*! \brief Destroy an event \param event pointer to the pointer to event to destroy diff --git a/src/include/switch_platform.h b/src/include/switch_platform.h index 609dde8b7a..7603b58544 100644 --- a/src/include/switch_platform.h +++ b/src/include/switch_platform.h @@ -137,14 +137,17 @@ typedef int gid_t; #ifdef WIN32 #if defined(SWITCH_CORE_DECLARE_STATIC) #define SWITCH_DECLARE(type) type __stdcall +#define SWITCH_DECLARE_TYPEDEF(type, name) type (__stdcall name) #define SWITCH_DECLARE_NONSTD(type) type __cdecl #define SWITCH_DECLARE_DATA #elif defined(FREESWITCHCORE_EXPORTS) #define SWITCH_DECLARE(type) __declspec(dllexport) type __stdcall +#define SWITCH_DECLARE_TYPEDEF(type, name) __declspec(dllexport) type (__stdcall name) #define SWITCH_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl #define SWITCH_DECLARE_DATA __declspec(dllexport) #else #define SWITCH_DECLARE(type) __declspec(dllimport) type __stdcall +#define SWITCH_DECLARE_TYPEDEF(type, name) __declspec(dllimport) type (__stdcall name) #define SWITCH_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl #define SWITCH_DECLARE_DATA __declspec(dllimport) #endif @@ -174,6 +177,7 @@ typedef int gid_t; #define O_BINARY 0 #if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(SWITCH_API_VISIBILITY) #define SWITCH_DECLARE(type) __attribute__((visibility("default"))) type +#define SWITCH_DECLARE_TYPEDEF(type, name) type (name) #define SWITCH_DECLARE_NONSTD(type) __attribute__((visibility("default"))) type #define SWITCH_DECLARE_DATA __attribute__((visibility("default"))) #define SWITCH_MOD_DECLARE(type) __attribute__((visibility("default"))) type @@ -182,6 +186,7 @@ typedef int gid_t; #define SWITCH_DECLARE_CLASS __attribute__((visibility("default"))) #else #define SWITCH_DECLARE(type) type +#define SWITCH_DECLARE_TYPEDEF(type, name) type (name) #define SWITCH_DECLARE_NONSTD(type) type #define SWITCH_DECLARE_DATA #define SWITCH_MOD_DECLARE(type) type diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 2b2b3de45d..a94bfbd29b 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1690,7 +1690,7 @@ struct switch_console_callback_match { }; typedef struct switch_console_callback_match switch_console_callback_match_t; -typedef void (*switch_cap_callback_t) (const char *var, const char *val, void *user_data); +typedef SWITCH_DECLARE_TYPEDEF(void, *switch_cap_callback_t) (const char *var, const char *val, void *user_data); typedef switch_status_t (*switch_console_complete_callback_t) (const char *, const char *, switch_console_callback_match_t **matches); typedef switch_bool_t (*switch_media_bug_callback_t) (switch_media_bug_t *, void *, switch_abc_type_t); typedef switch_bool_t (*switch_tone_detect_callback_t) (switch_core_session_t *, const char *, const char *); diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 87886cfdd1..c98e632f94 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -2320,7 +2320,7 @@ SWITCH_STANDARD_APP(capture_function) if (!zstr(data) && (lbuf = switch_core_session_strdup(session, data)) && (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) == 3) { if ((proceed = switch_regex_perform(argv[1], argv[2], &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { - switch_capture_regex(re, proceed, argv[1], ovector, argv[0], (switch_cap_callback_t)switch_regex_set_var_callback, session); + switch_capture_regex(re, proceed, argv[1], ovector, argv[0], switch_regex_set_var_callback, session); } switch_regex_safe_free(re); } else { @@ -2529,8 +2529,7 @@ SWITCH_STANDARD_APP(audio_bridge_function) char *tof_data = NULL; char *tof_array[4] = { 0 }; //int tof_arrayc = 0; - const char *continue_on_fail = NULL, *failure_causes = NULL, - *v_campon = NULL, *v_campon_retries, *v_campon_sleep, *v_campon_timeout, *v_campon_fallback_exten = NULL; + const char *v_campon = NULL, *v_campon_retries, *v_campon_sleep, *v_campon_timeout, *v_campon_fallback_exten = NULL; switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING; int campon_retries = 100, campon_timeout = 10, campon_sleep = 10, tmp, camping = 0, fail = 0, thread_started = 0; struct camping_stake stake = { 0 }; @@ -2544,15 +2543,11 @@ SWITCH_STANDARD_APP(audio_bridge_function) return; } - continue_on_fail = switch_channel_get_variable(caller_channel, "continue_on_fail"); - transfer_on_fail = switch_channel_get_variable(caller_channel, "transfer_on_fail"); tof_data = switch_core_session_strdup(session, transfer_on_fail); switch_split(tof_data, ' ', tof_array); transfer_on_fail = tof_array[0]; - failure_causes = switch_channel_get_variable(caller_channel, "failure_causes"); - if ((v_campon = switch_channel_get_variable(caller_channel, "campon")) && switch_true(v_campon)) { const char *cid_name = NULL; const char *cid_number = NULL; @@ -2693,6 +2688,11 @@ SWITCH_STANDARD_APP(audio_bridge_function) EXCEPTION... ATTENDED_TRANSFER never is a reason to continue....... */ if (cause != SWITCH_CAUSE_ATTENDED_TRANSFER) { + const char *continue_on_fail = NULL, *failure_causes = NULL; + + continue_on_fail = switch_channel_get_variable(caller_channel, "continue_on_fail"); + failure_causes = switch_channel_get_variable(caller_channel, "failure_causes"); + if (continue_on_fail || failure_causes) { const char *cause_str; char cause_num[35] = ""; diff --git a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c index c2d6ae40b5..322da31272 100644 --- a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c +++ b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c @@ -224,7 +224,7 @@ static int sangoma_create_rtp_port(void *usr_priv, uint32_t host_ip, uint32_t *p switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "New allocated port %d for IP %s/%d.%d.%d.%d\n", rtp_port, local_ip, SNGTC_NIPV4(host_ip)); *p_rtp_port = rtp_port; - *rtp_fd = (void *)(long)rtp_port; + *rtp_fd = NULL; return 0; } @@ -259,6 +259,9 @@ static int sangoma_create_rtp(void *usr_priv, sngtc_codec_request_leg_t *codec_r switch_port_t rtp_port; struct sangoma_transcoding_session *sess = usr_priv; + rtp_port = codec_req_leg->host_udp_port; + *rtp_fd = NULL; + /* * We *MUST* use a new pool * Do not use the session pool since the session may go away while the RTP socket should linger around @@ -271,10 +274,6 @@ static int sangoma_create_rtp(void *usr_priv, sngtc_codec_request_leg_t *codec_r return -1; } - rtp_port = (switch_port_t)(long)*rtp_fd; - - codec_req_leg->host_udp_port = rtp_port; - local_ip_addr.s_addr = htonl(codec_req_leg->host_ip); switch_inet_ntop(AF_INET, &local_ip_addr, local_ip, sizeof(local_ip)); sngtc_codec_ipv4_hex_to_str(codec_reply_leg->codec_ip, codec_ip); @@ -307,6 +306,9 @@ static int sangoma_destroy_rtp(void *usr_priv, void *fd) { switch_memory_pool_t *sesspool; switch_rtp_t *rtp = fd; + if (!rtp) { + return 0; + } sesspool = switch_rtp_get_private(rtp); switch_rtp_destroy(&rtp); switch_core_destroy_memory_pool(&sesspool); diff --git a/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c b/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c index c3f9008376..5f042fbf26 100644 --- a/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c +++ b/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c @@ -224,7 +224,7 @@ static int parse_exten(switch_core_session_t *session, switch_caller_profile_t * } else { if (field && strchr(expression, '(')) { switch_channel_set_variable(channel, "DP_MATCH", NULL); - switch_capture_regex(re, proceed, field_data, ovector, "DP_MATCH", (switch_cap_callback_t)switch_regex_set_var_callback, session); + switch_capture_regex(re, proceed, field_data, ovector, "DP_MATCH", switch_regex_set_var_callback, session); } for (xaction = switch_xml_child(xcond, "action"); xaction; xaction = xaction->next) { diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 3879cca7d4..3b07472e7e 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -50,58 +50,58 @@ skinny_globals_t globals; /* SQL TABLES */ /*****************************************************************************/ static char devices_sql[] = - "CREATE TABLE skinny_devices (\n" - " name VARCHAR(16),\n" - " user_id INTEGER,\n" - " instance INTEGER,\n" - " ip VARCHAR(15),\n" - " type INTEGER,\n" - " max_streams INTEGER,\n" - " port INTEGER,\n" - " codec_string VARCHAR(255),\n" - " headset INTEGER,\n" - " handset INTEGER,\n" - " speaker INTEGER\n" - ");\n"; +"CREATE TABLE skinny_devices (\n" +" name VARCHAR(16),\n" +" user_id INTEGER,\n" +" instance INTEGER,\n" +" ip VARCHAR(15),\n" +" type INTEGER,\n" +" max_streams INTEGER,\n" +" port INTEGER,\n" +" codec_string VARCHAR(255),\n" +" headset INTEGER,\n" +" handset INTEGER,\n" +" speaker INTEGER\n" +");\n"; static char lines_sql[] = - "CREATE TABLE skinny_lines (\n" - " device_name VARCHAR(16),\n" - " device_instance INTEGER,\n" - " position INTEGER,\n" - " line_instance INTEGER,\n" - " label VARCHAR(40),\n" - " value VARCHAR(24),\n" - " caller_name VARCHAR(44),\n" - " ring_on_idle INTEGER,\n" - " ring_on_active INTEGER,\n" - " busy_trigger INTEGER,\n" - " forward_all VARCHAR(255),\n" - " forward_busy VARCHAR(255),\n" - " forward_noanswer VARCHAR(255),\n" - " noanswer_duration INTEGER\n" - ");\n"; +"CREATE TABLE skinny_lines (\n" +" device_name VARCHAR(16),\n" +" device_instance INTEGER,\n" +" position INTEGER,\n" +" line_instance INTEGER,\n" +" label VARCHAR(40),\n" +" value VARCHAR(24),\n" +" caller_name VARCHAR(44),\n" +" ring_on_idle INTEGER,\n" +" ring_on_active INTEGER,\n" +" busy_trigger INTEGER,\n" +" forward_all VARCHAR(255),\n" +" forward_busy VARCHAR(255),\n" +" forward_noanswer VARCHAR(255),\n" +" noanswer_duration INTEGER\n" +");\n"; static char buttons_sql[] = - "CREATE TABLE skinny_buttons (\n" - " device_name VARCHAR(16),\n" - " device_instance INTEGER,\n" - " position INTEGER,\n" - " type INTEGER,\n" - " label VARCHAR(40),\n" - " value VARCHAR(255),\n" - " settings VARCHAR(44)\n" - ");\n"; +"CREATE TABLE skinny_buttons (\n" +" device_name VARCHAR(16),\n" +" device_instance INTEGER,\n" +" position INTEGER,\n" +" type INTEGER,\n" +" label VARCHAR(40),\n" +" value VARCHAR(255),\n" +" settings VARCHAR(44)\n" +");\n"; static char active_lines_sql[] = - "CREATE TABLE skinny_active_lines (\n" - " device_name VARCHAR(16),\n" - " device_instance INTEGER,\n" - " line_instance INTEGER,\n" - " channel_uuid VARCHAR(256),\n" - " call_id INTEGER,\n" - " call_state INTEGER\n" - ");\n"; +"CREATE TABLE skinny_active_lines (\n" +" device_name VARCHAR(16),\n" +" device_instance INTEGER,\n" +" line_instance INTEGER,\n" +" channel_uuid VARCHAR(256),\n" +" call_id INTEGER,\n" +" call_state INTEGER\n" +");\n"; /*****************************************************************************/ /* PROFILES FUNCTIONS */ @@ -238,7 +238,7 @@ char * skinny_profile_find_session_uuid(skinny_profile_t *profile, listener_t *l if(listener) { device_condition = switch_mprintf("device_name='%s' AND device_instance=%d", - listener->device_name, listener->device_instance); + listener->device_name, listener->device_instance); } else { device_condition = switch_mprintf("1=1"); } @@ -256,14 +256,14 @@ char * skinny_profile_find_session_uuid(skinny_profile_t *profile, listener_t *l } switch_assert(call_id_condition); if((sql = switch_mprintf( - "SELECT channel_uuid, line_instance " - "FROM skinny_active_lines " - "WHERE %s AND %s AND %s " - "ORDER BY call_state, channel_uuid", /* off hook first */ - device_condition, line_instance_condition, call_id_condition - ))) { + "SELECT channel_uuid, line_instance " + "FROM skinny_active_lines " + "WHERE %s AND %s AND %s " + "ORDER BY call_state, channel_uuid", /* off hook first */ + device_condition, line_instance_condition, call_id_condition + ))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, - skinny_profile_find_session_uuid_callback, &helper); + skinny_profile_find_session_uuid_callback, &helper); switch_safe_free(sql); } switch_safe_free(device_condition); @@ -291,8 +291,8 @@ switch_core_session_t * skinny_profile_find_session(skinny_profile_t *profile, l #endif if(!result) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unable to find session %s on %s:%d, line %d\n", - uuid, listener->device_name, listener->device_instance, *line_instance_p); + "Unable to find session %s on %s:%d, line %d\n", + uuid, listener->device_name, listener->device_instance, *line_instance_p); } switch_safe_free(uuid); } @@ -340,7 +340,7 @@ switch_status_t skinny_execute_sql(skinny_profile_t *profile, char *sql, switch_ status = switch_cache_db_execute_sql(dbh, sql, NULL); - end: +end: switch_cache_db_release_db_handle(&dbh); @@ -352,7 +352,7 @@ switch_status_t skinny_execute_sql(skinny_profile_t *profile, char *sql, switch_ } switch_bool_t skinny_execute_sql_callback(skinny_profile_t *profile, switch_mutex_t *mutex, char *sql, switch_core_db_callback_func_t callback, - void *pdata) + void *pdata) { switch_bool_t ret = SWITCH_FALSE; char *errmsg = NULL; @@ -374,7 +374,7 @@ switch_bool_t skinny_execute_sql_callback(skinny_profile_t *profile, switch_mute free(errmsg); } - end: +end: switch_cache_db_release_db_handle(&dbh); @@ -400,9 +400,9 @@ void skinny_line_perform_set_state(const char *file, const char *func, int line, switch_event_fire(&event); send_call_state(listener, call_state, line_instance, call_id); switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_DEBUG, - "Device %s:%d, Line %d, Call %d Change State to %s (%d)\n", - listener->device_name, listener->device_instance, line_instance, call_id, - skinny_call_state2str(call_state), call_state); + "Device %s:%d, Line %d, Call %d Change State to %s (%d)\n", + listener->device_name, listener->device_instance, line_instance, call_id, + skinny_call_state2str(call_state), call_state); } @@ -443,13 +443,13 @@ uint32_t skinny_line_get_state(listener_t *listener, uint32_t line_instance, uin helper.call_state = -1; if ((sql = switch_mprintf( - "SELECT call_state FROM skinny_active_lines " - "WHERE device_name='%s' AND device_instance=%d " - "AND %s AND %s " - "ORDER BY call_state, channel_uuid", /* off hook first */ - listener->device_name, listener->device_instance, - line_instance_condition, call_id_condition - ))) { + "SELECT call_state FROM skinny_active_lines " + "WHERE device_name='%s' AND device_instance=%d " + "AND %s AND %s " + "ORDER BY call_state, channel_uuid", /* off hook first */ + listener->device_name, listener->device_instance, + line_instance_condition, call_id_condition + ))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_line_get_state_callback, &helper); switch_safe_free(sql); } @@ -475,13 +475,13 @@ switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) switch_goto_status(SWITCH_STATUS_SUCCESS, end); } if (strcasecmp(tech_pvt->read_impl.iananame, tech_pvt->iananame) || - tech_pvt->read_impl.samples_per_second != tech_pvt->rm_rate || - tech_pvt->codec_ms != (uint32_t)tech_pvt->read_impl.microseconds_per_packet / 1000) { - + tech_pvt->read_impl.samples_per_second != tech_pvt->rm_rate || + tech_pvt->codec_ms != (uint32_t)tech_pvt->read_impl.microseconds_per_packet / 1000) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "Changing Codec from %s@%dms to %s@%dms\n", - tech_pvt->read_impl.iananame, tech_pvt->read_impl.microseconds_per_packet / 1000, - tech_pvt->rm_encoding, tech_pvt->codec_ms); - + tech_pvt->read_impl.iananame, tech_pvt->read_impl.microseconds_per_packet / 1000, + tech_pvt->rm_encoding, tech_pvt->codec_ms); + switch_core_session_lock_codec_write(tech_pvt->session); switch_core_session_lock_codec_read(tech_pvt->session); resetting = 1; @@ -494,25 +494,25 @@ switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) } if (switch_core_codec_init(&tech_pvt->read_codec, - tech_pvt->iananame, - tech_pvt->rm_fmtp, - tech_pvt->rm_rate, - tech_pvt->codec_ms, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | 0 /* TODO tech_pvt->profile->codec_flags */, - NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { + tech_pvt->iananame, + tech_pvt->rm_fmtp, + tech_pvt->rm_rate, + tech_pvt->codec_ms, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | 0 /* TODO tech_pvt->profile->codec_flags */, + NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "Can't load codec?\n"); switch_goto_status(SWITCH_STATUS_FALSE, end); } if (switch_core_codec_init(&tech_pvt->write_codec, - tech_pvt->iananame, - tech_pvt->rm_fmtp, - tech_pvt->rm_rate, - tech_pvt->codec_ms, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | 0 /* TODO tech_pvt->profile->codec_flags */, - NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { + tech_pvt->iananame, + tech_pvt->rm_fmtp, + tech_pvt->rm_rate, + tech_pvt->codec_ms, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | 0 /* TODO tech_pvt->profile->codec_flags */, + NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "Can't load codec?\n"); switch_goto_status(SWITCH_STATUS_FALSE, end); } @@ -530,9 +530,9 @@ switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) switch_assert(tech_pvt->read_codec.implementation); if (switch_rtp_change_interval(tech_pvt->rtp_session, - tech_pvt->read_impl.microseconds_per_packet, - tech_pvt->read_impl.samples_per_packet - ) != SWITCH_STATUS_SUCCESS) { + tech_pvt->read_impl.microseconds_per_packet, + tech_pvt->read_impl.samples_per_packet + ) != SWITCH_STATUS_SUCCESS) { switch_channel_t *channel = switch_core_session_get_channel(tech_pvt->session); switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); @@ -549,8 +549,8 @@ switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) } switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "Set Codec %s %s/%ld %d ms %d samples\n", - "" /* TODO switch_channel_get_name(tech_pvt->channel)*/, tech_pvt->iananame, tech_pvt->rm_rate, tech_pvt->codec_ms, - tech_pvt->read_impl.samples_per_packet); + "" /* TODO switch_channel_get_name(tech_pvt->channel)*/, tech_pvt->iananame, tech_pvt->rm_rate, tech_pvt->codec_ms, + tech_pvt->read_impl.samples_per_packet); tech_pvt->read_frame.codec = &tech_pvt->read_codec; tech_pvt->write_codec.agreed_pt = tech_pvt->agreed_pt; @@ -562,16 +562,16 @@ switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) } /* TODO - tech_pvt->fmtp_out = switch_core_session_strdup(tech_pvt->session, tech_pvt->write_codec.fmtp_out); - */ + tech_pvt->fmtp_out = switch_core_session_strdup(tech_pvt->session, tech_pvt->write_codec.fmtp_out); + */ /* TODO - if (switch_rtp_ready(tech_pvt->rtp_session)) { - switch_rtp_set_default_payload(tech_pvt->rtp_session, tech_pvt->pt); - } - */ + if (switch_rtp_ready(tech_pvt->rtp_session)) { + switch_rtp_set_default_payload(tech_pvt->rtp_session, tech_pvt->pt); + } + */ - end: +end: if (resetting) { switch_core_session_unlock_codec_write(tech_pvt->session); switch_core_session_unlock_codec_read(tech_pvt->session); @@ -600,7 +600,7 @@ void tech_init(private_t *tech_pvt, skinny_profile_t *profile, switch_core_sessi State methods they get called when the state changes to the specific state returning SWITCH_STATUS_SUCCESS tells the core to execute the standard state method next so if you fully implement the state you can return SWITCH_STATUS_FALSE to skip it. -*/ + */ switch_status_t channel_on_init(switch_core_session_t *session) { switch_channel_t *channel = switch_core_session_get_channel(session); @@ -641,23 +641,23 @@ int channel_on_routing_callback(void *pArg, int argc, char **argv, char **column skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, device_name, device_instance, &listener); if(listener) { - if(!strcmp(device_name, helper->listener->device_name) - && (device_instance == helper->listener->device_instance) - && (line_instance == helper->line_instance)) {/* the calling line */ + if(!strcmp(device_name, helper->listener->device_name) + && (device_instance == helper->listener->device_instance) + && (line_instance == helper->line_instance)) {/* the calling line */ helper->tech_pvt->caller_profile->dialplan = switch_core_strdup(helper->tech_pvt->caller_profile->pool, listener->profile->dialplan); helper->tech_pvt->caller_profile->context = switch_core_strdup(helper->tech_pvt->caller_profile->pool, listener->profile->context); send_dialed_number(listener, helper->tech_pvt->caller_profile->destination_number, line_instance, helper->tech_pvt->call_id); skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_PROCEED); skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); skinny_session_ring_out(helper->tech_pvt->session, listener, line_instance); - } else { + } else { send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_IN_USE_REMOTELY); send_select_soft_keys(listener, line_instance, helper->tech_pvt->call_id, SKINNY_KEY_SET_IN_USE_HINT, 0xffff); send_display_prompt_status(listener, 0, SKINNY_DISP_IN_USE_REMOTE, - line_instance, helper->tech_pvt->call_id); + line_instance, helper->tech_pvt->call_id); skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); - } + } } return 0; } @@ -673,15 +673,15 @@ switch_status_t channel_on_routing(switch_core_session_t *session) struct channel_on_routing_helper helper = {0}; if(switch_test_flag(tech_pvt, TFLAG_FORCE_ROUTE)) { - action = SKINNY_ACTION_ROUTE; + action = SKINNY_ACTION_PROCESS; } else { action = skinny_session_dest_match_pattern(session, &data); } switch(action) { - case SKINNY_ACTION_ROUTE: + case SKINNY_ACTION_PROCESS: skinny_profile_find_listener_by_device_name_and_instance(tech_pvt->profile, - switch_channel_get_variable(channel, "skinny_device_name"), - atoi(switch_channel_get_variable(channel, "skinny_device_instance")), &listener); + switch_channel_get_variable(channel, "skinny_device_name"), + atoi(switch_channel_get_variable(channel, "skinny_device_instance")), &listener); if (listener) { helper.tech_pvt = tech_pvt; helper.listener = listener; @@ -689,8 +689,8 @@ switch_status_t channel_on_routing(switch_core_session_t *session) skinny_session_walk_lines(tech_pvt->profile, switch_core_session_get_uuid(session), channel_on_routing_callback, &helper); } else { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Could not find listener %s:%s for Channel %s\n", - switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance"), - switch_channel_get_name(channel)); + switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance"), + switch_channel_get_name(channel)); } /* Future bridge should go straight */ switch_set_flag_locked(tech_pvt, TFLAG_FORCE_ROUTE); @@ -777,16 +777,16 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_OFF); switch (helper->cause) { case SWITCH_CAUSE_UNALLOCATED_NUMBER: - send_start_tone(listener, SKINNY_TONE_REORDER, 0, line_instance, call_id); + send_start_tone(listener, SKINNY_TONE_REORDER, 0, line_instance, call_id); skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); send_display_prompt_status(listener, 0, SKINNY_DISP_UNKNOWN_NUMBER, line_instance, call_id); break; case SWITCH_CAUSE_USER_BUSY: - send_start_tone(listener, SKINNY_TONE_BUSYTONE, 0, line_instance, call_id); + send_start_tone(listener, SKINNY_TONE_BUSYTONE, 0, line_instance, call_id); send_display_prompt_status(listener, 0, SKINNY_DISP_BUSY, line_instance, call_id); - break; + break; case SWITCH_CAUSE_NORMAL_CLEARING: - send_clear_prompt_status(listener, line_instance, call_id); + send_clear_prompt_status(listener, line_instance, call_id); break; default: send_display_prompt_status(listener, 0, switch_channel_cause2str(helper->cause), line_instance, call_id); @@ -821,9 +821,9 @@ switch_status_t channel_on_hangup(switch_core_session_t *session) skinny_session_walk_lines(tech_pvt->profile, switch_core_session_get_uuid(session), channel_on_hangup_callback, &helper); if ((sql = switch_mprintf( - "DELETE FROM skinny_active_lines WHERE channel_uuid='%s'", - switch_core_session_get_uuid(session) - ))) { + "DELETE FROM skinny_active_lines WHERE channel_uuid='%s'", + switch_core_session_get_uuid(session) + ))) { skinny_execute_sql(tech_pvt->profile, sql, tech_pvt->profile->sql_mutex); switch_safe_free(sql); } @@ -836,16 +836,16 @@ switch_status_t channel_kill_channel(switch_core_session_t *session, int sig) private_t *tech_pvt = switch_core_session_get_private(session); switch (sig) { - case SWITCH_SIG_KILL: - switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); - break; - case SWITCH_SIG_BREAK: - if (switch_rtp_ready(tech_pvt->rtp_session)) { - switch_rtp_break(tech_pvt->rtp_session); - } - break; - default: - break; + case SWITCH_SIG_KILL: + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + break; + case SWITCH_SIG_BREAK: + if (switch_rtp_ready(tech_pvt->rtp_session)) { + switch_rtp_break(tech_pvt->rtp_session); + } + break; + default: + break; } switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s CHANNEL KILL %d\n", switch_channel_get_name(channel), sig); @@ -968,8 +968,8 @@ switch_status_t channel_answer_channel(switch_core_session_t *session) listener_t *listener = NULL; skinny_profile_find_listener_by_device_name_and_instance(tech_pvt->profile, - switch_channel_get_variable(channel, "skinny_device_name"), - atoi(switch_channel_get_variable(channel, "skinny_device_instance")), &listener); + switch_channel_get_variable(channel, "skinny_device_name"), + atoi(switch_channel_get_variable(channel, "skinny_device_instance")), &listener); if (listener) { int x = 0; skinny_session_start_media(session, listener, atoi(switch_channel_get_variable(channel, "skinny_line_instance"))); @@ -978,13 +978,13 @@ switch_status_t channel_answer_channel(switch_core_session_t *session) switch_cond_next(); if (++x > 1000) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Wait tooo long to answer %s:%s\n", - switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance")); + switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance")); return SWITCH_STATUS_FALSE; } } } else { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Unable to find listener to answer %s:%s\n", - switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance")); + switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance")); } return SWITCH_STATUS_SUCCESS; } @@ -995,24 +995,24 @@ switch_status_t channel_receive_message(switch_core_session_t *session, switch_c private_t *tech_pvt = switch_core_session_get_private(session); switch (msg->message_id) { - case SWITCH_MESSAGE_INDICATE_ANSWER: - switch_clear_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA); - return channel_answer_channel(session); - - case SWITCH_MESSAGE_INDICATE_DISPLAY: - skinny_session_send_call_info_all(session); - return SWITCH_STATUS_SUCCESS; - - case SWITCH_MESSAGE_INDICATE_PROGRESS: - if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) { - /* early media */ - switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA); + case SWITCH_MESSAGE_INDICATE_ANSWER: + switch_clear_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA); return channel_answer_channel(session); - } - return SWITCH_STATUS_SUCCESS; - default: - return SWITCH_STATUS_SUCCESS; + case SWITCH_MESSAGE_INDICATE_DISPLAY: + skinny_session_send_call_info_all(session); + return SWITCH_STATUS_SUCCESS; + + case SWITCH_MESSAGE_INDICATE_PROGRESS: + if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) { + /* early media */ + switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA); + return channel_answer_channel(session); + } + return SWITCH_STATUS_SUCCESS; + + default: + return SWITCH_STATUS_SUCCESS; } @@ -1020,10 +1020,10 @@ switch_status_t channel_receive_message(switch_core_session_t *session, switch_c /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines that allocate memory or you will have 1 channel with memory allocated from another channel's pool! -*/ + */ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event, - switch_caller_profile_t *outbound_profile, - switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause) + switch_caller_profile_t *outbound_profile, + switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause) { switch_call_cause_t cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; switch_core_session_t *nsession = NULL; @@ -1082,13 +1082,13 @@ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, swi tech_pvt->caller_profile = caller_profile; if ((sql = switch_mprintf( - "INSERT INTO skinny_active_lines " - "(device_name, device_instance, line_instance, channel_uuid, call_id, call_state) " - "SELECT device_name, device_instance, line_instance, '%s', %d, %d " - "FROM skinny_lines " - "WHERE value='%s'", - switch_core_session_get_uuid(nsession), tech_pvt->call_id, SKINNY_ON_HOOK, dest - ))) { + "INSERT INTO skinny_active_lines " + "(device_name, device_instance, line_instance, channel_uuid, call_id, call_state) " + "SELECT device_name, device_instance, line_instance, '%s', %d, %d " + "FROM skinny_lines " + "WHERE value='%s'", + switch_core_session_get_uuid(nsession), tech_pvt->call_id, SKINNY_ON_HOOK, dest + ))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } @@ -1098,7 +1098,7 @@ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, swi switch_channel_set_variable(switch_core_session_get_channel(session), SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(nsession)); switch_channel_set_variable(nchannel, SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(session)); } - + cause = skinny_ring_lines(tech_pvt, session); if(cause != SWITCH_CAUSE_SUCCESS) { @@ -1116,7 +1116,7 @@ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, swi cause = SWITCH_CAUSE_SUCCESS; goto done; - error: +error: if (nsession) { switch_core_session_destroy(&nsession); } @@ -1126,7 +1126,7 @@ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, swi } - done: +done: if (profile) { if (cause == SWITCH_CAUSE_SUCCESS) { @@ -1267,37 +1267,37 @@ static void flush_listener(listener_t *listener) char *sql; if ((sql = switch_mprintf( - "SELECT '%q', value, '%q', '%q', '%d' " - "FROM skinny_lines " - "WHERE device_name='%s' AND device_instance=%d " - "ORDER BY position", - profile->name, profile->domain, listener->device_name, listener->device_instance, - listener->device_name, listener->device_instance - ))) { + "SELECT '%q', value, '%q', '%q', '%d' " + "FROM skinny_lines " + "WHERE device_name='%s' AND device_instance=%d " + "ORDER BY position", + profile->name, profile->domain, listener->device_name, listener->device_instance, + listener->device_name, listener->device_instance + ))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, flush_listener_callback, NULL); switch_safe_free(sql); } if ((sql = switch_mprintf( - "DELETE FROM skinny_devices " - "WHERE name='%s' and instance=%d", - listener->device_name, listener->device_instance))) { + "DELETE FROM skinny_devices " + "WHERE name='%s' and instance=%d", + listener->device_name, listener->device_instance))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } if ((sql = switch_mprintf( - "DELETE FROM skinny_lines " - "WHERE device_name='%s' and device_instance=%d", - listener->device_name, listener->device_instance))) { + "DELETE FROM skinny_lines " + "WHERE device_name='%s' and device_instance=%d", + listener->device_name, listener->device_instance))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } if ((sql = switch_mprintf( - "DELETE FROM skinny_buttons " - "WHERE device_name='%s' and device_instance=%d", - listener->device_name, listener->device_instance))) { + "DELETE FROM skinny_buttons " + "WHERE device_name='%s' and device_instance=%d", + listener->device_name, listener->device_instance))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } @@ -1348,8 +1348,8 @@ switch_status_t dump_device(skinny_profile_t *profile, const char *device_name, { char *sql; if ((sql = switch_mprintf("SELECT name, user_id, instance, ip, type, max_streams, port, codec_string, headset, handset, speaker " - "FROM skinny_devices WHERE name='%s'", - device_name))) { + "FROM skinny_devices WHERE name='%s'", + device_name))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, dump_device_callback, stream); switch_safe_free(sql); } @@ -1372,7 +1372,7 @@ static void close_socket(switch_socket_t **sock, skinny_profile_t *profile) static switch_status_t kill_listener(listener_t *listener, void *pvt) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Killing listener %s:%d.\n", - listener->device_name, listener->device_instance); + listener->device_name, listener->device_instance); switch_clear_flag(listener, LFLAG_RUNNING); close_socket(&listener->sock, listener->profile); return SWITCH_STATUS_SUCCESS; @@ -1435,7 +1435,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj) switch(status) { case SWITCH_STATUS_TIMEOUT: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Communication Time Out with %s:%d.\n", - listener->remote_ip, listener->remote_port); + listener->remote_ip, listener->remote_port); if(listener->expire_time < switch_epoch_time_now(NULL)) { switch_event_t *event = NULL; @@ -1446,7 +1446,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj) break; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Communication Error with %s:%d.\n", - listener->remote_ip, listener->remote_port); + listener->remote_ip, listener->remote_port); } switch_clear_flag_locked(listener, LFLAG_RUNNING); break; @@ -1470,7 +1470,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj) if (listener->profile->debug > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Communication Complete with %s:%d.\n", - listener->remote_ip, listener->remote_port); + listener->remote_ip, listener->remote_port); } switch_thread_rwlock_wrlock(listener->rwlock); @@ -1484,7 +1484,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj) if (listener->profile->debug > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Communication Closed with %s:%d.\n", - listener->remote_ip, listener->remote_port); + listener->remote_ip, listener->remote_port); } if(destroy_pool == 0) { @@ -1559,7 +1559,7 @@ new_socket: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Socket up listening on %s:%u\n", profile->ip, profile->port); break; - sock_fail: +sock_fail: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Socket Error! Could not listen on %s:%u\n", profile->ip, profile->port); switch_yield(100000); } @@ -1622,7 +1622,7 @@ new_socket: } - end: +end: close_socket(&profile->sock, profile); @@ -1635,7 +1635,7 @@ new_socket: } - fail: +fail: return NULL; } @@ -1677,7 +1677,7 @@ switch_status_t skinny_profile_set(skinny_profile_t *profile, const char *var, c if (profile->sock && !strcasecmp(var, "odbc-dsn")) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Skinny profile setting 'odbc-dsn' can't be changed while running\n"); + "Skinny profile setting 'odbc-dsn' can't be changed while running\n"); return SWITCH_STATUS_FALSE; } @@ -1758,7 +1758,7 @@ static switch_status_t load_skinny_config(void) switch_xml_t xsettings, xdevice_types, xsoft_key_set_sets; if (zstr(profile_name)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - " is missing name attribute\n"); + " is missing name attribute\n"); continue; } if ((xsettings = switch_xml_child(xprofile, "settings"))) { @@ -1767,11 +1767,11 @@ static switch_status_t load_skinny_config(void) switch_core_db_t *db; skinny_profile_t *profile = NULL; switch_xml_t param; - - if (switch_core_new_memory_pool(&profile_pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n"); - return SWITCH_STATUS_TERM; - } + + if (switch_core_new_memory_pool(&profile_pool) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n"); + return SWITCH_STATUS_TERM; + } profile = switch_core_alloc(profile_pool, sizeof(skinny_profile_t)); profile->pool = profile_pool; profile->name = switch_core_strdup(profile->pool, profile_name); @@ -1780,17 +1780,17 @@ static switch_status_t load_skinny_config(void) switch_mutex_init(&profile->listener_mutex, SWITCH_MUTEX_NESTED, profile->pool); switch_mutex_init(&profile->sock_mutex, SWITCH_MUTEX_NESTED, profile->pool); switch_mutex_init(&profile->flag_mutex, SWITCH_MUTEX_NESTED, profile->pool); - + for (param = switch_xml_child(xsettings, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); if (skinny_profile_set(profile, var, val) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unable to set skinny setting '%s'. Does it exists?\n", var); + "Unable to set skinny setting '%s'. Does it exists?\n", var); } } /* param */ - + if (!profile->dialplan) { skinny_profile_set(profile, "dialplan","XML"); } @@ -1838,8 +1838,8 @@ static switch_status_t load_skinny_config(void) } if (soft_key_set_id > 15) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "soft-key-set name '%s' is greater than 15 in soft-key-set-set '%s' in profile %s.\n", - switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); + "soft-key-set name '%s' is greater than 15 in soft-key-set-set '%s' in profile %s.\n", + switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); continue; } for (string_pos = 0; string_pos <= string_len; string_pos++) { @@ -1847,8 +1847,8 @@ static switch_status_t load_skinny_config(void) val[string_pos] = '\0'; if (field_no > 15) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "soft-key-set name '%s' is limited to 16 buttons in soft-key-set-set '%s' in profile %s.\n", - switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); + "soft-key-set name '%s' is limited to 16 buttons in soft-key-set-set '%s' in profile %s.\n", + switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); break; } message->data.soft_key_set.soft_key_set[soft_key_set_id].soft_key_template_index[field_no++] = skinny_str2soft_key_event(&val[start]); @@ -1857,28 +1857,28 @@ static switch_status_t load_skinny_config(void) } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unknown soft-key-set name '%s' in soft-key-set-set '%s' in profile %s.\n", - switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); + "Unknown soft-key-set name '%s' in soft-key-set-set '%s' in profile %s.\n", + switch_xml_attr_soft(xsoft_key_set, "name"), soft_key_set_set_name, profile->name); } } /* soft-key-set */ - switch_core_hash_insert(profile->soft_key_set_sets_hash, soft_key_set_set_name, message); + switch_core_hash_insert(profile->soft_key_set_sets_hash, soft_key_set_set_name, message); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - " is missing a name attribute in profile %s.\n", profile->name); + " is missing a name attribute in profile %s.\n", profile->name); } } /* soft-key-set-set */ } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - " is missing in profile %s.\n", profile->name); + " is missing in profile %s.\n", profile->name); } /* soft-key-set-sets */ if (!switch_core_hash_find(profile->soft_key_set_sets_hash, "default")) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Profile %s doesn't have a default . Profile ignored.\n", profile->name); + "Profile %s doesn't have a default . Profile ignored.\n", profile->name); switch_core_destroy_memory_pool(&profile_pool); continue; } - - + + /* Device types */ switch_core_hash_init(&profile->device_type_params_hash, profile->pool); if ((xdevice_types = switch_xml_child(xprofile, "device-types"))) { @@ -1893,13 +1893,13 @@ static switch_status_t load_skinny_config(void) char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "firmware-version")) { - strncpy(params->firmware_version, val, 16); + strncpy(params->firmware_version, val, 16); } } /* param */ - switch_core_hash_insert(profile->device_type_params_hash, id_str, params); + switch_core_hash_insert(profile->device_type_params_hash, id_str, params); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unknow device type %s in profile %s.\n", switch_xml_attr_soft(xdevice_type, "id"), profile->name); + "Unknow device type %s in profile %s.\n", switch_xml_attr_soft(xdevice_type, "id"), profile->name); } } } @@ -1936,7 +1936,7 @@ static switch_status_t load_skinny_config(void) } switch_core_db_close(db); } - + skinny_execute_sql_callback(profile, profile->sql_mutex, "DELETE FROM skinny_devices", NULL, NULL); skinny_execute_sql_callback(profile, profile->sql_mutex, "DELETE FROM skinny_lines", NULL, NULL); skinny_execute_sql_callback(profile, profile->sql_mutex, "DELETE FROM skinny_buttons", NULL, NULL); @@ -1945,13 +1945,13 @@ static switch_status_t load_skinny_config(void) skinny_profile_respawn(profile, 0); /* Register profile */ - switch_mutex_lock(globals.mutex); - switch_core_hash_insert(globals.profile_hash, profile->name, profile); - switch_mutex_unlock(globals.mutex); + switch_mutex_lock(globals.mutex); + switch_core_hash_insert(globals.profile_hash, profile->name, profile); + switch_mutex_unlock(globals.mutex); profile = NULL; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Settings are missing from profile %s.\n", profile_name); + "Settings are missing from profile %s.\n", profile_name); } /* settings */ } /* profile */ } @@ -1991,26 +1991,26 @@ static void skinny_user_to_device_event_handler(switch_event_t *event) case USER_TO_DEVICE_DATA_MESSAGE: data_length = strlen(data); /* we ignore data_length sent */ send_data(listener, message_type, - application_id, line_instance, call_id, transaction_id, data_length, - data); + application_id, line_instance, call_id, transaction_id, data_length, + data); case USER_TO_DEVICE_DATA_VERSION1_MESSAGE: data_length = strlen(data); /* we ignore data_length sent */ send_extended_data(listener, message_type, - application_id, line_instance, call_id, transaction_id, data_length, - sequence_flag, display_priority, conference_id, app_instance_id, routing_id, - data); + application_id, line_instance, call_id, transaction_id, data_length, + sequence_flag, display_priority, conference_id, app_instance_id, routing_id, + data); break; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Incorrect message type %s (%d).\n", skinny_message_type2str(message_type), message_type); + "Incorrect message type %s (%d).\n", skinny_message_type2str(message_type), message_type); } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Device %s:%d in profile '%s' not found.\n", device_name, device_instance, profile_name); + "Device %s:%d in profile '%s' not found.\n", device_name, device_instance, profile_name); } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Profile '%s' not found.\n", profile_name); + "Profile '%s' not found.\n", profile_name); } } @@ -2032,41 +2032,41 @@ static void skinny_call_state_event_handler(switch_event_t *event) if ((profile = skinny_find_profile(profile_name))) { skinny_profile_find_listener_by_device_name_and_instance(profile, device_name, device_instance, &listener); - if(listener) { - if(line_instance > 0) { - line_instance_condition = switch_mprintf("line_instance=%d", line_instance); - } else { - line_instance_condition = switch_mprintf("1=1"); - } - switch_assert(line_instance_condition); - if(call_id > 0) { - call_id_condition = switch_mprintf("call_id=%d", call_id); - } else { - call_id_condition = switch_mprintf("1=1"); - } - switch_assert(call_id_condition); + if(listener) { + if(line_instance > 0) { + line_instance_condition = switch_mprintf("line_instance=%d", line_instance); + } else { + line_instance_condition = switch_mprintf("1=1"); + } + switch_assert(line_instance_condition); + if(call_id > 0) { + call_id_condition = switch_mprintf("call_id=%d", call_id); + } else { + call_id_condition = switch_mprintf("1=1"); + } + switch_assert(call_id_condition); - if ((sql = switch_mprintf( - "UPDATE skinny_active_lines " - "SET call_state=%d " - "WHERE device_name='%s' AND device_instance=%d " - "AND %s AND %s", - call_state, - listener->device_name, listener->device_instance, - line_instance_condition, call_id_condition - ))) { - skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); - switch_safe_free(sql); - } - switch_safe_free(line_instance_condition); - switch_safe_free(call_id_condition); + if ((sql = switch_mprintf( + "UPDATE skinny_active_lines " + "SET call_state=%d " + "WHERE device_name='%s' AND device_instance=%d " + "AND %s AND %s", + call_state, + listener->device_name, listener->device_instance, + line_instance_condition, call_id_condition + ))) { + skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); + switch_safe_free(sql); + } + switch_safe_free(line_instance_condition); + switch_safe_free(call_id_condition); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Device %s:%d in profile '%s' not found.\n", device_name, device_instance, profile_name); + "Device %s:%d in profile '%s' not found.\n", device_name, device_instance, profile_name); } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Profile '%s' not found.\n", profile_name); + "Profile '%s' not found.\n", profile_name); } } } @@ -2089,7 +2089,7 @@ int skinny_message_waiting_event_handler_callback(void *pArg, int argc, char **a listener_t *listener = NULL; skinny_profile_find_listener_by_device_name_and_instance(helper->profile, - device_name, device_instance, &listener); + device_name, device_instance, &listener); if (listener) { if (helper->yn == SWITCH_TRUE) { @@ -2143,15 +2143,15 @@ static void skinny_message_waiting_event_handler(switch_event_t *event) count_str = switch_event_get_header(event, "mwi-voice-message"); if ((sql = switch_mprintf( - "SELECT device_name, device_instance FROM skinny_lines " - "WHERE value='%s' AND line_instance=1", user))) { + "SELECT device_name, device_instance FROM skinny_lines " + "WHERE value='%s' AND line_instance=1", user))) { struct skinny_message_waiting_event_handler_helper helper = {0}; helper.profile = profile; helper.yn = switch_true(yn); if (count_str) { sscanf(count_str,"%d/%d (%d/%d)", - &helper.total_new_messages, &helper.total_saved_messages, - &helper.total_new_urgent_messages, &helper.total_saved_urgent_messages); + &helper.total_new_messages, &helper.total_saved_messages, + &helper.total_new_urgent_messages, &helper.total_saved_urgent_messages); } skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_message_waiting_event_handler_callback, &helper); switch_safe_free(sql); @@ -2285,7 +2285,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load) switch_hash_this(hi, NULL, NULL, &val); profile = (skinny_profile_t *) val; - + launch_skinny_profile_thread(profile); } switch_mutex_unlock(globals.mutex); @@ -2303,7 +2303,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skinny_shutdown) int sanity = 0; skinny_api_unregister(); - + /* release events */ switch_event_unbind(&globals.user_to_device_node); switch_event_unbind(&globals.call_state_node); diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.h b/src/mod/endpoints/mod_skinny/mod_skinny.h index eb7e45ebc0..2e4ec1c30a 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.h +++ b/src/mod/endpoints/mod_skinny/mod_skinny.h @@ -48,66 +48,66 @@ #define SKINNY_EVENT_DEVICE_TO_USER "skinny::device_to_user" struct skinny_globals { - int running; - switch_memory_pool_t *pool; - switch_mutex_t *mutex; - switch_hash_t *profile_hash; - switch_event_node_t *user_to_device_node; - switch_event_node_t *call_state_node; - switch_event_node_t *message_waiting_node; - switch_event_node_t *trap_node; - int auto_restart; + int running; + switch_memory_pool_t *pool; + switch_mutex_t *mutex; + switch_hash_t *profile_hash; + switch_event_node_t *user_to_device_node; + switch_event_node_t *call_state_node; + switch_event_node_t *message_waiting_node; + switch_event_node_t *trap_node; + int auto_restart; }; typedef struct skinny_globals skinny_globals_t; extern skinny_globals_t globals; typedef enum { - PFLAG_LISTENER_READY = (1 << 0), - PFLAG_SHOULD_RESPAWN = (1 << 1), - PFLAG_RESPAWN = (1 << 2), + PFLAG_LISTENER_READY = (1 << 0), + PFLAG_SHOULD_RESPAWN = (1 << 1), + PFLAG_RESPAWN = (1 << 2), } profile_flag_t; struct skinny_profile { - /* prefs */ - char *name; - char *domain; - char *ip; - unsigned int port; - char *dialplan; - char *context; - char *patterns_dialplan; - char *patterns_context; - uint32_t keep_alive; - char date_format[6]; - int debug; + /* prefs */ + char *name; + char *domain; + char *ip; + unsigned int port; + char *dialplan; + char *context; + char *patterns_dialplan; + char *patterns_context; + uint32_t keep_alive; + char date_format[6]; + int debug; int auto_restart; - switch_hash_t *soft_key_set_sets_hash; - switch_hash_t *device_type_params_hash; - /* db */ - char *dbname; - char *odbc_dsn; - char *odbc_user; - char *odbc_pass; - switch_odbc_handle_t *master_odbc; - switch_mutex_t *sql_mutex; - /* stats */ - uint32_t ib_calls; - uint32_t ob_calls; - uint32_t ib_failed_calls; - uint32_t ob_failed_calls; - /* listener */ - int listener_threads; - switch_mutex_t *listener_mutex; - switch_socket_t *sock; - switch_mutex_t *sock_mutex; - struct listener *listeners; - int flags; - switch_mutex_t *flag_mutex; - /* call id */ - uint32_t next_call_id; - /* others */ - switch_memory_pool_t *pool; + switch_hash_t *soft_key_set_sets_hash; + switch_hash_t *device_type_params_hash; + /* db */ + char *dbname; + char *odbc_dsn; + char *odbc_user; + char *odbc_pass; + switch_odbc_handle_t *master_odbc; + switch_mutex_t *sql_mutex; + /* stats */ + uint32_t ib_calls; + uint32_t ob_calls; + uint32_t ib_failed_calls; + uint32_t ob_failed_calls; + /* listener */ + int listener_threads; + switch_mutex_t *listener_mutex; + switch_socket_t *sock; + switch_mutex_t *sock_mutex; + struct listener *listeners; + int flags; + switch_mutex_t *flag_mutex; + /* call id */ + uint32_t next_call_id; + /* others */ + switch_memory_pool_t *pool; }; typedef struct skinny_profile skinny_profile_t; @@ -117,7 +117,7 @@ struct skinny_device_type_params { typedef struct skinny_device_type_params skinny_device_type_params_t; typedef enum { - SKINNY_ACTION_ROUTE, + SKINNY_ACTION_PROCESS, SKINNY_ACTION_DROP, SKINNY_ACTION_WAIT } skinny_action_t; @@ -127,7 +127,7 @@ typedef enum { /*****************************************************************************/ typedef enum { - LFLAG_RUNNING = (1 << 0), + LFLAG_RUNNING = (1 << 0), } listener_flag_t; #define SKINNY_MAX_LINES 42 @@ -161,25 +161,25 @@ typedef switch_status_t (*skinny_listener_callback_func_t) (listener_t *listener /* CHANNEL TYPES */ /*****************************************************************************/ typedef enum { - TFLAG_FORCE_ROUTE = (1 << 0), - TFLAG_EARLY_MEDIA = (1 << 1), - TFLAG_IO = (1 << 2), - TFLAG_READING = (1 << 3), - TFLAG_WRITING = (1 << 4) + TFLAG_FORCE_ROUTE = (1 << 0), + TFLAG_EARLY_MEDIA = (1 << 1), + TFLAG_IO = (1 << 2), + TFLAG_READING = (1 << 3), + TFLAG_WRITING = (1 << 4) } TFLAGS; typedef enum { - GFLAG_MY_CODEC_PREFS = (1 << 0) + GFLAG_MY_CODEC_PREFS = (1 << 0) } GFLAGS; struct private_object { unsigned int flags; + switch_mutex_t *flag_mutex; switch_frame_t read_frame; unsigned char databuf[SWITCH_RECOMMENDED_BUFFER_SIZE]; switch_core_session_t *session; switch_caller_profile_t *caller_profile; switch_mutex_t *mutex; - switch_mutex_t *flag_mutex; /* identification */ skinny_profile_t *profile; @@ -236,7 +236,7 @@ void profile_walk_listeners(skinny_profile_t *profile, skinny_listener_callback_ switch_cache_db_handle_t *skinny_get_db_handle(skinny_profile_t *profile); switch_status_t skinny_execute_sql(skinny_profile_t *profile, char *sql, switch_mutex_t *mutex); switch_bool_t skinny_execute_sql_callback(skinny_profile_t *profile, - switch_mutex_t *mutex, char *sql, switch_core_db_callback_func_t callback, void *pdata); + switch_mutex_t *mutex, char *sql, switch_core_db_callback_func_t callback, void *pdata); /*****************************************************************************/ /* LISTENER FUNCTIONS */ @@ -261,8 +261,8 @@ switch_status_t channel_on_routing(switch_core_session_t *session); switch_status_t channel_on_exchange_media(switch_core_session_t *session); switch_status_t channel_on_soft_execute(switch_core_session_t *session); switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event, - switch_caller_profile_t *outbound_profile, - switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause); + switch_caller_profile_t *outbound_profile, + switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause); switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id); switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id); switch_status_t channel_kill_channel(switch_core_session_t *session, int sig); diff --git a/src/mod/endpoints/mod_skinny/skinny_api.c b/src/mod/endpoints/mod_skinny/skinny_api.c index 7bbb27afd3..1b2c141341 100644 --- a/src/mod/endpoints/mod_skinny/skinny_api.c +++ b/src/mod/endpoints/mod_skinny/skinny_api.c @@ -41,202 +41,202 @@ static switch_status_t skinny_api_list_profiles(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_console_callback_match_t *my_matches = NULL; - switch_status_t status = SWITCH_STATUS_FALSE; - switch_hash_index_t *hi; - void *val; - skinny_profile_t *profile; + switch_console_callback_match_t *my_matches = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + switch_hash_index_t *hi; + void *val; + skinny_profile_t *profile; - /* walk profiles */ - switch_mutex_lock(globals.mutex); - for (hi = switch_hash_first(NULL, globals.profile_hash); hi; hi = switch_hash_next(hi)) { - switch_hash_this(hi, NULL, NULL, &val); - profile = (skinny_profile_t *) val; + /* walk profiles */ + switch_mutex_lock(globals.mutex); + for (hi = switch_hash_first(NULL, globals.profile_hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, NULL, NULL, &val); + profile = (skinny_profile_t *) val; - switch_console_push_match(&my_matches, profile->name); - } - switch_mutex_unlock(globals.mutex); + switch_console_push_match(&my_matches, profile->name); + } + switch_mutex_unlock(globals.mutex); - if (my_matches) { - *matches = my_matches; - status = SWITCH_STATUS_SUCCESS; - } + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } - return status; + return status; } struct match_helper { - switch_console_callback_match_t *my_matches; + switch_console_callback_match_t *my_matches; }; static int skinny_api_list_devices_callback(void *pArg, int argc, char **argv, char **columnNames) { - struct match_helper *h = (struct match_helper *) pArg; - char *device_name = argv[0]; + struct match_helper *h = (struct match_helper *) pArg; + char *device_name = argv[0]; - switch_console_push_match(&h->my_matches, device_name); - return 0; + switch_console_push_match(&h->my_matches, device_name); + return 0; } static switch_status_t skinny_api_list_devices(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - struct match_helper h = { 0 }; - switch_status_t status = SWITCH_STATUS_FALSE; - skinny_profile_t *profile = NULL; - char *sql; + struct match_helper h = { 0 }; + switch_status_t status = SWITCH_STATUS_FALSE; + skinny_profile_t *profile = NULL; + char *sql; - char *myline; - char *argv[1024] = { 0 }; - int argc = 0; + char *myline; + char *argv[1024] = { 0 }; + int argc = 0; - if (!(myline = strdup(line))) { - status = SWITCH_STATUS_MEMERR; - return status; - } - if (!(argc = switch_separate_string(myline, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) || argc < 4) { - return status; - } + if (!(myline = strdup(line))) { + status = SWITCH_STATUS_MEMERR; + return status; + } + if (!(argc = switch_separate_string(myline, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) || argc < 4) { + return status; + } - if(!strcasecmp(argv[1], "profile")) {/* skinny profile ... */ - profile = skinny_find_profile(argv[2]); - } else if(!strcasecmp(argv[2], "profile")) {/* skinny status profile ... */ - profile = skinny_find_profile(argv[3]); - } + if(!strcasecmp(argv[1], "profile")) {/* skinny profile ... */ + profile = skinny_find_profile(argv[2]); + } else if(!strcasecmp(argv[2], "profile")) {/* skinny status profile ... */ + profile = skinny_find_profile(argv[3]); + } - if(profile) { - if ((sql = switch_mprintf("SELECT name FROM skinny_devices"))) { - skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_api_list_devices_callback, &h); - switch_safe_free(sql); - } - } + if(profile) { + if ((sql = switch_mprintf("SELECT name FROM skinny_devices"))) { + skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_api_list_devices_callback, &h); + switch_safe_free(sql); + } + } - if (h.my_matches) { - *matches = h.my_matches; - status = SWITCH_STATUS_SUCCESS; - } + if (h.my_matches) { + *matches = h.my_matches; + status = SWITCH_STATUS_SUCCESS; + } - return status; + return status; } static switch_status_t skinny_api_list_reset_types(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_DEVICE_RESET_TYPES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_DEVICE_RESET_TYPES + return status; } static switch_status_t skinny_api_list_stimuli(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_STIMULI - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_STIMULI + return status; } static switch_status_t skinny_api_list_ring_types(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_RING_TYPES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_RING_TYPES + return status; } static switch_status_t skinny_api_list_ring_modes(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_RING_MODES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_RING_MODES + return status; } static switch_status_t skinny_api_list_stimulus_instances(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - switch_console_callback_match_t *my_matches = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + switch_console_callback_match_t *my_matches = NULL; - switch_console_push_match(&my_matches, ""); - switch_console_push_match(&my_matches, "0"); + switch_console_push_match(&my_matches, ""); + switch_console_push_match(&my_matches, "0"); - if (my_matches) { - *matches = my_matches; - status = SWITCH_STATUS_SUCCESS; - } - return status; + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } + return status; } static switch_status_t skinny_api_list_stimulus_modes(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_LAMP_MODES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_LAMP_MODES + return status; } static switch_status_t skinny_api_list_speaker_modes(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_SPEAKER_MODES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_SPEAKER_MODES + return status; } static switch_status_t skinny_api_list_call_states(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - SKINNY_PUSH_CALL_STATES - return status; + switch_status_t status = SWITCH_STATUS_FALSE; + SKINNY_PUSH_CALL_STATES + return status; } static switch_status_t skinny_api_list_line_instances(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - switch_console_callback_match_t *my_matches = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + switch_console_callback_match_t *my_matches = NULL; - /* TODO */ - switch_console_push_match(&my_matches, "1"); - switch_console_push_match(&my_matches, ""); + /* TODO */ + switch_console_push_match(&my_matches, "1"); + switch_console_push_match(&my_matches, ""); - if (my_matches) { - *matches = my_matches; - status = SWITCH_STATUS_SUCCESS; - } - return status; + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } + return status; } static switch_status_t skinny_api_list_call_ids(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - switch_console_callback_match_t *my_matches = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + switch_console_callback_match_t *my_matches = NULL; - /* TODO */ - switch_console_push_match(&my_matches, "1345"); - switch_console_push_match(&my_matches, ""); + /* TODO */ + switch_console_push_match(&my_matches, "1345"); + switch_console_push_match(&my_matches, ""); - if (my_matches) { - *matches = my_matches; - status = SWITCH_STATUS_SUCCESS; - } - return status; + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } + return status; } static switch_status_t skinny_api_list_settings(const char *line, const char *cursor, switch_console_callback_match_t **matches) { - switch_status_t status = SWITCH_STATUS_FALSE; - switch_console_callback_match_t *my_matches = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + switch_console_callback_match_t *my_matches = NULL; - switch_console_push_match(&my_matches, "domain"); - switch_console_push_match(&my_matches, "ip"); - switch_console_push_match(&my_matches, "port"); - switch_console_push_match(&my_matches, "patterns-dialplan"); - switch_console_push_match(&my_matches, "patterns-context"); - switch_console_push_match(&my_matches, "dialplan"); - switch_console_push_match(&my_matches, "context"); - switch_console_push_match(&my_matches, "keep-alive"); - switch_console_push_match(&my_matches, "date-format"); - switch_console_push_match(&my_matches, "odbc-dsn"); - switch_console_push_match(&my_matches, "debug"); - switch_console_push_match(&my_matches, "auto-restart"); + switch_console_push_match(&my_matches, "domain"); + switch_console_push_match(&my_matches, "ip"); + switch_console_push_match(&my_matches, "port"); + switch_console_push_match(&my_matches, "patterns-dialplan"); + switch_console_push_match(&my_matches, "patterns-context"); + switch_console_push_match(&my_matches, "dialplan"); + switch_console_push_match(&my_matches, "context"); + switch_console_push_match(&my_matches, "keep-alive"); + switch_console_push_match(&my_matches, "date-format"); + switch_console_push_match(&my_matches, "odbc-dsn"); + switch_console_push_match(&my_matches, "debug"); + switch_console_push_match(&my_matches, "auto-restart"); - if (my_matches) { - *matches = my_matches; - status = SWITCH_STATUS_SUCCESS; - } - return status; + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } + return status; } /*****************************************************************************/ @@ -244,136 +244,136 @@ static switch_status_t skinny_api_list_settings(const char *line, const char *cu /*****************************************************************************/ static switch_status_t skinny_api_cmd_status_profile(const char *profile_name, switch_stream_handle_t *stream) { - skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - skinny_profile_dump(profile, stream); - } else { - stream->write_function(stream, "Profile not found!\n"); - } + skinny_profile_t *profile; + if ((profile = skinny_find_profile(profile_name))) { + skinny_profile_dump(profile, stream); + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_status_profile_device(const char *profile_name, const char *device_name, switch_stream_handle_t *stream) { - skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - dump_device(profile, device_name, stream); - } else { - stream->write_function(stream, "Profile not found!\n"); - } + skinny_profile_t *profile; + if ((profile = skinny_find_profile(profile_name))) { + dump_device(profile, device_name, stream); + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_ringer_message(const char *profile_name, const char *device_name, const char *ring_type, const char *ring_mode, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { - send_set_ringer(listener, skinny_str2ring_type(ring_type), skinny_str2ring_mode(ring_mode), 0, 0); + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { + send_set_ringer(listener, skinny_str2ring_type(ring_type), skinny_str2ring_mode(ring_mode), 0, 0); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_lamp_message(const char *profile_name, const char *device_name, const char *stimulus, const char *instance, const char *lamp_mode, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { - send_set_lamp(listener, skinny_str2button(stimulus), atoi(instance), skinny_str2lamp_mode(lamp_mode)); + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { + send_set_lamp(listener, skinny_str2button(stimulus), atoi(instance), skinny_str2lamp_mode(lamp_mode)); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_speaker_mode_message(const char *profile_name, const char *device_name, const char *speaker_mode, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { - send_set_speaker_mode(listener, skinny_str2speaker_mode(speaker_mode)); + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { + send_set_speaker_mode(listener, skinny_str2speaker_mode(speaker_mode)); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_call_state_message(const char *profile_name, const char *device_name, const char *call_state, const char *line_instance, const char *call_id, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { - send_call_state(listener, skinny_str2call_state(call_state), atoi(line_instance), atoi(call_id)); + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { + send_call_state(listener, skinny_str2call_state(call_state), atoi(line_instance), atoi(call_id)); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_reset_message(const char *profile_name, const char *device_name, const char *reset_type, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { - send_reset(listener, skinny_str2device_reset_type(reset_type)); + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { + send_reset(listener, skinny_str2device_reset_type(reset_type)); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_device_send_data(const char *profile_name, const char *device_name, const char *message_type, char *params, const char *body, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - listener_t *listener = NULL; - skinny_profile_find_listener_by_device_name(profile, device_name, &listener); - if(listener) { + if ((profile = skinny_find_profile(profile_name))) { + listener_t *listener = NULL; + skinny_profile_find_listener_by_device_name(profile, device_name, &listener); + if(listener) { switch_event_t *event = NULL; char *argv[64] = { 0 }; int argc = 0; @@ -395,49 +395,49 @@ static switch_status_t skinny_api_cmd_profile_device_send_data(const char *profi switch_event_add_header(event, SWITCH_STACK_BOTTOM, tmp, "%s", var_value); switch_safe_free(tmp); /* - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Application-Id", "%d", request->data.extended_data.application_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Line-Instance", "%d", request->data.extended_data.line_instance); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Call-Id", "%d", request->data.extended_data.call_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Transaction-Id", "%d", request->data.extended_data.transaction_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Data-Length", "%d", request->data.extended_data.data_length); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Sequence-Flag", "%d", request->data.extended_data.sequence_flag); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Display-Priority", "%d", request->data.extended_data.display_priority); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Conference-Id", "%d", request->data.extended_data.conference_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-App-Instance-Id", "%d", request->data.extended_data.app_instance_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Routing-Id", "%d", request->data.extended_data.routing_id); - */ + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Application-Id", "%d", request->data.extended_data.application_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Line-Instance", "%d", request->data.extended_data.line_instance); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Call-Id", "%d", request->data.extended_data.call_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Transaction-Id", "%d", request->data.extended_data.transaction_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Data-Length", "%d", request->data.extended_data.data_length); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Sequence-Flag", "%d", request->data.extended_data.sequence_flag); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Display-Priority", "%d", request->data.extended_data.display_priority); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Conference-Id", "%d", request->data.extended_data.conference_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-App-Instance-Id", "%d", request->data.extended_data.app_instance_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-UserToDevice-Routing-Id", "%d", request->data.extended_data.routing_id); + */ } } switch_event_add_body(event, "%s", body); switch_event_fire(&event); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Listener not found!\n"); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Listener not found!\n"); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } static switch_status_t skinny_api_cmd_profile_set(const char *profile_name, const char *name, const char *value, switch_stream_handle_t *stream) { - skinny_profile_t *profile; + skinny_profile_t *profile; - if ((profile = skinny_find_profile(profile_name))) { - if (skinny_profile_set(profile, name, value) == SWITCH_STATUS_SUCCESS) { + if ((profile = skinny_find_profile(profile_name))) { + if (skinny_profile_set(profile, name, value) == SWITCH_STATUS_SUCCESS) { skinny_profile_respawn(profile, 0); stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "Unable to set skinny setting '%s'. Does it exists?\n", name); - } - } else { - stream->write_function(stream, "Profile not found!\n"); - } + } else { + stream->write_function(stream, "Unable to set skinny setting '%s'. Does it exists?\n", name); + } + } else { + stream->write_function(stream, "Profile not found!\n"); + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } /*****************************************************************************/ @@ -445,148 +445,148 @@ static switch_status_t skinny_api_cmd_profile_set(const char *profile_name, cons /*****************************************************************************/ SWITCH_STANDARD_API(skinny_function) { - char *argv[1024] = { 0 }; - int argc = 0; - char *mycmd = NULL; - switch_status_t status = SWITCH_STATUS_SUCCESS; - const char *usage_string = "USAGE:\n" - "--------------------------------------------------------------------------------\n" - "skinny help\n" - "skinny status profile \n" - "skinny status profile device \n" - "skinny profile device send ResetMessage [DeviceReset|DeviceRestart]\n" - "skinny profile device send SetRingerMessage \n" - "skinny profile device send SetLampMessage \n" - "skinny profile device send SetSpeakerModeMessage \n" - "skinny profile device send CallStateMessage \n" - "skinny profile device send [ =;... ] \n" - "skinny profile set \n" - "--------------------------------------------------------------------------------\n"; - if (session) { - return SWITCH_STATUS_FALSE; - } + char *argv[1024] = { 0 }; + int argc = 0; + char *mycmd = NULL; + switch_status_t status = SWITCH_STATUS_SUCCESS; + const char *usage_string = "USAGE:\n" + "--------------------------------------------------------------------------------\n" + "skinny help\n" + "skinny status profile \n" + "skinny status profile device \n" + "skinny profile device send ResetMessage [DeviceReset|DeviceRestart]\n" + "skinny profile device send SetRingerMessage \n" + "skinny profile device send SetLampMessage \n" + "skinny profile device send SetSpeakerModeMessage \n" + "skinny profile device send CallStateMessage \n" + "skinny profile device send [ =;... ] \n" + "skinny profile set \n" + "--------------------------------------------------------------------------------\n"; + if (session) { + return SWITCH_STATUS_FALSE; + } - if (zstr(cmd)) { - stream->write_function(stream, "%s", usage_string); - goto done; - } + if (zstr(cmd)) { + stream->write_function(stream, "%s", usage_string); + goto done; + } - if (!(mycmd = strdup(cmd))) { - status = SWITCH_STATUS_MEMERR; - goto done; - } + if (!(mycmd = strdup(cmd))) { + status = SWITCH_STATUS_MEMERR; + goto done; + } - if (!(argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) || !argv[0]) { - stream->write_function(stream, "%s", usage_string); - goto done; - } + if (!(argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) || !argv[0]) { + stream->write_function(stream, "%s", usage_string); + goto done; + } - if (!strcasecmp(argv[0], "help")) {/* skinny help */ - stream->write_function(stream, "%s", usage_string); - } else if (argc == 3 && !strcasecmp(argv[0], "status") && !strcasecmp(argv[1], "profile")) { - /* skinny status profile */ - status = skinny_api_cmd_status_profile(argv[2], stream); - } else if (argc == 5 && !strcasecmp(argv[0], "status") && !strcasecmp(argv[1], "profile") && !strcasecmp(argv[3], "device")) { - /* skinny status profile device */ - status = skinny_api_cmd_status_profile_device(argv[2], argv[4], stream); - } else if (argc >= 6 && !strcasecmp(argv[0], "profile") && !strcasecmp(argv[2], "device") && !strcasecmp(argv[4], "send")) { - /* skinny profile device send ... */ - switch(skinny_str2message_type(argv[5])) { - case SET_RINGER_MESSAGE: - if(argc == 8) { - /* SetRingerMessage */ - status = skinny_api_cmd_profile_device_send_ringer_message(argv[1], argv[3], argv[6], argv[7], stream); - } - break; - case SET_LAMP_MESSAGE: - if (argc == 9) { - /* SetLampMessage */ - status = skinny_api_cmd_profile_device_send_lamp_message(argv[1], argv[3], argv[6], argv[7], argv[8], stream); - } - break; - case SET_SPEAKER_MODE_MESSAGE: - if (argc == 7) { - /* SetSpeakerModeMessage */ - status = skinny_api_cmd_profile_device_send_speaker_mode_message(argv[1], argv[3], argv[6], stream); - } - break; - case CALL_STATE_MESSAGE: - if (argc == 9) { - /* CallStateMessage */ - status = skinny_api_cmd_profile_device_send_call_state_message(argv[1], argv[3], argv[6], argv[7], argv[8], stream); - } - break; - case RESET_MESSAGE: - if (argc == 7) { - /* ResetMessage */ - status = skinny_api_cmd_profile_device_send_reset_message(argv[1], argv[3], argv[6], stream); - } - break; + if (!strcasecmp(argv[0], "help")) {/* skinny help */ + stream->write_function(stream, "%s", usage_string); + } else if (argc == 3 && !strcasecmp(argv[0], "status") && !strcasecmp(argv[1], "profile")) { + /* skinny status profile */ + status = skinny_api_cmd_status_profile(argv[2], stream); + } else if (argc == 5 && !strcasecmp(argv[0], "status") && !strcasecmp(argv[1], "profile") && !strcasecmp(argv[3], "device")) { + /* skinny status profile device */ + status = skinny_api_cmd_status_profile_device(argv[2], argv[4], stream); + } else if (argc >= 6 && !strcasecmp(argv[0], "profile") && !strcasecmp(argv[2], "device") && !strcasecmp(argv[4], "send")) { + /* skinny profile device send ... */ + switch(skinny_str2message_type(argv[5])) { + case SET_RINGER_MESSAGE: + if(argc == 8) { + /* SetRingerMessage */ + status = skinny_api_cmd_profile_device_send_ringer_message(argv[1], argv[3], argv[6], argv[7], stream); + } + break; + case SET_LAMP_MESSAGE: + if (argc == 9) { + /* SetLampMessage */ + status = skinny_api_cmd_profile_device_send_lamp_message(argv[1], argv[3], argv[6], argv[7], argv[8], stream); + } + break; + case SET_SPEAKER_MODE_MESSAGE: + if (argc == 7) { + /* SetSpeakerModeMessage */ + status = skinny_api_cmd_profile_device_send_speaker_mode_message(argv[1], argv[3], argv[6], stream); + } + break; + case CALL_STATE_MESSAGE: + if (argc == 9) { + /* CallStateMessage */ + status = skinny_api_cmd_profile_device_send_call_state_message(argv[1], argv[3], argv[6], argv[7], argv[8], stream); + } + break; + case RESET_MESSAGE: + if (argc == 7) { + /* ResetMessage */ + status = skinny_api_cmd_profile_device_send_reset_message(argv[1], argv[3], argv[6], stream); + } + break; case USER_TO_DEVICE_DATA_MESSAGE: case USER_TO_DEVICE_DATA_VERSION1_MESSAGE: - if(argc == 8) { + if(argc == 8) { /* [ =;... ] */ status = skinny_api_cmd_profile_device_send_data(argv[1], argv[3], argv[5], argv[6], argv[7], stream); - } else if(argc == 7) { + } else if(argc == 7) { /* */ status = skinny_api_cmd_profile_device_send_data(argv[1], argv[3], argv[5], "", argv[6], stream); } - break; - default: - stream->write_function(stream, "Unhandled message %s\n", argv[5]); - } - } else if (argc == 5 && !strcasecmp(argv[0], "profile") && !strcasecmp(argv[2], "set")) { - /* skinny profile set */ - status = skinny_api_cmd_profile_set(argv[1], argv[3], argv[4], stream); - } else { - stream->write_function(stream, "%s", usage_string); - } + break; + default: + stream->write_function(stream, "Unhandled message %s\n", argv[5]); + } + } else if (argc == 5 && !strcasecmp(argv[0], "profile") && !strcasecmp(argv[2], "set")) { + /* skinny profile set */ + status = skinny_api_cmd_profile_set(argv[1], argv[3], argv[4], stream); + } else { + stream->write_function(stream, "%s", usage_string); + } done: - switch_safe_free(mycmd); - return status; + switch_safe_free(mycmd); + return status; } switch_status_t skinny_api_register(switch_loadable_module_interface_t **module_interface) { - switch_api_interface_t *api_interface; + switch_api_interface_t *api_interface; - SWITCH_ADD_API(api_interface, "skinny", "Skinny Controls", skinny_function, " "); - switch_console_set_complete("add skinny help"); + SWITCH_ADD_API(api_interface, "skinny", "Skinny Controls", skinny_function, " "); + switch_console_set_complete("add skinny help"); - switch_console_set_complete("add skinny status profile ::skinny::list_profiles"); - switch_console_set_complete("add skinny status profile ::skinny::list_profiles device ::skinny::list_devices"); + switch_console_set_complete("add skinny status profile ::skinny::list_profiles"); + switch_console_set_complete("add skinny status profile ::skinny::list_profiles device ::skinny::list_devices"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send ResetMessage ::skinny::list_reset_types"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetRingerMessage ::skinny::list_ring_types ::skinny::list_ring_modes"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetLampMessage ::skinny::list_stimuli ::skinny::list_stimulus_instances ::skinny::list_stimulus_modes"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetSpeakerModeMessage ::skinny::list_speaker_modes"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send CallStateMessage ::skinny::list_call_states ::skinny::list_line_instances ::skinny::list_call_ids"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send UserToDeviceDataMessage"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send UserToDeviceDataVersion1Message"); - switch_console_set_complete("add skinny profile ::skinny::list_profiles set ::skinny::list_settings"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send ResetMessage ::skinny::list_reset_types"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetRingerMessage ::skinny::list_ring_types ::skinny::list_ring_modes"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetLampMessage ::skinny::list_stimuli ::skinny::list_stimulus_instances ::skinny::list_stimulus_modes"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send SetSpeakerModeMessage ::skinny::list_speaker_modes"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send CallStateMessage ::skinny::list_call_states ::skinny::list_line_instances ::skinny::list_call_ids"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send UserToDeviceDataMessage"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles device ::skinny::list_devices send UserToDeviceDataVersion1Message"); + switch_console_set_complete("add skinny profile ::skinny::list_profiles set ::skinny::list_settings"); - switch_console_add_complete_func("::skinny::list_profiles", skinny_api_list_profiles); - switch_console_add_complete_func("::skinny::list_devices", skinny_api_list_devices); - switch_console_add_complete_func("::skinny::list_reset_types", skinny_api_list_reset_types); - switch_console_add_complete_func("::skinny::list_ring_types", skinny_api_list_ring_types); - switch_console_add_complete_func("::skinny::list_ring_modes", skinny_api_list_ring_modes); - switch_console_add_complete_func("::skinny::list_stimuli", skinny_api_list_stimuli); - switch_console_add_complete_func("::skinny::list_stimulus_instances", skinny_api_list_stimulus_instances); - switch_console_add_complete_func("::skinny::list_stimulus_modes", skinny_api_list_stimulus_modes); - switch_console_add_complete_func("::skinny::list_speaker_modes", skinny_api_list_speaker_modes); - switch_console_add_complete_func("::skinny::list_call_states", skinny_api_list_call_states); - switch_console_add_complete_func("::skinny::list_line_instances", skinny_api_list_line_instances); - switch_console_add_complete_func("::skinny::list_call_ids", skinny_api_list_call_ids); - switch_console_add_complete_func("::skinny::list_settings", skinny_api_list_settings); - return SWITCH_STATUS_SUCCESS; + switch_console_add_complete_func("::skinny::list_profiles", skinny_api_list_profiles); + switch_console_add_complete_func("::skinny::list_devices", skinny_api_list_devices); + switch_console_add_complete_func("::skinny::list_reset_types", skinny_api_list_reset_types); + switch_console_add_complete_func("::skinny::list_ring_types", skinny_api_list_ring_types); + switch_console_add_complete_func("::skinny::list_ring_modes", skinny_api_list_ring_modes); + switch_console_add_complete_func("::skinny::list_stimuli", skinny_api_list_stimuli); + switch_console_add_complete_func("::skinny::list_stimulus_instances", skinny_api_list_stimulus_instances); + switch_console_add_complete_func("::skinny::list_stimulus_modes", skinny_api_list_stimulus_modes); + switch_console_add_complete_func("::skinny::list_speaker_modes", skinny_api_list_speaker_modes); + switch_console_add_complete_func("::skinny::list_call_states", skinny_api_list_call_states); + switch_console_add_complete_func("::skinny::list_line_instances", skinny_api_list_line_instances); + switch_console_add_complete_func("::skinny::list_call_ids", skinny_api_list_call_ids); + switch_console_add_complete_func("::skinny::list_settings", skinny_api_list_settings); + return SWITCH_STATUS_SUCCESS; } switch_status_t skinny_api_unregister() { switch_console_set_complete("del skinny"); - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } /* For Emacs: diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.c b/src/mod/endpoints/mod_skinny/skinny_protocol.c index 4c09c70176..da642c1cfa 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.c +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.c @@ -149,26 +149,26 @@ switch_status_t skinny_read_packet(listener_t *listener, skinny_message_t **req) if(mlen) { bytes += mlen; - + if(bytes >= SKINNY_MESSAGE_FIELD_SIZE) { do_sleep = 0; ptr += mlen; memcpy(request, mbuf, bytes); #ifdef SKINNY_MEGA_DEBUG switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "Got request: length=%d,reserved=%x,type=%x\n", - request->length,request->reserved,request->type); + "Got request: length=%d,reserved=%x,type=%x\n", + request->length,request->reserved,request->type); #endif if(request->length < SKINNY_MESSAGE_FIELD_SIZE) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Skinny client sent invalid data. Length should be greater than 4 but got %d.\n", - request->length); + "Skinny client sent invalid data. Length should be greater than 4 but got %d.\n", + request->length); return SWITCH_STATUS_FALSE; } if(request->length + 2*SKINNY_MESSAGE_FIELD_SIZE > SKINNY_MESSAGE_MAXSIZE) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Skinny client sent too huge data. Got %d which is above threshold %d.\n", - request->length, SKINNY_MESSAGE_MAXSIZE - 2*SKINNY_MESSAGE_FIELD_SIZE); + "Skinny client sent too huge data. Got %d which is above threshold %d.\n", + request->length, SKINNY_MESSAGE_MAXSIZE - 2*SKINNY_MESSAGE_FIELD_SIZE); return SWITCH_STATUS_FALSE; } if(bytes >= request->length + 2*SKINNY_MESSAGE_FIELD_SIZE) { @@ -224,10 +224,10 @@ switch_status_t skinny_device_event(listener_t *listener, switch_event_t **ev, s switch_event_create_subclass(&event, event_id, subclass_name); switch_assert(event); if ((sql = switch_mprintf("SELECT '%s', name, user_id, instance, ip, type, max_streams, port, codec_string " - "FROM skinny_devices " - "WHERE name='%s' AND instance=%d", - listener->profile->name, - listener->device_name, listener->device_instance))) { + "FROM skinny_devices " + "WHERE name='%s' AND instance=%d", + listener->profile->name, + listener->device_name, listener->device_instance))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_device_event_callback, event); switch_safe_free(sql); } @@ -243,14 +243,14 @@ switch_status_t skinny_session_walk_lines(skinny_profile_t *profile, char *chann { char *sql; if ((sql = switch_mprintf( - "SELECT skinny_lines.*, channel_uuid, call_id, call_state " - "FROM skinny_active_lines " - "INNER JOIN skinny_lines " - "ON skinny_active_lines.device_name = skinny_lines.device_name " - "AND skinny_active_lines.device_instance = skinny_lines.device_instance " - "AND skinny_active_lines.line_instance = skinny_lines.line_instance " - "WHERE channel_uuid='%s'", - channel_uuid))) { + "SELECT skinny_lines.*, channel_uuid, call_id, call_state " + "FROM skinny_active_lines " + "INNER JOIN skinny_lines " + "ON skinny_active_lines.device_name = skinny_lines.device_name " + "AND skinny_active_lines.device_instance = skinny_lines.device_instance " + "AND skinny_active_lines.line_instance = skinny_lines.line_instance " + "WHERE channel_uuid='%s'", + channel_uuid))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, callback, data); switch_safe_free(sql); } @@ -261,14 +261,14 @@ switch_status_t skinny_session_walk_lines_by_call_id(skinny_profile_t *profile, { char *sql; if ((sql = switch_mprintf( - "SELECT skinny_lines.*, channel_uuid, call_id, call_state " - "FROM skinny_active_lines " - "INNER JOIN skinny_lines " - "ON skinny_active_lines.device_name = skinny_lines.device_name " - "AND skinny_active_lines.device_instance = skinny_lines.device_instance " - "AND skinny_active_lines.line_instance = skinny_lines.line_instance " - "WHERE call_id='%d'", - call_id))) { + "SELECT skinny_lines.*, channel_uuid, call_id, call_state " + "FROM skinny_active_lines " + "INNER JOIN skinny_lines " + "ON skinny_active_lines.device_name = skinny_lines.device_name " + "AND skinny_active_lines.device_instance = skinny_lines.device_instance " + "AND skinny_active_lines.line_instance = skinny_lines.line_instance " + "WHERE call_id='%d'", + call_id))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, callback, data); switch_safe_free(sql); } @@ -309,13 +309,13 @@ void skinny_line_get(listener_t *listener, uint32_t instance, struct line_stat_r helper.button = switch_core_alloc(listener->pool, sizeof(struct line_stat_res_message)); if ((sql = switch_mprintf( - "SELECT '%d' AS wanted_position, position, label, value, caller_name " - "FROM skinny_lines " - "WHERE device_name='%s' AND device_instance=%d " - "ORDER BY position", - instance, - listener->device_name, listener->device_instance - ))) { + "SELECT '%d' AS wanted_position, position, label, value, caller_name " + "FROM skinny_lines " + "WHERE device_name='%s' AND device_instance=%d " + "ORDER BY position", + instance, + listener->device_name, listener->device_instance + ))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_line_get_callback, &helper); switch_safe_free(sql); } @@ -352,14 +352,14 @@ void skinny_speed_dial_get(listener_t *listener, uint32_t instance, struct speed helper.button = switch_core_alloc(listener->pool, sizeof(struct speed_dial_stat_res_message)); if ((sql = switch_mprintf( - "SELECT '%d' AS wanted_position, position, label, value, settings " - "FROM skinny_buttons " - "WHERE device_name='%s' AND device_instance=%d AND type=%d " - "ORDER BY position", - instance, - listener->device_name, listener->device_instance, - SKINNY_BUTTON_SPEED_DIAL - ))) { + "SELECT '%d' AS wanted_position, position, label, value, settings " + "FROM skinny_buttons " + "WHERE device_name='%s' AND device_instance=%d AND type=%d " + "ORDER BY position", + instance, + listener->device_name, listener->device_instance, + SKINNY_BUTTON_SPEED_DIAL + ))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_speed_dial_get_callback, &helper); switch_safe_free(sql); } @@ -396,15 +396,15 @@ void skinny_service_url_get(listener_t *listener, uint32_t instance, struct serv helper.button = switch_core_alloc(listener->pool, sizeof(struct service_url_stat_res_message)); if ((sql = switch_mprintf( - "SELECT '%d' AS wanted_position, position, label, value, settings " - "FROM skinny_buttons " - "WHERE device_name='%s' AND device_instance=%d AND type=%d " - "ORDER BY position", - instance, - listener->device_name, - listener->device_instance, - SKINNY_BUTTON_SERVICE_URL - ))) { + "SELECT '%d' AS wanted_position, position, label, value, settings " + "FROM skinny_buttons " + "WHERE device_name='%s' AND device_instance=%d AND type=%d " + "ORDER BY position", + instance, + listener->device_name, + listener->device_instance, + SKINNY_BUTTON_SERVICE_URL + ))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_service_url_get_callback, &helper); switch_safe_free(sql); } @@ -442,15 +442,15 @@ void skinny_feature_get(listener_t *listener, uint32_t instance, struct feature_ helper.button = switch_core_alloc(listener->pool, sizeof(struct feature_stat_res_message)); if ((sql = switch_mprintf( - "SELECT '%d' AS wanted_position, position, label, value, settings " - "FROM skinny_buttons " - "WHERE device_name='%s' AND device_instance=%d AND NOT (type=%d OR type=%d) " - "ORDER BY position", - instance, - listener->device_name, - listener->device_instance, - SKINNY_BUTTON_SPEED_DIAL, SKINNY_BUTTON_SERVICE_URL - ))) { + "SELECT '%d' AS wanted_position, position, label, value, settings " + "FROM skinny_buttons " + "WHERE device_name='%s' AND device_instance=%d AND NOT (type=%d OR type=%d) " + "ORDER BY position", + instance, + listener->device_name, + listener->device_instance, + SKINNY_BUTTON_SPEED_DIAL, SKINNY_BUTTON_SERVICE_URL + ))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_feature_get_callback, &helper); switch_safe_free(sql); } @@ -461,11 +461,11 @@ void skinny_feature_get(listener_t *listener, uint32_t instance, struct feature_ /* SKINNY MESSAGE SENDER */ /*****************************************************************************/ switch_status_t send_register_ack(listener_t *listener, - uint32_t keep_alive, - char *date_format, - char *reserved, - uint32_t secondary_keep_alive, - char *reserved2) + uint32_t keep_alive, + char *date_format, + char *reserved, + uint32_t secondary_keep_alive, + char *reserved2) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.reg_ack)); @@ -480,10 +480,10 @@ switch_status_t send_register_ack(listener_t *listener, } switch_status_t send_start_tone(listener_t *listener, - uint32_t tone, - uint32_t reserved, - uint32_t line_instance, - uint32_t call_id) + uint32_t tone, + uint32_t reserved, + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.start_tone)); @@ -497,8 +497,8 @@ switch_status_t send_start_tone(listener_t *listener, } switch_status_t send_stop_tone(listener_t *listener, - uint32_t line_instance, - uint32_t call_id) + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.stop_tone)); @@ -510,10 +510,10 @@ switch_status_t send_stop_tone(listener_t *listener, } switch_status_t send_set_ringer(listener_t *listener, - uint32_t ring_type, - uint32_t ring_mode, - uint32_t line_instance, - uint32_t call_id) + uint32_t ring_type, + uint32_t ring_mode, + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.ringer)); @@ -527,9 +527,9 @@ switch_status_t send_set_ringer(listener_t *listener, } switch_status_t send_set_lamp(listener_t *listener, - uint32_t stimulus, - uint32_t stimulus_instance, - uint32_t mode) + uint32_t stimulus, + uint32_t stimulus_instance, + uint32_t mode) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.lamp)); @@ -542,7 +542,7 @@ switch_status_t send_set_lamp(listener_t *listener, } switch_status_t send_set_speaker_mode(listener_t *listener, - uint32_t mode) + uint32_t mode) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.speaker_mode)); @@ -553,16 +553,16 @@ switch_status_t send_set_speaker_mode(listener_t *listener, } switch_status_t send_start_media_transmission(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t remote_ip, - uint32_t remote_port, - uint32_t ms_per_packet, - uint32_t payload_capacity, - uint32_t precedence, - uint32_t silence_suppression, - uint16_t max_frames_per_packet, - uint32_t g723_bitrate) + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t remote_ip, + uint32_t remote_port, + uint32_t ms_per_packet, + uint32_t payload_capacity, + uint32_t precedence, + uint32_t silence_suppression, + uint16_t max_frames_per_packet, + uint32_t g723_bitrate) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.start_media)); @@ -583,9 +583,9 @@ switch_status_t send_start_media_transmission(listener_t *listener, } switch_status_t send_stop_media_transmission(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t conference_id2) + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t conference_id2) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.stop_media)); @@ -599,26 +599,26 @@ switch_status_t send_stop_media_transmission(listener_t *listener, } switch_status_t skinny_send_call_info(listener_t *listener, - const char *calling_party_name, - const char *calling_party, - const char *called_party_name, - const char *called_party, - uint32_t line_instance, - uint32_t call_id, - uint32_t call_type, - const char *original_called_party_name, - const char *original_called_party, - const char *last_redirecting_party_name, - const char *last_redirecting_party, - uint32_t original_called_party_redirect_reason, - uint32_t last_redirecting_reason, - const char *calling_party_voice_mailbox, - const char *called_party_voice_mailbox, - const char *original_called_party_voice_mailbox, - const char *last_redirecting_voice_mailbox, - uint32_t call_instance, - uint32_t call_security_status, - uint32_t party_pi_restriction_bits) + const char *calling_party_name, + const char *calling_party, + const char *called_party_name, + const char *called_party, + uint32_t line_instance, + uint32_t call_id, + uint32_t call_type, + const char *original_called_party_name, + const char *original_called_party, + const char *last_redirecting_party_name, + const char *last_redirecting_party, + uint32_t original_called_party_redirect_reason, + uint32_t last_redirecting_reason, + const char *calling_party_voice_mailbox, + const char *called_party_voice_mailbox, + const char *original_called_party_voice_mailbox, + const char *last_redirecting_voice_mailbox, + uint32_t call_instance, + uint32_t call_security_status, + uint32_t party_pi_restriction_bits) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.call_info)); @@ -648,15 +648,15 @@ switch_status_t skinny_send_call_info(listener_t *listener, } switch_status_t send_define_time_date(listener_t *listener, - uint32_t year, - uint32_t month, - uint32_t day_of_week, /* monday = 1 */ - uint32_t day, - uint32_t hour, - uint32_t minute, - uint32_t seconds, - uint32_t milliseconds, - uint32_t timestamp) + uint32_t year, + uint32_t month, + uint32_t day_of_week, /* monday = 1 */ + uint32_t day, + uint32_t hour, + uint32_t minute, + uint32_t seconds, + uint32_t milliseconds, + uint32_t timestamp) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.define_time_date)); @@ -681,15 +681,15 @@ switch_status_t send_define_current_time_date(listener_t *listener) ts = switch_micro_time_now(); switch_time_exp_lt(&tm, ts); return send_define_time_date(listener, - tm.tm_year + 1900, - tm.tm_mon + 1, - tm.tm_wday, - tm.tm_mday, - tm.tm_hour, - tm.tm_min, - tm.tm_sec, - tm.tm_usec / 1000, - ts / 1000000); + tm.tm_year + 1900, + tm.tm_mon + 1, + tm.tm_wday, + tm.tm_mday, + tm.tm_hour, + tm.tm_min, + tm.tm_sec, + tm.tm_usec / 1000, + ts / 1000000); } switch_status_t send_capabilities_req(listener_t *listener) @@ -702,7 +702,7 @@ switch_status_t send_capabilities_req(listener_t *listener) } switch_status_t send_version(listener_t *listener, - char *version) + char *version) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.version)); @@ -713,7 +713,7 @@ switch_status_t send_version(listener_t *listener, } switch_status_t send_register_reject(listener_t *listener, - char *error) + char *error) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.reg_rej)); @@ -724,14 +724,14 @@ switch_status_t send_register_reject(listener_t *listener, } switch_status_t send_open_receive_channel(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t packets, - uint32_t payload_capacity, - uint32_t echo_cancel_type, - uint32_t g723_bitrate, - uint32_t conference_id2, - uint32_t reserved[10]) + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t packets, + uint32_t payload_capacity, + uint32_t echo_cancel_type, + uint32_t g723_bitrate, + uint32_t conference_id2, + uint32_t reserved[10]) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.open_receive_channel)); @@ -745,24 +745,24 @@ switch_status_t send_open_receive_channel(listener_t *listener, message->data.open_receive_channel.g723_bitrate = g723_bitrate; message->data.open_receive_channel.conference_id2 = conference_id2; /* - message->data.open_receive_channel.reserved[0] = reserved[0]; - message->data.open_receive_channel.reserved[1] = reserved[1]; - message->data.open_receive_channel.reserved[2] = reserved[2]; - message->data.open_receive_channel.reserved[3] = reserved[3]; - message->data.open_receive_channel.reserved[4] = reserved[4]; - message->data.open_receive_channel.reserved[5] = reserved[5]; - message->data.open_receive_channel.reserved[6] = reserved[6]; - message->data.open_receive_channel.reserved[7] = reserved[7]; - message->data.open_receive_channel.reserved[8] = reserved[8]; - message->data.open_receive_channel.reserved[9] = reserved[9]; - */ + message->data.open_receive_channel.reserved[0] = reserved[0]; + message->data.open_receive_channel.reserved[1] = reserved[1]; + message->data.open_receive_channel.reserved[2] = reserved[2]; + message->data.open_receive_channel.reserved[3] = reserved[3]; + message->data.open_receive_channel.reserved[4] = reserved[4]; + message->data.open_receive_channel.reserved[5] = reserved[5]; + message->data.open_receive_channel.reserved[6] = reserved[6]; + message->data.open_receive_channel.reserved[7] = reserved[7]; + message->data.open_receive_channel.reserved[8] = reserved[8]; + message->data.open_receive_channel.reserved[9] = reserved[9]; + */ return skinny_send_reply(listener, message); } switch_status_t send_close_receive_channel(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t conference_id2) + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t conference_id2) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.close_receive_channel)); @@ -775,10 +775,10 @@ switch_status_t send_close_receive_channel(listener_t *listener, } switch_status_t send_select_soft_keys(listener_t *listener, - uint32_t line_instance, - uint32_t call_id, - uint32_t soft_key_set, - uint32_t valid_key_mask) + uint32_t line_instance, + uint32_t call_id, + uint32_t soft_key_set, + uint32_t valid_key_mask) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.select_soft_keys)); @@ -792,9 +792,9 @@ switch_status_t send_select_soft_keys(listener_t *listener, } switch_status_t send_call_state(listener_t *listener, - uint32_t call_state, - uint32_t line_instance, - uint32_t call_id) + uint32_t call_state, + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.call_state)); @@ -807,10 +807,10 @@ switch_status_t send_call_state(listener_t *listener, } switch_status_t send_display_prompt_status(listener_t *listener, - uint32_t timeout, - const char *display, - uint32_t line_instance, - uint32_t call_id) + uint32_t timeout, + const char *display, + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.display_prompt_status)); @@ -824,8 +824,8 @@ switch_status_t send_display_prompt_status(listener_t *listener, } switch_status_t send_clear_prompt_status(listener_t *listener, - uint32_t line_instance, - uint32_t call_id) + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.clear_prompt_status)); @@ -837,7 +837,7 @@ switch_status_t send_clear_prompt_status(listener_t *listener, } switch_status_t send_activate_call_plane(listener_t *listener, - uint32_t line_instance) + uint32_t line_instance) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.activate_call_plane)); @@ -848,8 +848,8 @@ switch_status_t send_activate_call_plane(listener_t *listener, } switch_status_t send_back_space_request(listener_t *listener, - uint32_t line_instance, - uint32_t call_id) + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.back_space_req)); @@ -862,9 +862,9 @@ switch_status_t send_back_space_request(listener_t *listener, } switch_status_t send_dialed_number(listener_t *listener, - char called_party[24], - uint32_t line_instance, - uint32_t call_id) + char called_party[24], + uint32_t line_instance, + uint32_t call_id) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.dialed_number)); @@ -877,9 +877,9 @@ switch_status_t send_dialed_number(listener_t *listener, } switch_status_t send_display_pri_notify(listener_t *listener, - uint32_t message_timeout, - uint32_t priority, - char *notify) + uint32_t message_timeout, + uint32_t priority, + char *notify) { skinny_message_t *message; message = switch_core_alloc(listener->pool, 12+sizeof(message->data.display_pri_notify)); @@ -903,12 +903,12 @@ switch_status_t send_reset(listener_t *listener, uint32_t reset_type) } switch_status_t send_data(listener_t *listener, uint32_t message_type, - uint32_t application_id, - uint32_t line_instance, - uint32_t call_id, - uint32_t transaction_id, - uint32_t data_length, - const char *data) + uint32_t application_id, + uint32_t line_instance, + uint32_t call_id, + uint32_t transaction_id, + uint32_t data_length, + const char *data) { skinny_message_t *message; switch_assert(data_length == strlen(data)); @@ -929,17 +929,17 @@ switch_status_t send_data(listener_t *listener, uint32_t message_type, } switch_status_t send_extended_data(listener_t *listener, uint32_t message_type, - uint32_t application_id, - uint32_t line_instance, - uint32_t call_id, - uint32_t transaction_id, - uint32_t data_length, - uint32_t sequence_flag, - uint32_t display_priority, - uint32_t conference_id, - uint32_t app_instance_id, - uint32_t routing_id, - const char *data) + uint32_t application_id, + uint32_t line_instance, + uint32_t call_id, + uint32_t transaction_id, + uint32_t data_length, + uint32_t sequence_flag, + uint32_t display_priority, + uint32_t conference_id, + uint32_t app_instance_id, + uint32_t routing_id, + const char *data) { skinny_message_t *message; switch_assert(data_length == strlen(data)); @@ -975,16 +975,16 @@ switch_status_t skinny_perform_send_reply(listener_t *listener, const char *file if (listener_is_ready(listener)) { if (listener->profile->debug >= 10 || reply->type != KEEP_ALIVE_ACK_MESSAGE) { switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_DEBUG, - "Sending %s (type=%x,length=%d) to %s:%d.\n", - skinny_message_type2str(reply->type), reply->type, reply->length, - listener->device_name, listener->device_instance); + "Sending %s (type=%x,length=%d) to %s:%d.\n", + skinny_message_type2str(reply->type), reply->type, reply->length, + listener->device_name, listener->device_instance); } return switch_socket_send(listener->sock, ptr, &len); } else { switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_WARNING, - "Not sending %s (type=%x,length=%d) to %s:%d while not ready.\n", - skinny_message_type2str(reply->type), reply->type, reply->length, - listener->device_name, listener->device_instance); + "Not sending %s (type=%x,length=%d) to %s:%d while not ready.\n", + skinny_message_type2str(reply->type), reply->type, reply->length, + listener->device_name, listener->device_instance); return SWITCH_STATUS_FALSE; } } diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.h b/src/mod/endpoints/mod_skinny/skinny_protocol.h index 1eed692157..de5c8b6a8b 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.h +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.h @@ -46,73 +46,73 @@ /* RegisterMessage */ #define REGISTER_MESSAGE 0x0001 struct PACKED register_message { - char device_name[16]; - uint32_t user_id; - uint32_t instance; - struct in_addr ip; - uint32_t device_type; - uint32_t max_streams; + char device_name[16]; + uint32_t user_id; + uint32_t instance; + struct in_addr ip; + uint32_t device_type; + uint32_t max_streams; }; /* PortMessage */ #define PORT_MESSAGE 0x0002 struct PACKED port_message { - uint16_t port; + uint16_t port; }; /* KeypadButtonMessage */ #define KEYPAD_BUTTON_MESSAGE 0x0003 struct PACKED keypad_button_message { - uint32_t button; - uint32_t line_instance; - uint32_t call_id; + uint32_t button; + uint32_t line_instance; + uint32_t call_id; }; /* EnblocCallMessage */ #define ENBLOC_CALL_MESSAGE 0x0004 struct PACKED enbloc_call_message { - char called_party[24]; - uint32_t line_instance; + char called_party[24]; + uint32_t line_instance; }; /* StimulusMessage */ #define STIMULUS_MESSAGE 0x0005 struct PACKED stimulus_message { - uint32_t instance_type; /* See enum skinny_button_definition */ - uint32_t instance; - uint32_t call_id; + uint32_t instance_type; /* See enum skinny_button_definition */ + uint32_t instance; + uint32_t call_id; }; /* OffHookMessage */ #define OFF_HOOK_MESSAGE 0x0006 struct PACKED off_hook_message { - uint32_t line_instance; - uint32_t call_id; + uint32_t line_instance; + uint32_t call_id; }; /* OnHookMessage */ #define ON_HOOK_MESSAGE 0x0007 struct PACKED on_hook_message { - uint32_t line_instance; - uint32_t call_id; + uint32_t line_instance; + uint32_t call_id; }; /* ForwardStatReqMessage */ #define FORWARD_STAT_REQ_MESSAGE 0x0009 struct PACKED forward_stat_req_message { - uint32_t line_instance; + uint32_t line_instance; }; /* SpeedDialStatReqMessage */ #define SPEED_DIAL_STAT_REQ_MESSAGE 0x000A struct PACKED speed_dial_stat_req_message { - uint32_t number; + uint32_t number; }; /* LineStatReqMessage */ #define LINE_STAT_REQ_MESSAGE 0x000B struct PACKED line_stat_req_message { - uint32_t number; + uint32_t number; }; /* ConfigStatReqMessage */ @@ -130,32 +130,32 @@ struct PACKED line_stat_req_message { /* CapabilitiesResMessage */ #define CAPABILITIES_RES_MESSAGE 0x0010 struct PACKED station_capabilities { - uint32_t codec; - uint16_t max_frames_per_packet; - char reserved[10]; + uint32_t codec; + uint16_t max_frames_per_packet; + char reserved[10]; }; struct PACKED capabilities_res_message { - uint32_t count; - struct station_capabilities caps[SWITCH_MAX_CODECS]; + uint32_t count; + struct station_capabilities caps[SWITCH_MAX_CODECS]; }; /* AlarmMessage */ #define ALARM_MESSAGE 0x0020 struct PACKED alarm_message { - uint32_t alarm_severity; - char display_message[80]; - uint32_t alarm_param1; - uint32_t alarm_param2; + uint32_t alarm_severity; + char display_message[80]; + uint32_t alarm_param1; + uint32_t alarm_param2; }; /* OpenReceiveChannelAck */ #define OPEN_RECEIVE_CHANNEL_ACK_MESSAGE 0x0022 struct PACKED open_receive_channel_ack_message { - uint32_t status; - struct in_addr ip; - uint32_t port; - uint32_t pass_thru_party_id; + uint32_t status; + struct in_addr ip; + uint32_t port; + uint32_t pass_thru_party_id; }; /* SoftKeySetReqMessage */ @@ -164,9 +164,9 @@ struct PACKED open_receive_channel_ack_message { /* SoftKeyEventMessage */ #define SOFT_KEY_EVENT_MESSAGE 0x0026 struct PACKED soft_key_event_message { - uint32_t event; /* See enum skinny_soft_key_event */ - uint32_t line_instance; - uint32_t call_id; + uint32_t event; /* See enum skinny_soft_key_event */ + uint32_t line_instance; + uint32_t call_id; }; /* UnregisterMessage */ @@ -178,13 +178,13 @@ struct PACKED soft_key_event_message { /* HeadsetStatusMessage */ #define HEADSET_STATUS_MESSAGE 0x002B struct PACKED headset_status_message { - uint32_t mode; /* 1=HeadsetOn; 2=HeadsetOff */ + uint32_t mode; /* 1=HeadsetOn; 2=HeadsetOff */ }; /* RegisterAvailableLinesMessage */ #define REGISTER_AVAILABLE_LINES_MESSAGE 0x002D struct PACKED register_available_lines_message { - uint32_t count; + uint32_t count; }; /* DeviceToUserDataMessage */ @@ -205,13 +205,13 @@ struct PACKED data_message { /* ServiceUrlStatReqMessage */ #define SERVICE_URL_STAT_REQ_MESSAGE 0x0033 struct PACKED service_url_stat_req_message { - uint32_t service_url_index; + uint32_t service_url_index; }; /* FeatureStatReqMessage */ #define FEATURE_STAT_REQ_MESSAGE 0x0034 struct PACKED feature_stat_req_message { - uint32_t feature_index; + uint32_t feature_index; }; /* DeviceToUserDataVersion1Message */ @@ -254,178 +254,178 @@ struct PACKED accessory_status_message { /* RegisterAckMessage */ #define REGISTER_ACK_MESSAGE 0x0081 struct PACKED register_ack_message { - uint32_t keep_alive; - char date_format[6]; - char reserved[2]; - uint32_t secondary_keep_alive; - char reserved2[4]; + uint32_t keep_alive; + char date_format[6]; + char reserved[2]; + uint32_t secondary_keep_alive; + char reserved2[4]; }; /* StartToneMessage */ #define START_TONE_MESSAGE 0x0082 struct PACKED start_tone_message { - uint32_t tone; /* see enum skinny_tone */ - uint32_t reserved; - uint32_t line_instance; - uint32_t call_id; + uint32_t tone; /* see enum skinny_tone */ + uint32_t reserved; + uint32_t line_instance; + uint32_t call_id; }; /* StopToneMessage */ #define STOP_TONE_MESSAGE 0x0083 struct PACKED stop_tone_message { - uint32_t line_instance; - uint32_t call_id; + uint32_t line_instance; + uint32_t call_id; }; /* SetRingerMessage */ #define SET_RINGER_MESSAGE 0x0085 struct PACKED set_ringer_message { - uint32_t ring_type; /* See enum skinny_ring_type */ - uint32_t ring_mode; /* See enum skinny_ring_mode */ - uint32_t line_instance; - uint32_t call_id; + uint32_t ring_type; /* See enum skinny_ring_type */ + uint32_t ring_mode; /* See enum skinny_ring_mode */ + uint32_t line_instance; + uint32_t call_id; }; /* SetLampMessage */ #define SET_LAMP_MESSAGE 0x0086 struct PACKED set_lamp_message { - uint32_t stimulus; /* See enum skinny_button_definition */ - uint32_t stimulus_instance; - uint32_t mode; /* See enum skinny_lamp_mode */ + uint32_t stimulus; /* See enum skinny_button_definition */ + uint32_t stimulus_instance; + uint32_t mode; /* See enum skinny_lamp_mode */ }; /* SetSpeakerModeMessage */ #define SET_SPEAKER_MODE_MESSAGE 0x0088 struct PACKED set_speaker_mode_message { - uint32_t mode; /* See enum skinny_speaker_mode */ + uint32_t mode; /* See enum skinny_speaker_mode */ }; /* StartMediaTransmissionMessage */ #define START_MEDIA_TRANSMISSION_MESSAGE 0x008A struct PACKED start_media_transmission_message { - uint32_t conference_id; - uint32_t pass_thru_party_id; - uint32_t remote_ip; - uint32_t remote_port; - uint32_t ms_per_packet; - uint32_t payload_capacity; - uint32_t precedence; - uint32_t silence_suppression; - uint16_t max_frames_per_packet; - uint16_t unknown1; - uint32_t g723_bitrate; - /* ... */ + uint32_t conference_id; + uint32_t pass_thru_party_id; + uint32_t remote_ip; + uint32_t remote_port; + uint32_t ms_per_packet; + uint32_t payload_capacity; + uint32_t precedence; + uint32_t silence_suppression; + uint16_t max_frames_per_packet; + uint16_t unknown1; + uint32_t g723_bitrate; + /* ... */ }; /* StopMediaTransmissionMessage */ #define STOP_MEDIA_TRANSMISSION_MESSAGE 0x008B struct PACKED stop_media_transmission_message { - uint32_t conference_id; - uint32_t pass_thru_party_id; - uint32_t conference_id2; - /* ... */ + uint32_t conference_id; + uint32_t pass_thru_party_id; + uint32_t conference_id2; + /* ... */ }; /* CallInfoMessage */ #define CALL_INFO_MESSAGE 0x008F struct PACKED call_info_message { - char calling_party_name[40]; - char calling_party[24]; - char called_party_name[40]; - char called_party[24]; - uint32_t line_instance; - uint32_t call_id; - uint32_t call_type; /* See enum skinny_call_type */ - char original_called_party_name[40]; - char original_called_party[24]; - char last_redirecting_party_name[40]; - char last_redirecting_party[24]; - uint32_t original_called_party_redirect_reason; - uint32_t last_redirecting_reason; - char calling_party_voice_mailbox[24]; - char called_party_voice_mailbox[24]; - char original_called_party_voice_mailbox[24]; - char last_redirecting_voice_mailbox[24]; - uint32_t call_instance; - uint32_t call_security_status; - uint32_t party_pi_restriction_bits; + char calling_party_name[40]; + char calling_party[24]; + char called_party_name[40]; + char called_party[24]; + uint32_t line_instance; + uint32_t call_id; + uint32_t call_type; /* See enum skinny_call_type */ + char original_called_party_name[40]; + char original_called_party[24]; + char last_redirecting_party_name[40]; + char last_redirecting_party[24]; + uint32_t original_called_party_redirect_reason; + uint32_t last_redirecting_reason; + char calling_party_voice_mailbox[24]; + char called_party_voice_mailbox[24]; + char original_called_party_voice_mailbox[24]; + char last_redirecting_voice_mailbox[24]; + uint32_t call_instance; + uint32_t call_security_status; + uint32_t party_pi_restriction_bits; }; /* ForwardStatMessage */ #define FORWARD_STAT_MESSAGE 0x0090 struct PACKED forward_stat_message { - uint32_t active_forward; - uint32_t line_instance; - uint32_t forward_all_active; - char forward_all_number[24]; - uint32_t forward_busy_active; - char forward_busy_number[24]; - uint32_t forward_noanswer_active; - char forward_noanswer_number[24]; + uint32_t active_forward; + uint32_t line_instance; + uint32_t forward_all_active; + char forward_all_number[24]; + uint32_t forward_busy_active; + char forward_busy_number[24]; + uint32_t forward_noanswer_active; + char forward_noanswer_number[24]; }; /* SpeedDialStatMessage */ #define SPEED_DIAL_STAT_RES_MESSAGE 0x0091 struct PACKED speed_dial_stat_res_message { - uint32_t number; - char line[24]; - char label[40]; + uint32_t number; + char line[24]; + char label[40]; }; /* LineStatMessage */ #define LINE_STAT_RES_MESSAGE 0x0092 struct PACKED line_stat_res_message { - uint32_t number; - char name[24]; - char shortname[40]; - char displayname[44]; + uint32_t number; + char name[24]; + char shortname[40]; + char displayname[44]; }; /* ConfigStatMessage */ #define CONFIG_STAT_RES_MESSAGE 0x0093 struct PACKED config_stat_res_message { - char device_name[16]; - uint32_t user_id; - uint32_t instance; - char user_name[40]; - char server_name[40]; - uint32_t number_lines; - uint32_t number_speed_dials; + char device_name[16]; + uint32_t user_id; + uint32_t instance; + char user_name[40]; + char server_name[40]; + uint32_t number_lines; + uint32_t number_speed_dials; }; /* DefineTimeDate */ #define DEFINE_TIME_DATE_MESSAGE 0x0094 struct PACKED define_time_date_message { - uint32_t year; - uint32_t month; - uint32_t day_of_week; /* monday = 1 */ - uint32_t day; - uint32_t hour; - uint32_t minute; - uint32_t seconds; - uint32_t milliseconds; - uint32_t timestamp; + uint32_t year; + uint32_t month; + uint32_t day_of_week; /* monday = 1 */ + uint32_t day; + uint32_t hour; + uint32_t minute; + uint32_t seconds; + uint32_t milliseconds; + uint32_t timestamp; }; /* ButtonTemplateMessage */ #define BUTTON_TEMPLATE_RES_MESSAGE 0x0097 struct PACKED button_definition { - uint8_t instance_number; - uint8_t button_definition; /* See enum skinny_button_definition */ + uint8_t instance_number; + uint8_t button_definition; /* See enum skinny_button_definition */ }; #define SKINNY_MAX_BUTTON_COUNT 42 struct PACKED button_template_message { - uint32_t button_offset; - uint32_t button_count; - uint32_t total_button_count; - struct button_definition btn[SKINNY_MAX_BUTTON_COUNT]; + uint32_t button_offset; + uint32_t button_count; + uint32_t total_button_count; + struct button_definition btn[SKINNY_MAX_BUTTON_COUNT]; }; /* VersionMessage */ #define VERSION_MESSAGE 0x0098 struct PACKED version_message { - char version[16]; + char version[16]; }; /* CapabilitiesReqMessage */ @@ -434,13 +434,13 @@ struct PACKED version_message { /* RegisterRejectMessage */ #define REGISTER_REJECT_MESSAGE 0x009D struct PACKED register_reject_message { - char error[33]; + char error[33]; }; /* ResetMessage */ #define RESET_MESSAGE 0x009F struct PACKED reset_message { - uint32_t reset_type; /* See enum skinny_device_reset_types */ + uint32_t reset_type; /* See enum skinny_device_reset_types */ }; /* KeepAliveAckMessage */ @@ -449,112 +449,112 @@ struct PACKED reset_message { /* OpenReceiveChannelMessage */ #define OPEN_RECEIVE_CHANNEL_MESSAGE 0x0105 struct PACKED open_receive_channel_message { - uint32_t conference_id; - uint32_t pass_thru_party_id; - uint32_t packets; - uint32_t payload_capacity; - uint32_t echo_cancel_type; - uint32_t g723_bitrate; - uint32_t conference_id2; - uint32_t reserved[10]; + uint32_t conference_id; + uint32_t pass_thru_party_id; + uint32_t packets; + uint32_t payload_capacity; + uint32_t echo_cancel_type; + uint32_t g723_bitrate; + uint32_t conference_id2; + uint32_t reserved[10]; }; /* CloseReceiveChannelMessage */ #define CLOSE_RECEIVE_CHANNEL_MESSAGE 0x0106 struct PACKED close_receive_channel_message { - uint32_t conference_id; - uint32_t pass_thru_party_id; - uint32_t conference_id2; + uint32_t conference_id; + uint32_t pass_thru_party_id; + uint32_t conference_id2; }; /* SoftKeyTemplateResMessage */ #define SOFT_KEY_TEMPLATE_RES_MESSAGE 0x0108 struct PACKED soft_key_template_definition { - char soft_key_label[16]; - uint32_t soft_key_event; + char soft_key_label[16]; + uint32_t soft_key_event; }; struct PACKED soft_key_template_res_message { - uint32_t soft_key_offset; - uint32_t soft_key_count; - uint32_t total_soft_key_count; - struct soft_key_template_definition soft_key[32]; + uint32_t soft_key_offset; + uint32_t soft_key_count; + uint32_t total_soft_key_count; + struct soft_key_template_definition soft_key[32]; }; /* SoftKeySetResMessage */ #define SOFT_KEY_SET_RES_MESSAGE 0x0109 struct PACKED soft_key_set_definition { - uint8_t soft_key_template_index[16]; /* See enum skinny_soft_key_event */ - uint16_t soft_key_info_index[16]; + uint8_t soft_key_template_index[16]; /* See enum skinny_soft_key_event */ + uint16_t soft_key_info_index[16]; }; struct PACKED soft_key_set_res_message { - uint32_t soft_key_set_offset; - uint32_t soft_key_set_count; - uint32_t total_soft_key_set_count; - struct soft_key_set_definition soft_key_set[16]; - uint32_t res; + uint32_t soft_key_set_offset; + uint32_t soft_key_set_count; + uint32_t total_soft_key_set_count; + struct soft_key_set_definition soft_key_set[16]; + uint32_t res; }; /* SelectSoftKeysMessage */ #define SELECT_SOFT_KEYS_MESSAGE 0x0110 struct PACKED select_soft_keys_message { - uint32_t line_instance; - uint32_t call_id; - uint32_t soft_key_set; /* See enum skinny_key_set */ - uint32_t valid_key_mask; + uint32_t line_instance; + uint32_t call_id; + uint32_t soft_key_set; /* See enum skinny_key_set */ + uint32_t valid_key_mask; }; /* CallStateMessage */ #define CALL_STATE_MESSAGE 0x0111 struct PACKED call_state_message { - uint32_t call_state; /* See enum skinny_call_state */ - uint32_t line_instance; - uint32_t call_id; + uint32_t call_state; /* See enum skinny_call_state */ + uint32_t line_instance; + uint32_t call_id; }; /* DisplayPromptStatusMessage */ #define DISPLAY_PROMPT_STATUS_MESSAGE 0x0112 struct PACKED display_prompt_status_message { - uint32_t timeout; - char display[32]; - uint32_t line_instance; - uint32_t call_id; + uint32_t timeout; + char display[32]; + uint32_t line_instance; + uint32_t call_id; }; /* ClearPromptStatusMessage */ #define CLEAR_PROMPT_STATUS_MESSAGE 0x0113 struct PACKED clear_prompt_status_message { - uint32_t line_instance; - uint32_t call_id; + uint32_t line_instance; + uint32_t call_id; }; /* ActivateCallPlaneMessage */ #define ACTIVATE_CALL_PLANE_MESSAGE 0x0116 struct PACKED activate_call_plane_message { - uint32_t line_instance; + uint32_t line_instance; }; /* UnregisterAckMessage */ #define UNREGISTER_ACK_MESSAGE 0x0118 struct PACKED unregister_ack_message { - uint32_t unregister_status; + uint32_t unregister_status; }; /* BackSpaceReqMessage */ #define BACK_SPACE_REQ_MESSAGE 0x0119 struct PACKED back_space_req_message { - uint32_t line_instance; - uint32_t call_id; + uint32_t line_instance; + uint32_t call_id; }; /* DialedNumberMessage */ #define DIALED_NUMBER_MESSAGE 0x011D struct PACKED dialed_number_message { - char called_party[24]; - uint32_t line_instance; - uint32_t call_id; + char called_party[24]; + uint32_t line_instance; + uint32_t call_id; }; /* UserToDeviceDataMessage */ @@ -564,26 +564,26 @@ struct PACKED dialed_number_message { /* FeatureStatMessage */ #define FEATURE_STAT_RES_MESSAGE 0x011F struct PACKED feature_stat_res_message { - uint32_t index; - uint32_t id; - char text_label[40]; - uint32_t status; + uint32_t index; + uint32_t id; + char text_label[40]; + uint32_t status; }; /* DisplayPriNotifyMessage */ #define DISPLAY_PRI_NOTIFY_MESSAGE 0x0120 struct PACKED display_pri_notify_message { - uint32_t message_timeout; - uint32_t priority; - char notify[32]; + uint32_t message_timeout; + uint32_t priority; + char notify[32]; }; /* ServiceUrlStatMessage */ #define SERVICE_URL_STAT_RES_MESSAGE 0x012F struct PACKED service_url_stat_res_message { - uint32_t index; - char url[256]; - char display_name[40]; + uint32_t index; + char url[256]; + char display_name[40]; }; /* UserToDeviceDataVersion1Message */ @@ -694,10 +694,10 @@ union skinny_data { * length is length of body */ struct PACKED skinny_message { - uint32_t length; - uint32_t version; - uint32_t type; - union skinny_data data; + uint32_t length; + uint32_t version; + uint32_t type; + union skinny_data data; }; typedef struct skinny_message skinny_message_t; @@ -705,40 +705,40 @@ typedef struct skinny_message skinny_message_t; /* SKINNY TYPES */ /*****************************************************************************/ enum skinny_codecs { - SKINNY_CODEC_ALAW_64K = 2, - SKINNY_CODEC_ALAW_56K = 3, - SKINNY_CODEC_ULAW_64K = 4, - SKINNY_CODEC_ULAW_56K = 5, - SKINNY_CODEC_G722_64K = 6, - SKINNY_CODEC_G722_56K = 7, - SKINNY_CODEC_G722_48K = 8, - SKINNY_CODEC_G723_1 = 9, - SKINNY_CODEC_G728 = 10, - SKINNY_CODEC_G729 = 11, - SKINNY_CODEC_G729A = 12, - SKINNY_CODEC_IS11172 = 13, - SKINNY_CODEC_IS13818 = 14, - SKINNY_CODEC_G729B = 15, - SKINNY_CODEC_G729AB = 16, - SKINNY_CODEC_GSM_FULL = 18, - SKINNY_CODEC_GSM_HALF = 19, - SKINNY_CODEC_GSM_EFULL = 20, - SKINNY_CODEC_WIDEBAND_256K = 25, - SKINNY_CODEC_DATA_64K = 32, - SKINNY_CODEC_DATA_56K = 33, - SKINNY_CODEC_GSM = 80, - SKINNY_CODEC_ACTIVEVOICE = 81, - SKINNY_CODEC_G726_32K = 82, - SKINNY_CODEC_G726_24K = 83, - SKINNY_CODEC_G726_16K = 84, - SKINNY_CODEC_G729B_BIS = 85, - SKINNY_CODEC_G729B_LOW = 86, - SKINNY_CODEC_H261 = 100, - SKINNY_CODEC_H263 = 101, - SKINNY_CODEC_VIDEO = 102, - SKINNY_CODEC_T120 = 105, - SKINNY_CODEC_H224 = 106, - SKINNY_CODEC_RFC2833_DYNPAYLOAD = 257 + SKINNY_CODEC_ALAW_64K = 2, + SKINNY_CODEC_ALAW_56K = 3, + SKINNY_CODEC_ULAW_64K = 4, + SKINNY_CODEC_ULAW_56K = 5, + SKINNY_CODEC_G722_64K = 6, + SKINNY_CODEC_G722_56K = 7, + SKINNY_CODEC_G722_48K = 8, + SKINNY_CODEC_G723_1 = 9, + SKINNY_CODEC_G728 = 10, + SKINNY_CODEC_G729 = 11, + SKINNY_CODEC_G729A = 12, + SKINNY_CODEC_IS11172 = 13, + SKINNY_CODEC_IS13818 = 14, + SKINNY_CODEC_G729B = 15, + SKINNY_CODEC_G729AB = 16, + SKINNY_CODEC_GSM_FULL = 18, + SKINNY_CODEC_GSM_HALF = 19, + SKINNY_CODEC_GSM_EFULL = 20, + SKINNY_CODEC_WIDEBAND_256K = 25, + SKINNY_CODEC_DATA_64K = 32, + SKINNY_CODEC_DATA_56K = 33, + SKINNY_CODEC_GSM = 80, + SKINNY_CODEC_ACTIVEVOICE = 81, + SKINNY_CODEC_G726_32K = 82, + SKINNY_CODEC_G726_24K = 83, + SKINNY_CODEC_G726_16K = 84, + SKINNY_CODEC_G729B_BIS = 85, + SKINNY_CODEC_G729B_LOW = 86, + SKINNY_CODEC_H261 = 100, + SKINNY_CODEC_H263 = 101, + SKINNY_CODEC_VIDEO = 102, + SKINNY_CODEC_T120 = 105, + SKINNY_CODEC_H224 = 106, + SKINNY_CODEC_RFC2833_DYNPAYLOAD = 257 }; char* skinny_codec2string(enum skinny_codecs skinnycodec); @@ -747,15 +747,15 @@ char* skinny_codec2string(enum skinny_codecs skinnycodec); /* SKINNY FUNCTIONS */ /*****************************************************************************/ #define skinny_check_data_length(message, len) \ - if (message->length < len+4) {\ + if (message->length < len+4) {\ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,\ - "Received Too Short Skinny Message %s (type=%x,length=%d), expected %" SWITCH_SIZE_T_FMT ".\n",\ - skinny_message_type2str(request->type), request->type, request->length,\ - len+4);\ - return SWITCH_STATUS_FALSE;\ - } + "Received Too Short Skinny Message %s (type=%x,length=%d), expected %" SWITCH_SIZE_T_FMT ".\n",\ + skinny_message_type2str(request->type), request->type, request->length,\ + len+4);\ + return SWITCH_STATUS_FALSE;\ + } #define skinny_check_data_length_soft(message, len) \ - (message->length >= len+4) + (message->length >= len+4) switch_status_t skinny_read_packet(listener_t *listener, skinny_message_t **req); @@ -777,148 +777,148 @@ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *re /* SKINNY MESSAGE HELPER */ /*****************************************************************************/ switch_status_t send_register_ack(listener_t *listener, - uint32_t keep_alive, - char *date_format, - char *reserved, - uint32_t secondary_keep_alive, - char *reserved2); + uint32_t keep_alive, + char *date_format, + char *reserved, + uint32_t secondary_keep_alive, + char *reserved2); switch_status_t send_start_tone(listener_t *listener, - uint32_t tone, - uint32_t reserved, - uint32_t line_instance, - uint32_t call_id); + uint32_t tone, + uint32_t reserved, + uint32_t line_instance, + uint32_t call_id); switch_status_t send_stop_tone(listener_t *listener, - uint32_t line_instance, - uint32_t call_id); + uint32_t line_instance, + uint32_t call_id); switch_status_t send_set_ringer(listener_t *listener, - uint32_t ring_type, - uint32_t ring_mode, - uint32_t line_instance, - uint32_t call_id); + uint32_t ring_type, + uint32_t ring_mode, + uint32_t line_instance, + uint32_t call_id); switch_status_t send_set_lamp(listener_t *listener, - uint32_t stimulus, - uint32_t stimulus_instance, - uint32_t mode); + uint32_t stimulus, + uint32_t stimulus_instance, + uint32_t mode); switch_status_t send_set_speaker_mode(listener_t *listener, - uint32_t mode); + uint32_t mode); switch_status_t send_start_media_transmission(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t remote_ip, - uint32_t remote_port, - uint32_t ms_per_packet, - uint32_t payload_capacity, - uint32_t precedence, - uint32_t silence_suppression, - uint16_t max_frames_per_packet, - uint32_t g723_bitrate); + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t remote_ip, + uint32_t remote_port, + uint32_t ms_per_packet, + uint32_t payload_capacity, + uint32_t precedence, + uint32_t silence_suppression, + uint16_t max_frames_per_packet, + uint32_t g723_bitrate); switch_status_t send_stop_media_transmission(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t conference_id2); + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t conference_id2); switch_status_t skinny_send_call_info(listener_t *listener, - const char *calling_party_name, - const char *calling_party, - const char *called_party_name, - const char *called_party, - uint32_t line_instance, - uint32_t call_id, - uint32_t call_type, - const char *original_called_party_name, - const char *original_called_party, - const char *last_redirecting_party_name, - const char *last_redirecting_party, - uint32_t original_called_party_redirect_reason, - uint32_t last_redirecting_reason, - const char *calling_party_voice_mailbox, - const char *called_party_voice_mailbox, - const char *original_called_party_voice_mailbox, - const char *last_redirecting_voice_mailbox, - uint32_t call_instance, - uint32_t call_security_status, - uint32_t party_pi_restriction_bits); + const char *calling_party_name, + const char *calling_party, + const char *called_party_name, + const char *called_party, + uint32_t line_instance, + uint32_t call_id, + uint32_t call_type, + const char *original_called_party_name, + const char *original_called_party, + const char *last_redirecting_party_name, + const char *last_redirecting_party, + uint32_t original_called_party_redirect_reason, + uint32_t last_redirecting_reason, + const char *calling_party_voice_mailbox, + const char *called_party_voice_mailbox, + const char *original_called_party_voice_mailbox, + const char *last_redirecting_voice_mailbox, + uint32_t call_instance, + uint32_t call_security_status, + uint32_t party_pi_restriction_bits); switch_status_t send_define_time_date(listener_t *listener, - uint32_t year, - uint32_t month, - uint32_t day_of_week, /* monday = 1 */ - uint32_t day, - uint32_t hour, - uint32_t minute, - uint32_t seconds, - uint32_t milliseconds, - uint32_t timestamp); + uint32_t year, + uint32_t month, + uint32_t day_of_week, /* monday = 1 */ + uint32_t day, + uint32_t hour, + uint32_t minute, + uint32_t seconds, + uint32_t milliseconds, + uint32_t timestamp); switch_status_t send_define_current_time_date(listener_t *listener); switch_status_t send_version(listener_t *listener, - char *version); + char *version); switch_status_t send_capabilities_req(listener_t *listener); switch_status_t send_register_reject(listener_t *listener, - char *error); + char *error); switch_status_t send_open_receive_channel(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t packets, - uint32_t payload_capacity, - uint32_t echo_cancel_type, - uint32_t g723_bitrate, - uint32_t conference_id2, - uint32_t reserved[10]); + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t packets, + uint32_t payload_capacity, + uint32_t echo_cancel_type, + uint32_t g723_bitrate, + uint32_t conference_id2, + uint32_t reserved[10]); switch_status_t send_close_receive_channel(listener_t *listener, - uint32_t conference_id, - uint32_t pass_thru_party_id, - uint32_t conference_id2); + uint32_t conference_id, + uint32_t pass_thru_party_id, + uint32_t conference_id2); switch_status_t send_select_soft_keys(listener_t *listener, - uint32_t line_instance, - uint32_t call_id, - uint32_t soft_key_set, - uint32_t valid_key_mask); + uint32_t line_instance, + uint32_t call_id, + uint32_t soft_key_set, + uint32_t valid_key_mask); switch_status_t send_call_state(listener_t *listener, - uint32_t call_state, - uint32_t line_instance, - uint32_t call_id); + uint32_t call_state, + uint32_t line_instance, + uint32_t call_id); switch_status_t send_display_prompt_status(listener_t *listener, - uint32_t timeout, - const char *display, - uint32_t line_instance, - uint32_t call_id); + uint32_t timeout, + const char *display, + uint32_t line_instance, + uint32_t call_id); switch_status_t send_clear_prompt_status(listener_t *listener, - uint32_t line_instance, - uint32_t call_id); + uint32_t line_instance, + uint32_t call_id); switch_status_t send_activate_call_plane(listener_t *listener, - uint32_t line_instance); + uint32_t line_instance); switch_status_t send_back_space_request(listener_t *listener, - uint32_t line_instance, - uint32_t call_id); + uint32_t line_instance, + uint32_t call_id); switch_status_t send_dialed_number(listener_t *listener, - char called_party[24], - uint32_t line_instance, - uint32_t call_id); + char called_party[24], + uint32_t line_instance, + uint32_t call_id); switch_status_t send_display_pri_notify(listener_t *listener, - uint32_t message_timeout, - uint32_t priority, - char *notify); + uint32_t message_timeout, + uint32_t priority, + char *notify); switch_status_t send_reset(listener_t *listener, - uint32_t reset_type); + uint32_t reset_type); switch_status_t send_data(listener_t *listener, uint32_t message_type, - uint32_t application_id, - uint32_t line_instance, - uint32_t call_id, - uint32_t transaction_id, - uint32_t data_length, - const char *data); + uint32_t application_id, + uint32_t line_instance, + uint32_t call_id, + uint32_t transaction_id, + uint32_t data_length, + const char *data); switch_status_t send_extended_data(listener_t *listener, uint32_t message_type, - uint32_t application_id, - uint32_t line_instance, - uint32_t call_id, - uint32_t transaction_id, - uint32_t data_length, - uint32_t sequence_flag, - uint32_t display_priority, - uint32_t conference_id, - uint32_t app_instance_id, - uint32_t routing_id, - const char *data); + uint32_t application_id, + uint32_t line_instance, + uint32_t call_id, + uint32_t transaction_id, + uint32_t data_length, + uint32_t sequence_flag, + uint32_t display_priority, + uint32_t conference_id, + uint32_t app_instance_id, + uint32_t routing_id, + const char *data); #endif /* _SKINNY_PROTOCOL_H */ diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index f6887060fc..00ec6fa56b 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -74,37 +74,37 @@ switch_status_t skinny_create_incoming_session(listener_t *listener, uint32_t *l line_instance = *line_instance_p; if((nsession = skinny_profile_find_session(listener->profile, listener, line_instance_p, 0))) { - if(skinny_line_get_state(listener, *line_instance_p, 0) == SKINNY_OFF_HOOK) { - /* Reuse existing session */ - *session = nsession; - return SWITCH_STATUS_SUCCESS; - } - switch_core_session_rwunlock(nsession); + if(skinny_line_get_state(listener, *line_instance_p, 0) == SKINNY_OFF_HOOK) { + /* Reuse existing session */ + *session = nsession; + return SWITCH_STATUS_SUCCESS; + } + switch_core_session_rwunlock(nsession); } *line_instance_p = line_instance; if(*line_instance_p == 0) { - *line_instance_p = 1; + *line_instance_p = 1; } - skinny_hold_active_calls(listener); - + skinny_hold_active_calls(listener); + skinny_line_get(listener, *line_instance_p, &button); if (!button || !button->shortname) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Line %d not found on device %s %d\n", - *line_instance_p, listener->device_name, listener->device_instance); + *line_instance_p, listener->device_name, listener->device_instance); goto error; } if (!(nsession = switch_core_session_request(skinny_get_endpoint_interface(), - SWITCH_CALL_DIRECTION_INBOUND, SOF_NONE, NULL))) { + SWITCH_CALL_DIRECTION_INBOUND, SOF_NONE, NULL))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error Creating Session\n"); goto error; } if (!(tech_pvt = (struct private_object *) switch_core_session_alloc(nsession, sizeof(*tech_pvt)))) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, - "Error Creating Session private object\n"); + "Error Creating Session private object\n"); goto error; } @@ -115,42 +115,42 @@ switch_status_t skinny_create_incoming_session(listener_t *listener, uint32_t *l channel = switch_core_session_get_channel(nsession); snprintf(name, sizeof(name), "SKINNY/%s/%s:%d/%d", listener->profile->name, - listener->device_name, listener->device_instance, *line_instance_p); + listener->device_name, listener->device_instance, *line_instance_p); switch_channel_set_name(channel, name); if (switch_core_session_thread_launch(nsession) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, - "Error Creating Session thread\n"); + "Error Creating Session thread\n"); goto error; } if (switch_core_session_read_lock(nsession) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, - "Error Locking Session\n"); + "Error Locking Session\n"); goto error; } /* First create the caller profile in the patterns Dialplan */ if (!(tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(nsession), - NULL, listener->profile->patterns_dialplan, - button->displayname, button->shortname, - listener->remote_ip, NULL, NULL, NULL, - "skinny" /* modname */, - listener->profile->patterns_context, - "")) != 0) { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, - "Error Creating Session caller profile\n"); + NULL, listener->profile->patterns_dialplan, + button->displayname, button->shortname, + listener->remote_ip, NULL, NULL, NULL, + "skinny" /* modname */, + listener->profile->patterns_context, + "")) != 0) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, + "Error Creating Session caller profile\n"); goto error; } switch_channel_set_caller_profile(channel, tech_pvt->caller_profile); if ((sql = switch_mprintf( - "INSERT INTO skinny_active_lines " - "(device_name, device_instance, line_instance, channel_uuid, call_id, call_state) " - "SELECT device_name, device_instance, line_instance, '%s', %d, %d " - "FROM skinny_lines " - "WHERE value='%s'", - switch_core_session_get_uuid(nsession), tech_pvt->call_id, SKINNY_ON_HOOK, button->shortname - ))) { + "INSERT INTO skinny_active_lines " + "(device_name, device_instance, line_instance, channel_uuid, call_id, call_state) " + "SELECT device_name, device_instance, line_instance, '%s', %d, %d " + "FROM skinny_lines " + "WHERE value='%s'", + switch_core_session_get_uuid(nsession), tech_pvt->call_id, SKINNY_ON_HOOK, button->shortname + ))) { skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); switch_safe_free(sql); } @@ -162,13 +162,13 @@ switch_status_t skinny_create_incoming_session(listener_t *listener, uint32_t *l skinny_line_set_state(listener, *line_instance_p, tech_pvt->call_id, SKINNY_OFF_HOOK); send_select_soft_keys(listener, *line_instance_p, tech_pvt->call_id, SKINNY_KEY_SET_OFF_HOOK, 0xffff); send_display_prompt_status(listener, 0, "\200\000", - *line_instance_p, tech_pvt->call_id); + *line_instance_p, tech_pvt->call_id); send_activate_call_plane(listener, *line_instance_p); if (switch_channel_get_state(channel) == CS_NEW) { switch_channel_set_state(channel, CS_HIBERNATE); } else { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(nsession), SWITCH_LOG_CRIT, - "Wow! this channel should be in CS_NEW state, but it is not!\n"); + "Wow! this channel should be in CS_NEW state, but it is not!\n"); } goto done; @@ -193,7 +193,7 @@ skinny_action_t skinny_session_dest_match_pattern(switch_core_session_t *session private_t *tech_pvt = NULL; switch_assert(session); - + channel = switch_core_session_get_channel(session); tech_pvt = switch_core_session_get_private(session); @@ -238,8 +238,8 @@ found: extension->current_application = extension->current_application->next; - if (!strcmp(current_application->application_name, "skinny-route")) { - action = SKINNY_ACTION_ROUTE; + if (!strcmp(current_application->application_name, "skinny-route") || !strcmp(current_application->application_name, "skinny-process")) { + action = SKINNY_ACTION_PROCESS; } else if (!strcmp(current_application->application_name, "skinny-drop")) { action = SKINNY_ACTION_DROP; } else if (!strcmp(current_application->application_name, "skinny-wait")) { @@ -247,7 +247,7 @@ found: *data = switch_core_session_strdup(session, current_application->application_data); } else { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, - "Unknown skinny dialplan application %s\n", current_application->application_name); + "Unknown skinny dialplan application %s\n", current_application->application_name); } } } @@ -263,13 +263,13 @@ switch_status_t skinny_session_process_dest(switch_core_session_t *session, list switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + channel = switch_core_session_get_channel(session); tech_pvt = switch_core_session_get_private(session); if (!dest) { - if (strlen(tech_pvt->caller_profile->destination_number) == 0) {/* no digit yet */ - send_start_tone(listener, SKINNY_TONE_DIALTONE, 0, line_instance, tech_pvt->call_id); + if (strlen(tech_pvt->caller_profile->destination_number) == 0) {/* no digit yet */ + send_start_tone(listener, SKINNY_TONE_DIALTONE, 0, line_instance, tech_pvt->call_id); } if (backspace) { /* backspace */ tech_pvt->caller_profile->destination_number[strlen(tech_pvt->caller_profile->destination_number)-1] = '\0'; @@ -278,23 +278,22 @@ switch_status_t skinny_session_process_dest(switch_core_session_t *session, list } send_back_space_request(listener, line_instance, tech_pvt->call_id); } - if (append_dest != '\0') {/* append digit */ - tech_pvt->caller_profile->destination_number = switch_core_sprintf(tech_pvt->caller_profile->pool, - "%s%c", tech_pvt->caller_profile->destination_number, append_dest); - } + if (append_dest != '\0') {/* append digit */ + tech_pvt->caller_profile->destination_number = switch_core_sprintf(tech_pvt->caller_profile->pool, + "%s%c", tech_pvt->caller_profile->destination_number, append_dest); + } if (strlen(tech_pvt->caller_profile->destination_number) == 1) {/* first digit */ if(!backspace) { - send_stop_tone(listener, line_instance, tech_pvt->call_id); - } - send_select_soft_keys(listener, line_instance, tech_pvt->call_id, - SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT, 0xffff); - } + send_stop_tone(listener, line_instance, tech_pvt->call_id); + } + send_select_soft_keys(listener, line_instance, tech_pvt->call_id, + SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT, 0xffff); + } } else { - tech_pvt->caller_profile->destination_number = switch_core_strdup(tech_pvt->caller_profile->pool, - dest); + tech_pvt->caller_profile->destination_number = switch_core_strdup(tech_pvt->caller_profile->pool, dest); switch_set_flag_locked(tech_pvt, TFLAG_FORCE_ROUTE); } - + switch_channel_set_state(channel, CS_ROUTING); return SWITCH_STATUS_SUCCESS; @@ -318,29 +317,29 @@ switch_status_t skinny_session_send_call_info(switch_core_session_t *session, li /* Calling party */ if (zstr((caller_party_name = switch_channel_get_variable(channel, "effective_caller_id_name"))) && - zstr((caller_party_name = switch_channel_get_variable(channel, "caller_id_name"))) && - zstr((caller_party_name = switch_channel_get_variable_partner(channel, "effective_caller_id_name"))) && - zstr((caller_party_name = switch_channel_get_variable_partner(channel, "caller_id_name")))) { + zstr((caller_party_name = switch_channel_get_variable(channel, "caller_id_name"))) && + zstr((caller_party_name = switch_channel_get_variable_partner(channel, "effective_caller_id_name"))) && + zstr((caller_party_name = switch_channel_get_variable_partner(channel, "caller_id_name")))) { caller_party_name = SWITCH_DEFAULT_CLID_NAME; } if (zstr((caller_party_number = switch_channel_get_variable(channel, "effective_caller_id_number"))) && - zstr((caller_party_number = switch_channel_get_variable(channel, "caller_id_number"))) && - zstr((caller_party_number = switch_channel_get_variable_partner(channel, "effective_caller_id_number"))) && - zstr((caller_party_number = switch_channel_get_variable_partner(channel, "caller_id_number")))) { + zstr((caller_party_number = switch_channel_get_variable(channel, "caller_id_number"))) && + zstr((caller_party_number = switch_channel_get_variable_partner(channel, "effective_caller_id_number"))) && + zstr((caller_party_number = switch_channel_get_variable_partner(channel, "caller_id_number")))) { caller_party_number = "0000000000"; } /* Called party */ if (zstr((called_party_name = switch_channel_get_variable(channel, "effective_callee_id_name"))) && - zstr((called_party_name = switch_channel_get_variable(channel, "callee_id_name"))) && - zstr((called_party_name = switch_channel_get_variable_partner(channel, "effective_callee_id_name"))) && - zstr((called_party_name = switch_channel_get_variable_partner(channel, "callee_id_name")))) { + zstr((called_party_name = switch_channel_get_variable(channel, "callee_id_name"))) && + zstr((called_party_name = switch_channel_get_variable_partner(channel, "effective_callee_id_name"))) && + zstr((called_party_name = switch_channel_get_variable_partner(channel, "callee_id_name")))) { called_party_name = SWITCH_DEFAULT_CLID_NAME; } if (zstr((called_party_number = switch_channel_get_variable(channel, "effective_callee_id_number"))) && - zstr((called_party_number = switch_channel_get_variable(channel, "callee_id_number"))) && - zstr((called_party_number = switch_channel_get_variable_partner(channel, "effective_callee_id_number"))) && - zstr((called_party_number = switch_channel_get_variable_partner(channel, "callee_id_number"))) && - zstr((called_party_number = switch_channel_get_variable(channel, "destination_number")))) { + zstr((called_party_number = switch_channel_get_variable(channel, "callee_id_number"))) && + zstr((called_party_number = switch_channel_get_variable_partner(channel, "effective_callee_id_number"))) && + zstr((called_party_number = switch_channel_get_variable_partner(channel, "callee_id_number"))) && + zstr((called_party_number = switch_channel_get_variable(channel, "destination_number")))) { called_party_number = "0000000000"; } if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND) { @@ -349,27 +348,27 @@ switch_status_t skinny_session_send_call_info(switch_core_session_t *session, li call_type = SKINNY_OUTBOUND_CALL; } skinny_send_call_info(listener, - caller_party_name, /* char calling_party_name[40], */ - caller_party_number, /* char calling_party[24], */ - called_party_name, /* char called_party_name[40], */ - called_party_number, /* char called_party[24], */ - line_instance, /* uint32_t line_instance, */ - tech_pvt->call_id, /* uint32_t call_id, */ - call_type, /* uint32_t call_type, */ - "", /* TODO char original_called_party_name[40], */ - "", /* TODO char original_called_party[24], */ - "", /* TODO char last_redirecting_party_name[40], */ - "", /* TODO char last_redirecting_party[24], */ - 0, /* TODO uint32_t original_called_party_redirect_reason, */ - 0, /* TODO uint32_t last_redirecting_reason, */ - "", /* TODO char calling_party_voice_mailbox[24], */ - "", /* TODO char called_party_voice_mailbox[24], */ - "", /* TODO char original_called_party_voice_mailbox[24], */ - "", /* TODO char last_redirecting_voice_mailbox[24], */ - 1, /* uint32_t call_instance, */ - 1, /* uint32_t call_security_status, */ - 0 /* uint32_t party_pi_restriction_bits */ - ); + caller_party_name, /* char calling_party_name[40], */ + caller_party_number, /* char calling_party[24], */ + called_party_name, /* char called_party_name[40], */ + called_party_number, /* char called_party[24], */ + line_instance, /* uint32_t line_instance, */ + tech_pvt->call_id, /* uint32_t call_id, */ + call_type, /* uint32_t call_type, */ + "", /* TODO char original_called_party_name[40], */ + "", /* TODO char original_called_party[24], */ + "", /* TODO char last_redirecting_party_name[40], */ + "", /* TODO char last_redirecting_party[24], */ + 0, /* TODO uint32_t original_called_party_redirect_reason, */ + 0, /* TODO uint32_t last_redirecting_reason, */ + "", /* TODO char calling_party_voice_mailbox[24], */ + "", /* TODO char called_party_voice_mailbox[24], */ + "", /* TODO char original_called_party_voice_mailbox[24], */ + "", /* TODO char last_redirecting_voice_mailbox[24], */ + 1, /* uint32_t call_instance, */ + 1, /* uint32_t call_security_status, */ + 0 /* uint32_t party_pi_restriction_bits */ + ); return SWITCH_STATUS_SUCCESS; } @@ -401,7 +400,7 @@ int skinny_session_send_call_info_all_callback(void *pArg, int argc, char **argv listener_t *listener = NULL; skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, - device_name, device_instance, &listener); + device_name, device_instance, &listener); if(listener) { skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); } @@ -415,7 +414,7 @@ switch_status_t skinny_session_send_call_info_all(switch_core_session_t *session helper.tech_pvt = tech_pvt; return skinny_session_walk_lines(tech_pvt->profile, - switch_core_session_get_uuid(tech_pvt->session), skinny_session_send_call_info_all_callback, &helper); + switch_core_session_get_uuid(tech_pvt->session), skinny_session_send_call_info_all_callback, &helper); } struct skinny_session_set_variables_helper { @@ -446,7 +445,7 @@ int skinny_session_set_variables_callback(void *pArg, int argc, char **argv, cha struct skinny_session_set_variables_helper *helper = pArg; char *tmp; - + helper->count++; switch_channel_set_variable_name_printf(helper->channel, device_name, "skinny_device_name_%d", helper->count); if ((tmp = switch_mprintf("%d", device_instance))) { @@ -484,7 +483,7 @@ switch_status_t skinny_session_set_variables(switch_core_session_t *session, lis switch_channel_set_variable_printf(helper.channel, "skinny_line_instance", "%d", line_instance); } status = skinny_session_walk_lines(helper.tech_pvt->profile, - switch_core_session_get_uuid(helper.tech_pvt->session), skinny_session_set_variables_callback, &helper); + switch_core_session_get_uuid(helper.tech_pvt->session), skinny_session_set_variables_callback, &helper); switch_channel_set_variable_printf(helper.channel, "skinny_lines_count", "%d", helper.count); return status; @@ -522,7 +521,7 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN listener_t *listener = NULL; skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, - device_name, device_instance, &listener); + device_name, device_instance, &listener); if(listener) { switch_channel_t *channel = switch_core_session_get_channel(helper->tech_pvt->session); helper->lines_count++; @@ -537,21 +536,21 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN if (switch_core_session_receive_message(helper->remote_session, &msg) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(helper->tech_pvt->session), SWITCH_LOG_WARNING, - "Unable to send SWITCH_MESSAGE_INDICATE_DISPLAY message to channel %s\n", - switch_core_session_get_uuid(helper->remote_session)); + "Unable to send SWITCH_MESSAGE_INDICATE_DISPLAY message to channel %s\n", + switch_core_session_get_uuid(helper->remote_session)); } } - + skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_RING_IN); send_select_soft_keys(listener, line_instance, helper->tech_pvt->call_id, SKINNY_KEY_SET_RING_IN, 0xffff); - if ((tmp = switch_mprintf("%s%s", SKINNY_DISP_FROM, helper->tech_pvt->caller_profile->destination_number))) { - send_display_prompt_status(listener, 0, tmp, line_instance, helper->tech_pvt->call_id); - switch_safe_free(tmp); - } - if ((tmp = switch_mprintf("\005\000\000\000%s", helper->tech_pvt->caller_profile->destination_number))) { - send_display_pri_notify(listener, 10 /* message_timeout */, 5 /* priority */, tmp); - switch_safe_free(tmp); - } + if ((tmp = switch_mprintf("%s%s", SKINNY_DISP_FROM, helper->tech_pvt->caller_profile->destination_number))) { + send_display_prompt_status(listener, 0, tmp, line_instance, helper->tech_pvt->call_id); + switch_safe_free(tmp); + } + if ((tmp = switch_mprintf("\005\000\000\000%s", helper->tech_pvt->caller_profile->destination_number))) { + send_display_pri_notify(listener, 10 /* message_timeout */, 5 /* priority */, tmp); + switch_safe_free(tmp); + } skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_BLINK); send_set_ringer(listener, SKINNY_RING_INSIDE, SKINNY_RING_FOREVER, 0, helper->tech_pvt->call_id); @@ -574,7 +573,7 @@ switch_call_cause_t skinny_ring_lines(private_t *tech_pvt, switch_core_session_t helper.lines_count = 0; status = skinny_session_walk_lines(tech_pvt->profile, - switch_core_session_get_uuid(tech_pvt->session), skinny_ring_lines_callback, &helper); + switch_core_session_get_uuid(tech_pvt->session), skinny_ring_lines_callback, &helper); skinny_session_set_variables(tech_pvt->session, NULL, 0); if (status != SWITCH_STATUS_SUCCESS) { @@ -593,15 +592,13 @@ switch_status_t skinny_session_ring_out(switch_core_session_t *session, listener switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + tech_pvt = switch_core_session_get_private(session); send_start_tone(listener, SKINNY_TONE_ALERT, 0, line_instance, tech_pvt->call_id); skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_RING_OUT); - send_select_soft_keys(listener, line_instance, tech_pvt->call_id, - SKINNY_KEY_SET_RING_OUT, 0xffff); - send_display_prompt_status(listener, 0, SKINNY_DISP_RING_OUT, - line_instance, tech_pvt->call_id); + send_select_soft_keys(listener, line_instance, tech_pvt->call_id, SKINNY_KEY_SET_RING_OUT, 0xffff); + send_display_prompt_status(listener, 0, SKINNY_DISP_RING_OUT, line_instance, tech_pvt->call_id); skinny_session_send_call_info(session, listener, line_instance); return SWITCH_STATUS_SUCCESS; @@ -639,18 +636,18 @@ int skinny_session_answer_callback(void *pArg, int argc, char **argv, char **col skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, device_name, device_instance, &listener); if(listener) { - if(!strcmp(device_name, helper->listener->device_name) - && (device_instance == helper->listener->device_instance) - && (line_instance == helper->line_instance)) {/* the answering line */ - /* nothing */ - } else { - send_define_current_time_date(listener); - send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); - skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_IN_USE_REMOTELY); - send_select_soft_keys(listener, line_instance, helper->tech_pvt->call_id, 10, 0x0002); - send_display_prompt_status(listener, 0, SKINNY_DISP_IN_USE_REMOTE, line_instance, helper->tech_pvt->call_id); - send_set_ringer(listener, SKINNY_RING_OFF, SKINNY_RING_FOREVER, 0, helper->tech_pvt->call_id); - } + if(!strcmp(device_name, helper->listener->device_name) + && (device_instance == helper->listener->device_instance) + && (line_instance == helper->line_instance)) {/* the answering line */ + /* nothing */ + } else { + send_define_current_time_date(listener); + send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); + skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_IN_USE_REMOTELY); + send_select_soft_keys(listener, line_instance, helper->tech_pvt->call_id, 10, 0x0002); + send_display_prompt_status(listener, 0, SKINNY_DISP_IN_USE_REMOTE, line_instance, helper->tech_pvt->call_id); + send_set_ringer(listener, SKINNY_RING_OFF, SKINNY_RING_FOREVER, 0, helper->tech_pvt->call_id); + } } return 0; } @@ -664,15 +661,15 @@ switch_status_t skinny_session_answer(switch_core_session_t *session, listener_t switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + channel = switch_core_session_get_channel(session); tech_pvt = switch_core_session_get_private(session); - send_set_ringer(listener, SKINNY_RING_OFF, SKINNY_RING_FOREVER, 0, tech_pvt->call_id); - send_set_speaker_mode(listener, SKINNY_SPEAKER_ON); - send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); - skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_OFF_HOOK); - send_activate_call_plane(listener, line_instance); + send_set_ringer(listener, SKINNY_RING_OFF, SKINNY_RING_FOREVER, 0, tech_pvt->call_id); + send_set_speaker_mode(listener, SKINNY_SPEAKER_ON); + send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); + skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_OFF_HOOK); + send_activate_call_plane(listener, line_instance); helper.tech_pvt = tech_pvt; helper.listener = listener; @@ -696,32 +693,32 @@ switch_status_t skinny_session_start_media(switch_core_session_t *session, liste switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + channel = switch_core_session_get_channel(session); tech_pvt = switch_core_session_get_private(session); - + if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) { send_stop_tone(listener, line_instance, tech_pvt->call_id); send_open_receive_channel(listener, - tech_pvt->call_id, /* uint32_t conference_id, */ - tech_pvt->call_id, /* uint32_t pass_thru_party_id, */ - 20, /* uint32_t packets, */ - SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ - 0, /* uint32_t echo_cancel_type, */ - 0, /* uint32_t g723_bitrate, */ - 0, /* uint32_t conference_id2, */ - 0 /* uint32_t reserved[10] */ - ); + tech_pvt->call_id, /* uint32_t conference_id, */ + tech_pvt->call_id, /* uint32_t pass_thru_party_id, */ + 20, /* uint32_t packets, */ + SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ + 0, /* uint32_t echo_cancel_type, */ + 0, /* uint32_t g723_bitrate, */ + 0, /* uint32_t conference_id2, */ + 0 /* uint32_t reserved[10] */ + ); } if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) { skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_CONNECTED); send_select_soft_keys(listener, line_instance, tech_pvt->call_id, - SKINNY_KEY_SET_CONNECTED, 0xffff); + SKINNY_KEY_SET_CONNECTED, 0xffff); send_display_prompt_status(listener, - 0, - SKINNY_DISP_CONNECTED, - line_instance, - tech_pvt->call_id); + 0, + SKINNY_DISP_CONNECTED, + line_instance, + tech_pvt->call_id); } skinny_session_send_call_info(session, listener, line_instance); @@ -735,7 +732,7 @@ switch_status_t skinny_session_hold_line(switch_core_session_t *session, listene switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + tech_pvt = switch_core_session_get_private(session); skinny_session_stop_media(session, listener, line_instance); @@ -746,7 +743,7 @@ switch_status_t skinny_session_hold_line(switch_core_session_t *session, listene skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_HOLD); send_select_soft_keys(listener, line_instance, tech_pvt->call_id, SKINNY_KEY_SET_ON_HOLD, 0xffff); send_display_prompt_status(listener, 0, SKINNY_DISP_HOLD, - line_instance, tech_pvt->call_id); + line_instance, tech_pvt->call_id); skinny_session_send_call_info(tech_pvt->session, listener, line_instance); send_set_speaker_mode(listener, SKINNY_SPEAKER_OFF); send_set_ringer(listener, SKINNY_RING_OFF, SKINNY_RING_FOREVER, 0, tech_pvt->call_id); @@ -761,7 +758,7 @@ switch_status_t skinny_session_unhold_line(switch_core_session_t *session, liste switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + tech_pvt = switch_core_session_get_private(session); skinny_hold_active_calls(listener); @@ -784,7 +781,7 @@ switch_status_t skinny_session_transfer(switch_core_session_t *session, listener switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + tech_pvt = switch_core_session_get_private(session); channel = switch_core_session_get_channel(session); remote_uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE); @@ -824,22 +821,22 @@ switch_status_t skinny_session_stop_media(switch_core_session_t *session, listen switch_assert(session); switch_assert(listener); switch_assert(listener->profile); - + tech_pvt = switch_core_session_get_private(session); switch_clear_flag_locked(tech_pvt, TFLAG_IO); send_close_receive_channel(listener, - tech_pvt->call_id, /* uint32_t conference_id, */ - tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ - tech_pvt->call_id /* uint32_t conference_id2, */ - ); + tech_pvt->call_id, /* uint32_t conference_id, */ + tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ + tech_pvt->call_id /* uint32_t conference_id2, */ + ); send_stop_media_transmission(listener, - tech_pvt->call_id, /* uint32_t conference_id, */ - tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ - tech_pvt->call_id /* uint32_t conference_id2, */ - ); - + tech_pvt->call_id, /* uint32_t conference_id, */ + tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ + tech_pvt->call_id /* uint32_t conference_id2, */ + ); + return SWITCH_STATUS_SUCCESS; } @@ -869,13 +866,13 @@ int skinny_hold_active_calls_callback(void *pArg, int argc, char **argv, char ** /* char *channel_uuid = argv[14]; */ uint32_t call_id = atoi(argv[15]); /* uint32_t call_state = atoi(argv[16]); */ - - session = skinny_profile_find_session(helper->listener->profile, helper->listener, &line_instance, call_id); - if(session) { - skinny_session_hold_line(session, helper->listener, line_instance); + session = skinny_profile_find_session(helper->listener->profile, helper->listener, &line_instance, call_id); + + if(session) { + skinny_session_hold_line(session, helper->listener, line_instance); switch_core_session_rwunlock(session); - } + } return 0; } @@ -884,22 +881,22 @@ switch_status_t skinny_hold_active_calls(listener_t *listener) { struct skinny_hold_active_calls_helper helper = {0}; char *sql; - + helper.listener = listener; - + if ((sql = switch_mprintf( - "SELECT skinny_lines.*, channel_uuid, call_id, call_state " - "FROM skinny_active_lines " - "INNER JOIN skinny_lines " - "ON skinny_active_lines.device_name = skinny_lines.device_name " - "AND skinny_active_lines.device_instance = skinny_lines.device_instance " - "AND skinny_active_lines.line_instance = skinny_lines.line_instance " - "WHERE skinny_lines.device_name='%s' AND skinny_lines.device_instance=%d AND (call_state=%d OR call_state=%d)", - listener->device_name, listener->device_instance, SKINNY_PROCEED, SKINNY_CONNECTED))) { + "SELECT skinny_lines.*, channel_uuid, call_id, call_state " + "FROM skinny_active_lines " + "INNER JOIN skinny_lines " + "ON skinny_active_lines.device_name = skinny_lines.device_name " + "AND skinny_active_lines.device_instance = skinny_lines.device_instance " + "AND skinny_active_lines.line_instance = skinny_lines.line_instance " + "WHERE skinny_lines.device_name='%s' AND skinny_lines.device_instance=%d AND (call_state=%d OR call_state=%d)", + listener->device_name, listener->device_instance, SKINNY_PROCEED, SKINNY_CONNECTED))) { skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_hold_active_calls_callback, &helper); switch_safe_free(sql); } - + return SWITCH_STATUS_SUCCESS; } @@ -934,7 +931,7 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r if (!zstr(listener->device_name)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "A device is already registred on this listener.\n"); + "A device is already registred on this listener.\n"); send_register_reject(listener, "A device is already registred on this listener"); return SWITCH_STATUS_FALSE; } @@ -945,36 +942,36 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r if (switch_xml_locate_user("id", request->data.reg.device_name, profile->domain, "", &xroot, &xdomain, &xuser, &xgroup, params) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find device [%s@%s]\n" - "You must define a domain called '%s' in your directory and add a user with id=\"%s\".\n" - , request->data.reg.device_name, profile->domain, profile->domain, request->data.reg.device_name); + "You must define a domain called '%s' in your directory and add a user with id=\"%s\".\n" + , request->data.reg.device_name, profile->domain, profile->domain, request->data.reg.device_name); send_register_reject(listener, "Device not found"); status = SWITCH_STATUS_FALSE; goto end; } skinny_profile_find_listener_by_device_name_and_instance(listener->profile, - request->data.reg.device_name, request->data.reg.instance, &listener2); + request->data.reg.device_name, request->data.reg.instance, &listener2); if (listener2) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Device %s:%d is already registred on another listener.\n", - request->data.reg.device_name, request->data.reg.instance); + "Device %s:%d is already registred on another listener.\n", + request->data.reg.device_name, request->data.reg.instance); send_register_reject(listener, "Device is already registred on another listener"); status = SWITCH_STATUS_FALSE; goto end; } if ((sql = switch_mprintf( - "INSERT INTO skinny_devices " - "(name, user_id, instance, ip, type, max_streams, codec_string) " - "VALUES ('%s','%d','%d', '%s', '%d', '%d', '%s')", - request->data.reg.device_name, - request->data.reg.user_id, - request->data.reg.instance, - inet_ntoa(request->data.reg.ip), - request->data.reg.device_type, - request->data.reg.max_streams, - "" /* codec_string */ - ))) { + "INSERT INTO skinny_devices " + "(name, user_id, instance, ip, type, max_streams, codec_string) " + "VALUES ('%s','%d','%d', '%s', '%d', '%d', '%s')", + request->data.reg.device_name, + request->data.reg.user_id, + request->data.reg.instance, + inet_ntoa(request->data.reg.ip), + request->data.reg.device_type, + request->data.reg.max_streams, + "" /* codec_string */ + ))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } @@ -1018,16 +1015,16 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r const char *forward_noanswer = switch_xml_attr_soft(xbutton, "forward-noanswer"); uint32_t noanswer_duration = atoi(switch_xml_attr_soft(xbutton, "noanswer-duration")); if ((sql = switch_mprintf( - "INSERT INTO skinny_lines " - "(device_name, device_instance, position, line_instance, " - "label, value, caller_name, " - "ring_on_idle, ring_on_active, busy_trigger, " - "forward_all, forward_busy, forward_noanswer, noanswer_duration) " - "VALUES('%s', %d, %d, %d, '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', %d)", - request->data.reg.device_name, request->data.reg.instance, position, line_instance, - label, value, caller_name, - ring_on_idle, ring_on_active, busy_trigger, - forward_all, forward_busy, forward_noanswer, noanswer_duration))) { + "INSERT INTO skinny_lines " + "(device_name, device_instance, position, line_instance, " + "label, value, caller_name, " + "ring_on_idle, ring_on_active, busy_trigger, " + "forward_all, forward_busy, forward_noanswer, noanswer_duration) " + "VALUES('%s', %d, %d, %d, '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', %d)", + request->data.reg.device_name, request->data.reg.instance, position, line_instance, + label, value, caller_name, + ring_on_idle, ring_on_active, busy_trigger, + forward_all, forward_busy, forward_noanswer, noanswer_duration))) { char *token, *url; skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); @@ -1049,16 +1046,16 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r } else { const char *settings = switch_xml_attr_soft(xbutton, "settings"); if ((sql = switch_mprintf( - "INSERT INTO skinny_buttons " - "(device_name, device_instance, position, type, label, value, settings) " - "VALUES('%s', %d, %d, %d, '%s', '%s', '%s')", - request->data.reg.device_name, - request->data.reg.instance, - position, - type, - label, - value, - settings))) { + "INSERT INTO skinny_buttons " + "(device_name, device_instance, position, type, label, value, settings) " + "VALUES('%s', %d, %d, %d, '%s', '%s', '%s')", + request->data.reg.device_name, + request->data.reg.instance, + position, + type, + label, + value, + settings))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } @@ -1105,11 +1102,11 @@ switch_status_t skinny_handle_port_message(listener_t *listener, skinny_message_ skinny_check_data_length(request, sizeof(request->data.as_uint16)); if ((sql = switch_mprintf( - "UPDATE skinny_devices SET port=%d WHERE name='%s' and instance=%d", - request->data.port.port, - listener->device_name, - listener->device_instance - ))) { + "UPDATE skinny_devices SET port=%d WHERE name='%s' and instance=%d", + request->data.port.port, + listener->device_name, + listener->device_instance + ))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } @@ -1128,7 +1125,7 @@ switch_status_t skinny_handle_keypad_button_message(listener_t *listener, skinny if (request->data.keypad_button.line_instance > 0) { line_instance = request->data.keypad_button.line_instance; } - call_id = request->data.keypad_button.call_id; + call_id = request->data.keypad_button.call_id; } session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); @@ -1156,8 +1153,8 @@ switch_status_t skinny_handle_keypad_button_message(listener_t *listener, skinny /* TODO check call_id and line */ if((skinny_line_get_state(listener, line_instance, tech_pvt->call_id) == SKINNY_OFF_HOOK)) { - - skinny_session_process_dest(session, listener, line_instance, NULL, digit, 0); + + skinny_session_process_dest(session, listener, line_instance, NULL, digit, 0); } else { if(digit != '\0') { switch_dtmf_t dtmf = { 0, switch_core_default_dtmf_duration(0)}; @@ -1208,19 +1205,19 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess skinny_check_data_length(request, sizeof(request->data.stimulus)-sizeof(request->data.stimulus.call_id)); if(skinny_check_data_length_soft(request, sizeof(request->data.stimulus))) { - call_id = request->data.stimulus.call_id; + call_id = request->data.stimulus.call_id; } switch(request->data.stimulus.instance_type) { case SKINNY_BUTTON_LAST_NUMBER_REDIAL: - skinny_create_incoming_session(listener, &line_instance, &session); + skinny_create_incoming_session(listener, &line_instance, &session); skinny_session_process_dest(session, listener, line_instance, "redial", '\0', 0); break; case SKINNY_BUTTON_SPEED_DIAL: skinny_speed_dial_get(listener, request->data.stimulus.instance, &button); if(strlen(button->line) > 0) { - skinny_create_incoming_session(listener, &line_instance, &session); - skinny_session_process_dest(session, listener, line_instance, button->line, '\0', 0); + skinny_create_incoming_session(listener, &line_instance, &session); + skinny_session_process_dest(session, listener, line_instance, button->line, '\0', 0); } break; case SKINNY_BUTTON_HOLD: @@ -1234,11 +1231,11 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); if(session) { - status = skinny_session_transfer(session, listener, line_instance); + status = skinny_session_transfer(session, listener, line_instance); } break; case SKINNY_BUTTON_VOICEMAIL: - skinny_create_incoming_session(listener, &line_instance, &session); + skinny_create_incoming_session(listener, &line_instance, &session); skinny_session_process_dest(session, listener, line_instance, "vmain", '\0', 0); break; default: @@ -1263,7 +1260,7 @@ switch_status_t skinny_handle_off_hook_message(listener_t *listener, skinny_mess if (request->data.off_hook.line_instance > 0) { line_instance = request->data.off_hook.line_instance; } - call_id = request->data.off_hook.call_id; + call_id = request->data.off_hook.call_id; } session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); @@ -1272,10 +1269,10 @@ switch_status_t skinny_handle_off_hook_message(listener_t *listener, skinny_mess skinny_session_answer(session, listener, line_instance); } else { /* start a new call */ skinny_create_incoming_session(listener, &line_instance, &session); - tech_pvt = switch_core_session_get_private(session); - assert(tech_pvt != NULL); + tech_pvt = switch_core_session_get_private(session); + assert(tech_pvt != NULL); - skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 0); + skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 0); } if(session) { @@ -1294,7 +1291,7 @@ switch_status_t skinny_handle_on_hook_message(listener_t *listener, skinny_messa if(skinny_check_data_length_soft(request, sizeof(request->data.on_hook))) { line_instance = request->data.on_hook.line_instance; - call_id = request->data.on_hook.call_id; + call_id = request->data.on_hook.call_id; } session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); @@ -1416,17 +1413,17 @@ switch_status_t skinny_handle_config_stat_request(listener_t *listener, skinny_m message->length = 4 + sizeof(message->data.config_res); if ((sql = switch_mprintf( - "SELECT name, user_id, instance, '' AS user_name, '' AS server_name, " - "(SELECT COUNT(*) FROM skinny_lines WHERE device_name='%s' AND device_instance=%d) AS number_lines, " - "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND device_instance=%d AND type=%d) AS number_speed_dials " - "FROM skinny_devices WHERE name='%s' ", - listener->device_name, - listener->device_instance, - listener->device_name, - listener->device_instance, - SKINNY_BUTTON_SPEED_DIAL, - listener->device_name - ))) { + "SELECT name, user_id, instance, '' AS user_name, '' AS server_name, " + "(SELECT COUNT(*) FROM skinny_lines WHERE device_name='%s' AND device_instance=%d) AS number_lines, " + "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND device_instance=%d AND type=%d) AS number_speed_dials " + "FROM skinny_devices WHERE name='%s' ", + listener->device_name, + listener->device_instance, + listener->device_name, + listener->device_instance, + SKINNY_BUTTON_SPEED_DIAL, + listener->device_name + ))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_config_stat_res_callback, message); switch_safe_free(sql); } @@ -1493,26 +1490,26 @@ switch_status_t skinny_handle_button_template_request(listener_t *listener, skin /* Add buttons */ if ((sql = switch_mprintf( - "SELECT device_name, device_instance, position, MIN(type, %d) AS type " - "FROM skinny_buttons " - "WHERE device_name='%s' AND device_instance=%d " - "ORDER BY position", - SKINNY_BUTTON_UNDEFINED, - listener->device_name, listener->device_instance - ))) { + "SELECT device_name, device_instance, position, MIN(type, %d) AS type " + "FROM skinny_buttons " + "WHERE device_name='%s' AND device_instance=%d " + "ORDER BY position", + SKINNY_BUTTON_UNDEFINED, + listener->device_name, listener->device_instance + ))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_handle_button_template_request_callback, &helper); switch_safe_free(sql); } /* Add lines */ if ((sql = switch_mprintf( - "SELECT device_name, device_instance, position, %d AS type " - "FROM skinny_lines " - "WHERE device_name='%s' AND device_instance=%d " - "ORDER BY position", - SKINNY_BUTTON_LINE, - listener->device_name, listener->device_instance - ))) { + "SELECT device_name, device_instance, position, %d AS type " + "FROM skinny_lines " + "WHERE device_name='%s' AND device_instance=%d " + "ORDER BY position", + SKINNY_BUTTON_LINE, + listener->device_name, listener->device_instance + ))) { skinny_execute_sql_callback(profile, profile->sql_mutex, sql, skinny_handle_button_template_request_callback, &helper); switch_safe_free(sql); } @@ -1527,7 +1524,7 @@ switch_status_t skinny_handle_button_template_request(listener_t *listener, skin } } - + return skinny_send_reply(listener, message);; } @@ -1545,13 +1542,13 @@ switch_status_t skinny_handle_version_request(listener_t *listener, skinny_messa } } } - + if (!zstr(listener->firmware_version)) { return send_version(listener, listener->firmware_version); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Device %s:%d is requesting for firmware version, but none is set.\n", - listener->device_name, listener->device_instance); + "Device %s:%d is requesting for firmware version, but none is set.\n", + listener->device_name, listener->device_instance); return SWITCH_STATUS_SUCCESS; } } @@ -1604,15 +1601,15 @@ switch_status_t skinny_handle_capabilities_response(listener_t *listener, skinny } codec_string[string_len] = '\0'; if ((sql = switch_mprintf( - "UPDATE skinny_devices SET codec_string='%s' WHERE name='%s'", - codec_string, - listener->device_name - ))) { + "UPDATE skinny_devices SET codec_string='%s' WHERE name='%s'", + codec_string, + listener->device_name + ))) { skinny_execute_sql(profile, sql, profile->sql_mutex); switch_safe_free(sql); } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "Codecs %s supported.\n", codec_string); + "Codecs %s supported.\n", codec_string); return SWITCH_STATUS_SUCCESS; } @@ -1623,9 +1620,9 @@ switch_status_t skinny_handle_alarm(listener_t *listener, skinny_message_t *requ skinny_check_data_length(request, sizeof(request->data.alarm)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, - "Received alarm: Severity=%d, DisplayMessage=%s, Param1=%d, Param2=%d.\n", - request->data.alarm.alarm_severity, request->data.alarm.display_message, - request->data.alarm.alarm_param1, request->data.alarm.alarm_param2); + "Received alarm: Severity=%d, DisplayMessage=%s, Param1=%d, Param2=%d.\n", + request->data.alarm.alarm_severity, request->data.alarm.display_message, + request->data.alarm.alarm_param1, request->data.alarm.alarm_param2); /* skinny::alarm event */ skinny_device_event(listener, &event, SWITCH_EVENT_CUSTOM, SKINNY_EVENT_ALARM); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-Alarm-Severity", "%d", request->data.alarm.alarm_severity); @@ -1679,41 +1676,41 @@ switch_status_t skinny_handle_open_receive_channel_ack_message(listener_t *liste tech_pvt->remote_sdp_audio_port = request->data.open_receive_channel_ack.port; tech_pvt->rtp_session = switch_rtp_new(tech_pvt->local_sdp_audio_ip, - tech_pvt->local_sdp_audio_port, - tech_pvt->remote_sdp_audio_ip, - tech_pvt->remote_sdp_audio_port, - tech_pvt->agreed_pt, - tech_pvt->read_impl.samples_per_packet, - tech_pvt->codec_ms * 1000, - (switch_rtp_flag_t) 0, "soft", &err, - switch_core_session_get_pool(session)); + tech_pvt->local_sdp_audio_port, + tech_pvt->remote_sdp_audio_ip, + tech_pvt->remote_sdp_audio_port, + tech_pvt->agreed_pt, + tech_pvt->read_impl.samples_per_packet, + tech_pvt->codec_ms * 1000, + (switch_rtp_flag_t) 0, "soft", &err, + switch_core_session_get_pool(session)); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, - "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d [%s]\n", - switch_channel_get_name(channel), - tech_pvt->local_sdp_audio_ip, - tech_pvt->local_sdp_audio_port, - tech_pvt->remote_sdp_audio_ip, - tech_pvt->remote_sdp_audio_port, - tech_pvt->agreed_pt, - tech_pvt->read_impl.microseconds_per_packet / 1000, - switch_rtp_ready(tech_pvt->rtp_session) ? "SUCCESS" : err); + "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d [%s]\n", + switch_channel_get_name(channel), + tech_pvt->local_sdp_audio_ip, + tech_pvt->local_sdp_audio_port, + tech_pvt->remote_sdp_audio_ip, + tech_pvt->remote_sdp_audio_port, + tech_pvt->agreed_pt, + tech_pvt->read_impl.microseconds_per_packet / 1000, + switch_rtp_ready(tech_pvt->rtp_session) ? "SUCCESS" : err); #ifdef WIN32 addr.s_addr = inet_addr((uint16_t) tech_pvt->local_sdp_audio_ip); #else inet_aton(tech_pvt->local_sdp_audio_ip, &addr); #endif send_start_media_transmission(listener, - tech_pvt->call_id, /* uint32_t conference_id, */ - tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ - addr.s_addr, /* uint32_t remote_ip, */ - tech_pvt->local_sdp_audio_port, /* uint32_t remote_port, */ - 20, /* uint32_t ms_per_packet, */ - SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ - 184, /* uint32_t precedence, */ - 0, /* uint32_t silence_suppression, */ - 0, /* uint16_t max_frames_per_packet, */ - 0 /* uint32_t g723_bitrate */ - ); + tech_pvt->call_id, /* uint32_t conference_id, */ + tech_pvt->party_id, /* uint32_t pass_thru_party_id, */ + addr.s_addr, /* uint32_t remote_ip, */ + tech_pvt->local_sdp_audio_port, /* uint32_t remote_port, */ + 20, /* uint32_t ms_per_packet, */ + SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ + 184, /* uint32_t precedence, */ + 0, /* uint32_t silence_suppression, */ + 0, /* uint16_t max_frames_per_packet, */ + 0 /* uint32_t g723_bitrate */ + ); switch_set_flag_locked(tech_pvt, TFLAG_IO); if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND) { @@ -1725,8 +1722,8 @@ switch_status_t skinny_handle_open_receive_channel_ack_message(listener_t *liste } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unable to find session for device %s:%d (call id=%d).\n", - listener->device_name, listener->device_instance, request->data.open_receive_channel_ack.pass_thru_party_id); + "Unable to find session for device %s:%d (call id=%d).\n", + listener->device_name, listener->device_instance, request->data.open_receive_channel_ack.pass_thru_party_id); } end: if(session) { @@ -1749,7 +1746,7 @@ switch_status_t skinny_handle_soft_key_set_request(listener_t *listener, skinny_ skinny_send_reply(listener, message); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Profile %s doesn't have a default .\n", listener->profile->name); + "Profile %s doesn't have a default .\n", listener->profile->name); } /* Init the states */ @@ -1770,26 +1767,23 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn if(skinny_check_data_length_soft(request, sizeof(request->data.soft_key_event))) { line_instance = request->data.soft_key_event.line_instance; - call_id = request->data.soft_key_event.call_id; + call_id = request->data.soft_key_event.call_id; } switch(request->data.soft_key_event.event) { case SOFTKEY_REDIAL: - status = skinny_create_incoming_session(listener, &line_instance, &session); - - skinny_session_process_dest(session, listener, line_instance, "redial", '\0', 0); + status = skinny_create_incoming_session(listener, &line_instance, &session); + skinny_session_process_dest(session, listener, line_instance, "redial", '\0', 0); break; case SOFTKEY_NEWCALL: - status = skinny_create_incoming_session(listener, &line_instance, &session); - - skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 0); + status = skinny_create_incoming_session(listener, &line_instance, &session); + skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 0); break; case SOFTKEY_HOLD: - session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); - - if(session) { - status = skinny_session_hold_line(session, listener, line_instance); - } + session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); + if(session) { + status = skinny_session_hold_line(session, listener, line_instance); + } break; case SOFTKEY_TRANSFER: session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); @@ -1799,38 +1793,33 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn } break; case SOFTKEY_BACKSPACE: - session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); - - if(session) { - skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 1); - } + session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); + if(session) { + skinny_session_process_dest(session, listener, line_instance, NULL, '\0', 1); + } break; case SOFTKEY_ENDCALL: - session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); - - if(session) { - channel = switch_core_session_get_channel(session); - - switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); - } + session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); + if(session) { + channel = switch_core_session_get_channel(session); + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + } break; case SOFTKEY_RESUME: - session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); - - if(session) { - status = skinny_session_unhold_line(session, listener, line_instance); - } + session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); + if(session) { + status = skinny_session_unhold_line(session, listener, line_instance); + } break; case SOFTKEY_ANSWER: - session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); - - if(session) { + session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id); + if(session) { status = skinny_session_answer(session, listener, line_instance); - } + } break; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unknown SoftKeyEvent type: %d.\n", request->data.soft_key_event.event); + "Unknown SoftKeyEvent type: %d.\n", request->data.soft_key_event.event); } if(session) { @@ -1877,8 +1866,8 @@ switch_status_t skinny_handle_soft_key_template_request(listener_t *listener, sk message->data.soft_key_template.total_soft_key_count = 21; memcpy(message->data.soft_key_template.soft_key, - soft_key_template_default, - sizeof(soft_key_template_default)); + soft_key_template_default, + sizeof(soft_key_template_default)); skinny_send_reply(listener, message); @@ -1892,11 +1881,11 @@ switch_status_t skinny_headset_status_message(listener_t *listener, skinny_messa skinny_check_data_length(request, sizeof(request->data.headset_status)); if ((sql = switch_mprintf( - "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d", - (request->data.headset_status.mode==1) ? SKINNY_ACCESSORY_STATE_OFFHOOK : SKINNY_ACCESSORY_STATE_ONHOOK, - listener->device_name, - listener->device_instance - ))) { + "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d", + (request->data.headset_status.mode==1) ? SKINNY_ACCESSORY_STATE_OFFHOOK : SKINNY_ACCESSORY_STATE_ONHOOK, + listener->device_name, + listener->device_instance + ))) { skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); switch_safe_free(sql); } @@ -2035,33 +2024,33 @@ switch_status_t skinny_handle_accessory_status_message(listener_t *listener, ski switch(request->data.accessory_status.accessory_id) { case SKINNY_ACCESSORY_HEADSET: if ((sql = switch_mprintf( - "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d", - request->data.accessory_status.accessory_status, - listener->device_name, - listener->device_instance - ))) { + "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d", + request->data.accessory_status.accessory_status, + listener->device_name, + listener->device_instance + ))) { skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); switch_safe_free(sql); } break; case SKINNY_ACCESSORY_HANDSET: if ((sql = switch_mprintf( - "UPDATE skinny_devices SET handset=%d WHERE name='%s' and instance=%d", - request->data.accessory_status.accessory_status, - listener->device_name, - listener->device_instance - ))) { + "UPDATE skinny_devices SET handset=%d WHERE name='%s' and instance=%d", + request->data.accessory_status.accessory_status, + listener->device_name, + listener->device_instance + ))) { skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); switch_safe_free(sql); } break; case SKINNY_ACCESSORY_SPEAKER: if ((sql = switch_mprintf( - "UPDATE skinny_devices SET speaker=%d WHERE name='%s' and instance=%d", - request->data.accessory_status.accessory_status, - listener->device_name, - listener->device_instance - ))) { + "UPDATE skinny_devices SET speaker=%d WHERE name='%s' and instance=%d", + request->data.accessory_status.accessory_status, + listener->device_name, + listener->device_instance + ))) { skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex); switch_safe_free(sql); } @@ -2077,7 +2066,7 @@ switch_status_t skinny_handle_xml_alarm(listener_t *listener, skinny_message_t * char *tmp = NULL; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, - "Received XML alarm.\n"); + "Received XML alarm.\n"); /* skinny::xml_alarm event */ skinny_device_event(listener, &event, SWITCH_EVENT_CUSTOM, SKINNY_EVENT_XML_ALARM); /* Ensure that the body is null-terminated */ @@ -2095,12 +2084,12 @@ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *re { if (listener->profile->debug >= 10 || request->type != KEEP_ALIVE_MESSAGE) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "Received %s (type=%x,length=%d) from %s:%d.\n", skinny_message_type2str(request->type), request->type, request->length, - listener->device_name, listener->device_instance); + "Received %s (type=%x,length=%d) from %s:%d.\n", skinny_message_type2str(request->type), request->type, request->length, + listener->device_name, listener->device_instance); } if(zstr(listener->device_name) && request->type != REGISTER_MESSAGE && request->type != ALARM_MESSAGE && request->type != XML_ALARM_MESSAGE) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Device should send a register message first. Received %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); + "Device should send a register message first. Received %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); return SWITCH_STATUS_FALSE; } switch(request->type) { @@ -2172,7 +2161,7 @@ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *re return skinny_handle_xml_alarm(listener, request); default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unhandled %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); + "Unhandled %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); return SWITCH_STATUS_SUCCESS; } } diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.c b/src/mod/endpoints/mod_skinny/skinny_tables.c index 59bb4a1f2f..f5ce877f27 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.c +++ b/src/mod/endpoints/mod_skinny/skinny_tables.c @@ -108,181 +108,181 @@ struct skinny_table SKINNY_MESSAGE_TYPES[] = { {XML_ALARM_MESSAGE, "XMLAlarmMessage"}, {0, NULL} }; -SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMessage") + SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMessage") SKINNY_DECLARE_STR2ID(skinny_str2message_type, SKINNY_MESSAGE_TYPES, -1) -struct skinny_table SKINNY_DEVICE_TYPES[] = { - {1, "Cisco 30 SP+"}, - {2, "Cisco 12 SP+"}, - {3, "Cisco 12 SP"}, - {4, "Cisco 12"}, - {5, "Cisco 30 VIP"}, - {6, "Cisco IP Phone 7910"}, - {7, "Cisco IP Phone 7960"}, - {8, "Cisco IP Phone 7940"}, - {9, "Cisco IP Phone 7935"}, - {12, "Cisco ATA 186"}, - {365, "Cisco IP Phone CP-7921G"}, - {404, "Cisco IP Phone CP-7962G"}, - {436, "Cisco IP Phone CP-7965G"}, - {30018, "Cisco IP Phone CP-7961G"}, - {30019, "Cisco IP Phone 7936"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType") + struct skinny_table SKINNY_DEVICE_TYPES[] = { + {1, "Cisco 30 SP+"}, + {2, "Cisco 12 SP+"}, + {3, "Cisco 12 SP"}, + {4, "Cisco 12"}, + {5, "Cisco 30 VIP"}, + {6, "Cisco IP Phone 7910"}, + {7, "Cisco IP Phone 7960"}, + {8, "Cisco IP Phone 7940"}, + {9, "Cisco IP Phone 7935"}, + {12, "Cisco ATA 186"}, + {365, "Cisco IP Phone CP-7921G"}, + {404, "Cisco IP Phone CP-7962G"}, + {436, "Cisco IP Phone CP-7965G"}, + {30018, "Cisco IP Phone CP-7961G"}, + {30019, "Cisco IP Phone 7936"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType") SKINNY_DECLARE_STR2ID(skinny_str2device_type, SKINNY_DEVICE_TYPES, -1) -struct skinny_table SKINNY_RING_TYPES[] = { - {SKINNY_RING_OFF, "RingOff"}, - {SKINNY_RING_INSIDE, "RingInside"}, - {SKINNY_RING_OUTSIDE, "RingOutside"}, - {SKINNY_RING_FEATURE, "RingFeature"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_ring_type2str, SKINNY_RING_TYPES, "RingTypeUnknown") + struct skinny_table SKINNY_RING_TYPES[] = { + {SKINNY_RING_OFF, "RingOff"}, + {SKINNY_RING_INSIDE, "RingInside"}, + {SKINNY_RING_OUTSIDE, "RingOutside"}, + {SKINNY_RING_FEATURE, "RingFeature"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_ring_type2str, SKINNY_RING_TYPES, "RingTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_type, SKINNY_RING_TYPES, -1) -struct skinny_table SKINNY_RING_MODES[] = { - {SKINNY_RING_FOREVER, "RingForever"}, - {SKINNY_RING_ONCE, "RingOnce"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_ring_mode2str, SKINNY_RING_MODES, "RingModeUnknown") + struct skinny_table SKINNY_RING_MODES[] = { + {SKINNY_RING_FOREVER, "RingForever"}, + {SKINNY_RING_ONCE, "RingOnce"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_ring_mode2str, SKINNY_RING_MODES, "RingModeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_mode, SKINNY_RING_MODES, -1) -struct skinny_table SKINNY_BUTTONS[] = { - {SKINNY_BUTTON_UNKNOWN, "Unknown"}, - {SKINNY_BUTTON_LAST_NUMBER_REDIAL, "LastNumberRedial"}, - {SKINNY_BUTTON_SPEED_DIAL, "SpeedDial"}, - {SKINNY_BUTTON_HOLD, "Hold"}, - {SKINNY_BUTTON_TRANSFER, "Transfer"}, - {SKINNY_BUTTON_LINE, "Line"}, - {SKINNY_BUTTON_VOICEMAIL, "Voicemail"}, - {SKINNY_BUTTON_PRIVACY, "Privacy"}, - {SKINNY_BUTTON_SERVICE_URL, "ServiceUrl"}, - {SKINNY_BUTTON_UNDEFINED, "Undefined"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_button2str, SKINNY_BUTTONS, "Unknown") + struct skinny_table SKINNY_BUTTONS[] = { + {SKINNY_BUTTON_UNKNOWN, "Unknown"}, + {SKINNY_BUTTON_LAST_NUMBER_REDIAL, "LastNumberRedial"}, + {SKINNY_BUTTON_SPEED_DIAL, "SpeedDial"}, + {SKINNY_BUTTON_HOLD, "Hold"}, + {SKINNY_BUTTON_TRANSFER, "Transfer"}, + {SKINNY_BUTTON_LINE, "Line"}, + {SKINNY_BUTTON_VOICEMAIL, "Voicemail"}, + {SKINNY_BUTTON_PRIVACY, "Privacy"}, + {SKINNY_BUTTON_SERVICE_URL, "ServiceUrl"}, + {SKINNY_BUTTON_UNDEFINED, "Undefined"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_button2str, SKINNY_BUTTONS, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2button, SKINNY_BUTTONS, -1) -struct skinny_table SKINNY_SOFT_KEY_EVENTS[] = { - {SOFTKEY_REDIAL, "SoftkeyRedial"}, - {SOFTKEY_NEWCALL, "SoftkeyNewcall"}, - {SOFTKEY_HOLD, "SoftkeyHold"}, - {SOFTKEY_TRANSFER, "SoftkeyTransfer"}, - {SOFTKEY_CFWDALL, "SoftkeyCfwdall"}, - {SOFTKEY_CFWDBUSY, "SoftkeyCfwdbusy"}, - {SOFTKEY_CFWDNOANSWER, "SoftkeyCfwdnoanswer"}, - {SOFTKEY_BACKSPACE, "SoftkeyBackspace"}, - {SOFTKEY_ENDCALL, "SoftkeyEndcall"}, - {SOFTKEY_RESUME, "SoftkeyResume"}, - {SOFTKEY_ANSWER , "SoftkeyAnswer"}, - {SOFTKEY_INFO, "SoftkeyInfo"}, - {SOFTKEY_CONFRM, "SoftkeyConfrm"}, - {SOFTKEY_PARK, "SoftkeyPark"}, - {SOFTKEY_JOIN, "SoftkeyJoin"}, - {SOFTKEY_MEETMECONFRM, "SoftkeyMeetmeconfrm"}, - {SOFTKEY_CALLPICKUP, "SoftkeyCallpickup"}, - {SOFTKEY_GRPCALLPICKUP, "SoftkeyGrpcallpickup"}, - {SOFTKEY_DND, "SoftkeyDnd"}, - {SOFTKEY_IDIVERT, "SoftkeyIdivert"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_soft_key_event2str, SKINNY_SOFT_KEY_EVENTS, "SoftkeyUnknown") + struct skinny_table SKINNY_SOFT_KEY_EVENTS[] = { + {SOFTKEY_REDIAL, "SoftkeyRedial"}, + {SOFTKEY_NEWCALL, "SoftkeyNewcall"}, + {SOFTKEY_HOLD, "SoftkeyHold"}, + {SOFTKEY_TRANSFER, "SoftkeyTransfer"}, + {SOFTKEY_CFWDALL, "SoftkeyCfwdall"}, + {SOFTKEY_CFWDBUSY, "SoftkeyCfwdbusy"}, + {SOFTKEY_CFWDNOANSWER, "SoftkeyCfwdnoanswer"}, + {SOFTKEY_BACKSPACE, "SoftkeyBackspace"}, + {SOFTKEY_ENDCALL, "SoftkeyEndcall"}, + {SOFTKEY_RESUME, "SoftkeyResume"}, + {SOFTKEY_ANSWER , "SoftkeyAnswer"}, + {SOFTKEY_INFO, "SoftkeyInfo"}, + {SOFTKEY_CONFRM, "SoftkeyConfrm"}, + {SOFTKEY_PARK, "SoftkeyPark"}, + {SOFTKEY_JOIN, "SoftkeyJoin"}, + {SOFTKEY_MEETMECONFRM, "SoftkeyMeetmeconfrm"}, + {SOFTKEY_CALLPICKUP, "SoftkeyCallpickup"}, + {SOFTKEY_GRPCALLPICKUP, "SoftkeyGrpcallpickup"}, + {SOFTKEY_DND, "SoftkeyDnd"}, + {SOFTKEY_IDIVERT, "SoftkeyIdivert"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_soft_key_event2str, SKINNY_SOFT_KEY_EVENTS, "SoftkeyUnknown") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_event, SKINNY_SOFT_KEY_EVENTS, 0) -struct skinny_table SKINNY_LAMP_MODES[] = { - {SKINNY_LAMP_OFF, "Off"}, - {SKINNY_LAMP_ON, "On"}, - {SKINNY_LAMP_WINK, "Wink"}, - {SKINNY_LAMP_FLASH, "Flash"}, - {SKINNY_LAMP_BLINK, "Blink"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_lamp_mode2str, SKINNY_LAMP_MODES, "Unknown") + struct skinny_table SKINNY_LAMP_MODES[] = { + {SKINNY_LAMP_OFF, "Off"}, + {SKINNY_LAMP_ON, "On"}, + {SKINNY_LAMP_WINK, "Wink"}, + {SKINNY_LAMP_FLASH, "Flash"}, + {SKINNY_LAMP_BLINK, "Blink"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_lamp_mode2str, SKINNY_LAMP_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2lamp_mode, SKINNY_LAMP_MODES, -1) -struct skinny_table SKINNY_SPEAKER_MODES[] = { - {SKINNY_SPEAKER_ON, "SpeakerOn"}, - {SKINNY_SPEAKER_OFF, "SpeakerOff"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_speaker_mode2str, SKINNY_SPEAKER_MODES, "Unknown") + struct skinny_table SKINNY_SPEAKER_MODES[] = { + {SKINNY_SPEAKER_ON, "SpeakerOn"}, + {SKINNY_SPEAKER_OFF, "SpeakerOff"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_speaker_mode2str, SKINNY_SPEAKER_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2speaker_mode, SKINNY_SPEAKER_MODES, -1) -struct skinny_table SKINNY_KEY_SETS[] = { - {SKINNY_KEY_SET_ON_HOOK, "KeySetOnHook"}, - {SKINNY_KEY_SET_CONNECTED, "KeySetConnected"}, - {SKINNY_KEY_SET_ON_HOLD, "KeySetOnHold"}, - {SKINNY_KEY_SET_RING_IN, "KeySetRingIn"}, - {SKINNY_KEY_SET_OFF_HOOK, "KeySetOffHook"}, - {SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER, "KeySetConnectedWithTransfer"}, - {SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT, "KeySetDigitsAfterDialingFirstDigit"}, - {SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE, "KeySetConnectedWithConference"}, - {SKINNY_KEY_SET_RING_OUT, "KeySetRingOut"}, - {SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES, "KeySetOffHookWithFeatures"}, - {SKINNY_KEY_SET_IN_USE_HINT, "KeySetInUseHint"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_soft_key_set2str, SKINNY_KEY_SETS, "UNKNOWN_SOFT_KEY_SET") + struct skinny_table SKINNY_KEY_SETS[] = { + {SKINNY_KEY_SET_ON_HOOK, "KeySetOnHook"}, + {SKINNY_KEY_SET_CONNECTED, "KeySetConnected"}, + {SKINNY_KEY_SET_ON_HOLD, "KeySetOnHold"}, + {SKINNY_KEY_SET_RING_IN, "KeySetRingIn"}, + {SKINNY_KEY_SET_OFF_HOOK, "KeySetOffHook"}, + {SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER, "KeySetConnectedWithTransfer"}, + {SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT, "KeySetDigitsAfterDialingFirstDigit"}, + {SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE, "KeySetConnectedWithConference"}, + {SKINNY_KEY_SET_RING_OUT, "KeySetRingOut"}, + {SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES, "KeySetOffHookWithFeatures"}, + {SKINNY_KEY_SET_IN_USE_HINT, "KeySetInUseHint"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_soft_key_set2str, SKINNY_KEY_SETS, "UNKNOWN_SOFT_KEY_SET") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_set, SKINNY_KEY_SETS, -1) -struct skinny_table SKINNY_CALL_STATES[] = { - {SKINNY_OFF_HOOK, "OffHook"}, - {SKINNY_ON_HOOK, "OnHook"}, - {SKINNY_RING_OUT, "RingOut"}, - {SKINNY_RING_IN, "RingIn"}, - {SKINNY_CONNECTED, "Connected"}, - {SKINNY_BUSY, "Busy"}, - {SKINNY_LINE_IN_USE, "LineInUse"}, - {SKINNY_HOLD, "Hold"}, - {SKINNY_CALL_WAITING, "CallWaiting"}, - {SKINNY_CALL_TRANSFER, "CallTransfer"}, - {SKINNY_CALL_PARK, "CallPark"}, - {SKINNY_PROCEED, "Proceed"}, - {SKINNY_IN_USE_REMOTELY, "InUseRemotely"}, - {SKINNY_INVALID_NUMBER, "InvalidNumber"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_call_state2str, SKINNY_CALL_STATES, "CallStateUnknown") + struct skinny_table SKINNY_CALL_STATES[] = { + {SKINNY_OFF_HOOK, "OffHook"}, + {SKINNY_ON_HOOK, "OnHook"}, + {SKINNY_RING_OUT, "RingOut"}, + {SKINNY_RING_IN, "RingIn"}, + {SKINNY_CONNECTED, "Connected"}, + {SKINNY_BUSY, "Busy"}, + {SKINNY_LINE_IN_USE, "LineInUse"}, + {SKINNY_HOLD, "Hold"}, + {SKINNY_CALL_WAITING, "CallWaiting"}, + {SKINNY_CALL_TRANSFER, "CallTransfer"}, + {SKINNY_CALL_PARK, "CallPark"}, + {SKINNY_PROCEED, "Proceed"}, + {SKINNY_IN_USE_REMOTELY, "InUseRemotely"}, + {SKINNY_INVALID_NUMBER, "InvalidNumber"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_call_state2str, SKINNY_CALL_STATES, "CallStateUnknown") SKINNY_DECLARE_STR2ID(skinny_str2call_state, SKINNY_CALL_STATES, -1) -struct skinny_table SKINNY_DEVICE_RESET_TYPES[] = { - {SKINNY_DEVICE_RESET, "DeviceReset"}, - {SKINNY_DEVICE_RESTART, "DeviceRestart"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_device_reset_type2str, SKINNY_DEVICE_RESET_TYPES, "DeviceResetTypeUnknown") + struct skinny_table SKINNY_DEVICE_RESET_TYPES[] = { + {SKINNY_DEVICE_RESET, "DeviceReset"}, + {SKINNY_DEVICE_RESTART, "DeviceRestart"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_device_reset_type2str, SKINNY_DEVICE_RESET_TYPES, "DeviceResetTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2device_reset_type, SKINNY_DEVICE_RESET_TYPES, -1) -struct skinny_table SKINNY_ACCESSORY_TYPES[] = { - {SKINNY_ACCESSORY_NONE, "AccessoryNone"}, - {SKINNY_ACCESSORY_HEADSET, "Headset"}, - {SKINNY_ACCESSORY_HANDSET, "Handset"}, - {SKINNY_ACCESSORY_SPEAKER, "Speaker"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_accessory_type2str, SKINNY_ACCESSORY_TYPES, "AccessoryUnknown") + struct skinny_table SKINNY_ACCESSORY_TYPES[] = { + {SKINNY_ACCESSORY_NONE, "AccessoryNone"}, + {SKINNY_ACCESSORY_HEADSET, "Headset"}, + {SKINNY_ACCESSORY_HANDSET, "Handset"}, + {SKINNY_ACCESSORY_SPEAKER, "Speaker"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_accessory_type2str, SKINNY_ACCESSORY_TYPES, "AccessoryUnknown") SKINNY_DECLARE_STR2ID(skinny_str2accessory_type, SKINNY_ACCESSORY_TYPES, -1) -struct skinny_table SKINNY_ACCESSORY_STATES[] = { - {SKINNY_ACCESSORY_STATE_NONE, "AccessoryNoState"}, - {SKINNY_ACCESSORY_STATE_OFFHOOK, "OffHook"}, - {SKINNY_ACCESSORY_STATE_ONHOOK, "OnHook"}, - {0, NULL} -}; -SKINNY_DECLARE_ID2STR(skinny_accessory_state2str, SKINNY_ACCESSORY_STATES, "AccessoryStateUnknown") + struct skinny_table SKINNY_ACCESSORY_STATES[] = { + {SKINNY_ACCESSORY_STATE_NONE, "AccessoryNoState"}, + {SKINNY_ACCESSORY_STATE_OFFHOOK, "OffHook"}, + {SKINNY_ACCESSORY_STATE_ONHOOK, "OnHook"}, + {0, NULL} + }; + SKINNY_DECLARE_ID2STR(skinny_accessory_state2str, SKINNY_ACCESSORY_STATES, "AccessoryStateUnknown") SKINNY_DECLARE_STR2ID(skinny_str2accessory_state, SKINNY_ACCESSORY_STATES, -1) -/* For Emacs: - * Local Variables: - * mode:c - * indent-tabs-mode:t - * tab-width:4 - * c-basic-offset:4 - * End: - * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4: - */ + /* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: + */ diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.h b/src/mod/endpoints/mod_skinny/skinny_tables.h index 383e5bb2b1..502c0b5eb6 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.h +++ b/src/mod/endpoints/mod_skinny/skinny_tables.h @@ -36,55 +36,55 @@ /* SKINNY TABLES */ /*****************************************************************************/ struct skinny_table { - uint32_t id; - const char *name; + uint32_t id; + const char *name; }; #define SKINNY_DECLARE_ID2STR(func, TABLE, DEFAULT_STR) \ -const char *func(uint32_t id) \ + const char *func(uint32_t id) \ { \ - const char *str = DEFAULT_STR; \ - uint8_t x; \ - \ - for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1; x++) {\ - if (TABLE[x].id == id) {\ - str = TABLE[x].name;\ - break;\ - }\ - }\ - \ - return str;\ + const char *str = DEFAULT_STR; \ + uint8_t x; \ + \ + for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1; x++) {\ + if (TABLE[x].id == id) {\ + str = TABLE[x].name;\ + break;\ + }\ + }\ + \ + return str;\ } #define SKINNY_DECLARE_STR2ID(func, TABLE, DEFAULT_ID) \ -uint32_t func(const char *str)\ + uint32_t func(const char *str)\ {\ - uint32_t id = (uint32_t) DEFAULT_ID;\ - \ - if (*str > 47 && *str < 58) {\ - id = atoi(str);\ - } else {\ - uint8_t x;\ - for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1 && TABLE[x].name; x++) {\ - if (!strcasecmp(TABLE[x].name, str)) {\ - id = TABLE[x].id;\ - break;\ - }\ - }\ - }\ - return id;\ + uint32_t id = (uint32_t) DEFAULT_ID;\ + \ + if (*str > 47 && *str < 58) {\ + id = atoi(str);\ + } else {\ + uint8_t x;\ + for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1 && TABLE[x].name; x++) {\ + if (!strcasecmp(TABLE[x].name, str)) {\ + id = TABLE[x].id;\ + break;\ + }\ + }\ + }\ + return id;\ } #define SKINNY_DECLARE_PUSH_MATCH(TABLE) \ - switch_console_callback_match_t *my_matches = NULL;\ - uint8_t x;\ - for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1; x++) {\ - switch_console_push_match(&my_matches, TABLE[x].name);\ - }\ - if (my_matches) {\ - *matches = my_matches;\ - status = SWITCH_STATUS_SUCCESS;\ - } + switch_console_callback_match_t *my_matches = NULL;\ +uint8_t x;\ +for (x = 0; x < (sizeof(TABLE) / sizeof(struct skinny_table)) - 1; x++) {\ + switch_console_push_match(&my_matches, TABLE[x].name);\ +}\ +if (my_matches) {\ + *matches = my_matches;\ + status = SWITCH_STATUS_SUCCESS;\ +} extern struct skinny_table SKINNY_MESSAGE_TYPES[72]; @@ -98,20 +98,20 @@ uint32_t skinny_str2device_type(const char *str); #define SKINNY_PUSH_DEVICE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_DEVICE_TYPES) enum skinny_tone { - SKINNY_TONE_SILENCE = 0x00, - SKINNY_TONE_DIALTONE = 0x21, - SKINNY_TONE_BUSYTONE = 0x23, - SKINNY_TONE_ALERT = 0x24, - SKINNY_TONE_REORDER = 0x25, - SKINNY_TONE_CALLWAITTONE = 0x2D, - SKINNY_TONE_NOTONE = 0x7F, + SKINNY_TONE_SILENCE = 0x00, + SKINNY_TONE_DIALTONE = 0x21, + SKINNY_TONE_BUSYTONE = 0x23, + SKINNY_TONE_ALERT = 0x24, + SKINNY_TONE_REORDER = 0x25, + SKINNY_TONE_CALLWAITTONE = 0x2D, + SKINNY_TONE_NOTONE = 0x7F, }; enum skinny_ring_type { - SKINNY_RING_OFF = 1, - SKINNY_RING_INSIDE = 2, - SKINNY_RING_OUTSIDE = 3, - SKINNY_RING_FEATURE = 4 + SKINNY_RING_OFF = 1, + SKINNY_RING_INSIDE = 2, + SKINNY_RING_OUTSIDE = 3, + SKINNY_RING_FEATURE = 4 }; extern struct skinny_table SKINNY_RING_TYPES[5]; const char *skinny_ring_type2str(uint32_t id); @@ -119,8 +119,8 @@ uint32_t skinny_str2ring_type(const char *str); #define SKINNY_PUSH_RING_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_RING_TYPES) enum skinny_ring_mode { - SKINNY_RING_FOREVER = 1, - SKINNY_RING_ONCE = 2, + SKINNY_RING_FOREVER = 1, + SKINNY_RING_ONCE = 2, }; extern struct skinny_table SKINNY_RING_MODES[3]; const char *skinny_ring_mode2str(uint32_t id); @@ -129,11 +129,11 @@ uint32_t skinny_str2ring_mode(const char *str); enum skinny_lamp_mode { - SKINNY_LAMP_OFF = 1, - SKINNY_LAMP_ON = 2, - SKINNY_LAMP_WINK = 3, - SKINNY_LAMP_FLASH = 4, - SKINNY_LAMP_BLINK = 5, + SKINNY_LAMP_OFF = 1, + SKINNY_LAMP_ON = 2, + SKINNY_LAMP_WINK = 3, + SKINNY_LAMP_FLASH = 4, + SKINNY_LAMP_BLINK = 5, }; extern struct skinny_table SKINNY_LAMP_MODES[6]; const char *skinny_lamp_mode2str(uint32_t id); @@ -141,8 +141,8 @@ uint32_t skinny_str2lamp_mode(const char *str); #define SKINNY_PUSH_LAMP_MODES SKINNY_DECLARE_PUSH_MATCH(SKINNY_LAMP_MODES) enum skinny_speaker_mode { - SKINNY_SPEAKER_ON = 1, - SKINNY_SPEAKER_OFF = 2, + SKINNY_SPEAKER_ON = 1, + SKINNY_SPEAKER_OFF = 2, }; extern struct skinny_table SKINNY_SPEAKER_MODES[3]; const char *skinny_speaker_mode2str(uint32_t id); @@ -150,22 +150,22 @@ uint32_t skinny_str2speaker_mode(const char *str); #define SKINNY_PUSH_SPEAKER_MODES SKINNY_DECLARE_PUSH_MATCH(SKINNY_SPEAKER_MODES) enum skinny_call_type { - SKINNY_INBOUND_CALL = 1, - SKINNY_OUTBOUND_CALL = 2, - SKINNY_FORWARD_CALL = 3, + SKINNY_INBOUND_CALL = 1, + SKINNY_OUTBOUND_CALL = 2, + SKINNY_FORWARD_CALL = 3, }; enum skinny_button_definition { - SKINNY_BUTTON_UNKNOWN = 0x00, - SKINNY_BUTTON_LAST_NUMBER_REDIAL = 0x01, - SKINNY_BUTTON_SPEED_DIAL = 0x02, - SKINNY_BUTTON_HOLD = 0x03, - SKINNY_BUTTON_TRANSFER = 0x04, - SKINNY_BUTTON_LINE = 0x09, - SKINNY_BUTTON_VOICEMAIL = 0x0F, - SKINNY_BUTTON_PRIVACY = 0x13, - SKINNY_BUTTON_SERVICE_URL = 0x14, - SKINNY_BUTTON_UNDEFINED = 0xFF, + SKINNY_BUTTON_UNKNOWN = 0x00, + SKINNY_BUTTON_LAST_NUMBER_REDIAL = 0x01, + SKINNY_BUTTON_SPEED_DIAL = 0x02, + SKINNY_BUTTON_HOLD = 0x03, + SKINNY_BUTTON_TRANSFER = 0x04, + SKINNY_BUTTON_LINE = 0x09, + SKINNY_BUTTON_VOICEMAIL = 0x0F, + SKINNY_BUTTON_PRIVACY = 0x13, + SKINNY_BUTTON_SERVICE_URL = 0x14, + SKINNY_BUTTON_UNDEFINED = 0xFF, }; extern struct skinny_table SKINNY_BUTTONS[11]; const char *skinny_button2str(uint32_t id); @@ -173,26 +173,26 @@ uint32_t skinny_str2button(const char *str); #define SKINNY_PUSH_STIMULI SKINNY_DECLARE_PUSH_MATCH(SKINNY_BUTTONS) enum skinny_soft_key_event { - SOFTKEY_REDIAL = 0x01, - SOFTKEY_NEWCALL = 0x02, - SOFTKEY_HOLD = 0x03, - SOFTKEY_TRANSFER = 0x04, - SOFTKEY_CFWDALL = 0x05, - SOFTKEY_CFWDBUSY = 0x06, - SOFTKEY_CFWDNOANSWER = 0x07, - SOFTKEY_BACKSPACE = 0x08, - SOFTKEY_ENDCALL = 0x09, - SOFTKEY_RESUME = 0x0A, - SOFTKEY_ANSWER = 0x0B, - SOFTKEY_INFO = 0x0C, - SOFTKEY_CONFRM = 0x0D, - SOFTKEY_PARK = 0x0E, - SOFTKEY_JOIN = 0x0F, - SOFTKEY_MEETMECONFRM = 0x10, - SOFTKEY_CALLPICKUP = 0x11, - SOFTKEY_GRPCALLPICKUP = 0x12, - SOFTKEY_DND = 0x13, - SOFTKEY_IDIVERT = 0x14, + SOFTKEY_REDIAL = 0x01, + SOFTKEY_NEWCALL = 0x02, + SOFTKEY_HOLD = 0x03, + SOFTKEY_TRANSFER = 0x04, + SOFTKEY_CFWDALL = 0x05, + SOFTKEY_CFWDBUSY = 0x06, + SOFTKEY_CFWDNOANSWER = 0x07, + SOFTKEY_BACKSPACE = 0x08, + SOFTKEY_ENDCALL = 0x09, + SOFTKEY_RESUME = 0x0A, + SOFTKEY_ANSWER = 0x0B, + SOFTKEY_INFO = 0x0C, + SOFTKEY_CONFRM = 0x0D, + SOFTKEY_PARK = 0x0E, + SOFTKEY_JOIN = 0x0F, + SOFTKEY_MEETMECONFRM = 0x10, + SOFTKEY_CALLPICKUP = 0x11, + SOFTKEY_GRPCALLPICKUP = 0x12, + SOFTKEY_DND = 0x13, + SOFTKEY_IDIVERT = 0x14, }; extern struct skinny_table SKINNY_SOFT_KEY_EVENTS[21]; const char *skinny_soft_key_event2str(uint32_t id); @@ -200,17 +200,17 @@ uint32_t skinny_str2soft_key_event(const char *str); #define SKINNY_PUSH_SOFT_KEY_EVENTS SKINNY_DECLARE_PUSH_MATCH(SOFT_KEY_EVENTS) enum skinny_key_set { - SKINNY_KEY_SET_ON_HOOK = 0, - SKINNY_KEY_SET_CONNECTED = 1, - SKINNY_KEY_SET_ON_HOLD = 2, - SKINNY_KEY_SET_RING_IN = 3, - SKINNY_KEY_SET_OFF_HOOK = 4, - SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER = 5, - SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT = 6, - SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE = 7, - SKINNY_KEY_SET_RING_OUT = 8, - SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES = 9, - SKINNY_KEY_SET_IN_USE_HINT = 10, + SKINNY_KEY_SET_ON_HOOK = 0, + SKINNY_KEY_SET_CONNECTED = 1, + SKINNY_KEY_SET_ON_HOLD = 2, + SKINNY_KEY_SET_RING_IN = 3, + SKINNY_KEY_SET_OFF_HOOK = 4, + SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER = 5, + SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT = 6, + SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE = 7, + SKINNY_KEY_SET_RING_OUT = 8, + SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES = 9, + SKINNY_KEY_SET_IN_USE_HINT = 10, }; extern struct skinny_table SKINNY_KEY_SETS[12]; const char *skinny_soft_key_set2str(uint32_t id); @@ -219,20 +219,20 @@ uint32_t skinny_str2soft_key_set(const char *str); enum skinny_call_state { - SKINNY_OFF_HOOK = 1, - SKINNY_ON_HOOK = 2, - SKINNY_RING_OUT = 3, - SKINNY_RING_IN = 4, - SKINNY_CONNECTED = 5, - SKINNY_BUSY = 6, - SKINNY_LINE_IN_USE = 7, - SKINNY_HOLD = 8, - SKINNY_CALL_WAITING = 9, - SKINNY_CALL_TRANSFER = 10, - SKINNY_CALL_PARK = 11, - SKINNY_PROCEED = 12, - SKINNY_IN_USE_REMOTELY = 13, - SKINNY_INVALID_NUMBER = 14 + SKINNY_OFF_HOOK = 1, + SKINNY_ON_HOOK = 2, + SKINNY_RING_OUT = 3, + SKINNY_RING_IN = 4, + SKINNY_CONNECTED = 5, + SKINNY_BUSY = 6, + SKINNY_LINE_IN_USE = 7, + SKINNY_HOLD = 8, + SKINNY_CALL_WAITING = 9, + SKINNY_CALL_TRANSFER = 10, + SKINNY_CALL_PARK = 11, + SKINNY_PROCEED = 12, + SKINNY_IN_USE_REMOTELY = 13, + SKINNY_INVALID_NUMBER = 14 }; extern struct skinny_table SKINNY_CALL_STATES[15]; const char *skinny_call_state2str(uint32_t id); @@ -240,8 +240,8 @@ uint32_t skinny_str2call_state(const char *str); #define SKINNY_PUSH_CALL_STATES SKINNY_DECLARE_PUSH_MATCH(SKINNY_CALL_STATES) enum skinny_device_reset_types { - SKINNY_DEVICE_RESET = 1, - SKINNY_DEVICE_RESTART = 2 + SKINNY_DEVICE_RESET = 1, + SKINNY_DEVICE_RESTART = 2 }; extern struct skinny_table SKINNY_DEVICE_RESET_TYPES[3]; const char *skinny_device_reset_type2str(uint32_t id); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 99c00424dc..fbff334ab2 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -4634,7 +4634,7 @@ static void general_event_handler(switch_event_t *event) id = switch_mprintf("sip:%s@%s", user, host); switch_assert(id); - + for (m = list->head; m; m = m->next) { contact = sofia_glue_get_url_from_contact(m->val, 0); @@ -4647,10 +4647,9 @@ static void general_event_handler(switch_event_t *event) nua_message(nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR(ct), TAG_IF(!zstr(body), SIPTAG_PAYLOAD_STR(body)), TAG_IF(!zstr(subject), SIPTAG_SUBJECT_STR(subject)), TAG_END()); - - - free(id); } + + free(id); switch_console_free_matches(&list); sofia_glue_release_profile(profile); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index be24a00d98..329db32582 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1326,6 +1326,10 @@ void *SWITCH_THREAD_FUNC sofia_profile_worker_thread_run(switch_thread_t *thread (statements == 0 || (statements <= 1024 && (switch_micro_time_now() - last_commit)/1000 < profile->trans_timeout)))) { switch_interval_time_t sleepy_time = !statements ? 1000000 : switch_micro_time_now() - last_commit - profile->trans_timeout*1000; + + if (sleepy_time < 1000 || sleepy_time > 1000000) { + sleepy_time = 1000; + } if (sql || (switch_queue_pop_timeout(profile->sql_queue, &pop, sleepy_time) == SWITCH_STATUS_SUCCESS && pop)) { switch_size_t newlen; diff --git a/src/mod/formats/mod_shell_stream/mod_shell_stream.c b/src/mod/formats/mod_shell_stream/mod_shell_stream.c index 57d4029232..11b5b10241 100644 --- a/src/mod/formats/mod_shell_stream/mod_shell_stream.c +++ b/src/mod/formats/mod_shell_stream/mod_shell_stream.c @@ -29,6 +29,7 @@ * */ #include +#include #define MY_BUF_LEN 1024 * 32 #define MY_BLOCK_SIZE MY_BUF_LEN @@ -135,6 +136,8 @@ static switch_status_t shell_stream_file_open(switch_file_handle_t *handle, cons switch_cond_next(); } + wait(&(context->pid)); + goto end; } else { /* child */ close(context->fds[0]); diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx index a0bf23dbfb..d5141e7c04 100644 --- a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx +++ b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx @@ -2857,6 +2857,34 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_flush_packet_count_get } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_largest_jb_size_set(void * jarg1, void * jarg2) { + switch_rtp_numbers_t *arg1 = (switch_rtp_numbers_t *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_rtp_numbers_t *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->largest_jb_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_largest_jb_size_get(void * jarg1) { + void * jresult ; + switch_rtp_numbers_t *arg1 = (switch_rtp_numbers_t *) 0 ; + switch_size_t result; + + arg1 = (switch_rtp_numbers_t *)jarg1; + result = ((arg1)->largest_jb_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtp_numbers_t() { void * jresult ; switch_rtp_numbers_t *result = 0 ; @@ -5158,6 +5186,38 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_regex_match_partial(char * jarg1, char } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_capture_regex(void * jarg1, int jarg2, char * jarg3, void * jarg4, char * jarg5, void * jarg6, void * jarg7) { + switch_regex_t *arg1 = (switch_regex_t *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int *arg4 = (int *) 0 ; + char *arg5 = (char *) 0 ; + switch_cap_callback_t arg6 = (switch_cap_callback_t) 0 ; + void *arg7 = (void *) 0 ; + + arg1 = (switch_regex_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (char *)jarg3; + arg4 = (int *)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_cap_callback_t)jarg6; + arg7 = (void *)jarg7; + switch_capture_regex(arg1,arg2,(char const *)arg3,arg4,(char const *)arg5,arg6,arg7); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_regex_set_var_callback(char * jarg1, char * jarg2, void * jarg3) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + switch_regex_set_var_callback((char const *)arg1,(char const *)arg2,arg3); +} + + SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get() { int jresult ; int result; @@ -5410,6 +5470,34 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_switch_app_log_arg_get(void * jarg1) { } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_app_log_stamp_set(void * jarg1, void * jarg2) { + switch_app_log *arg1 = (switch_app_log *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_app_log *)jarg1; + argp2 = (switch_time_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_time_t", 0); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->stamp = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_app_log_stamp_get(void * jarg1) { + void * jresult ; + switch_app_log *arg1 = (switch_app_log *) 0 ; + switch_time_t result; + + arg1 = (switch_app_log *)jarg1; + result = ((arg1)->stamp); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_app_log_next_set(void * jarg1, void * jarg2) { switch_app_log *arg1 = (switch_app_log *) 0 ; switch_app_log *arg2 = (switch_app_log *) 0 ; @@ -6605,6 +6693,30 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_add_state_handler(void * jarg1) { } +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_curl_count(void * jarg1) { + int jresult ; + int *arg1 = (int *) 0 ; + int result; + + arg1 = (int *)jarg1; + result = (int)switch_core_curl_count(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_ssl_count(void * jarg1) { + int jresult ; + int *arg1 = (int *) 0 ; + int result; + + arg1 = (int *)jarg1; + result = (int)switch_core_ssl_count(arg1); + jresult = result; + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_remove_state_handler(void * jarg1) { switch_state_handler_table_t *arg1 = (switch_state_handler_table_t *) 0 ; @@ -13101,6 +13213,106 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_split_user_domain(char * jarg1, void * } +SWIGEXPORT void SWIGSTDCALL CSharp_profile_node_t_var_set(void * jarg1, char * jarg2) { + profile_node_t *arg1 = (profile_node_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (profile_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->var) delete [] arg1->var; + if (arg2) { + arg1->var = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->var, (const char *)arg2); + } else { + arg1->var = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_profile_node_t_var_get(void * jarg1) { + char * jresult ; + profile_node_t *arg1 = (profile_node_t *) 0 ; + char *result = 0 ; + + arg1 = (profile_node_t *)jarg1; + result = (char *) ((arg1)->var); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_profile_node_t_val_set(void * jarg1, char * jarg2) { + profile_node_t *arg1 = (profile_node_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (profile_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->val) delete [] arg1->val; + if (arg2) { + arg1->val = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->val, (const char *)arg2); + } else { + arg1->val = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_profile_node_t_val_get(void * jarg1) { + char * jresult ; + profile_node_t *arg1 = (profile_node_t *) 0 ; + char *result = 0 ; + + arg1 = (profile_node_t *)jarg1; + result = (char *) ((arg1)->val); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_profile_node_t_next_set(void * jarg1, void * jarg2) { + profile_node_t *arg1 = (profile_node_t *) 0 ; + profile_node_s *arg2 = (profile_node_s *) 0 ; + + arg1 = (profile_node_t *)jarg1; + arg2 = (profile_node_s *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_profile_node_t_next_get(void * jarg1) { + void * jresult ; + profile_node_t *arg1 = (profile_node_t *) 0 ; + profile_node_s *result = 0 ; + + arg1 = (profile_node_t *)jarg1; + result = (profile_node_s *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_profile_node_t() { + void * jresult ; + profile_node_t *result = 0 ; + + result = (profile_node_t *)new profile_node_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_profile_node_t(void * jarg1) { + profile_node_t *arg1 = (profile_node_t *) 0 ; + + arg1 = (profile_node_t *)jarg1; + delete arg1; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_username_set(void * jarg1, char * jarg2) { switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; char *arg2 = (char *) 0 ; @@ -13964,6 +14176,28 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_caller_profile_direction_get(void * jar } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_soft_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + profile_node_t *arg2 = (profile_node_t *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (profile_node_t *)jarg2; + if (arg1) (arg1)->soft = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_soft_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + profile_node_t *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (profile_node_t *) ((arg1)->soft); + jresult = (void *)result; + return jresult; +} + + SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_caller_profile() { void * jresult ; switch_caller_profile *result = 0 ; @@ -23118,6 +23352,26 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_variable_var_check(void * j } +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_add_variable_var_check(void * jarg1, char * jarg2, char * jarg3, int jarg4, int jarg5) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t arg4 ; + switch_stack_t arg5 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_bool_t)jarg4; + arg5 = (switch_stack_t)jarg5; + result = (switch_status_t)switch_channel_add_variable_var_check(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_variable_printf(void * jarg1, char * jarg2, char * jarg3) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; @@ -23261,17 +23515,19 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_export_variable_printf(void * j } -SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_variable_dup(void * jarg1, char * jarg2, int jarg3) { +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_variable_dup(void * jarg1, char * jarg2, int jarg3, int jarg4) { char * jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; char *arg2 = (char *) 0 ; switch_bool_t arg3 ; + int arg4 ; char *result = 0 ; arg1 = (switch_channel_t *)jarg1; arg2 = (char *)jarg2; arg3 = (switch_bool_t)jarg3; - result = (char *)switch_channel_get_variable_dup(arg1,(char const *)arg2,arg3); + arg4 = (int)jarg4; + result = (char *)switch_channel_get_variable_dup(arg1,(char const *)arg2,arg3,arg4); jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } @@ -24577,6 +24833,50 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_header_value_get(void * jarg1) } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_array_set(void * jarg1, void * jarg2) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + char **arg2 = (char **) 0 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (char **)jarg2; + if (arg1) (arg1)->array = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_header_array_get(void * jarg1) { + void * jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + char **result = 0 ; + + arg1 = (switch_event_header *)jarg1; + result = (char **) ((arg1)->array); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_idx_set(void * jarg1, int jarg2) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + int arg2 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->idx = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_header_idx_get(void * jarg1) { + int jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + int result; + + arg1 = (switch_event_header *)jarg1; + result = (int) ((arg1)->idx); + jresult = result; + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_hash_set(void * jarg1, unsigned long jarg2) { switch_event_header *arg1 = (switch_event_header *) 0 ; unsigned long arg2 ; @@ -25003,15 +25303,31 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_set_priority(void * jarg1, int ja } -SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_get_header(void * jarg1, char * jarg2) { +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_get_header_ptr(void * jarg1, char * jarg2) { + void * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_event_header_t *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_event_header_t *)switch_event_get_header_ptr(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_get_header_idx(void * jarg1, char * jarg2, int jarg3) { char * jresult ; switch_event_t *arg1 = (switch_event_t *) 0 ; char *arg2 = (char *) 0 ; + int arg3 ; char *result = 0 ; arg1 = (switch_event_t *)jarg1; arg2 = (char *)jarg2; - result = (char *)switch_event_get_header(arg1,(char const *)arg2); + arg3 = (int)jarg3; + result = (char *)switch_event_get_header_idx(arg1,(char const *)arg2,arg3); jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } @@ -30580,6 +30896,22 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user_merged(char * jarg1, ch } +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_xml_clear_user_cache(char * jarg1, char * jarg2, char * jarg3) { + unsigned long jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + uint32_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (uint32_t)switch_xml_clear_user_cache((char const *)arg1,(char const *)arg2,(char const *)arg3); + jresult = (unsigned long)result; + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_merge_user(void * jarg1, void * jarg2, void * jarg3) { switch_xml_t arg1 = (switch_xml_t) 0 ; switch_xml_t arg2 = (switch_xml_t) 0 ; diff --git a/src/mod/languages/mod_managed/managed/swig.2010.cs b/src/mod/languages/mod_managed/managed/swig.2010.cs index 9a1f30fd9b..09b9570021 100644 --- a/src/mod/languages/mod_managed/managed/swig.2010.cs +++ b/src/mod/languages/mod_managed/managed/swig.2010.cs @@ -954,6 +954,14 @@ public class freeswitch { return ret; } + public static void switch_capture_regex(SWIGTYPE_p_real_pcre re, int match_count, string field_data, SWIGTYPE_p_int ovector, string var, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void callback, SWIGTYPE_p_void user_data) { + freeswitchPINVOKE.switch_capture_regex(SWIGTYPE_p_real_pcre.getCPtr(re), match_count, field_data, SWIGTYPE_p_int.getCPtr(ovector), var, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void.getCPtr(callback), SWIGTYPE_p_void.getCPtr(user_data)); + } + + public static void switch_regex_set_var_callback(string var, string val, SWIGTYPE_p_void user_data) { + freeswitchPINVOKE.switch_regex_set_var_callback(var, val, SWIGTYPE_p_void.getCPtr(user_data)); + } + public static void switch_core_session_sched_heartbeat(SWIGTYPE_p_switch_core_session session, uint seconds) { freeswitchPINVOKE.switch_core_session_sched_heartbeat(SWIGTYPE_p_switch_core_session.getCPtr(session), seconds); } @@ -1161,6 +1169,16 @@ public class freeswitch { return ret; } + public static int switch_core_curl_count(SWIGTYPE_p_int val) { + int ret = freeswitchPINVOKE.switch_core_curl_count(SWIGTYPE_p_int.getCPtr(val)); + return ret; + } + + public static int switch_core_ssl_count(SWIGTYPE_p_int val) { + int ret = freeswitchPINVOKE.switch_core_ssl_count(SWIGTYPE_p_int.getCPtr(val)); + return ret; + } + public static void switch_core_remove_state_handler(switch_state_handler_table state_handler) { freeswitchPINVOKE.switch_core_remove_state_handler(switch_state_handler_table.getCPtr(state_handler)); } @@ -3394,6 +3412,11 @@ public class freeswitch { return ret; } + public static switch_status_t switch_channel_add_variable_var_check(SWIGTYPE_p_switch_channel channel, string varname, string value, switch_bool_t var_check, switch_stack_t stack) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_add_variable_var_check(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, value, (int)var_check, (int)stack); + return ret; + } + public static switch_status_t switch_channel_set_variable_printf(SWIGTYPE_p_switch_channel channel, string varname, string fmt) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_variable_printf(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, fmt); return ret; @@ -3438,8 +3461,8 @@ public class freeswitch { return ret; } - public static string switch_channel_get_variable_dup(SWIGTYPE_p_switch_channel channel, string varname, switch_bool_t dup) { - string ret = freeswitchPINVOKE.switch_channel_get_variable_dup(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, (int)dup); + public static string switch_channel_get_variable_dup(SWIGTYPE_p_switch_channel channel, string varname, switch_bool_t dup, int idx) { + string ret = freeswitchPINVOKE.switch_channel_get_variable_dup(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, (int)dup, idx); return ret; } @@ -3902,8 +3925,14 @@ public class freeswitch { return ret; } - public static string switch_event_get_header(switch_event arg0, string header_name) { - string ret = freeswitchPINVOKE.switch_event_get_header(switch_event.getCPtr(arg0), header_name); + public static switch_event_header switch_event_get_header_ptr(switch_event arg0, string header_name) { + IntPtr cPtr = freeswitchPINVOKE.switch_event_get_header_ptr(switch_event.getCPtr(arg0), header_name); + switch_event_header ret = (cPtr == IntPtr.Zero) ? null : new switch_event_header(cPtr, false); + return ret; + } + + public static string switch_event_get_header_idx(switch_event arg0, string header_name, int idx) { + string ret = freeswitchPINVOKE.switch_event_get_header_idx(switch_event.getCPtr(arg0), header_name, idx); return ret; } @@ -5252,6 +5281,11 @@ public class freeswitch { return ret; } + public static uint switch_xml_clear_user_cache(string key, string user_name, string domain_name) { + uint ret = freeswitchPINVOKE.switch_xml_clear_user_cache(key, user_name, domain_name); + return ret; + } + public static void switch_xml_merge_user(switch_xml user, switch_xml domain, switch_xml group) { freeswitchPINVOKE.switch_xml_merge_user(switch_xml.getCPtr(user), switch_xml.getCPtr(domain), switch_xml.getCPtr(group)); } @@ -6611,6 +6645,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_flush_packet_count_get")] public static extern IntPtr switch_rtp_numbers_t_flush_packet_count_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_largest_jb_size_set")] + public static extern void switch_rtp_numbers_t_largest_jb_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_largest_jb_size_get")] + public static extern IntPtr switch_rtp_numbers_t_largest_jb_size_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtp_numbers_t")] public static extern IntPtr new_switch_rtp_numbers_t(); @@ -7214,6 +7254,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_match_partial")] public static extern int switch_regex_match_partial(string jarg1, string jarg2, HandleRef jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_switch_capture_regex")] + public static extern void switch_capture_regex(HandleRef jarg1, int jarg2, string jarg3, HandleRef jarg4, string jarg5, HandleRef jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_set_var_callback")] + public static extern void switch_regex_set_var_callback(string jarg1, string jarg2, HandleRef jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get")] public static extern int SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get(); @@ -7280,6 +7326,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_arg_get")] public static extern string switch_app_log_arg_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_stamp_set")] + public static extern void switch_app_log_stamp_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_stamp_get")] + public static extern IntPtr switch_app_log_stamp_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_next_set")] public static extern void switch_app_log_next_set(HandleRef jarg1, HandleRef jarg2); @@ -7574,6 +7626,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_core_add_state_handler")] public static extern int switch_core_add_state_handler(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_curl_count")] + public static extern int switch_core_curl_count(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_ssl_count")] + public static extern int switch_core_ssl_count(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_remove_state_handler")] public static extern void switch_core_remove_state_handler(HandleRef jarg1); @@ -9017,6 +9075,30 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_split_user_domain")] public static extern int switch_split_user_domain(string jarg1, ref string jarg2, ref string jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_var_set")] + public static extern void profile_node_t_var_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_var_get")] + public static extern string profile_node_t_var_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_val_set")] + public static extern void profile_node_t_val_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_val_get")] + public static extern string profile_node_t_val_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_next_set")] + public static extern void profile_node_t_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_profile_node_t_next_get")] + public static extern IntPtr profile_node_t_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_profile_node_t")] + public static extern IntPtr new_profile_node_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_profile_node_t")] + public static extern void delete_profile_node_t(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_username_set")] public static extern void switch_caller_profile_username_set(HandleRef jarg1, string jarg2); @@ -9221,6 +9303,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_direction_get")] public static extern int switch_caller_profile_direction_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_soft_set")] + public static extern void switch_caller_profile_soft_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_soft_get")] + public static extern IntPtr switch_caller_profile_soft_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_caller_profile")] public static extern IntPtr new_switch_caller_profile(); @@ -11594,6 +11682,9 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_variable_var_check")] public static extern int switch_channel_set_variable_var_check(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_add_variable_var_check")] + public static extern int switch_channel_add_variable_var_check(HandleRef jarg1, string jarg2, string jarg3, int jarg4, int jarg5); + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_variable_printf")] public static extern int switch_channel_set_variable_printf(HandleRef jarg1, string jarg2, string jarg3); @@ -11622,7 +11713,7 @@ class freeswitchPINVOKE { public static extern int switch_channel_export_variable_printf(HandleRef jarg1, string jarg2, string jarg3, string jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_variable_dup")] - public static extern string switch_channel_get_variable_dup(HandleRef jarg1, string jarg2, int jarg3); + public static extern string switch_channel_get_variable_dup(HandleRef jarg1, string jarg2, int jarg3, int jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_variables")] public static extern int switch_channel_get_variables(HandleRef jarg1, HandleRef jarg2); @@ -11909,6 +12000,18 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_value_get")] public static extern string switch_event_header_value_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_array_set")] + public static extern void switch_event_header_array_set(HandleRef jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_array_get")] + public static extern string switch_event_header_array_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_idx_set")] + public static extern void switch_event_header_idx_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_idx_get")] + public static extern int switch_event_header_idx_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_hash_set")] public static extern void switch_event_header_hash_set(HandleRef jarg1, uint jarg2); @@ -12017,8 +12120,11 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_event_set_priority")] public static extern int switch_event_set_priority(HandleRef jarg1, int jarg2); - [DllImport("mod_managed", EntryPoint="CSharp_switch_event_get_header")] - public static extern string switch_event_get_header(HandleRef jarg1, string jarg2); + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_get_header_ptr")] + public static extern IntPtr switch_event_get_header_ptr(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_get_header_idx")] + public static extern string switch_event_get_header_idx(HandleRef jarg1, string jarg2, int jarg3); [DllImport("mod_managed", EntryPoint="CSharp_switch_event_get_body")] public static extern string switch_event_get_body(HandleRef jarg1); @@ -13190,6 +13296,9 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user_merged")] public static extern int switch_xml_locate_user_merged(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_clear_user_cache")] + public static extern uint switch_xml_clear_user_cache(string jarg1, string jarg2, string jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_merge_user")] public static extern void switch_xml_merge_user(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); @@ -14472,6 +14581,86 @@ public partial class ManagedSession : CoreSession { namespace FreeSWITCH.Native { +using System; +using System.Runtime.InteropServices; + +public class profile_node_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal profile_node_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(profile_node_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~profile_node_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_profile_node_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string var { + set { + freeswitchPINVOKE.profile_node_t_var_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.profile_node_t_var_get(swigCPtr); + return ret; + } + } + + public string val { + set { + freeswitchPINVOKE.profile_node_t_val_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.profile_node_t_val_get(swigCPtr); + return ret; + } + } + + public profile_node_t next { + set { + freeswitchPINVOKE.profile_node_t_next_set(swigCPtr, profile_node_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.profile_node_t_next_get(swigCPtr); + profile_node_t ret = (cPtr == IntPtr.Zero) ? null : new profile_node_t(cPtr, false); + return ret; + } + } + + public profile_node_t() : this(freeswitchPINVOKE.new_profile_node_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.1 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + [System.Flags] public enum session_flag_t { S_HUP = (1 << 0), S_FREE = (1 << 1), @@ -14853,6 +15042,36 @@ namespace FreeSWITCH.Native { using System; using System.Runtime.InteropServices; +public class SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_void__void obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.1 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +using System; +using System.Runtime.InteropServices; + public class SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t { private HandleRef swigCPtr; @@ -19960,6 +20179,18 @@ public class switch_app_log : IDisposable { } } + public SWIGTYPE_p_switch_time_t stamp { + set { + freeswitchPINVOKE.switch_app_log_stamp_set(swigCPtr, SWIGTYPE_p_switch_time_t.getCPtr(value)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + get { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_app_log_stamp_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public switch_app_log next { set { freeswitchPINVOKE.switch_app_log_next_set(swigCPtr, switch_app_log.getCPtr(value)); @@ -21727,6 +21958,17 @@ public class switch_caller_profile : IDisposable { } } + public profile_node_t soft { + set { + freeswitchPINVOKE.switch_caller_profile_soft_set(swigCPtr, profile_node_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_soft_get(swigCPtr); + profile_node_t ret = (cPtr == IntPtr.Zero) ? null : new profile_node_t(cPtr, false); + return ret; + } + } + public switch_caller_profile() : this(freeswitchPINVOKE.new_switch_caller_profile(), true) { } @@ -24926,7 +25168,8 @@ public class switch_event : IDisposable { namespace FreeSWITCH.Native { public enum switch_event_flag_t { - EF_UNIQ_HEADERS = (1 << 0) + EF_UNIQ_HEADERS = (1 << 0), + EF_CONTAINS_ARRAYS = (1 << 1) } } @@ -24993,6 +25236,25 @@ public class switch_event_header : IDisposable { } } + public string array { + set { freeswitchPINVOKE.switch_event_header_array_set(swigCPtr, ref value); } + + get { + return freeswitchPINVOKE.switch_event_header_array_get(swigCPtr); + } + + } + + public int idx { + set { + freeswitchPINVOKE.switch_event_header_idx_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_event_header_idx_get(swigCPtr); + return ret; + } + } + public uint hash { set { freeswitchPINVOKE.switch_event_header_hash_set(swigCPtr, value); @@ -29376,6 +29638,18 @@ public class switch_rtp_numbers_t : IDisposable { } } + public SWIGTYPE_p_switch_size_t largest_jb_size { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_largest_jb_size_set(swigCPtr, SWIGTYPE_p_switch_size_t.getCPtr(value)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + get { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_rtp_numbers_t_largest_jb_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public switch_rtp_numbers_t() : this(freeswitchPINVOKE.new_switch_rtp_numbers_t(), true) { } @@ -30497,7 +30771,9 @@ namespace FreeSWITCH.Native { public enum switch_stack_t { SWITCH_STACK_BOTTOM = (1 << 0), SWITCH_STACK_TOP = (1 << 1), - SWITCH_STACK_NODUP = (1 << 2) + SWITCH_STACK_NODUP = (1 << 2), + SWITCH_STACK_UNSHIFT = (1 << 3), + SWITCH_STACK_PUSH = (1 << 4) } } diff --git a/src/switch_event.c b/src/switch_event.c index c414107664..f362bb112b 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -829,6 +829,75 @@ SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *even return status; } +static switch_event_header_t *new_header(const char *header_name) +{ + switch_event_header_t *header; + +#ifdef SWITCH_EVENT_RECYCLE + void *pop; + if (switch_queue_trypop(EVENT_HEADER_RECYCLE_QUEUE, &pop) == SWITCH_STATUS_SUCCESS) { + header = (switch_event_header_t *) pop; + } else { +#endif + header = ALLOC(sizeof(*header)); + switch_assert(header); +#ifdef SWITCH_EVENT_RECYCLE + } +#endif + + memset(header, 0, sizeof(*header)); + header->name = DUP(header_name); + + return header; + +} + +SWITCH_DECLARE(int) switch_event_add_array(switch_event_t *event, const char *var, const char *val) +{ + char *data; + char **array; + int max = 0; + int len; + const char *p; + int i; + + if (strlen(val) < 8) { + return -1; + } + + p = val + 7; + + max = 1; + + while((p = strstr(p, "|:"))) { + max++; + p += 2; + } + + if (!max) { + return -2; + } + + data = strdup(val + 7); + + len = (sizeof(char *) * max) + 1; + switch_assert(len); + + array = malloc(len); + memset(array, 0, len); + + switch_separate_string_string(data, "|:", array, max); + + for(i = 0; i < max; i++) { + switch_event_add_header_string(event, SWITCH_STACK_PUSH, var, array[i]); + } + + free(array); + free(data); + + return 0; +} + static switch_status_t switch_event_base_add_header(switch_event_t *event, switch_stack_t stack, const char *header_name, char *data) { switch_event_header_t *header = NULL; @@ -848,19 +917,19 @@ static switch_status_t switch_event_base_add_header(switch_event_t *event, switc header_name = real_header_name; } - if (index_ptr || (stack & SWITCH_STACK_PUSH) || (stack & SWITCH_STACK_UNSHIFT) || switch_test_flag(event, EF_CONTAINS_ARRAYS)) { + if (index_ptr || (stack & SWITCH_STACK_PUSH) || (stack & SWITCH_STACK_UNSHIFT)) { if (!(header = switch_event_get_header_ptr(event, header_name)) && index_ptr) { - header = ALLOC(sizeof(*header)); - switch_assert(header); - memset(header, 0, sizeof(*header)); - header->name = DUP(header_name); + + header = new_header(header_name); + if (switch_test_flag(event, EF_UNIQ_HEADERS)) { switch_event_del_header(event, header_name); } + fly++; } - + if ((header = switch_event_get_header_ptr(event, header_name))) { if (index_ptr) { @@ -889,11 +958,6 @@ static switch_status_t switch_event_base_add_header(switch_event_t *event, switc } goto end; } else { - - if (!(stack & SWITCH_STACK_PUSH) && !(stack & SWITCH_STACK_UNSHIFT) && header->idx) { - stack |= SWITCH_STACK_PUSH; - } - if ((stack & SWITCH_STACK_PUSH) || (stack & SWITCH_STACK_UNSHIFT)) { exists++; stack &= ~(SWITCH_STACK_TOP | SWITCH_STACK_BOTTOM); @@ -904,28 +968,20 @@ static switch_status_t switch_event_base_add_header(switch_event_t *event, switc } } + if (!header) { - -#ifdef SWITCH_EVENT_RECYCLE - void *pop; - if (switch_queue_trypop(EVENT_HEADER_RECYCLE_QUEUE, &pop) == SWITCH_STATUS_SUCCESS) { - header = (switch_event_header_t *) pop; - } else { -#endif - header = ALLOC(sizeof(*header)); - switch_assert(header); -#ifdef SWITCH_EVENT_RECYCLE - } -#endif - - if (switch_test_flag(event, EF_UNIQ_HEADERS)) { switch_event_del_header(event, header_name); } - memset(header, 0, sizeof(*header)); + if (strstr(data, "ARRAY::")) { + switch_event_add_array(event, header_name, data); + FREE(data); + goto end; + } - header->name = DUP(header_name); + + header = new_header(header_name); } if ((stack & SWITCH_STACK_PUSH) || (stack & SWITCH_STACK_UNSHIFT)) { @@ -934,8 +990,6 @@ static switch_status_t switch_event_base_add_header(switch_event_t *event, switc char *hv; int i = 0, j = 0; - switch_set_flag(event, EF_CONTAINS_ARRAYS); - if (header->value && !header->idx) { m = malloc(sizeof(char *)); switch_assert(m); @@ -976,7 +1030,7 @@ static switch_status_t switch_event_base_add_header(switch_event_t *event, switc switch_snprintf(header->value, len, "ARRAY::"); for(j = 0; j < header->idx; j++) { - switch_snprintf(header->value + strlen(header->value), len - strlen(header->value), "%s%s", j == 0 ? "" : "::", header->array[j]); + switch_snprintf(header->value + strlen(header->value), len - strlen(header->value), "%s%s", j == 0 ? "" : "|:", header->array[j]); } }