[Freeswitch-svn] [commit] r5101 - in freeswitch/trunk: . src src/include

Freeswitch SVN anthm at freeswitch.org
Mon May 7 20:29:49 EDT 2007


Author: anthm
Date: Mon May  7 20:29:49 2007
New Revision: 5101

Added:
   freeswitch/trunk/src/include/switch_cpp.h
   freeswitch/trunk/src/switch_cpp.cpp
Modified:
   freeswitch/trunk/Makefile.am

Log:
add basic cpp wrapper (c'mon and add to it c++ lovers...)

Modified: freeswitch/trunk/Makefile.am
==============================================================================
--- freeswitch/trunk/Makefile.am	(original)
+++ freeswitch/trunk/Makefile.am	Mon May  7 20:29:49 2007
@@ -58,6 +58,7 @@
 src/switch_log.c\
 src/switch_xml.c\
 libs/stfu/stfu.c\
+src/switch_cpp.cpp\
 libs/libteletone/src/libteletone_detect.c\
 libs/libteletone/src/libteletone_generate.c
 
@@ -90,6 +91,7 @@
 src/include/switch_stun.h\
 src/include/switch_log.h\
 src/include/switch_xml.h\
+src/include/switch_cpp.h\
 libs/libteletone/src/libteletone_detect.h\
 libs/libteletone/src/libteletone_generate.h\
 libs/libteletone/src/libteletone.h

Added: freeswitch/trunk/src/include/switch_cpp.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/src/include/switch_cpp.h	Mon May  7 20:29:49 2007
@@ -0,0 +1,55 @@
+#ifndef SWITCH_CPP_H
+#define SWITCH_CPP_H
+
+SWITCH_BEGIN_EXTERN_C
+#include <switch.h>
+
+void console_log(char *level_str, char *msg);
+void console_clean_log(char *msg);
+char *api_execute(char *cmd, char *arg);
+void api_reply_delete(char *reply);
+
+class CoreSession {
+ private:
+	char *uuid;
+	char *tts_name;
+	char *voice_name;
+	switch_input_args_t args;
+	switch_input_args_t *ap;
+ public:
+	CoreSession(char *uuid);
+	CoreSession(switch_core_session_t *session);
+	~CoreSession();
+	switch_core_session_t *session;
+	switch_channel_t *channel;
+	int answer();
+	int preAnswer();
+	void hangup(char *cause);
+	void setVariable(char *var, char *val);
+	void getVariable(char *var, char *val);
+	int playFile(char *file, char *timer_name);
+	void setDTMFCallback(switch_input_callback_function_t cb, void *buf, uint32_t buflen);
+	int speakText(char *text);
+	void set_tts_parms(char *tts_name, char *voice_name);
+	int getDigits(char *dtmf_buf, int len, char *terminators, char *terminator, int timeout);
+	int transfer(char *extensions, char *dialplan, char *context);
+	int playAndgetDigits(int min_digits, int max_digits, int max_tries, int timeout, char *terminators,
+							char *audio_files, char *bad_input_audio_files, char *dtmf_buf, char *digits_regex);
+	void execute(char *app, char *data);
+ protected:
+};
+
+
+SWITCH_END_EXTERN_C
+#endif
+/* 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 expandtab:
+ */
+

Added: freeswitch/trunk/src/switch_cpp.cpp
==============================================================================
--- (empty file)
+++ freeswitch/trunk/src/switch_cpp.cpp	Mon May  7 20:29:49 2007
@@ -0,0 +1,163 @@
+#include <switch.h>
+#include <switch_cpp.h>
+
+#define sanity_check(x) do { if (!session) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return x;}} while(0)
+#define init_vars() do { session = NULL; channel = NULL; uuid = NULL; tts_name = NULL; voice_name = NULL; memset(&args, 0, sizeof(args)); ap = NULL;} while(0)
+
+CoreSession::CoreSession(char *nuuid)
+{
+	init_vars();
+    uuid = strdup(nuuid);
+	if (session = switch_core_session_locate(uuid)) {
+		channel = switch_core_session_get_channel(session);
+    }
+}
+
+CoreSession::CoreSession(switch_core_session_t *session)
+{
+	init_vars();
+	channel = switch_core_session_get_channel(session);
+	switch_core_session_read_lock(session);
+}
+
+CoreSession::~CoreSession()
+{
+
+	if (session) {
+		switch_core_session_rwunlock(session);
+	}
+
+	switch_safe_free(uuid);	
+	switch_safe_free(tts_name);
+	switch_safe_free(voice_name);
+}
+
+int CoreSession::answer()
+{
+    switch_status_t status;
+
+	sanity_check(-1);
+    status = switch_channel_answer(channel);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+int CoreSession::preAnswer()
+{
+    switch_status_t status;
+	sanity_check(-1);
+    switch_channel_pre_answer(channel);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+void CoreSession::hangup(char *cause)
+{
+	sanity_check();
+    switch_channel_hangup(channel, switch_channel_str2cause(cause));
+}
+
+void CoreSession::setVariable(char *var, char *val)
+{
+	sanity_check();
+    switch_channel_set_variable(channel, var, val);
+}
+
+void CoreSession::getVariable(char *var, char *val)
+{
+	sanity_check();
+    switch_channel_get_variable(channel, var);
+}
+
+void CoreSession::execute(char *app, char *data)
+{
+	const switch_application_interface_t *application_interface;
+	sanity_check();
+
+	if ((application_interface = switch_loadable_module_get_application_interface(app))) {
+		switch_core_session_exec(session, application_interface, data);
+	}
+}
+
+int CoreSession::playFile(char *file, char *timer_name)
+{
+    switch_status_t status;
+	sanity_check(-1);
+    if (switch_strlen_zero(timer_name)) {
+        timer_name = NULL;
+    }
+
+	status = switch_ivr_play_file(session, NULL, file, ap);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+void CoreSession::setDTMFCallback(switch_input_callback_function_t cb, void *buf, uint32_t buflen)
+{
+	sanity_check();
+	if (cb) {
+		args.buf = buf;
+		args.buflen = buflen;
+		args.input_callback = cb;
+		ap = &args;
+	} else {
+		memset(&args, 0, sizeof(args));
+		ap = NULL;
+	}
+}
+
+int CoreSession::speakText(char *text)
+{
+    switch_status_t status;
+    switch_codec_t *codec;
+
+	sanity_check(-1);
+    codec = switch_core_session_get_read_codec(session);
+	status = switch_ivr_speak_text(session, tts_name, voice_name, codec->implementation->samples_per_second, text, ap);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+void CoreSession::set_tts_parms(char *tts_name_p, char *voice_name_p)
+{
+	sanity_check();
+	switch_safe_free(tts_name);
+	switch_safe_free(voice_name);
+    tts_name = strdup(tts_name_p);
+    voice_name = strdup(voice_name_p);
+}
+
+int CoreSession::getDigits(char *dtmf_buf, int len, char *terminators, char *terminator, int timeout)
+{
+    switch_status_t status;
+	sanity_check(-1);
+    status = switch_ivr_collect_digits_count(session, dtmf_buf,(uint32_t) len,(uint32_t) len, terminators, terminator, (uint32_t) timeout);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+int CoreSession::transfer(char *extension, char *dialplan, char *context)
+{
+    switch_status_t status;
+	sanity_check(-1);
+    status = switch_ivr_session_transfer(session, extension, dialplan, context);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+int CoreSession::playAndgetDigits(int min_digits, int max_digits, int max_tries, int timeout, char *terminators, 
+                char *audio_files, char *bad_input_audio_files, char *dtmf_buf, char *digits_regex)
+{
+    switch_status_t status;
+	sanity_check(-1);
+    status = switch_play_and_get_digits( session, (uint32_t) min_digits,(uint32_t) max_digits,
+            (uint32_t) max_tries, (uint32_t) timeout, 
+            terminators, audio_files, bad_input_audio_files, dtmf_buf, 128, digits_regex);
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+}
+
+
+/* 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 expandtab:
+ */



More information about the Freeswitch-svn mailing list